@wacht/jsx 0.0.1-alpha.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 (148) hide show
  1. package/dist/components/agent/agent-conversation-history.d.ts +5 -0
  2. package/dist/components/agent/agent-conversation-hub.d.ts +1 -0
  3. package/dist/components/agent/agent-conversation.d.ts +5 -0
  4. package/dist/components/agent/index.d.ts +3 -0
  5. package/dist/components/agent/user-input-request.d.ts +7 -0
  6. package/dist/components/auth/accept-invite.d.ts +7 -0
  7. package/dist/components/auth/auth-image.d.ts +1 -0
  8. package/dist/components/auth/forgot-password.d.ts +5 -0
  9. package/dist/components/auth/index.d.ts +13 -0
  10. package/dist/components/auth/magic-link-verification.d.ts +6 -0
  11. package/dist/components/auth/other-auth-options.d.ts +1 -0
  12. package/dist/components/auth/other-signin-options.d.ts +5 -0
  13. package/dist/components/auth/phone-verification.d.ts +7 -0
  14. package/dist/components/auth/profile-completion.d.ts +2 -0
  15. package/dist/components/auth/signin-form.d.ts +1 -0
  16. package/dist/components/auth/signup-form.d.ts +1 -0
  17. package/dist/components/auth/social-buttons.d.ts +7 -0
  18. package/dist/components/auth/sso-callback.d.ts +2 -0
  19. package/dist/components/auth/two-factor-method-selector.d.ts +15 -0
  20. package/dist/components/auth/two-factor-verification.d.ts +2 -0
  21. package/dist/components/auth/waitlist-form.d.ts +1 -0
  22. package/dist/components/control/index.d.ts +4 -0
  23. package/dist/components/control/navigation.d.ts +2 -0
  24. package/dist/components/control/signed-in-accounts.d.ts +6 -0
  25. package/dist/components/control/signed-in.d.ts +5 -0
  26. package/dist/components/control/signed-out.d.ts +5 -0
  27. package/dist/components/control/user-selection.d.ts +0 -0
  28. package/dist/components/deployment-instance.d.ts +7 -0
  29. package/dist/components/icons/apple.d.ts +1 -0
  30. package/dist/components/icons/brave.d.ts +1 -0
  31. package/dist/components/icons/chevron-right.d.ts +1 -0
  32. package/dist/components/icons/chrome.d.ts +2 -0
  33. package/dist/components/icons/discord.d.ts +1 -0
  34. package/dist/components/icons/edge.d.ts +2 -0
  35. package/dist/components/icons/facebook.d.ts +1 -0
  36. package/dist/components/icons/firefox.d.ts +2 -0
  37. package/dist/components/icons/github.d.ts +1 -0
  38. package/dist/components/icons/gitlab.d.ts +1 -0
  39. package/dist/components/icons/google.d.ts +1 -0
  40. package/dist/components/icons/key.d.ts +1 -0
  41. package/dist/components/icons/linkedin.d.ts +1 -0
  42. package/dist/components/icons/microsoft.d.ts +1 -0
  43. package/dist/components/icons/opera.d.ts +1 -0
  44. package/dist/components/icons/safari.d.ts +2 -0
  45. package/dist/components/icons/shield.d.ts +1 -0
  46. package/dist/components/icons/smartphone.d.ts +1 -0
  47. package/dist/components/icons/x.d.ts +1 -0
  48. package/dist/components/index.d.ts +17 -0
  49. package/dist/components/notifications/channel-selector.d.ts +8 -0
  50. package/dist/components/notifications/index.d.ts +4 -0
  51. package/dist/components/notifications/notification-bell.d.ts +9 -0
  52. package/dist/components/notifications/notification-item.d.ts +8 -0
  53. package/dist/components/notifications/notification-popover.d.ts +16 -0
  54. package/dist/components/organization/add-domain-popover.d.ts +8 -0
  55. package/dist/components/organization/add-role-popover.d.ts +14 -0
  56. package/dist/components/organization/context.d.ts +9 -0
  57. package/dist/components/organization/create-organization-dialog.d.ts +8 -0
  58. package/dist/components/organization/create-organization-form.d.ts +6 -0
  59. package/dist/components/organization/index.d.ts +3 -0
  60. package/dist/components/organization/invite-member-popover.d.ts +9 -0
  61. package/dist/components/organization/manage-organization-dialog.d.ts +14 -0
  62. package/dist/components/organization/manage-organization.d.ts +1 -0
  63. package/dist/components/organization/organization-switcher.d.ts +2 -0
  64. package/dist/components/user/2fa-styles.d.ts +56 -0
  65. package/dist/components/user/2fa.d.ts +20 -0
  66. package/dist/components/user/add-email-popover.d.ts +10 -0
  67. package/dist/components/user/add-phone-popover.d.ts +10 -0
  68. package/dist/components/user/backup-codes-popover.d.ts +9 -0
  69. package/dist/components/user/change-password-popover.d.ts +8 -0
  70. package/dist/components/user/context.d.ts +9 -0
  71. package/dist/components/user/index.d.ts +4 -0
  72. package/dist/components/user/manage-account-dialog.d.ts +14 -0
  73. package/dist/components/user/manage-account.d.ts +2 -0
  74. package/dist/components/user/remove-password-popover.d.ts +7 -0
  75. package/dist/components/user/setup-totp-popover.d.ts +12 -0
  76. package/dist/components/user/user-button.d.ts +6 -0
  77. package/dist/components/user/user-controls.d.ts +7 -0
  78. package/dist/components/utility/button.d.ts +7 -0
  79. package/dist/components/utility/combo-box.d.ts +39 -0
  80. package/dist/components/utility/confirmation-popover.d.ts +7 -0
  81. package/dist/components/utility/dialog.d.ts +49 -0
  82. package/dist/components/utility/dropdown.d.ts +20 -0
  83. package/dist/components/utility/empty-state.d.ts +8 -0
  84. package/dist/components/utility/form.d.ts +3 -0
  85. package/dist/components/utility/index.d.ts +14 -0
  86. package/dist/components/utility/input.d.ts +1 -0
  87. package/dist/components/utility/loader.d.ts +7 -0
  88. package/dist/components/utility/navigation.d.ts +8 -0
  89. package/dist/components/utility/otp-input.d.ts +9 -0
  90. package/dist/components/utility/phone.d.ts +7 -0
  91. package/dist/components/utility/root.d.ts +1 -0
  92. package/dist/components/utility/search.d.ts +7 -0
  93. package/dist/components/utility/spinner.d.ts +6 -0
  94. package/dist/components/utility/switch.d.ts +7 -0
  95. package/dist/components/utility/table.d.ts +8 -0
  96. package/dist/components/utility/tabs.d.ts +34 -0
  97. package/dist/components/utility/use-dialog.d.ts +12 -0
  98. package/dist/components/workspace/add-role-popover.d.ts +13 -0
  99. package/dist/components/workspace/create-workspace-dialog.d.ts +9 -0
  100. package/dist/components/workspace/create-workspace-form.d.ts +9 -0
  101. package/dist/components/workspace/index.d.ts +4 -0
  102. package/dist/components/workspace/invite-member-popover.d.ts +10 -0
  103. package/dist/components/workspace/manage-workspace-dialog.d.ts +14 -0
  104. package/dist/components/workspace/manage-workspace.d.ts +1 -0
  105. package/dist/constants/ai-agent.d.ts +43 -0
  106. package/dist/constants/execution-status.d.ts +38 -0
  107. package/dist/constants/geo.d.ts +8 -0
  108. package/dist/context/agent-conversation-provider.d.ts +37 -0
  109. package/dist/context/deployment-provider.d.ts +10 -0
  110. package/dist/context/index.d.ts +2 -0
  111. package/dist/context/signin-provider.d.ts +21 -0
  112. package/dist/hooks/index.d.ts +22 -0
  113. package/dist/hooks/use-agent-conversation.d.ts +61 -0
  114. package/dist/hooks/use-channel-counts.d.ts +14 -0
  115. package/dist/hooks/use-client.d.ts +7 -0
  116. package/dist/hooks/use-context-manager.d.ts +30 -0
  117. package/dist/hooks/use-conversation-sessions.d.ts +32 -0
  118. package/dist/hooks/use-deployment.d.ts +1 -0
  119. package/dist/hooks/use-forgot-password.d.ts +11 -0
  120. package/dist/hooks/use-invitation.d.ts +23 -0
  121. package/dist/hooks/use-magic-link.d.ts +14 -0
  122. package/dist/hooks/use-navigation.d.ts +6 -0
  123. package/dist/hooks/use-notification-stream.d.ts +27 -0
  124. package/dist/hooks/use-notifications.d.ts +30 -0
  125. package/dist/hooks/use-organization.d.ts +81 -0
  126. package/dist/hooks/use-session.d.ts +26 -0
  127. package/dist/hooks/use-signin.d.ts +140 -0
  128. package/dist/hooks/use-signup.d.ts +46 -0
  129. package/dist/hooks/use-sso-callback.d.ts +15 -0
  130. package/dist/hooks/use-user.d.ts +78 -0
  131. package/dist/hooks/use-waitlist.d.ts +24 -0
  132. package/dist/hooks/use-workspace.d.ts +50 -0
  133. package/dist/index.cjs.js +5633 -0
  134. package/dist/index.cjs.js.map +1 -0
  135. package/dist/index.d.ts +5 -0
  136. package/dist/index.es.js +24457 -0
  137. package/dist/index.es.js.map +1 -0
  138. package/dist/models/websocket.d.ts +25 -0
  139. package/dist/services/websocket-manager.d.ts +46 -0
  140. package/dist/types/deployment-context.d.ts +7 -0
  141. package/dist/types/index.d.ts +4 -0
  142. package/dist/types/notification.d.ts +51 -0
  143. package/dist/types/platform-adapter.d.ts +10 -0
  144. package/dist/utils/event-emitter.d.ts +9 -0
  145. package/dist/utils/navigation.d.ts +2 -0
  146. package/dist/utils/profile-completion.d.ts +3 -0
  147. package/dist/utils/response-mapper.d.ts +2 -0
  148. package/package.json +37 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":["../lib/context/deployment-provider.tsx","../lib/hooks/use-deployment.ts","../lib/hooks/use-client.ts","../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.1.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.1.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.1.0/node_modules/use-sync-external-store/shim/index.js","../../node_modules/.pnpm/swr@2.3.4_react@19.1.0/node_modules/swr/dist/_internal/events.mjs","../../node_modules/.pnpm/dequal@2.0.3/node_modules/dequal/lite/index.mjs","../../node_modules/.pnpm/swr@2.3.4_react@19.1.0/node_modules/swr/dist/_internal/config-context-client-BoS53ST9.mjs","../../node_modules/.pnpm/swr@2.3.4_react@19.1.0/node_modules/swr/dist/_internal/constants.mjs","../../node_modules/.pnpm/swr@2.3.4_react@19.1.0/node_modules/swr/dist/_internal/index.mjs","../../node_modules/.pnpm/swr@2.3.4_react@19.1.0/node_modules/swr/dist/index/index.mjs","../lib/utils/response-mapper.ts","../lib/hooks/use-conversation-sessions.ts","../lib/context/agent-conversation-provider.tsx","../lib/hooks/use-signin.ts","../lib/hooks/use-signup.ts","../lib/hooks/use-navigation.ts","../lib/hooks/use-session.ts","../lib/hooks/use-user.ts","../../node_modules/.pnpm/@snipextt+wacht-types@0.0.7/node_modules/@snipextt/wacht-types/src/client.ts","../lib/hooks/use-waitlist.ts","../lib/hooks/use-organization.ts","../lib/hooks/use-workspace.ts","../lib/hooks/use-sso-callback.ts","../lib/hooks/use-magic-link.ts","../lib/hooks/use-forgot-password.ts","../lib/hooks/use-notification-stream.ts","../lib/hooks/use-notifications.ts","../lib/hooks/use-channel-counts.ts","../lib/services/websocket-manager.ts","../lib/constants/ai-agent.ts","../lib/constants/execution-status.ts","../lib/hooks/use-agent-conversation.ts","../lib/hooks/use-invitation.ts","../lib/components/deployment-instance.tsx","../../node_modules/.pnpm/tslib@2.6.2/node_modules/tslib/tslib.es6.mjs","../../node_modules/.pnpm/@emotion+memoize@0.8.1/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../node_modules/.pnpm/@emotion+is-prop-valid@1.2.2/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Enum.js","../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Utility.js","../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Tokenizer.js","../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Parser.js","../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Prefixer.js","../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Serializer.js","../../node_modules/.pnpm/stylis@4.3.2/node_modules/stylis/src/Middleware.js","../../node_modules/.pnpm/@emotion+unitless@0.8.1/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../../node_modules/.pnpm/styled-components@6.1.19_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/styled-components/dist/styled-components.browser.esm.js","../lib/components/utility/root.tsx","../lib/components/utility/otp-input.tsx","../lib/components/icons/github.tsx","../lib/components/icons/microsoft.tsx","../lib/components/icons/google.tsx","../lib/components/icons/x.tsx","../lib/components/icons/facebook.tsx","../lib/components/icons/linkedin.tsx","../lib/components/icons/gitlab.tsx","../lib/components/icons/apple.tsx","../lib/components/icons/discord.tsx","../lib/components/auth/social-buttons.tsx","../lib/components/utility/navigation.tsx","../lib/components/utility/input.tsx","../lib/constants/geo.ts","../lib/components/utility/phone.tsx","../lib/components/auth/auth-image.tsx","../lib/components/auth/signup-form.tsx","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/shared/src/utils.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/defaultAttributes.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/Icon.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/createLucideIcon.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/activity.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/bell-off.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/bell-ring.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/bot.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/building.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/check.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/chevron-left.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/chevron-up.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/chevrons-up-down.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/copy.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/download.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/expand.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/external-link.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/eye-off.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/eye.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/globe.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/link-2.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/loader-circle.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/log-out.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/mail.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/maximize-2.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/message-circle.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/paperclip.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/phone.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/plus.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/search.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/send.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/settings.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/shield.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/trash-2.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/trash.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/user.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/users.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/x.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/zoom-in.js","../../node_modules/.pnpm/lucide-react@0.474.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/zoom-out.js","../lib/components/utility/dialog.tsx","../lib/components/utility/dropdown.tsx","../lib/components/utility/form.tsx","../lib/components/utility/spinner.tsx","../lib/components/utility/switch.tsx","../lib/components/utility/use-dialog.ts","../lib/components/utility/search.tsx","../lib/components/utility/button.tsx","../lib/components/utility/combo-box.tsx","../lib/context/signin-provider.tsx","../lib/components/auth/other-auth-options.tsx","../lib/components/auth/forgot-password.tsx","../lib/components/auth/other-signin-options.tsx","../lib/components/auth/two-factor-method-selector.tsx","../lib/components/auth/phone-verification.tsx","../lib/components/icons/shield.tsx","../lib/components/icons/smartphone.tsx","../lib/components/icons/key.tsx","../lib/components/auth/two-factor-verification.tsx","../lib/components/auth/profile-completion.tsx","../lib/components/auth/signin-form.tsx","../lib/components/auth/waitlist-form.tsx","../lib/components/auth/sso-callback.tsx","../lib/components/auth/magic-link-verification.tsx","../lib/utils/profile-completion.ts","../lib/components/auth/accept-invite.tsx","../lib/components/organization/context.ts","../lib/components/organization/create-organization-form.tsx","../lib/components/organization/create-organization-dialog.tsx","../lib/components/organization/add-domain-popover.tsx","../lib/components/organization/invite-member-popover.tsx","../lib/components/organization/add-role-popover.tsx","../lib/components/utility/table.tsx","../lib/components/utility/empty-state.tsx","../lib/components/utility/confirmation-popover.tsx","../lib/components/organization/manage-organization.tsx","../lib/components/organization/manage-organization-dialog.tsx","../lib/components/workspace/create-workspace-form.tsx","../lib/components/workspace/create-workspace-dialog.tsx","../lib/components/workspace/invite-member-popover.tsx","../lib/components/workspace/add-role-popover.tsx","../lib/components/user/context.ts","../lib/components/workspace/manage-workspace.tsx","../lib/components/workspace/manage-workspace-dialog.tsx","../lib/components/organization/organization-switcher.tsx","../../node_modules/.pnpm/qrcode.react@4.2.0_react@19.1.0/node_modules/qrcode.react/lib/esm/index.js","../lib/components/user/add-email-popover.tsx","../lib/components/user/add-phone-popover.tsx","../lib/components/user/setup-totp-popover.tsx","../lib/components/user/change-password-popover.tsx","../lib/components/user/remove-password-popover.tsx","../lib/components/user/backup-codes-popover.tsx","../lib/components/icons/chrome.tsx","../lib/components/icons/firefox.tsx","../lib/components/icons/safari.tsx","../lib/components/icons/edge.tsx","../lib/components/icons/opera.tsx","../lib/components/icons/brave.tsx","../lib/components/user/manage-account.tsx","../lib/components/user/manage-account-dialog.tsx","../lib/components/user/user-button.tsx","../lib/components/notifications/notification-item.tsx","../lib/components/notifications/notification-popover.tsx","../lib/components/notifications/notification-bell.tsx","../lib/components/user/user-controls.tsx","../lib/components/control/signed-in.tsx","../lib/components/control/signed-out.tsx","../lib/components/control/signed-in-accounts.tsx","../lib/components/control/navigation.tsx","../lib/components/notifications/channel-selector.tsx","../lib/components/agent/agent-conversation.tsx","../lib/components/agent/agent-conversation-history.tsx","../lib/components/agent/agent-conversation-hub.tsx","../lib/utils/navigation.ts"],"sourcesContent":["\"use client\";\n\nimport type { ClinetReponse, Deployment } from \"@/types\";\nimport type { DeploymentContextType, PlatformAdapter } from \"@/types\";\nimport { useState, useEffect, useMemo, createContext, useRef } from \"react\";\nimport type { ReactNode } from \"react\";\n\nconst DeploymentContext = createContext<DeploymentContextType | undefined>(\n undefined\n);\n\ninterface DeploymentProviderProps {\n children: ReactNode;\n publicKey: string;\n adapter: PlatformAdapter;\n}\n\nfunction DeploymentProvider({\n children,\n publicKey,\n adapter,\n}: DeploymentProviderProps) {\n const [loading, setLoading] = useState(true);\n const [deployment, setDeployment] = useState<Deployment | null>(null);\n const singletonLock = useRef(false);\n\n useEffect(() => {\n async function initializeDeployment() {\n if (singletonLock.current) {\n return;\n }\n\n singletonLock.current = true;\n setLoading(true);\n\n const [_, mode, baseUrlBase64] = publicKey.split(\"_\");\n\n if (!baseUrlBase64) {\n throw new Error(\"Invalid public key\");\n }\n\n let baseUrl = atob(baseUrlBase64);\n let staging = mode === \"test\";\n\n let devSession = null;\n if (new URLSearchParams(window.location.search).has(\"__dev_session__\")) {\n devSession = new URLSearchParams(window.location.search).get(\n \"__dev_session__\"\n );\n localStorage.setItem(\"__dev_session__\", devSession ?? \"\");\n const newUrl = new URL(window.location.href);\n newUrl.searchParams.delete(\"__dev_session__\");\n window.history.replaceState({}, \"\", newUrl.toString());\n } else {\n devSession = localStorage.getItem(\"__dev_session__\");\n }\n\n let opts: RequestInit = {};\n const params = new URLSearchParams();\n\n if (!staging) {\n opts = {\n credentials: \"include\",\n };\n } else {\n params.append(\"__dev_session__\", devSession ?? \"\");\n }\n\n const deployment = await fetch(\n `${baseUrl}/deployment${staging ? \"?\" : \"\"}${params.toString()}`,\n opts\n );\n\n if (!deployment.ok) {\n setLoading(false);\n return;\n }\n\n const deploymentConfig =\n (await deployment.json()) as ClinetReponse<Deployment>;\n\n deploymentConfig.data.backend_host = baseUrl;\n setDeployment(deploymentConfig.data);\n\n if (staging && deployment.headers.get(\"x-development-session\")) {\n localStorage.setItem(\n \"__dev_session__\",\n deployment.headers.get(\"x-development-session\") ?? \"\"\n );\n }\n\n setLoading(false);\n }\n\n initializeDeployment();\n }, [publicKey]);\n\n const value = useMemo(\n () => ({\n loading,\n deployment,\n adapter,\n }),\n [loading, deployment, adapter]\n );\n\n return (\n <DeploymentContext.Provider value={value}>\n {children}\n </DeploymentContext.Provider>\n );\n}\n\nexport { DeploymentProvider, DeploymentContext };\n","import { useContext } from \"react\";\nimport { DeploymentContext } from \"../context/deployment-provider\";\n\nexport function useDeployment() {\n const context = useContext(DeploymentContext);\n if (context === undefined) {\n throw new Error(\"useDeployment must be used within a DeploymentProvider\");\n }\n if (!context.loading && !context.deployment) {\n throw new Error(\"Deployment is not loaded\");\n }\n return context;\n}\n","import type { Deployment } from \"@/types\";\nimport { useDeployment } from \"./use-deployment\";\nimport type { Client } from \"@/types\";\n\ntype UseClientReturnType = {\n client: Client;\n loading: boolean;\n};\n\nexport function useClient(): UseClientReturnType {\n const { deployment, loading: sessionLoading } = useDeployment();\n\n if (sessionLoading || !deployment) {\n return {\n client: () => Promise.reject(new Error(\"Deployment is loading\")),\n loading: sessionLoading,\n };\n }\n\n const fetcher = async (url: URL | string, options?: RequestInit) => {\n const defaultOptions = getDefaultOptions(deployment);\n const headers = new Headers(defaultOptions.headers);\n\n if (options?.headers) {\n const modifiedHeaders = new Headers(options.headers);\n modifiedHeaders.forEach((value, key) => {\n headers.set(key, value);\n });\n }\n\n const backendUrl = new URL(`${deployment.backend_host ?? \"\"}${url}`);\n\n if (deployment.mode === \"staging\") {\n backendUrl.searchParams.append(\n \"__dev_session__\",\n localStorage.getItem(\"__dev_session__\") ?? \"\"\n );\n }\n\n const response = await fetch(backendUrl, {\n ...defaultOptions,\n ...options,\n headers,\n });\n\n if (\n deployment.mode === \"staging\" &&\n response.headers.get(\"x-development-session\")\n ) {\n localStorage.setItem(\n \"__dev_session__\",\n response.headers.get(\"x-development-session\") ?? \"\"\n );\n }\n\n return response;\n };\n\n return {\n client: fetcher,\n loading: sessionLoading,\n };\n}\n\nfunction getDefaultOptions(deployment: Deployment): RequestInit {\n if (deployment.mode === \"staging\") {\n return {};\n }\n return {\n credentials: \"include\",\n };\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","const FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\nconst ERROR_REVALIDATE_EVENT = 3;\n\nexport { ERROR_REVALIDATE_EVENT, FOCUS_EVENT, MUTATE_EVENT, RECONNECT_EVENT };\n","var has = Object.prototype.hasOwnProperty;\n\nexport function dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","'use client';\nimport React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useRef, createElement } from 'react';\nimport * as revalidateEvents from './events.mjs';\nimport { dequal } from 'dequal/lite';\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst isPromiseLike = (x)=>isFunction(x.then);\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst isLegacyDeno = isWindowDefined && 'Deno' in window;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>!isUndefined(key) && cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return !isUndefined(key) && cache.get(key) || EMPTY_CACHE;\n }\n ];\n} // export { UNDEFINED, OBJECT, isUndefined, isFunction, mergeObjects, isPromiseLike }\n;\n\n/**\n * Due to the bug https://bugs.chromium.org/p/chromium/issues/detail?id=678075,\n * it's not reliable to detect if the browser is currently online or offline\n * based on `navigator.onLine`.\n * As a workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || isLegacyDeno;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\nconst getTypeName = (value)=>OBJECT.prototype.toString.call(value);\nconst isObjectTypeName = (typeName, type)=>typeName === `[object ${type}]`;\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const typeName = getTypeName(arg);\n const isDate = isObjectTypeName(typeName, 'Date');\n const isRegex = isObjectTypeName(typeName, 'RegExp');\n const isPlainObject = isObjectTypeName(typeName, 'Object');\n let result;\n let index;\n if (OBJECT(arg) === arg && !isDate && !isRegex) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result) return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (Array.isArray(arg)) {\n // Array.\n result = '@';\n for(index = 0; index < arg.length; index++){\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (isPlainObject) {\n // Object, sort keys.\n result = '#';\n const keys = OBJECT.keys(arg).sort();\n while(!isUndefined(index = keys.pop())){\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for (const key of it){\n if (// Skip the special useSWRInfinite and useSWRSubscription keys.\n !/^\\$(inf|sub)\\$/.test(key) && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n const startRevalidate = ()=>{\n const revalidators = EVENT_REVALIDATORS[key];\n const revalidate = isFunction(options.revalidate) ? options.revalidate(get().data, _k) : options.revalidate !== false;\n if (revalidate) {\n // Invalidate the key by deleting the concurrent request markers so new\n // requests will not be deduped.\n delete FETCH[key];\n delete PRELOAD[key];\n if (revalidators && revalidators[0]) {\n return revalidators[0](revalidateEvents.MUTATE_EVENT).then(()=>get().data);\n }\n }\n return get().data;\n };\n // If there is no new data provided, revalidate the key with current state.\n if (args.length < 3) {\n // Revalidate and broadcast state.\n return startRevalidate();\n }\n let data = _data;\n let error;\n let isError = false;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData, displayedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n isError = true;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isPromiseLike(data)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((err)=>{\n error = err;\n isError = true;\n });\n // Check if other mutations have occurred since we've started this mutation.\n // If there's a race we don't update cache or broadcast the change,\n // just return the data.\n if (beforeMutationTs !== MUTATION[key][0]) {\n if (isError) throw error;\n return data;\n } else if (isError && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data: committedData,\n _c: UNDEFINED\n });\n }\n }\n // If we should write back the cache after request.\n if (populateCache) {\n if (!isError) {\n // Transform the result into data.\n if (isFunction(populateCache)) {\n const populateCachedData = populateCache(data, committedData);\n set({\n data: populateCachedData,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n } else {\n // Only update cached data and reset the error if there's no error. Data can be `undefined` here.\n set({\n data,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n }\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n Promise.resolve(startRevalidate()).then(()=>{\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n });\n // Throw error or return data\n if (isError) {\n if (throwOnError) throw error;\n return;\n }\n return data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (provider, options)=>{\n // The global state for a specific provider will be used to deduplicate\n // requests and store listeners. As well as a mutate function that is bound to\n // the cache.\n // The provider's global state might be already initialized. Let's try to get the\n // global state associated with the provider first.\n if (!SWRGlobalState.has(provider)) {\n const opts = mergeObjects(defaultConfigOptions, options);\n // If there's no global state bound to the provider, create a new one with the\n // new mutate function.\n const EVENT_REVALIDATORS = Object.create(null);\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = Object.create(null);\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for (const fn of subs){\n fn(value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n Object.create(null),\n Object.create(null),\n Object.create(null),\n mutate,\n setter,\n subscribe\n ]);\n if (!IS_SERVER) {\n // When listening to the native events for auto revalidations,\n // we intentionally put a delay (setTimeout) here to make sure they are\n // fired after immediate JavaScript executions, which can be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, revalidateEvents.FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, revalidateEvents.RECONNECT_EVENT)));\n unmount = ()=>{\n releaseFocus && releaseFocus();\n releaseReconnect && releaseReconnect();\n // When un-mounting, we need to remove the cache provider from the state\n // storage too because it's a side-effect. Otherwise, when re-mounting we\n // will not re-register those event listeners.\n SWRGlobalState.delete(provider);\n };\n }\n }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\n // We might want to inject an extra layer on top of `provider` in the future,\n // such as key serialization, auto GC, etc.\n // For now, it's just a `Map` interface without any modifications.\n return [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = dequal;\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n onErrorRetry,\n onDiscarded: noop,\n // switches\n revalidateOnFocus: true,\n revalidateOnReconnect: true,\n revalidateIfStale: true,\n shouldRetryOnError: true,\n // timeouts\n errorRetryInterval: slowConnection ? 10000 : 5000,\n focusThrottleInterval: 5 * 1000,\n dedupingInterval: 2 * 1000,\n loadingTimeout: slowConnection ? 5000 : 3000,\n // providers\n compare,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1, fallback: f1 } = a;\n const { use: u2, fallback: f2 } = b;\n if (u1 && u2) {\n v.use = u1.concat(u2);\n }\n if (f1 && f2) {\n v.fallback = mergeObjects(f1, f2);\n }\n }\n return v;\n};\n\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // initialize the cache only on first access.\n const cacheContextRef = useRef(UNDEFINED);\n if (provider && !cacheContextRef.current) {\n cacheContextRef.current = initCache(provider(extendedConfig.cache || cache), config);\n }\n const cacheContext = cacheContextRef.current;\n // Override the cache if a new provider is given.\n if (cacheContext) {\n extendedConfig.cache = cacheContext[0];\n extendedConfig.mutate = cacheContext[1];\n }\n // Unsubscribe events.\n useIsomorphicLayoutEffect(()=>{\n if (cacheContext) {\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\nexport { noop as A, isPromiseLike as B, IS_REACT_LEGACY as I, OBJECT as O, SWRConfigContext as S, UNDEFINED as U, isFunction as a, SWRGlobalState as b, cache as c, defaultConfig as d, isUndefined as e, mergeConfigs as f, SWRConfig as g, initCache as h, isWindowDefined as i, mutate as j, compare as k, stableHash as l, mergeObjects as m, internalMutate as n, getTimestamp as o, preset as p, defaultConfigOptions as q, IS_SERVER as r, serialize as s, rAF as t, useIsomorphicLayoutEffect as u, slowConnection as v, isDocumentDefined as w, isLegacyDeno as x, hasRequestAnimationFrame as y, createCacheHelper as z };\n","const INFINITE_PREFIX = '$inf$';\n\nexport { INFINITE_PREFIX };\n","import { i as isWindowDefined, a as isFunction, m as mergeObjects, S as SWRConfigContext, d as defaultConfig, s as serialize, b as SWRGlobalState, c as cache, e as isUndefined, f as mergeConfigs } from './config-context-client-BoS53ST9.mjs';\nexport { I as IS_REACT_LEGACY, r as IS_SERVER, O as OBJECT, g as SWRConfig, U as UNDEFINED, k as compare, z as createCacheHelper, q as defaultConfigOptions, o as getTimestamp, y as hasRequestAnimationFrame, h as initCache, n as internalMutate, w as isDocumentDefined, x as isLegacyDeno, B as isPromiseLike, j as mutate, A as noop, p as preset, t as rAF, v as slowConnection, l as stableHash, u as useIsomorphicLayoutEffect } from './config-context-client-BoS53ST9.mjs';\nimport * as revalidateEvents from './events.mjs';\nexport { revalidateEvents };\nimport { INFINITE_PREFIX } from './constants.mjs';\nexport { INFINITE_PREFIX } from './constants.mjs';\nimport React, { useContext } from 'react';\nexport * from './types.mjs';\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n return mergeObjects(defaultConfig, useContext(SWRConfigContext));\n};\n\nconst preload = (key_, fetcher)=>{\n const [key, fnArg] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(fnArg);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const [key] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n if (key.startsWith(INFINITE_PREFIX)) {\n // we want the infinite fetcher to be called.\n // handling of the PRELOAD cache happens there.\n return fetcher_(...args);\n }\n const req = PRELOAD[key];\n if (isUndefined(req)) return fetcher_(...args);\n delete PRELOAD[key];\n return req;\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const index = keyedRevalidators.indexOf(callback);\n if (index >= 0) {\n // O(1): faster than splice\n keyedRevalidators[index] = keyedRevalidators[keyedRevalidators.length - 1];\n keyedRevalidators.pop();\n }\n };\n};\n\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { SWRGlobalState, cache, defaultConfig, isFunction, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, normalize, preload, serialize, subscribeCallback, useSWRConfig, withArgs, withMiddleware };\n","import React, { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { OBJECT as OBJECT$1, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, serialize as serialize$1, createCacheHelper, isUndefined as isUndefined$1, UNDEFINED as UNDEFINED$1, isPromiseLike, getTimestamp, isFunction as isFunction$1, revalidateEvents, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects } from '../_internal/index.mjs';\nexport { mutate, preload, useSWRConfig } from '../_internal/index.mjs';\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\nconst getTypeName = (value)=>OBJECT.prototype.toString.call(value);\nconst isObjectTypeName = (typeName, type)=>typeName === `[object ${type}]`;\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const typeName = getTypeName(arg);\n const isDate = isObjectTypeName(typeName, 'Date');\n const isRegex = isObjectTypeName(typeName, 'RegExp');\n const isPlainObject = isObjectTypeName(typeName, 'Object');\n let result;\n let index;\n if (OBJECT(arg) === arg && !isDate && !isRegex) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result) return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (Array.isArray(arg)) {\n // Array.\n result = '@';\n for(index = 0; index < arg.length; index++){\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (isPlainObject) {\n // Object, sort keys.\n result = '#';\n const keys = OBJECT.keys(arg).sort();\n while(!isUndefined(index = keys.pop())){\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\nconst unstable_serialize = (key)=>serialize(key)[0];\n\n/// <reference types=\"react/experimental\" />\nconst use = React.use || // This extra generic is to avoid TypeScript mixing up the generic and JSX sytax\n// and emitting an error.\n// We assume that this is only for the `use(thenable)` case, not `use(context)`.\n// https://github.com/facebook/react/blob/aed00dacfb79d17c53218404c52b1c7aa59c4a89/packages/react-server/src/ReactFizzThenable.js#L45\n((thenable)=>{\n switch(thenable.status){\n case 'pending':\n throw thenable;\n case 'fulfilled':\n return thenable.value;\n case 'rejected':\n throw thenable.reason;\n default:\n thenable.status = 'pending';\n thenable.then((v)=>{\n thenable.status = 'fulfilled';\n thenable.value = v;\n }, (e)=>{\n thenable.status = 'rejected';\n thenable.reason = e;\n });\n throw thenable;\n }\n});\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst useSWRHandler = (_key, fetcher, config)=>{\n const { cache, compare, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n // `key` is the identifier of the SWR internal state,\n // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n // All of them are derived from `_key`.\n const [key, fnArg] = serialize$1(_key);\n // If it's the initial render of this hook.\n const initialMountedRef = useRef(false);\n // If the hook is unmounted already. This will be used to prevent some effects\n // to be called after unmounting.\n const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n // Resolve the fallback data from either the inline option, or the global provider.\n // If it's a promise, we simply let React suspend and resolve it for us.\n const fallback = isUndefined$1(fallbackData) ? isUndefined$1(config.fallback) ? UNDEFINED$1 : config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(prev[t], current[t])) {\n if (!isUndefined$1(prev[t])) {\n return false;\n }\n if (!compare(returnedData, current[t])) {\n return false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n return false;\n }\n }\n }\n return true;\n };\n const getSnapshot = useMemo(()=>{\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (!isUndefined$1(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n if (suspense) return false;\n return revalidateIfStale !== false;\n })();\n // Get the cache and merge it with expected states.\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n const cachedData = getCache();\n const initialData = getInitialCache();\n const clientSnapshot = getSelectedCache(cachedData);\n const serverSnapshot = cachedData === initialData ? clientSnapshot : getSelectedCache(initialData);\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = clientSnapshot;\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n const compareResult = isEqual(newSnapshot, memorizedSnapshot);\n if (compareResult) {\n // Mentally, we should always return the `memorizedSnapshot` here\n // as there's no change between the new and old snapshots.\n // However, since the `isEqual` function only compares selected fields,\n // the values of the unselected fields might be changed. That's\n // simply because we didn't track them.\n // To support the case in https://github.com/vercel/swr/pull/2576,\n // we need to update these fields in the `memorizedSnapshot` too\n // with direct mutations to ensure the snapshot is always up-to-date\n // even for the unselected fields, but only trigger re-renders when\n // the selected fields are changed.\n memorizedSnapshot.data = newSnapshot.data;\n memorizedSnapshot.isLoading = newSnapshot.isLoading;\n memorizedSnapshot.isValidating = newSnapshot.isValidating;\n memorizedSnapshot.error = newSnapshot.error;\n return memorizedSnapshot;\n } else {\n memorizedSnapshot = newSnapshot;\n return newSnapshot;\n }\n },\n ()=>serverSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const isInitialMount = !initialMountedRef.current;\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined$1(cachedData) ? fallback && isPromiseLike(fallback) ? use(fallback) : fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined$1(cachedData) ? isUndefined$1(laggyDataRef.current) ? data : laggyDataRef.current : cachedData : data;\n // - Suspense mode and there's stale data for the initial render.\n // - Not suspense mode and there is no fallback data and `revalidateIfStale` is enabled.\n // - `revalidateIfStale` is enabled but `data` is not defined.\n const shouldDoInitialRevalidation = (()=>{\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined$1(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined$1(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n // Under suspense mode, it will always fetch on render if there is no\n // stale data so no need to revalidate immediately mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined$1(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined$1(data) || revalidateIfStale;\n })();\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n const isValidating = isUndefined$1(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined$1(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined$1(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined$1(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n // Wait until the ongoing request is done. Deduplication is also\n // considered here.\n ;\n [newData, startAt] = FETCH[key];\n newData = await newData;\n if (shouldStartNewRequest) {\n // If the request isn't interrupted, clean it up after the\n // deduplication interval.\n setTimeout(cleanupState, config.dedupingInterval);\n }\n // If there're other ongoing request(s), started after the current one,\n // we need to ignore the current one to avoid possible race conditions:\n // req1------------------>res1 (current one)\n // req2---------------->res2\n // the request that fired later will always be kept.\n // The timestamp maybe be `undefined` or a number\n if (!FETCH[key] || FETCH[key][1] !== startAt) {\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED$1;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined$1(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction$1(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (!getConfig().revalidateOnFocus || !getConfig().revalidateOnReconnect || isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, (_opts)=>{\n const revalidators = EVENT_REVALIDATORS[key];\n if (revalidators && revalidators[0]) {\n revalidators[0](revalidateEvents.ERROR_REVALIDATE_EVENT, _opts);\n }\n }, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `keyValidating` are depending on `key`, so we can exclude them from\n // the deps array.\n //\n // FIXME:\n // `fn` and `config` might be changed during the lifecycle,\n // but they might be changed every render like this.\n // `useSWR('key', () => fetch('/api/'), { suspense: true })`\n // So we omit the values from the deps array\n // even though it might cause unexpected behaviors.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n key,\n cache\n ]);\n // Similar to the global mutate but bound to the current cache and key.\n // `cache` isn't allowed to change during the lifecycle.\n const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined$1(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED$1, WITH_DEDUPE);\n let nextFocusRevalidatedAt = 0;\n if (getConfig().revalidateOnFocus) {\n const initNow = Date.now();\n nextFocusRevalidatedAt = initNow + getConfig().focusThrottleInterval;\n }\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n const onRevalidate = (type, opts = {})=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n } else if (type == revalidateEvents.ERROR_REVALIDATE_EVENT) {\n return revalidate(opts);\n }\n return;\n };\n const unsubEvents = subscribeCallback(key, EVENT_REVALIDATORS, onRevalidate);\n // Mark the component as mounted and update corresponding refs.\n unmountedRef.current = false;\n keyRef.current = key;\n initialMountedRef.current = true;\n // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation\n if (shouldDoInitialRevalidation) {\n // Performance optimization: if a request is already in progress for this key,\n // skip the revalidation to avoid redundant work\n if (!FETCH[key]) {\n if (isUndefined$1(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\n } else {\n // Delay the revalidate if we have data to return so we won't block\n // rendering.\n rAF(softRevalidate);\n }\n }\n }\n return ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction$1(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval;\n // We only start the next interval if `refreshInterval` is not 0, and:\n // - `force` is true, which is the start of polling\n // - or `timer` is not 0, which means the effect wasn't canceled\n if (interval && timer !== -1) {\n timer = setTimeout(execute, interval);\n }\n }\n function execute() {\n // Check if it's OK to execute:\n // Only revalidate when the page is visible, online, and not errored.\n if (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `error`, the `error` needs to be thrown to the error boundary.\n // If there is no `error`, the `revalidation` promise needs to be thrown to\n // the suspense boundary.\n if (suspense && isUndefined$1(data) && key) {\n // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any fallback data. This causes hydration errors. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER) {\n throw new Error('Fallback data is required when using Suspense in SSR.');\n }\n // Always update fetcher and config refs even with the Suspense mode.\n fetcherRef.current = fetcher;\n configRef.current = config;\n unmountedRef.current = false;\n const req = PRELOAD[key];\n if (!isUndefined$1(req)) {\n const promise = boundMutate(req);\n use(promise);\n }\n if (isUndefined$1(error)) {\n const promise = revalidate(WITH_DEDUPE);\n if (!isUndefined$1(returnedData)) {\n promise.status = 'fulfilled';\n promise.value = true;\n }\n use(promise);\n } else {\n throw error;\n }\n }\n const swrResponse = {\n mutate: boundMutate,\n get data () {\n stateDependencies.data = true;\n return returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n return swrResponse;\n};\nconst SWRConfig = OBJECT$1.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error, isLoading } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (isLoading) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ const useSWR = withArgs(useSWRHandler);\n\n// useSWR\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n","import { ApiResult } from \"@/types\";\n\nexport async function responseMapper<T>(\n response: Response,\n): Promise<ApiResult<T>> {\n if (!response.ok) {\n // Handle HTTP errors (400+)\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const json = await response.json();\n if (json.message) {\n errorMessage = json.message;\n } else if (json.errors && json.errors.length > 0) {\n errorMessage = json.errors[0].message || errorMessage;\n }\n } catch {}\n\n throw new Error(errorMessage);\n }\n\n const json = await response.json();\n\n return {\n data: json.data,\n errors: json.errors,\n } as ApiResult<T>;\n}\n","import { useClient } from \"./use-client\";\nimport { useCallback } from \"react\";\nimport useSWR from \"swr\";\nimport { responseMapper } from \"../utils/response-mapper\";\n\nexport interface ConversationSession {\n id: string;\n title: string;\n status: 'idle' | 'running' | 'waiting_for_input' | 'interrupted' | 'completed' | 'failed';\n last_activity_at: string;\n context_group?: string;\n created_at: string;\n}\n\nexport interface CreateSessionRequest {\n title: string;\n system_instructions?: string;\n}\n\nexport interface ListSessionsOptions {\n limit?: number;\n offset?: number;\n status?: string;\n search?: string;\n}\n\nexport interface ListSessionsResponse {\n data: ConversationSession[];\n has_more: boolean;\n}\n\ntype UseConversationSessionsReturnType = {\n sessions: ConversationSession[];\n loading: boolean;\n error: Error | null;\n createSession: (request: CreateSessionRequest) => Promise<ConversationSession>;\n deleteSession: (id: string) => Promise<void>;\n refetch: () => Promise<void>;\n};\n\nexport function useConversationSessions(token: string): UseConversationSessionsReturnType {\n const { client } = useClient();\n\n const fetcher = useCallback(async () => {\n const response = await client(`/api/agent/contexts?token=${encodeURIComponent(token)}`, {\n method: \"GET\",\n });\n const parsed = await responseMapper<ListSessionsResponse>(response);\n return parsed.data;\n }, [client, token]);\n\n const { data, error, mutate } = useSWR(\n token ? `sessions-${token}` : null,\n fetcher,\n {\n revalidateOnFocus: false,\n }\n );\n\n const createSession = useCallback(async (request: CreateSessionRequest): Promise<ConversationSession> => {\n const formData = new FormData();\n formData.append('title', request.title);\n if (request.system_instructions) {\n formData.append('system_instructions', request.system_instructions);\n }\n\n const response = await client(`/api/agent/contexts?token=${encodeURIComponent(token)}`, {\n method: \"POST\",\n body: formData,\n });\n\n const parsed = await responseMapper<ConversationSession>(response);\n\n await mutate((current) => {\n if (!current) return current;\n return {\n ...current,\n data: [parsed.data, ...current.data],\n };\n });\n\n return parsed.data;\n }, [client, token, mutate]);\n\n const deleteSession = useCallback(async (id: string): Promise<void> => {\n await client(`/api/agent/contexts/${id}/delete?token=${encodeURIComponent(token)}`, {\n method: \"POST\",\n });\n\n await mutate((current) => {\n if (!current) return current;\n return {\n ...current,\n data: current.data.filter((session) => session.id !== id),\n };\n });\n }, [client, token, mutate]);\n\n return {\n sessions: data?.data || [],\n loading: !data && !error,\n error,\n createSession,\n deleteSession,\n refetch: async () => { await mutate(); },\n };\n}","import { createContext, useContext, useState, useCallback, useEffect, ReactNode } from 'react';\nimport { ConversationSession, useConversationSessions } from '../hooks/use-conversation-sessions';\n\ninterface PlatformAdapter {\n onPlatformEvent?: (eventName: string, eventData: unknown) => void;\n onPlatformFunction?: (\n functionName: string,\n parameters: unknown,\n executionId: string,\n ) => Promise<unknown>;\n}\n\ninterface AgentConversationContextValue {\n // Configuration\n agentName: string;\n token: string;\n platformAdapter?: PlatformAdapter;\n\n // Session Management\n sessions: ConversationSession[];\n selectedSession: ConversationSession | null;\n loadingSessions: boolean;\n sessionError: Error | null;\n\n // Actions\n selectSession: (session: ConversationSession | null) => void;\n createSession: (title?: string) => Promise<ConversationSession>;\n deleteSession: (sessionId: string) => Promise<void>;\n refreshSessions: () => Promise<void>;\n\n // UI State\n showHistory: boolean;\n setShowHistory: (show: boolean) => void;\n\n // Callbacks\n onSessionCreated?: (session: ConversationSession) => void;\n onSessionDeleted?: (sessionId: string) => void;\n onError?: (error: string) => void;\n}\n\nconst AgentConversationContext = createContext<AgentConversationContextValue | undefined>(undefined);\n\nexport function useAgentConversationContext() {\n const context = useContext(AgentConversationContext);\n if (!context) {\n throw new Error('useAgentConversationContext must be used within AgentConversationProvider');\n }\n return context;\n}\n\ninterface AgentConversationProviderProps {\n children: ReactNode;\n agentName: string;\n token: string;\n platformAdapter?: PlatformAdapter;\n defaultSessionId?: string;\n onSessionCreated?: (session: ConversationSession) => void;\n onSessionDeleted?: (sessionId: string) => void;\n onError?: (error: string) => void;\n}\n\nexport function AgentConversationProvider({\n children,\n agentName,\n token,\n platformAdapter,\n defaultSessionId,\n onSessionCreated,\n onSessionDeleted,\n onError,\n}: AgentConversationProviderProps) {\n const [selectedSession, setSelectedSession] = useState<ConversationSession | null>(\n defaultSessionId ? {\n id: defaultSessionId,\n title: 'Conversation',\n status: 'idle',\n last_activity_at: new Date().toISOString(),\n created_at: new Date().toISOString(),\n } : null\n );\n const [showHistory, setShowHistory] = useState(false);\n\n const {\n sessions,\n loading: loadingSessions,\n error: sessionError,\n createSession: createSessionApi,\n deleteSession: deleteSessionApi,\n refetch: refreshSessions,\n } = useConversationSessions(token);\n\n // Update session details when actual sessions are loaded\n useEffect(() => {\n if (defaultSessionId && sessions.length > 0) {\n const actualSession = sessions.find(s => s.id === defaultSessionId);\n if (actualSession) {\n setSelectedSession(actualSession);\n }\n }\n }, [defaultSessionId, sessions]);\n\n const selectSession = useCallback((session: ConversationSession | null) => {\n setSelectedSession(session);\n setShowHistory(false);\n }, []);\n\n const createSession = useCallback(async (title?: string) => {\n try {\n const sessionTitle = title || `Chat ${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`;\n const newSession = await createSessionApi({ title: sessionTitle });\n\n setSelectedSession(newSession);\n onSessionCreated?.(newSession);\n\n return newSession;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to create session';\n onError?.(errorMessage);\n throw error;\n }\n }, [createSessionApi, onSessionCreated, onError]);\n\n const deleteSession = useCallback(async (sessionId: string) => {\n try {\n await deleteSessionApi(sessionId);\n\n if (selectedSession?.id === sessionId) {\n setSelectedSession(null);\n }\n\n onSessionDeleted?.(sessionId);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Failed to delete session';\n onError?.(errorMessage);\n throw error;\n }\n }, [deleteSessionApi, selectedSession, onSessionDeleted, onError]);\n\n const value: AgentConversationContextValue = {\n // Configuration\n agentName,\n token,\n platformAdapter,\n\n // Session Management\n sessions,\n selectedSession,\n loadingSessions,\n sessionError,\n\n // Actions\n selectSession,\n createSession,\n deleteSession,\n refreshSessions,\n\n // UI State\n showHistory,\n setShowHistory,\n\n // Callbacks\n onSessionCreated,\n onSessionDeleted,\n onError,\n };\n\n return (\n <AgentConversationContext.Provider value={value}>\n {children}\n </AgentConversationContext.Provider>\n );\n}","import { useState } from \"react\";\nimport { responseMapper } from \"../utils/response-mapper\";\nimport { useClient } from \"./use-client\";\nimport type { ApiResult, Client, ErrorInterface } from \"@/types\";\nimport type { Session, SigninAttempt, ProfileCompletionData } from \"@/types\";\n\ntype UsernameSignInParams = {\n username: string;\n password: string;\n};\n\ntype SignInPlainUsername = ({\n username,\n password,\n}: UsernameSignInParams) => Promise<ApiResult<Session>>;\n\ntype EmailSignInParams = {\n email: string;\n password: string;\n};\n\ntype SignInPlainEmail = ({\n email,\n password,\n}: EmailSignInParams) => Promise<ApiResult<Session>>;\n\ntype GenericSignInParams = {\n email?: string;\n username?: string;\n password?: string;\n phone?: string;\n strategy?: string;\n};\n\ntype SignInGeneric = ({\n email,\n username,\n password,\n phone,\n strategy,\n}: GenericSignInParams) => Promise<ApiResult<Session>>;\n\ntype PhoneSignInParams = {\n phone: string;\n};\n\ntype SignInPhone = ({\n phone,\n}: PhoneSignInParams) => Promise<ApiResult<Session>>;\n\ntype EmailOTPSignInParams = {\n email: string;\n};\n\ntype SignInEmailOTP = ({\n email,\n}: EmailOTPSignInParams) => Promise<ApiResult<Session>>;\n\ntype MagicLinkSignInParams = {\n email: string;\n};\n\ntype SignInMagicLink = ({\n email,\n}: MagicLinkSignInParams) => Promise<ApiResult<Session>>;\n\nexport enum OAuthProvider {\n XOauth = \"x_oauth\",\n GithubOauth = \"github_oauth\",\n GitlabOauth = \"gitlab_oauth\",\n GoogleOauth = \"google_oauth\",\n FacebookOauth = \"facebook_oauth\",\n MicrosoftOauth = \"microsoft_oauth\",\n LinkedinOauth = \"linkedin_oauth\",\n DiscordOauth = \"discord_oauth\",\n AppleOauth = \"apple_oauth\",\n}\n\ntype SignInOauth = ({\n provider,\n redirectUri,\n}: {\n provider: OAuthProvider;\n redirectUri?: string;\n}) => Promise<ApiResult<InitSSOResponseType>>;\n\nexport enum SignInStrategy {\n Username = \"username\",\n Email = \"email\",\n Phone = \"phone\",\n EmailOTP = \"email_otp\",\n MagicLink = \"magic_link\",\n Oauth = \"oauth\",\n Generic = \"generic\",\n}\n\n// Declarative verification parameter types\ntype EmailOTPVerificationParams = {\n strategy: \"email_otp\";\n redirectUri?: string;\n};\n\ntype PhoneOTPVerificationParams = {\n strategy: \"phone_otp\";\n lastDigits?: string;\n};\n\ntype MagicLinkVerificationParams = {\n strategy: \"magic_link\";\n redirectUri?: string;\n};\n\ntype VerificationParams =\n | EmailOTPVerificationParams\n | PhoneOTPVerificationParams\n | MagicLinkVerificationParams;\n\ntype PrepareVerificationResponse = {\n otp_sent?: boolean;\n masked_phone?: string;\n masked_email?: string;\n verification_method?: string;\n};\n\ntype CreateSignInStrategyResult = {\n (strategy: SignInStrategy.Username): SignInPlainUsername;\n (strategy: SignInStrategy.Email): SignInPlainEmail;\n (strategy: SignInStrategy.Phone): SignInPhone;\n (strategy: SignInStrategy.EmailOTP): SignInEmailOTP;\n (strategy: SignInStrategy.MagicLink): SignInMagicLink;\n (strategy: SignInStrategy.Oauth): SignInOauth;\n (strategy: SignInStrategy.Generic): SignInGeneric;\n};\n\ntype SignIn = {\n createStrategy: CreateSignInStrategyResult;\n prepareVerification: (\n params: VerificationParams,\n ) => Promise<ApiResult<PrepareVerificationResponse>>;\n completeVerification: (verificationCode: string) => Promise<Session>;\n completeProfile: (data: ProfileCompletionData) => Promise<Session>;\n};\n\ntype UseSignInReturnType =\n | {\n loading: false;\n signIn: SignIn;\n signinAttempt: SigninAttempt | null;\n discardSignInAttempt: () => void;\n setSignInAttempt: (attempt: SigninAttempt | null) => void;\n error: ApiResult<unknown, ErrorInterface> | null;\n }\n | {\n loading: true;\n signIn: never;\n signinAttempt: null;\n discardSignInAttempt: () => void;\n setSignInAttempt: (attempt: SigninAttempt | null) => void;\n error: null;\n };\n\ntype InitSSOResponseType = {\n oauth_url: string;\n session: Session;\n};\n\nfunction builder(\n client: Client,\n setSignInAttempt: (attempt: SigninAttempt | null) => void,\n setError: (error: ApiResult<unknown, ErrorInterface> | null) => void,\n): CreateSignInStrategyResult {\n const functionMap = {\n [SignInStrategy.Username]: builderUsername(\n client,\n setSignInAttempt,\n setError,\n ),\n [SignInStrategy.Email]: builderEmail(client, setSignInAttempt, setError),\n [SignInStrategy.Phone]: builderPhone(client, setSignInAttempt, setError),\n [SignInStrategy.EmailOTP]: builderEmailOTP(\n client,\n setSignInAttempt,\n setError,\n ),\n [SignInStrategy.MagicLink]: builderMagicLink(\n client,\n setSignInAttempt,\n setError,\n ),\n [SignInStrategy.Oauth]: builderOauth(client, setError),\n [SignInStrategy.Generic]: builderGeneric(\n client,\n setSignInAttempt,\n setError,\n ),\n };\n\n return function signInBuilder(strategy: SignInStrategy) {\n return functionMap[strategy];\n } as CreateSignInStrategyResult;\n}\n\nfunction builderUsername(\n client: Client,\n setSignInAttempt: (attempt: SigninAttempt | null) => void,\n setError: (error: ApiResult<unknown, ErrorInterface> | null) => void,\n): SignInPlainUsername {\n return async ({ username, password }: UsernameSignInParams) => {\n const form = new FormData();\n form.append(\"strategy\", \"plain_username\");\n form.append(\"username\", username);\n form.append(\"password\", password);\n\n const response = await client(\"/auth/signin\", {\n method: \"POST\",\n body: form,\n });\n const result = await responseMapper<Session>(response);\n if (\"data\" in result && result.data?.signin_attempts?.length) {\n setSignInAttempt(result.data.signin_attempts.at(-1) || null);\n setError(null);\n } else {\n setError(result);\n }\n return result;\n };\n}\n\nfunction builderEmail(\n client: Client,\n setSignInAttempt: (attempt: SigninAttempt | null) => void,\n setError: (error: ApiResult<unknown, ErrorInterface> | null) => void,\n): SignInPlainEmail {\n return async ({ email, password }: EmailSignInParams) => {\n const form = new FormData();\n form.append(\"strategy\", \"plain_email\");\n form.append(\"email\", email);\n form.append(\"password\", password);\n\n const response = await client(\"/auth/signin\", {\n method: \"POST\",\n body: form,\n });\n const result = await responseMapper<Session>(response);\n if (\"data\" in result && result.data?.signin_attempts?.length) {\n setSignInAttempt(result.data.signin_attempts.at(-1) || null);\n setError(null);\n } else {\n setError(result);\n }\n return result;\n };\n}\n\nfunction builderPhone(\n client: Client,\n setSignInAttempt: (attempt: SigninAttempt | null) => void,\n setError: (error: ApiResult<unknown, ErrorInterface> | null) => void,\n): SignInPhone {\n return async ({ phone }: PhoneSignInParams) => {\n const form = new FormData();\n form.append(\"strategy\", \"phone_otp\");\n form.append(\"phone\", phone);\n\n const response = await client(\"/auth/signin\", {\n method: \"POST\",\n body: form,\n });\n const result = await responseMapper<Session>(response);\n if (\"data\" in result && result.data?.signin_attempts?.length) {\n setSignInAttempt(result.data.signin_attempts.at(-1) || null);\n setError(null);\n } else {\n setError(result);\n }\n return result;\n };\n}\n\nfunction builderEmailOTP(\n client: Client,\n setSignInAttempt: (attempt: SigninAttempt | null) => void,\n setError: (error: ApiResult<unknown, ErrorInterface> | null) => void,\n): SignInEmailOTP {\n return async ({ email }: EmailOTPSignInParams) => {\n const form = new FormData();\n form.append(\"strategy\", \"email_otp\");\n form.append(\"email\", email);\n\n const response = await client(\"/auth/signin\", {\n method: \"POST\",\n body: form,\n });\n const result = await responseMapper<Session>(response);\n if (\"data\" in result && result.data?.signin_attempts?.length) {\n setSignInAttempt(result.data.signin_attempts.at(-1) || null);\n setError(null);\n } else {\n setError(result);\n }\n return result;\n };\n}\n\nfunction builderMagicLink(\n client: Client,\n setSignInAttempt: (attempt: SigninAttempt | null) => void,\n setError: (error: ApiResult<unknown, ErrorInterface> | null) => void,\n): SignInMagicLink {\n return async ({ email }: MagicLinkSignInParams) => {\n const form = new FormData();\n form.append(\"strategy\", \"magic_link\");\n form.append(\"email\", email);\n\n const response = await client(\"/auth/signin\", {\n method: \"POST\",\n body: form,\n });\n const result = await responseMapper<Session>(response);\n if (\"data\" in result && result.data?.signin_attempts?.length) {\n setSignInAttempt(result.data.signin_attempts.at(-1) || null);\n setError(null);\n } else {\n setError(result);\n }\n return result;\n };\n}\n\nfunction builderOauth(\n client: Client,\n setError: (error: ApiResult<unknown, ErrorInterface> | null) => void,\n): SignInOauth {\n return async ({\n provider,\n redirectUri,\n }: {\n provider: OAuthProvider;\n redirectUri?: string;\n }) => {\n const params = new URLSearchParams({ provider });\n if (redirectUri) {\n params.append(\"redirect_uri\", redirectUri);\n }\n\n const response = await client(`/auth/oauth2/init?${params.toString()}`, {\n method: \"POST\",\n });\n const result = await responseMapper<InitSSOResponseType>(response);\n if (\"data\" in result) {\n setError(null);\n if (result.data.oauth_url) {\n window.location.href = result.data.oauth_url;\n }\n } else {\n setError(result);\n }\n return result;\n };\n}\n\nfunction builderGeneric(\n client: Client,\n setSignInAttempt: (attempt: SigninAttempt | null) => void,\n setError: (error: ApiResult<unknown, ErrorInterface> | null) => void,\n): SignInGeneric {\n return async ({\n email,\n username,\n password,\n phone,\n strategy,\n }: GenericSignInParams) => {\n const form = new FormData();\n\n if (strategy) {\n form.append(\"strategy\", strategy);\n }\n if (email) form.append(\"email\", email);\n if (username) form.append(\"username\", username);\n if (password) form.append(\"password\", password);\n if (phone) form.append(\"phone\", phone);\n\n const response = await client(\"/auth/signin\", {\n method: \"POST\",\n body: form,\n });\n const result = await responseMapper<Session>(response);\n if (\"data\" in result && result.data?.signin_attempts?.length) {\n setSignInAttempt(result.data.signin_attempts.at(-1) || null);\n setError(null);\n } else {\n setError(result);\n }\n return result as ApiResult<Session>;\n };\n}\n\nexport function useSignIn(): UseSignInReturnType {\n const { client, loading } = useClient();\n const [signinAttempt, setSignInAttempt] = useState<SigninAttempt | null>(\n null,\n );\n const [error, setError] = useState<ApiResult<unknown, ErrorInterface> | null>(\n null,\n );\n\n if (loading) {\n return {\n loading: true,\n signIn: null as never,\n signinAttempt: null,\n discardSignInAttempt: () => {\n setSignInAttempt(null);\n setError(null);\n },\n setSignInAttempt,\n error: null,\n } as UseSignInReturnType;\n }\n\n return {\n loading: false,\n signinAttempt,\n signIn: {\n createStrategy: builder(client, setSignInAttempt, setError),\n completeVerification: async (verificationCode: string) => {\n const form = new FormData();\n form.append(\"verification_code\", verificationCode);\n\n const response = await client(\n `/auth/attempt-verification?attempt_identifier=${signinAttempt?.id}&identifier_type=signin`,\n {\n method: \"POST\",\n body: form,\n },\n );\n\n const result = await responseMapper<Session>(response);\n if (\"data\" in result && result.data?.signin_attempts?.length) {\n const latestAttempt = result.data.signin_attempts.at(-1);\n setSignInAttempt(latestAttempt || null);\n setError(null);\n return result.data;\n } else if (\"errors\" in result) {\n setError(result);\n throw new Error(result.errors?.[0]?.message || \"Verification failed\");\n } else {\n throw new Error(\"Verification failed\");\n }\n },\n prepareVerification: async (params: VerificationParams) => {\n const url = new URL(\n `/auth/prepare-verification`,\n window.location.origin,\n );\n url.searchParams.set(\n \"attempt_identifier\",\n signinAttempt?.id?.toString() || \"\",\n );\n url.searchParams.set(\"strategy\", params.strategy);\n url.searchParams.set(\"identifier_type\", \"signin\");\n\n if (params.strategy === \"phone_otp\" && params.lastDigits) {\n url.searchParams.set(\"last_digits\", params.lastDigits);\n } else if (params.strategy === \"email_otp\" && params.redirectUri) {\n url.searchParams.set(\"redirect_uri\", params.redirectUri);\n } else if (params.strategy === \"magic_link\" && params.redirectUri) {\n url.searchParams.set(\"redirect_uri\", params.redirectUri);\n }\n\n const response = await client(url.pathname + url.search, {\n method: \"POST\",\n });\n\n return responseMapper(response) as Promise<\n ApiResult<PrepareVerificationResponse>\n >;\n },\n completeProfile: async (data: ProfileCompletionData) => {\n if (!signinAttempt) {\n throw new Error(\"No signin attempt found\");\n }\n\n const form = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (value) {\n form.append(key, value);\n }\n }\n\n const response = await client(\n `/auth/complete-profile?attempt_id=${signinAttempt.id}`,\n {\n method: \"POST\",\n body: form,\n },\n );\n\n const result = await responseMapper<Session>(response);\n if (\"data\" in result && result.data) {\n // Update signin attempt with the latest from the session\n const latestAttempt = result.data.signin_attempts?.find(\n (a) => a.id === signinAttempt.id,\n );\n if (latestAttempt) {\n setSignInAttempt(latestAttempt);\n }\n setError(null);\n return result.data;\n } else {\n throw new Error(\"Profile completion failed\");\n }\n },\n },\n discardSignInAttempt: () => {\n setSignInAttempt(null);\n setError(null);\n },\n setSignInAttempt,\n error,\n };\n}\n\ntype SignInFunction<T extends SignInStrategy> = {\n [SignInStrategy.Username]: SignInPlainUsername;\n [SignInStrategy.Email]: SignInPlainEmail;\n [SignInStrategy.Phone]: SignInPhone;\n [SignInStrategy.EmailOTP]: SignInEmailOTP;\n [SignInStrategy.MagicLink]: SignInMagicLink;\n [SignInStrategy.Oauth]: SignInOauth;\n [SignInStrategy.Generic]: SignInGeneric;\n}[T];\n\nexport type UseSignInWithStrategyReturnType<T extends SignInStrategy> =\n | {\n loading: true;\n signIn: never;\n signinAttempt: null;\n discardSignInAttempt: () => void;\n setSignInAttempt: (attempt: SigninAttempt | null) => void;\n error: null;\n }\n | {\n loading: false;\n signIn: {\n create: SignInFunction<T>;\n completeVerification: (verificationCode: string) => Promise<Session>;\n prepareVerification: (\n params: VerificationParams,\n ) => Promise<ApiResult<PrepareVerificationResponse>>;\n completeProfile: (data: ProfileCompletionData) => Promise<Session>;\n };\n signinAttempt: SigninAttempt | null;\n discardSignInAttempt: () => void;\n setSignInAttempt: (attempt: SigninAttempt | null) => void;\n error: ApiResult<unknown, ErrorInterface> | null;\n };\n\nexport function useSignInWithStrategy<T extends SignInStrategy>(\n strategy: T,\n): UseSignInWithStrategyReturnType<T> {\n const {\n loading,\n signIn,\n signinAttempt,\n discardSignInAttempt,\n setSignInAttempt,\n error,\n } = useSignIn();\n\n if (loading) {\n return {\n loading: true,\n signIn: null as never,\n signinAttempt: null,\n discardSignInAttempt,\n setSignInAttempt,\n error: null,\n } as UseSignInWithStrategyReturnType<T>;\n }\n\n const strategyFunction = (() => {\n switch (strategy) {\n case SignInStrategy.Username:\n return signIn.createStrategy(SignInStrategy.Username);\n case SignInStrategy.Email:\n return signIn.createStrategy(SignInStrategy.Email);\n case SignInStrategy.Phone:\n return signIn.createStrategy(SignInStrategy.Phone);\n case SignInStrategy.EmailOTP:\n return signIn.createStrategy(SignInStrategy.EmailOTP);\n case SignInStrategy.MagicLink:\n return signIn.createStrategy(SignInStrategy.MagicLink);\n case SignInStrategy.Oauth:\n return signIn.createStrategy(SignInStrategy.Oauth);\n case SignInStrategy.Generic:\n return signIn.createStrategy(SignInStrategy.Generic);\n default:\n throw new Error(\"Invalid sign-in strategy\");\n }\n })();\n\n return {\n loading: false,\n signinAttempt,\n signIn: {\n create: strategyFunction,\n completeVerification: signIn.completeVerification,\n prepareVerification: signIn.prepareVerification,\n completeProfile: signIn.completeProfile,\n },\n discardSignInAttempt,\n setSignInAttempt,\n error,\n } as UseSignInWithStrategyReturnType<T>;\n}\n","import { ApiResult, Client } from \"@/types\";\nimport { ErrorInterface } from \"@/types\";\nimport { responseMapper } from \"../utils/response-mapper\";\nimport { useClient } from \"./use-client\";\nimport { useState } from \"react\";\nimport { Session, SignupAttempt } from \"@/types\";\nimport { SignUpParams } from \"@/types\";\n\nexport interface DeploymentInvitationData {\n valid: boolean;\n first_name?: string;\n last_name?: string;\n email?: string;\n message?: string;\n error_code?: string;\n}\n\nexport type SignUpFunction = {\n create: (params: SignUpParams) => Promise<ApiResult<unknown, ErrorInterface>>;\n prepareVerification: (\n params: SignupVerificationParams,\n ) => Promise<ApiResult<PrepareVerificationResponse>>;\n completeVerification: (verificationCode: string) => Promise<ApiResult<Session>>;\n validateDeploymentInvitation: (token: string) => Promise<DeploymentInvitationData>;\n};\n\nexport type SignupVerificationStrategy = \"email_otp\" | \"phone_otp\";\n\ntype SignupEmailOTPVerificationParams = {\n strategy: \"email_otp\";\n redirectUri?: string;\n};\n\ntype SignupPhoneOTPVerificationParams = {\n strategy: \"phone_otp\";\n lastDigits?: string;\n};\n\ntype SignupVerificationParams =\n | SignupEmailOTPVerificationParams\n | SignupPhoneOTPVerificationParams;\n\n// Response type for prepareVerification\ntype PrepareVerificationResponse = {\n otp_sent?: boolean;\n masked_phone?: string;\n masked_email?: string;\n verification_method?: string;\n};\n\nexport type UseSignUpReturnType =\n | {\n loading: true;\n signUp: never;\n signupAttempt: null;\n discardSignupAttempt: () => void;\n errors: null;\n }\n | {\n loading: false;\n signUp: SignUpFunction;\n signupAttempt: SignupAttempt | null;\n discardSignupAttempt: () => void;\n errors: ApiResult<unknown, ErrorInterface> | null;\n };\n\nfunction builder(\n client: Client,\n signupAttempt: SignupAttempt | null,\n setSignUpAttempt: (attempt: SignupAttempt | null) => void,\n setErrors: (errors: ApiResult<unknown, ErrorInterface> | null) => void,\n): SignUpFunction {\n return {\n create: async (params: SignUpParams) => {\n const form = new FormData();\n for (const [key, value] of Object.entries(params)) {\n form.append(key, value);\n }\n const response = await client(\"/auth/signup\", {\n method: \"POST\",\n body: form,\n });\n const result = await responseMapper<Session>(response);\n if (\"data\" in result && result.data?.signup_attempts?.length) {\n setSignUpAttempt(result.data.signup_attempts?.at(-1) || null);\n setErrors(null);\n } else {\n setErrors(result);\n }\n return result;\n },\n prepareVerification: async (params: SignupVerificationParams) => {\n const url = new URL(`/auth/prepare-verification`, window.location.origin);\n url.searchParams.set(\n \"attempt_identifier\",\n signupAttempt?.id?.toString() || \"\",\n );\n url.searchParams.set(\"strategy\", params.strategy);\n url.searchParams.set(\"identifier_type\", \"signup\");\n\n // Handle parameters based on strategy type\n if (params.strategy === \"phone_otp\" && params.lastDigits) {\n url.searchParams.set(\"last_digits\", params.lastDigits);\n } else if (params.strategy === \"email_otp\" && params.redirectUri) {\n url.searchParams.set(\"redirect_uri\", params.redirectUri);\n }\n\n const response = await client(url.pathname + url.search, {\n method: \"POST\",\n });\n\n return responseMapper(response) as Promise<\n ApiResult<PrepareVerificationResponse>\n >;\n },\n completeVerification: async (verificationCode: string) => {\n const form = new FormData();\n form.append(\"verification_code\", verificationCode);\n\n const response = await client(\n `/auth/attempt-verification?attempt_identifier=${signupAttempt?.id}&identifier_type=signup`,\n {\n method: \"POST\",\n body: form,\n },\n );\n \n const result = await responseMapper<Session>(response);\n if (\"data\" in result && result.data?.signup_attempts?.length) {\n setSignUpAttempt(result.data.signup_attempts.at(-1) || null);\n setErrors(null);\n } else if (\"errors\" in result) {\n setErrors(result);\n throw new Error(result.errors?.[0]?.message || \"Verification failed\");\n }\n return result;\n },\n validateDeploymentInvitation: async (token: string) => {\n try {\n const response = await client(`/deployment/invitations/validate?token=${encodeURIComponent(token)}`, {\n method: \"GET\",\n });\n\n const result = await responseMapper<DeploymentInvitationData>(response);\n\n if (\"data\" in result && result.data) {\n return result.data;\n } else {\n return {\n valid: false,\n message: \"Failed to validate invitation\",\n error_code: \"VALIDATION_ERROR\",\n };\n }\n } catch (err: any) {\n return {\n valid: false,\n message: err.message || \"Failed to validate invitation\",\n error_code: \"NETWORK_ERROR\",\n };\n }\n },\n };\n}\n\nexport function useSignUp(): UseSignUpReturnType {\n const { client, loading } = useClient();\n const [signupAttempt, setSignupAttempt] = useState<SignupAttempt | null>(\n null,\n );\n const [errors, setErrors] = useState<ApiResult<\n unknown,\n ErrorInterface\n > | null>(null);\n\n if (loading) {\n return {\n loading: true,\n signUp: null as never,\n signupAttempt: null,\n discardSignupAttempt: () => {\n setSignupAttempt(null);\n setErrors(null);\n },\n errors: null,\n };\n }\n\n return {\n loading: false,\n signupAttempt,\n discardSignupAttempt: () => {\n setSignupAttempt(null);\n setErrors(null);\n },\n signUp: builder(client, signupAttempt, setSignupAttempt, setErrors),\n errors,\n };\n}\n","import { useDeployment } from \"./use-deployment\";\nimport type { NavigateOptions } from \"@/types/platform-adapter\";\n\nexport const useNavigation = () => {\n const { adapter, deployment } = useDeployment();\n\n const platformNavigate = adapter.useNavigate();\n\n const navigate = (to: string, options?: NavigateOptions) => {\n if (platformNavigate) {\n platformNavigate(to, options);\n } else {\n window.location.href = to;\n }\n };\n\n const navigateToSignIn = (redirectUri?: string) => {\n if (!deployment) return;\n\n const currentHost = redirectUri || window.location.href;\n const params = new URLSearchParams();\n params.set(\"redirect_uri\", currentHost);\n\n if (deployment?.mode === \"staging\") {\n params.set(\"dev_session\", localStorage.getItem(\"__dev_session__\") ?? \"\");\n }\n\n navigate(\n `${deployment.ui_settings.sign_in_page_url}?${params.toString()}`,\n { replace: true },\n );\n };\n\n const navigateToSignUp = (redirectUri?: string) => {\n if (!deployment) return;\n\n const currentHost = redirectUri || window.location.href;\n const params = new URLSearchParams();\n params.set(\"redirect_uri\", currentHost);\n\n if (deployment?.mode === \"staging\") {\n params.set(\"dev_session\", localStorage.getItem(\"__dev_session__\") ?? \"\");\n }\n\n navigate(\n `${deployment.ui_settings.sign_up_page_url}?${params.toString()}`,\n { replace: true },\n );\n };\n\n return {\n navigate,\n navigateToSignIn,\n navigateToSignUp,\n };\n};\n","import { responseMapper } from \"../utils/response-mapper\";\nimport { useClient } from \"./use-client\";\nimport useSWR from \"swr\";\nimport { useCallback } from \"react\";\nimport { ApiResult } from \"@/types\";\nimport { Session, SessionToken } from \"@/types\";\nimport { Client } from \"@/types\";\nimport { useDeployment } from \"./use-deployment\";\nimport { useNavigation } from \"./use-navigation\";\n\ntype UseSessionReturnType =\n | {\n loading: true;\n session: never;\n switchSignIn: never;\n switchOrganization: never;\n switchWorkspace: never;\n signOut: never;\n getToken: never;\n addNewAccount: never;\n error: Error | null;\n refetch: () => Promise<void>;\n }\n | {\n loading: false;\n error: Error | null;\n session: Session;\n switchSignIn: (signInId: string) => Promise<void>;\n signOut: (signInId?: string) => Promise<void>;\n getToken: (template?: string) => Promise<string>;\n switchOrganization: (organizationId?: string) => Promise<void>;\n switchWorkspace: (workspaceId: string) => Promise<void>;\n addNewAccount: () => void;\n refetch: () => Promise<void>;\n };\n\nasync function fetchSession(client: Client): Promise<Session> {\n const response = await client(\"/session\", {\n method: \"GET\",\n });\n const responseParsed = await responseMapper<Session>(response);\n return responseParsed.data;\n}\n\nasync function switchSignIn(\n client: Client,\n signInId: string\n): Promise<ApiResult<Session>> {\n const response = await client(\n `/session/switch-sign-in?sign_in_id=${signInId}`,\n {\n method: \"POST\",\n }\n );\n return responseMapper(response);\n}\n\nasync function signOut(\n client: Client,\n signInId?: string\n): Promise<ApiResult<Session>> {\n const url = signInId\n ? `/session/sign-out?sign_in_id=${signInId}`\n : \"/session/sign-out\";\n const response = await client(url, {\n method: \"POST\",\n });\n return responseMapper(response);\n}\n\nasync function switchOrganization(\n client: Client,\n organizationId?: string\n): Promise<ApiResult<Session>> {\n const response = await client(\n `/session/switch-organization${\n organizationId ? `?organization_id=${organizationId}` : \"\"\n }`,\n {\n method: \"POST\",\n }\n );\n return responseMapper(response);\n}\n\nasync function switchWorkspace(\n client: Client,\n workspaceId: string\n): Promise<ApiResult<Session>> {\n const response = await client(\n `/session/switch-workspace?workspace_id=${workspaceId}`,\n {\n method: \"POST\",\n }\n );\n return responseMapper(response);\n}\n\nconst tokenSingletonMap = new Map<string, SessionToken>();\nconst fetchSingleton = new Map<string, Promise<ApiResult<SessionToken>>>();\n\nasync function getSessionToken(\n client: Client,\n template?: string\n): Promise<ApiResult<SessionToken>> {\n const response = await client(\n `/session/token${template ? `?template=${template}` : \"\"}`\n );\n return responseMapper(response);\n}\n\nexport function useSession(): UseSessionReturnType {\n const { client, loading } = useClient();\n const { deployment } = useDeployment();\n const { navigate } = useNavigation();\n const {\n data: session,\n error,\n mutate,\n isLoading,\n } = useSWR(!loading ? \"/session\" : null, () => fetchSession(client), {\n refreshInterval: 30000,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n dedupingInterval: 5000,\n });\n\n const refetch = useCallback(async () => {\n await mutate();\n }, [mutate]);\n\n const getToken = useCallback(\n async (template: string = \"default\") => {\n if (!session) throw new Error(\"no session\");\n const existingToken = tokenSingletonMap.get(template);\n if (existingToken && existingToken.expires > Date.now()) {\n return existingToken?.token || \"\";\n }\n if (!fetchSingleton.get(template)) {\n fetchSingleton.set(template, getSessionToken(client));\n }\n const data = await fetchSingleton.get(template)!;\n fetchSingleton.delete(template);\n if (data.errors?.length) {\n throw new Error(data.errors[0].message);\n }\n tokenSingletonMap.set(template, data.data);\n return data.data.token;\n },\n [client, session?.active_signin]\n );\n\n const addNewAccount = useCallback(() => {\n if (!deployment) return;\n\n const signinLink = deployment.ui_settings.sign_in_page_url;\n\n const currentHost = window.location.href;\n const url = new URL(signinLink);\n url.searchParams.set(\"redirect_uri\", currentHost);\n\n if (deployment.mode === \"staging\") {\n const devSession = localStorage.getItem(\"__dev_session__\");\n if (devSession) {\n url.searchParams.set(\"dev_session\", devSession);\n }\n }\n\n navigate(url.toString());\n }, [deployment, navigate]);\n\n if (loading || !session || isLoading) {\n return {\n loading: true,\n error,\n session: null as never,\n switchSignIn: null as never,\n switchOrganization: null as never,\n switchWorkspace: null as never,\n signOut: null as never,\n getToken: null as never,\n addNewAccount: null as never,\n refetch,\n };\n }\n\n return {\n loading: isLoading,\n error,\n session,\n switchSignIn: async (signInId: string) => {\n await switchSignIn(client, signInId);\n await mutate();\n },\n signOut: async (signInId?: string) => {\n await signOut(client, signInId);\n await mutate();\n \n if (deployment?.ui_settings) {\n if (signInId && deployment.ui_settings.after_sign_out_one_page_url) {\n navigate(deployment.ui_settings.after_sign_out_one_page_url);\n } else if (!signInId && deployment.ui_settings.after_sign_out_all_page_url) {\n navigate(deployment.ui_settings.after_sign_out_all_page_url);\n }\n }\n },\n switchOrganization: async (organizationId?: string) => {\n await switchOrganization(client, organizationId);\n await mutate();\n },\n switchWorkspace: async (workspaceId: string) => {\n await switchWorkspace(client, workspaceId);\n await mutate();\n },\n getToken,\n addNewAccount,\n refetch,\n };\n}\n","import { useClient } from \"@/hooks/use-client\";\nimport useSWR from \"swr\";\nimport { responseMapper } from \"@/utils/response-mapper\";\nimport {\n CurrentUser,\n UserAuthenticator,\n UserEmailAddress,\n UserPhoneNumber,\n} from \"@/types\";\nimport { Client } from \"@/types\";\nimport { SignIn } from \"@/types\";\n\ntype SecondFactorPolicy = \"none\" | \"optional\" | \"enforced\";\n\ninterface ProfileUpdateData {\n first_name?: string;\n last_name?: string;\n username?: string;\n primary_email_address_id?: string;\n primary_phone_number_id?: string;\n second_factor_policy?: SecondFactorPolicy;\n remove_profile_picture?: boolean;\n}\n\nconst fetchUser = async (client: Client) => {\n const response = await responseMapper<CurrentUser>(await client(\"/me\"));\n return response.data;\n};\n\nconst fetchUserSignins = async (client: Client) => {\n const response = await responseMapper<SignIn[]>(await client(\"/me/signins\"));\n return response.data;\n};\n\nexport function useUser() {\n const { client, loading } = useClient();\n const {\n data: user,\n error,\n isLoading,\n mutate,\n } = useSWR(loading ? null : \"/user\", () => fetchUser(client));\n\n const updateProfile = async (data: ProfileUpdateData) => {\n const form = new FormData();\n for (const [key, value] of Object.entries(data)) {\n if (value !== undefined && value !== null && value !== \"\") {\n form.append(key, String(value));\n }\n }\n\n const response = await responseMapper(\n await client(\"/me\", {\n method: \"POST\",\n body: form,\n })\n );\n mutate();\n return response;\n };\n\n const getEmailAddresses = async () => {\n const response = await responseMapper(\n await client(\"/me/email-addresses\", {\n method: \"GET\",\n })\n );\n return response;\n };\n\n const getEmailAddress = async (id: string) => {\n const response = await responseMapper(\n await client(`/me/email-addresses/${id}`, {\n method: \"GET\",\n })\n );\n return response;\n };\n\n const createEmailAddress = async (email: string) => {\n const form = new FormData();\n form.append(\"email\", email);\n\n const response = await responseMapper<UserEmailAddress>(\n await client(\"/me/email-addresses\", {\n method: \"POST\",\n body: form,\n })\n );\n return response;\n };\n\n const deleteEmailAddress = async (id: string) => {\n const response = await responseMapper(\n await client(`/me/email-addresses/${id}/delete`, {\n method: \"POST\",\n })\n );\n return response;\n };\n\n const prepareEmailVerification = async (id: string) => {\n const response = await responseMapper(\n await client(`/me/email-addresses/${id}/prepare-verification`, {\n method: \"POST\",\n })\n );\n return response;\n };\n\n const attemptEmailVerification = async (id: string, otp: string) => {\n const response = await responseMapper(\n await client(\n `/me/email-addresses/${id}/attempt-verification?code=${otp}`,\n {\n method: \"POST\",\n }\n )\n );\n return response;\n };\n\n const createPhoneNumber = async (phone_number: string, country_code: string) => {\n const form = new FormData();\n form.append(\"phone_number\", phone_number);\n form.append(\"country_code\", country_code);\n\n const response = await responseMapper<UserPhoneNumber>(\n await client(\"/me/phone-numbers\", {\n method: \"POST\",\n body: form,\n })\n );\n return response;\n };\n\n const deletePhoneNumber = async (id: string) => {\n const response = await responseMapper(\n await client(`/me/phone-numbers/${id}/delete`, {\n method: \"POST\",\n })\n );\n return response;\n };\n\n const preparePhoneVerification = async (id: string) => {\n const response = await responseMapper(\n await client(`/me/phone-numbers/${id}/prepare-verification`, {\n method: \"POST\",\n })\n );\n return response;\n };\n\n const attemptPhoneVerification = async (id: string, otp: string) => {\n const form = new FormData();\n form.append(\"code\", otp);\n \n const response = await responseMapper(\n await client(`/me/phone-numbers/${id}/attempt-verification`, {\n method: \"POST\",\n body: form,\n })\n );\n return response;\n };\n\n const makePhonePrimary = async (id: string) => {\n const response = await responseMapper(\n await client(`/me/phone-numbers/${id}/make-primary`, {\n method: \"POST\",\n })\n );\n mutate();\n return response;\n };\n\n const makeEmailPrimary = async (id: string) => {\n const response = await responseMapper(\n await client(`/me/email-addresses/${id}/make-primary`, {\n method: \"POST\",\n })\n );\n return response;\n };\n\n const setupAuthenticator = async () => {\n const response = await responseMapper<UserAuthenticator>(\n await client(\"/me/authenticator\", {\n method: \"POST\",\n })\n );\n return response.data;\n };\n\n const verifyAuthenticator = async (id: string, codes: string[]) => {\n const form = new FormData();\n form.append(\"authenticator_id\", id);\n codes.forEach((code) => {\n form.append(\"codes\", code);\n });\n\n const response = await responseMapper(\n await client(\"/me/authenticator/attempt-verification\", {\n method: \"POST\",\n body: form,\n })\n );\n return response;\n };\n\n const deleteAuthenticator = async (id: string) => {\n const response = await responseMapper(\n await client(`/me/authenticator/${id}/delete`, {\n method: \"POST\",\n })\n );\n return response;\n };\n\n const generateBackupCodes = async () => {\n const response = await responseMapper<string[]>(\n await client(\"/me/backup-codes\", {\n method: \"POST\",\n })\n );\n return response.data;\n };\n\n const updateProfilePicture = async (file: File) => {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const response = await responseMapper(\n await client(\"/me/profile-picture\", {\n method: \"POST\",\n body: formData,\n })\n );\n return response;\n };\n\n const regenerateBackupCodes = async () => {\n const response = await responseMapper<string[]>(\n await client(\"/me/backup-codes/regenerate\", {\n method: \"POST\",\n })\n );\n return response.data;\n };\n\n const updatePassword = async (\n currentPassword: string,\n newPassword: string\n ) => {\n const form = new FormData();\n form.append(\"current_password\", currentPassword);\n form.append(\"new_password\", newPassword);\n\n const response = await responseMapper(\n await client(\"/me/update-password\", {\n method: \"POST\",\n body: form,\n })\n );\n return response;\n };\n\n const removePassword = async (currentPassword: string) => {\n const form = new FormData();\n form.append(\"current_password\", currentPassword);\n\n const response = await responseMapper(\n await client(\"/me/remove-password\", {\n method: \"POST\",\n body: form,\n })\n );\n mutate(); // Refresh user data after removing password\n return response;\n };\n\n const deleteAccount = async (password: string) => {\n const form = new FormData();\n form.append(\"password\", password);\n\n const response = await responseMapper(\n await client(\"/me/account/delete\", {\n method: \"POST\",\n body: form,\n })\n );\n return response;\n };\n\n const disconnectSocialConnection = async (id: string) => {\n const response = await responseMapper(\n await client(`/me/social-connections/${id}/disconnect`, {\n method: \"POST\",\n })\n );\n return response;\n };\n\n const connectSocialAccount = async ({ provider, redirectUri }: { provider: string; redirectUri?: string }) => {\n const params = new URLSearchParams({ provider });\n if (redirectUri) {\n params.append(\"redirect_uri\", redirectUri);\n }\n \n const response = await responseMapper<{ oauth_url: string }>(\n await client(`/me/init-sso-connection?${params.toString()}`, {\n method: \"POST\",\n })\n );\n \n if (\"data\" in response && response.data?.oauth_url) {\n window.open(response.data.oauth_url, \"_blank\");\n }\n \n return response;\n };\n\n return {\n user: {\n ...user,\n refetch: mutate,\n },\n loading: loading || isLoading,\n error: error || null,\n updateProfile,\n getEmailAddresses,\n getEmailAddress,\n createEmailAddress,\n deleteEmailAddress,\n prepareEmailVerification,\n attemptEmailVerification,\n makeEmailPrimary,\n createPhoneNumber,\n deletePhoneNumber,\n preparePhoneVerification,\n attemptPhoneVerification,\n makePhonePrimary,\n setupAuthenticator,\n verifyAuthenticator,\n deleteAuthenticator,\n generateBackupCodes,\n regenerateBackupCodes,\n updateProfilePicture,\n disconnectSocialConnection,\n connectSocialAccount,\n updatePassword,\n removePassword,\n deleteAccount,\n };\n}\n\nexport function useUserSignins() {\n const { client, loading } = useClient();\n const { data: signins, error, isLoading, mutate } = useSWR(\n loading ? null : \"/me/signins\",\n () => fetchUserSignins(client)\n );\n\n const removeSignin = async (id: string) => {\n const response = await responseMapper(\n await client(`/me/signins/${id}/signout`, {\n method: \"POST\",\n })\n );\n return response;\n };\n\n return {\n signins,\n error: error || null,\n removeSignin,\n refetch: mutate,\n loading: isLoading || loading,\n };\n}\n","export type Client = (\n url: URL | string,\n options?: RequestInit\n) => Promise<Response>;\n\nexport type ClinetReponse<T> = {\n status: number;\n message: string;\n data: T;\n};\n\nexport type ErrorInterface = {\n message: string;\n code: ErrorCode;\n};\n\nexport enum ErrorCode {\n Unknown = \"unknown\",\n UserNotFound = \"USER_NOT_FOUND\",\n UserDisabled = \"USER_DISABLED\",\n MissingVerificationCode = \"missing_verification_code\",\n VerificationCodeExpired = \"verification_code_expired\",\n UsernameExists = \"USERNAME_EXISTS\",\n EmailExists = \"EMAIL_EXISTS\",\n InvalidCredentials = \"INVALID_CREDENTIALS\",\n UserAlreadySignedIn = \"USER_ALREADY_SIGNED_IN\",\n PhoneNumberExists = \"PHONE_NUMBER_EXISTS\",\n OauthCompletionFailed = \"OAUTH_COMPLETION_FAILED\",\n ProviderRequired = \"PROVIDER_REQUIRED\",\n CodeRequired = \"CODE_REQUIRED\",\n VerificationStrategyRequired = \"VERIFICATION_STRATEGY_REQUIRED\",\n InvalidState = \"INVALID_STATE\",\n InvalidCode = \"INVALID_CODE\",\n RequiredField = \"REQUIRED_FIELD\",\n BadRequestBody = \"BAD_REQUEST_BODY\",\n ProviderNotConfigured = \"PROVIDER_NOT_CONFIGURED\",\n SignupRestricted = \"SIGNUP_RESTRICTED\",\n SignupWaitlistOnly = \"SIGNUP_WAITLIST_ONLY\",\n EmailNotAllowed = \"EMAIL_NOT_ALLOWED\",\n EmailBlocked = \"EMAIL_BLOCKED\",\n DisposableEmailBlocked = \"DISPOSABLE_EMAIL_BLOCKED\",\n CountryRestricted = \"COUNTRY_RESTRICTED\",\n VoipNumberBlocked = \"VOIP_NUMBER_BLOCKED\",\n BannedKeyword = \"BANNED_KEYWORD\",\n NoAlternativeAuthMethod = \"NO_ALTERNATIVE_AUTH_METHOD\",\n Internal = \"INTERNAL\",\n BadSignInAttempt = \"BAD_SIGN_IN_ATTEMPT\",\n}\n\nexport type ResultInterface<T, E> =\n | {\n data: never;\n errors: E[];\n }\n | {\n data: T;\n errors: never;\n };\n\nexport type ApiResult<T, E = ErrorInterface> = ResultInterface<T, E>;\n","import { useState } from \"react\";\nimport { useClient } from \"./use-client\";\nimport { responseMapper } from \"../utils/response-mapper\";\nimport { type ApiResult, type ErrorInterface, ErrorCode } from \"@/types\";\n\nexport interface WaitlistParams {\n\tfirst_name: string;\n\tlast_name: string;\n\temail: string;\n}\n\nexport interface WaitlistEntry {\n\tid: string;\n\tdeployment_id: number;\n\temail_address: string;\n\tfirst_name: string;\n\tlast_name: string;\n\tcreated_at: string;\n\tupdated_at: string;\n}\n\nexport interface WaitlistResponse {\n\tmessage: string;\n\tentry: WaitlistEntry;\n}\n\nexport function useWaitlist() {\n\tconst { client, loading: clientLoading } = useClient();\n\tconst [loading, setLoading] = useState(false);\n\tconst [error, setError] = useState<ApiResult<\n\t\tunknown,\n\t\tErrorInterface\n\t> | null>(null);\n\n\tconst joinWaitlist = async (\n\t\tparams: WaitlistParams,\n\t): Promise<ApiResult<WaitlistResponse, ErrorInterface>> => {\n\t\tsetLoading(true);\n\t\tsetError(null);\n\n\t\ttry {\n\t\t\tconst form = new FormData();\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tif (value) {\n\t\t\t\t\tform.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst response = await client(\"/waitlist/join\", {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: form,\n\t\t\t});\n\n\t\t\tconst result = await responseMapper<WaitlistResponse>(response);\n\t\t\tsetError(result.errors ? result : null);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tconst errorResult: ApiResult<WaitlistResponse, ErrorInterface> = {\n\t\t\t\tdata: null as never,\n\t\t\t\terrors: [\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t\t: \"Failed to join waitlist\",\n\t\t\t\t\t\tcode: ErrorCode.Unknown,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t\tsetError(errorResult);\n\t\t\treturn errorResult;\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\n\tif (clientLoading) {\n\t\treturn {\n\t\t\tloading: true,\n\t\t\terror: null,\n\t\t\tjoinWaitlist: null as never,\n\t\t};\n\t}\n\n\treturn {\n\t\tloading,\n\t\terror,\n\t\tjoinWaitlist,\n\t};\n}\n","import useSWR from \"swr\";\nimport { useClient } from \"./use-client\";\nimport type { Client } from \"@/types\";\nimport type {\n NewDomain,\n NewOrgnization,\n Organization,\n OrganizationDomain,\n OrganizationInvitation,\n OrganizationInvitationPayload,\n OrganizationMembership,\n OrganizationMembershipWithOrganization,\n OrganizationRole,\n OrganizationUpdate,\n RoleCreate,\n} from \"@/types\";\nimport { responseMapper } from \"@/utils/response-mapper\";\nimport { useSession } from \"./use-session\";\nimport { useCallback, useMemo } from \"react\";\n\nexport const useOrganizationList = () => {\n const { organizationMemberships, refetch, loading } =\n useOrganizationMemberships();\n const { client } = useClient();\n const { refetch: refetchSession } = useSession();\n\n const getOrganizationRoles = useCallback(\n async (organization: Organization) => {\n const response = await responseMapper<OrganizationRole[]>(\n await client(`/organizations/${organization.id}/roles`, {\n method: \"GET\",\n })\n );\n return response.data;\n },\n [client]\n );\n\n const getOrganizationMembers = useCallback(\n async (organization: Organization) => {\n const response = await responseMapper<OrganizationMembership[]>(\n await client(`/organizations/${organization.id}/members`, {\n method: \"GET\",\n })\n );\n return response.data;\n },\n [client]\n );\n\n const getOrganizationInvitations = useCallback(\n async (organization: Organization) => {\n const response = await responseMapper<OrganizationInvitation[]>(\n await client(`/organizations/${organization.id}/invitations`, {\n method: \"GET\",\n })\n );\n return response.data;\n },\n [client]\n );\n\n const getOrganizationDomains = useCallback(\n async (organization: Organization) => {\n const response = await responseMapper<OrganizationDomain[]>(\n await client(`/organizations/${organization.id}/domains`, {\n method: \"GET\",\n })\n );\n return response.data;\n },\n [client]\n );\n\n const removeOrganizationMember = useCallback(\n async (organization: Organization, member: OrganizationMembership) => {\n await client(`/organizations/${organization.id}/members/${member.id}/remove`, {\n method: \"POST\",\n });\n await refetch();\n },\n [refetch, client]\n );\n\n const createOrganization = useCallback(\n async (organization: NewOrgnization) => {\n const formData = new FormData();\n formData.append(\"name\", organization.name);\n if (organization.image) {\n formData.append(\"image\", organization.image);\n }\n if (organization.description) {\n formData.append(\"description\", organization.description);\n }\n const response = await responseMapper<Organization>(\n await client(\"/organizations\", {\n method: \"POST\",\n body: formData,\n })\n );\n await refetch();\n await refetchSession();\n return response;\n },\n [refetchSession, refetch, client]\n );\n\n const updateOrganization = useCallback(\n async (organization: Organization, update: OrganizationUpdate) => {\n const form = Object.entries(update).reduce((prev, [key, value]) => {\n if (value) {\n prev.append(key, value);\n }\n return prev;\n }, new FormData());\n const response = await responseMapper<Organization>(\n await client(`/organizations/${organization.id}/update`, {\n method: \"POST\",\n body: form,\n })\n );\n await refetch();\n return response;\n },\n [refetch, client]\n );\n\n const removeOrganizationRoles = useCallback(\n async (organization: Organization, role: OrganizationRole) => {\n await client(`/organizations/${organization.id}/roles/${role.id}/remove`, {\n method: \"POST\",\n });\n },\n [client]\n );\n\n const addOrganizationDomain = useCallback(\n async (organization: Organization, domain: NewDomain) => {\n const form = new FormData();\n form.append(\"domain\", domain.fqdn);\n\n const response = await responseMapper<OrganizationDomain>(\n await client(`/organizations/${organization.id}/domains`, {\n method: \"POST\",\n body: form,\n })\n );\n\n return response;\n },\n [client]\n );\n\n const verifyOrganizationDomain = useCallback(\n async (organization: Organization, domain: OrganizationDomain) => {\n const response = await responseMapper<OrganizationDomain>(\n await client(\n `/organizations/${organization.id}/domains/${domain.id}/verify`,\n {\n method: \"POST\",\n }\n )\n );\n\n return response;\n },\n [client]\n );\n\n const removeOrganizationDomain = useCallback(\n async (organization: Organization, domain: OrganizationDomain) => {\n const response = await responseMapper<OrganizationDomain>(\n await client(`/organizations/${organization.id}/domains/${domain.id}/remove`, {\n method: \"POST\",\n })\n );\n\n return response;\n },\n [client]\n );\n\n const addRole = useCallback(\n async (organization: Organization, newRole: RoleCreate) => {\n const form = new FormData();\n form.append(\"name\", newRole.name);\n if (newRole.permissions) {\n newRole.permissions.forEach((permission, index) => {\n form.append(`permissions[${index}]`, permission);\n });\n }\n\n const response = await responseMapper<OrganizationRole>(\n await client(`/organizations/${organization.id}/roles`, {\n method: \"POST\",\n body: form,\n })\n );\n\n return response;\n },\n [client]\n );\n\n const leaveOrganization = useCallback(\n async (organization: Organization) => {\n const response = await responseMapper<void>(\n await client(`/organizations/${organization.id}/leave`, {\n method: \"POST\",\n })\n );\n return response.data;\n },\n [client]\n );\n\n const deleteOrganization = useCallback(\n async (organization: Organization) => {\n const response = await responseMapper<void>(\n await client(`/organizations/${organization.id}/delete`, {\n method: \"POST\",\n })\n );\n return response.data;\n },\n [client]\n );\n\n const addRoleToOrganizationMember = useCallback(\n async (\n organization: Organization,\n member: OrganizationMembership,\n role: OrganizationRole\n ) => {\n const response = await responseMapper<OrganizationMembership>(\n await client(\n `/organizations/${organization.id}/members/${member.id}/roles/${role.id}/add`,\n {\n method: \"POST\",\n }\n )\n );\n return response.data;\n },\n [client]\n );\n\n const removeRoleFromOrganizationMember = useCallback(\n async (\n organization: Organization,\n member: OrganizationMembership,\n role: OrganizationRole\n ) => {\n const response = await responseMapper<OrganizationMembership>(\n await client(\n `/organizations/${organization.id}/members/${member.id}/roles/${role.id}/remove`,\n {\n method: \"POST\",\n }\n )\n );\n return response.data;\n },\n [client]\n );\n\n const inviteOrganizationMember = useCallback(\n async (\n organization: Organization,\n invitation: OrganizationInvitationPayload\n ) => {\n const form = new FormData();\n form.append(\"email\", invitation.email);\n form.append(\"role_id\", invitation.organizationRole.id);\n if (invitation.workspace?.id) {\n form.append(\"workspace_id\", invitation.workspace.id);\n }\n if (invitation.workspaceRole?.id) {\n form.append(\"workspace_role_id\", invitation.workspaceRole.id);\n }\n\n const response = await responseMapper<OrganizationInvitation>(\n await client(`/organizations/${organization.id}/invitations`, {\n method: \"POST\",\n body: form,\n })\n );\n return response.data;\n },\n [client]\n );\n\n const discardOrganizationInvitation = useCallback(\n async (organization: Organization, invitation: OrganizationInvitation) => {\n const response = await responseMapper<OrganizationInvitation>(\n await client(\n `/organizations/${organization.id}/invitations/${invitation.id}/remove`,\n {\n method: \"POST\",\n }\n )\n );\n return response.data;\n },\n [client]\n );\n\n const resendOrganizationInvitation = useCallback(\n async (organization: Organization, invitation: OrganizationInvitation) => {\n const response = await responseMapper<OrganizationInvitation>(\n await client(\n `/organizations/${organization.id}/invitations/${invitation.id}/resend`,\n {\n method: \"POST\",\n }\n )\n );\n return response.data;\n },\n [client]\n );\n\n const organizations = useMemo(() => {\n return organizationMemberships?.map(\n (membership) => membership.organization\n );\n }, [organizationMemberships]);\n\n return {\n organizations,\n loading,\n error: null,\n refetch,\n leaveOrganization,\n getOrganizationRoles,\n getOrganizationMembers,\n removeOrganizationMember,\n createOrganization,\n getOrganizationInvitations,\n getOrganizationDomains,\n addOrganizationDomain,\n verifyOrganizationDomain,\n removeOrganizationDomain,\n addRoleToOrganizationMember,\n removeRoleFromOrganizationMember,\n inviteOrganizationMember,\n discardOrganizationInvitation,\n resendOrganizationInvitation,\n updateOrganization,\n addRole,\n removeOrganizationRoles,\n deleteOrganization,\n };\n};\n\nexport const useActiveOrganization = () => {\n const {\n loading,\n error: organizationLoadingError,\n refetch: refetchOrganizations,\n getOrganizationMembers,\n getOrganizationRoles,\n leaveOrganization,\n removeOrganizationMember,\n getOrganizationInvitations,\n getOrganizationDomains,\n removeOrganizationDomain,\n addOrganizationDomain,\n verifyOrganizationDomain,\n addRoleToOrganizationMember,\n removeRoleFromOrganizationMember,\n inviteOrganizationMember,\n discardOrganizationInvitation,\n resendOrganizationInvitation,\n updateOrganization,\n removeOrganizationRoles,\n } = useOrganizationList();\n const {\n session,\n error: sessionLoadingError,\n loading: sessionLoading,\n } = useSession();\n const { organizationMemberships } = useOrganizationMemberships();\n\n const activeOrganization = useMemo(() => {\n return (\n organizationMemberships?.find(\n (organization) =>\n organization.id ===\n session?.active_signin?.active_organization_membership_id\n )?.organization || null\n );\n }, [organizationMemberships, session]);\n\n const updateActiveOrganization = useCallback(\n async (update: OrganizationUpdate) => {\n if (!activeOrganization) return [];\n const data = await updateOrganization(activeOrganization, update);\n return data;\n },\n [activeOrganization, updateOrganization]\n );\n\n const getCurrentOrganizationMembers = useCallback(async () => {\n if (!activeOrganization) return [];\n const data = await getOrganizationMembers(activeOrganization);\n return data;\n }, [activeOrganization, getOrganizationMembers]);\n\n const getCurrentOrganizationRoles = useCallback(async () => {\n if (!activeOrganization) return [];\n const data = await getOrganizationRoles(activeOrganization);\n return data;\n }, [activeOrganization, getOrganizationRoles]);\n\n const removeCurrentOrganizationMember = useCallback(\n async (member: OrganizationMembership) => {\n if (!activeOrganization) return [];\n const data = await removeOrganizationMember(activeOrganization, member);\n return data;\n },\n [activeOrganization, removeOrganizationMember]\n );\n\n const removeActiveOrganizationRole = useCallback(\n async (role: OrganizationRole) => {\n if (!activeOrganization) return;\n const data = await removeOrganizationRoles(activeOrganization, role);\n return data;\n },\n [activeOrganization, removeOrganizationRoles]\n );\n\n const getCurrentOrganizationDomains = useCallback(async () => {\n if (!activeOrganization) return [];\n const data = await getOrganizationDomains(activeOrganization);\n return data;\n }, [activeOrganization, getOrganizationDomains]);\n\n const addDomainToActiveOrganization = useCallback(\n async (domain: NewDomain) => {\n if (!activeOrganization) return;\n const data = await addOrganizationDomain(activeOrganization, domain);\n return data;\n },\n [activeOrganization, addOrganizationDomain]\n );\n\n const verifyActiveOrganizationDomain = useCallback(\n async (domain: OrganizationDomain) => {\n if (!activeOrganization) return;\n const data = await verifyOrganizationDomain(activeOrganization, domain);\n return data;\n },\n [activeOrganization, verifyOrganizationDomain]\n );\n\n const removeActiveOrganizationDomain = useCallback(\n async (domain: OrganizationDomain) => {\n if (!activeOrganization) return;\n\n const data = await removeOrganizationDomain(activeOrganization, domain);\n return data;\n },\n [activeOrganization, removeOrganizationDomain]\n );\n\n const addRoleToCurrentOrganizationMember = useCallback(\n async (member: OrganizationMembership, role: OrganizationRole) => {\n if (!activeOrganization) return;\n const data = await addRoleToOrganizationMember(\n activeOrganization,\n member,\n role\n );\n return data;\n },\n [activeOrganization, addRoleToOrganizationMember]\n );\n\n const removeRoleFromCurrentOrganizationMember = useCallback(\n async (member: OrganizationMembership, role: OrganizationRole) => {\n if (!activeOrganization) return;\n const data = await removeRoleFromOrganizationMember(\n activeOrganization,\n member,\n role\n );\n return data;\n },\n [activeOrganization, removeRoleFromOrganizationMember]\n );\n\n const inviteMemberToOrganization = useCallback(\n async (invitationPayload: OrganizationInvitationPayload) => {\n if (!activeOrganization) return;\n const data = await inviteOrganizationMember(\n activeOrganization,\n invitationPayload\n );\n return data;\n },\n [activeOrganization, inviteOrganizationMember]\n );\n\n const discardInvitationToOrganization = useCallback(\n async (invitation: OrganizationInvitation) => {\n if (!activeOrganization) return;\n const data = await discardOrganizationInvitation(\n activeOrganization,\n invitation\n );\n return data;\n },\n [activeOrganization, discardOrganizationInvitation]\n );\n\n const resendInvitationToOrganization = useCallback(\n async (invitation: OrganizationInvitation) => {\n if (!activeOrganization) return;\n const data = await resendOrganizationInvitation(\n activeOrganization,\n invitation\n );\n return data;\n },\n [activeOrganization, resendOrganizationInvitation]\n );\n\n const leaveCurrentOrganization = useCallback(async () => {\n if (!activeOrganization) return;\n await leaveOrganization(activeOrganization);\n }, [activeOrganization, leaveOrganization]);\n\n const getCurrentOrganizationInvitations = useCallback(async () => {\n if (!activeOrganization) return [];\n const data = await getOrganizationInvitations(activeOrganization);\n return data;\n }, [activeOrganization, getOrganizationInvitations]);\n\n if (sessionLoading || loading) {\n return {\n activeOrganization: null,\n loading: true,\n error: sessionLoadingError || organizationLoadingError,\n updateOrganization: null as never,\n getRoles: null as never,\n getMembers: null as never,\n getDomains: null as never,\n addDomain: null as never,\n verifyDomain: null as never,\n removeDomain: null as never,\n removeRole: null as never,\n getInvitations: null as never,\n removeMember: null as never,\n addMemberRole: null as never,\n removeMemberRole: null as never,\n inviteMember: null as never,\n discardInvitation: null as never,\n resendInvitation: null as never,\n leave: null as never,\n };\n }\n\n return {\n activeOrganization: activeOrganization,\n loading: false,\n refetch: refetchOrganizations,\n getRoles: getCurrentOrganizationRoles,\n updateOrganization: updateActiveOrganization,\n getMembers: getCurrentOrganizationMembers,\n getDomains: getCurrentOrganizationDomains,\n addDomain: addDomainToActiveOrganization,\n verifyDomain: verifyActiveOrganizationDomain,\n removeDomain: removeActiveOrganizationDomain,\n getInvitations: getCurrentOrganizationInvitations,\n removeMember: removeCurrentOrganizationMember,\n leave: leaveCurrentOrganization,\n removeRole: removeActiveOrganizationRole,\n addMemberRole: addRoleToCurrentOrganizationMember,\n removeMemberRole: removeRoleFromCurrentOrganizationMember,\n inviteMember: inviteMemberToOrganization,\n discardInvitation: discardInvitationToOrganization,\n resendInvitation: resendInvitationToOrganization,\n error: null,\n };\n};\n\nasync function fetchOrganizationMemberships(client: Client) {\n const response = await responseMapper<\n OrganizationMembershipWithOrganization[]\n >(await client(\"/me/organization-memberships\"));\n return response.data;\n}\n\nexport const useOrganizationMemberships = () => {\n const { client, loading } = useClient();\n\n const { data, isLoading, error, mutate } = useSWR(\n !loading ? \"/me/organization-memberships\" : null,\n () => fetchOrganizationMemberships(client),\n {\n refreshInterval: 30000,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n dedupingInterval: 5000,\n }\n );\n\n return {\n organizationMemberships: data,\n loading: loading || isLoading,\n error,\n refetch: mutate,\n };\n};\n","import { Client, Workspace, WorkspaceRole } from \"@/types\";\nimport { useClient } from \"./use-client\";\nimport useSWR from \"swr\";\nimport { responseMapper } from \"@/utils/response-mapper\";\nimport {\n WorkspaceMembership,\n WorkspaceWithOrganization,\n} from \"@/types\";\nimport { useCallback, useMemo } from \"react\";\nimport { useSession } from \"./use-session\";\n\nasync function fetchWorkspaceMemberships(client: Client) {\n const response = await responseMapper<WorkspaceMembership[]>(\n await client(\"/me/workspace-memberships\"),\n );\n return response.data;\n}\n\nasync function leaveWorkspace(\n client: Client,\n workspaceId: string,\n userId: string,\n) {\n const response = await responseMapper<void>(\n await client(`/workspaces/${workspaceId}/members/${userId}/remove`, {\n method: \"POST\",\n }),\n );\n return response.data;\n}\n\nexport const useWorkspaceMemberships = () => {\n const { client, loading: clientLoading } = useClient();\n\n const {\n data,\n isLoading: swrLoading,\n error,\n mutate,\n } = useSWR(\n !clientLoading ? \"/me/workspace-memberships\" : null,\n () => fetchWorkspaceMemberships(client),\n {\n refreshInterval: 30000,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n dedupingInterval: 5000,\n },\n );\n\n return {\n workspaceMemberships: data,\n loading: clientLoading || swrLoading,\n error,\n refetch: mutate,\n };\n};\n\nexport const useWorkspaceList = () => {\n const { workspaceMemberships, refetch, loading, error } =\n useWorkspaceMemberships();\n const { client } = useClient();\n\n const workspaces = useMemo(() => {\n return workspaceMemberships?.map((membership) => ({\n ...membership.workspace,\n organization: membership.organization,\n })) as WorkspaceWithOrganization[];\n }, [workspaceMemberships]);\n\n const createWorkspace = useCallback(\n async (\n organizationId: string,\n name: string,\n image?: File,\n description?: string,\n ) => {\n const formData = new FormData();\n formData.append(\"name\", name);\n if (image) {\n formData.append(\"image\", image);\n }\n if (description) {\n formData.append(\"description\", description);\n }\n formData.append(\"organization_id\", organizationId);\n const result = await client(\"/workspaces\", {\n method: \"POST\",\n body: formData,\n });\n await refetch();\n return result;\n },\n [client, refetch],\n );\n\n const leaveWorkspaceCallback = useCallback(\n async (id: string, userId: string) => {\n const result = await leaveWorkspace(client, id, userId);\n await refetch();\n return result;\n },\n [client, refetch],\n );\n \n const updateWorkspace = useCallback(\n async (workspace: Workspace, data: { name?: string; description?: string; image?: File }) => {\n const formData = new FormData();\n if (data.name) formData.append(\"name\", data.name);\n if (data.description) formData.append(\"description\", data.description);\n if (data.image) formData.append(\"image\", data.image);\n const response = await responseMapper(\n await client(`/workspaces/${workspace.id}/update`, {\n method: \"POST\",\n body: formData,\n }),\n );\n await refetch();\n return response.data;\n },\n [client, refetch],\n );\n \n const deleteWorkspace = useCallback(\n async (workspace: Workspace) => {\n const response = await responseMapper(\n await client(`/workspaces/${workspace.id}/delete`, {\n method: \"POST\",\n }),\n );\n await refetch();\n return response.data;\n },\n [client, refetch],\n );\n \n const getWorkspaceMembers = useCallback(\n async (workspace: Workspace) => {\n const response = await responseMapper<WorkspaceMembership[]>(\n await client(`/workspaces/${workspace.id}/members`, {\n method: \"GET\",\n }),\n );\n return response.data;\n },\n [client],\n );\n \n const getWorkspaceRoles = useCallback(\n async (workspace: Workspace) => {\n const response = await responseMapper<WorkspaceRole[]>(\n await client(`/workspaces/${workspace.id}/roles`, {\n method: \"GET\",\n }),\n );\n return response.data;\n },\n [client],\n );\n \n const createWorkspaceRole = useCallback(\n async (workspace: Workspace, name: string, permissions: string[]) => {\n const response = await responseMapper<WorkspaceRole>(\n await client(`/workspaces/${workspace.id}/roles`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ name, permissions }),\n }),\n );\n return response.data;\n },\n [client],\n );\n \n const deleteWorkspaceRole = useCallback(\n async (workspace: Workspace, role: WorkspaceRole) => {\n const response = await responseMapper(\n await client(`/workspaces/${workspace.id}/roles/${role.id}/delete`, {\n method: \"POST\",\n }),\n );\n return response.data;\n },\n [client],\n );\n \n const inviteWorkspaceMember = useCallback(\n async (workspace: Workspace, email: string, roleId?: string) => {\n const response = await responseMapper(\n await client(`/workspaces/${workspace.id}/members`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ email, role_id: roleId }),\n }),\n );\n return response.data;\n },\n [client],\n );\n \n const removeWorkspaceMember = useCallback(\n async (workspace: Workspace, memberId: string) => {\n const response = await responseMapper(\n await client(`/workspaces/${workspace.id}/members/${memberId}/remove`, {\n method: \"POST\",\n }),\n );\n await refetch();\n return response.data;\n },\n [client, refetch],\n );\n \n const addWorkspaceMemberRole = useCallback(\n async (workspace: Workspace, membershipId: string, roleId: string) => {\n const response = await responseMapper(\n await client(`/workspaces/${workspace.id}/members/${membershipId}/roles/${roleId}`, {\n method: \"POST\",\n }),\n );\n return response.data;\n },\n [client],\n );\n \n const removeWorkspaceMemberRole = useCallback(\n async (workspace: Workspace, membershipId: string, roleId: string) => {\n const response = await responseMapper(\n await client(`/workspaces/${workspace.id}/members/${membershipId}/roles/${roleId}/remove`, {\n method: \"POST\",\n }),\n );\n return response.data;\n },\n [client],\n );\n\n return {\n workspaces: workspaces || [],\n loading,\n error,\n refetch,\n leaveWorkspace: leaveWorkspaceCallback,\n createWorkspace,\n updateWorkspace,\n deleteWorkspace,\n getWorkspaceMembers,\n getWorkspaceRoles,\n createWorkspaceRole,\n deleteWorkspaceRole,\n inviteWorkspaceMember,\n removeWorkspaceMember,\n addWorkspaceMemberRole,\n removeWorkspaceMemberRole,\n };\n};\n\nexport const useActiveWorkspace = () => {\n const {\n refetch,\n loading,\n error: listError,\n leaveWorkspace: leaveWorkspaceFromList,\n updateWorkspace,\n deleteWorkspace,\n getWorkspaceMembers,\n getWorkspaceRoles,\n createWorkspaceRole,\n deleteWorkspaceRole,\n inviteWorkspaceMember,\n removeWorkspaceMember,\n addWorkspaceMemberRole,\n removeWorkspaceMemberRole,\n } = useWorkspaceList();\n const { workspaceMemberships } = useWorkspaceMemberships();\n const {\n session,\n loading: sessionLoading,\n error: sessionError,\n } = useSession();\n\n const activeWorkspace = useMemo(() => {\n return (\n workspaceMemberships?.find(\n (workspace) =>\n workspace.id ===\n session?.active_signin?.active_workspace_membership_id,\n )?.workspace || null\n );\n }, [workspaceMemberships, session]);\n\n const leaveCurrentWorkspace = useCallback(async () => {\n if (!activeWorkspace || !session?.active_signin?.user_id) return;\n return await leaveWorkspaceFromList(activeWorkspace.id, session.active_signin.user_id);\n }, [activeWorkspace, leaveWorkspaceFromList, session]);\n \n const updateCurrentWorkspace = useCallback(\n async (data: { name?: string; description?: string; image?: File }) => {\n if (!activeWorkspace) return;\n return await updateWorkspace(activeWorkspace, data);\n },\n [activeWorkspace, updateWorkspace]\n );\n \n const deleteCurrentWorkspace = useCallback(async () => {\n if (!activeWorkspace) return;\n return await deleteWorkspace(activeWorkspace);\n }, [activeWorkspace, deleteWorkspace]);\n \n const getCurrentWorkspaceMembers = useCallback(async () => {\n if (!activeWorkspace) return [];\n return await getWorkspaceMembers(activeWorkspace);\n }, [activeWorkspace, getWorkspaceMembers]);\n \n const getCurrentWorkspaceRoles = useCallback(async () => {\n if (!activeWorkspace) return [];\n return await getWorkspaceRoles(activeWorkspace);\n }, [activeWorkspace, getWorkspaceRoles]);\n \n const createCurrentWorkspaceRole = useCallback(\n async (name: string, permissions: string[]) => {\n if (!activeWorkspace) return;\n return await createWorkspaceRole(activeWorkspace, name, permissions);\n },\n [activeWorkspace, createWorkspaceRole]\n );\n \n const deleteCurrentWorkspaceRole = useCallback(\n async (role: WorkspaceRole) => {\n if (!activeWorkspace) return;\n return await deleteWorkspaceRole(activeWorkspace, role);\n },\n [activeWorkspace, deleteWorkspaceRole]\n );\n \n const inviteCurrentWorkspaceMember = useCallback(\n async (email: string, roleId?: string) => {\n if (!activeWorkspace) return;\n return await inviteWorkspaceMember(activeWorkspace, email, roleId);\n },\n [activeWorkspace, inviteWorkspaceMember]\n );\n \n const removeCurrentWorkspaceMember = useCallback(\n async (memberId: string) => {\n if (!activeWorkspace) return;\n return await removeWorkspaceMember(activeWorkspace, memberId);\n },\n [activeWorkspace, removeWorkspaceMember]\n );\n \n const addRoleToCurrentWorkspaceMember = useCallback(\n async (membershipId: string, roleId: string) => {\n if (!activeWorkspace) return;\n return await addWorkspaceMemberRole(activeWorkspace, membershipId, roleId);\n },\n [activeWorkspace, addWorkspaceMemberRole]\n );\n \n const removeRoleFromCurrentWorkspaceMember = useCallback(\n async (membershipId: string, roleId: string) => {\n if (!activeWorkspace) return;\n return await removeWorkspaceMemberRole(activeWorkspace, membershipId, roleId);\n },\n [activeWorkspace, removeWorkspaceMemberRole]\n );\n\n const currentLoading = loading || sessionLoading;\n const currentError = listError || sessionError;\n\n if (currentLoading) {\n return {\n activeWorkspace: null,\n loading: true,\n error: currentError,\n refetch,\n leave: null as never,\n updateWorkspace: null as never,\n deleteWorkspace: null as never,\n getMembers: null as never,\n getRoles: null as never,\n createRole: null as never,\n deleteRole: null as never,\n inviteMember: null as never,\n removeMember: null as never,\n addMemberRole: null as never,\n removeMemberRole: null as never,\n };\n }\n\n return {\n activeWorkspace,\n loading: false,\n error: currentError,\n refetch,\n leave: leaveCurrentWorkspace,\n updateWorkspace: updateCurrentWorkspace,\n deleteWorkspace: deleteCurrentWorkspace,\n getMembers: getCurrentWorkspaceMembers,\n getRoles: getCurrentWorkspaceRoles,\n createRole: createCurrentWorkspaceRole,\n deleteRole: deleteCurrentWorkspaceRole,\n inviteMember: inviteCurrentWorkspaceMember,\n removeMember: removeCurrentWorkspaceMember,\n addMemberRole: addRoleToCurrentWorkspaceMember,\n removeMemberRole: removeRoleFromCurrentWorkspaceMember,\n };\n};\n","import { useState, useEffect } from \"react\";\nimport { useClient } from \"./use-client\";\nimport { responseMapper } from \"../utils/response-mapper\";\nimport type { Session, SigninAttempt } from \"@/types\";\n\ninterface SSOCallbackResult {\n session: Session;\n redirect_uri?: string;\n}\n\ninterface SSOCallbackState {\n loading: boolean;\n error: Error | null;\n session: Session | null;\n redirectUri: string | null;\n processed: boolean;\n signinAttempt: SigninAttempt | null;\n}\n\n/**\n * Headless hook for handling SSO OAuth callback\n * Automatically processes URL parameters and handles the callback flow\n */\nexport function useSSOCallback(): SSOCallbackState {\n const { client, loading: clientLoading } = useClient();\n\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [session, setSession] = useState<Session | null>(null);\n const [redirectUri, setRedirectUri] = useState<string | null>(null);\n const [processed, setProcessed] = useState(false);\n const [signinAttempt, setSigninAttempt] = useState<SigninAttempt | null>(\n null,\n );\n\n useEffect(() => {\n if (processed || clientLoading) return;\n\n const urlParams = new URLSearchParams(window.location.search);\n const code = urlParams.get(\"code\");\n const state = urlParams.get(\"state\");\n const oauthError = urlParams.get(\"error\");\n const errorDescription = urlParams.get(\"error_description\");\n\n if (!code && !oauthError) {\n setProcessed(true);\n const err = new Error(\"No OAuth callback data found.\");\n setError(err);\n return;\n }\n\n setProcessed(true);\n setLoading(true);\n\n if (oauthError) {\n const errorMessage = errorDescription || oauthError;\n const err = new Error(`OAuth Error: ${errorMessage}`);\n setError(err);\n setLoading(false);\n return;\n }\n\n if (code && state) {\n handleCallback(code, state);\n } else {\n const err = new Error(\"Missing required OAuth parameters\");\n setError(err);\n setLoading(false);\n }\n }, [processed, clientLoading]);\n\n const handleCallback = async (code: string, state: string) => {\n try {\n // Decode the state to determine if it's sign-in or connect flow\n // State format: base64_data.hmac_signature\n let endpoint: string;\n let method: string;\n\n try {\n const stateParts = state.split(\".\");\n if (stateParts.length !== 2) {\n throw new Error(\"Invalid OAuth state format - missing signature\");\n }\n\n const base64Data = stateParts[0].replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding =\n base64Data.length % 4 ? \"=\".repeat(4 - (base64Data.length % 4)) : \"\";\n const decodedBytes = atob(base64Data + padding);\n const stateAction = decodedBytes.split(\"|\")[0];\n if (stateAction === \"sign_in\") {\n endpoint = `/auth/oauth2/callback`;\n method = \"GET\";\n } else if (stateAction === \"connect_social\") {\n endpoint = `/me/sso-connection-callback`;\n method = \"POST\";\n } else {\n throw new Error(`Unknown OAuth action: ${stateAction}`);\n }\n } catch (e) {\n const error =\n e instanceof Error ? e : new Error(\"Failed to parse OAuth state\");\n setError(\n new Error(\n `Invalid OAuth callback: ${error.message}. The authorization link may be expired or malformed. Please try signing in again.`,\n ),\n );\n setLoading(false);\n return;\n }\n\n const response = await client(\n `${endpoint}?code=${encodeURIComponent(\n code,\n )}&state=${encodeURIComponent(state)}`,\n {\n method: method,\n },\n );\n\n const result = await responseMapper<SSOCallbackResult>(response);\n\n if (\"data\" in result) {\n const sessionData = result.data.session;\n const redirectUriData = result.data.redirect_uri || null;\n\n setSession(sessionData);\n setRedirectUri(redirectUriData);\n\n if (\n sessionData.signin_attempts &&\n sessionData.signin_attempts.length > 0\n ) {\n const attempt = sessionData.signin_attempts.at(-1);\n if (attempt) {\n setSigninAttempt(attempt);\n }\n }\n } else {\n const err = new Error(\"SSO callback failed\");\n setError(err);\n }\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error(\"Unknown error occurred\");\n setError(error);\n } finally {\n setLoading(false);\n }\n };\n\n return {\n loading,\n error,\n session,\n redirectUri,\n processed,\n signinAttempt,\n };\n}\n","import { useState, useEffect } from \"react\";\nimport { useClient } from \"./use-client\";\nimport { responseMapper } from \"../utils/response-mapper\";\nimport { ApiResult, ErrorInterface, ErrorCode } from \"@/types\";\n\nexport interface MagicLinkParams {\n token?: string;\n attempt?: string;\n redirectUri?: string;\n}\n\nexport interface UseMagicLinkVerificationReturnType {\n loading: boolean;\n verifyMagicLink: (params: MagicLinkParams) => Promise<ApiResult<{}, ErrorInterface>>;\n error: Error | null;\n success: boolean | null;\n}\n\nexport function useMagicLinkVerification(): UseMagicLinkVerificationReturnType {\n const { client, loading: clientLoading } = useClient();\n const [verificationLoading, setVerificationLoading] = useState(false);\n const [verificationError, setVerificationError] = useState<Error | null>(null);\n const [verificationSuccess, setVerificationSuccess] = useState<boolean | null>(null);\n\n const verifyMagicLink = async (params: MagicLinkParams): Promise<ApiResult<{}, ErrorInterface>> => {\n if (!params.token || !params.attempt) {\n const error = new Error(\"Invalid magic link parameters\");\n setVerificationError(error);\n return {\n data: undefined as never,\n errors: [{ message: error.message, code: ErrorCode.BadRequestBody }]\n };\n }\n\n setVerificationLoading(true);\n setVerificationError(null);\n setVerificationSuccess(null);\n\n try {\n // Build URL with optional redirect_uri parameter\n const url = new URL(`/auth/verify-magic-link`, window.location.origin);\n url.searchParams.set('token', params.token);\n url.searchParams.set('attempt', params.attempt);\n if (params.redirectUri) {\n url.searchParams.set('redirect_uri', params.redirectUri);\n }\n\n const response = await client(url.pathname + url.search, {\n method: \"GET\",\n });\n\n const result = await responseMapper<{}>(response);\n\n setVerificationLoading(false);\n\n if (\"errors\" in result && result.errors) {\n const error = new Error(result.errors[0].message);\n setVerificationError(error);\n setVerificationSuccess(false);\n } else {\n setVerificationSuccess(true);\n }\n\n return result;\n } catch (error) {\n setVerificationLoading(false);\n const errorObj = error instanceof Error ? error : new Error(\"Magic link verification failed\");\n setVerificationError(errorObj);\n setVerificationSuccess(false);\n\n return {\n data: undefined as never,\n errors: [{ message: errorObj.message, code: ErrorCode.Internal }]\n };\n }\n };\n\n return {\n loading: clientLoading || verificationLoading,\n verifyMagicLink,\n error: verificationError,\n success: verificationSuccess,\n };\n}\n\nexport function useMagicLinkParams(): MagicLinkParams {\n const [params, setParams] = useState<MagicLinkParams>({});\n\n useEffect(() => {\n const urlParams = new URLSearchParams(window.location.search);\n setParams({\n token: urlParams.get('token') || undefined,\n attempt: urlParams.get('attempt') || undefined,\n redirectUri: urlParams.get('redirect_uri') || undefined,\n });\n }, []);\n\n return params;\n}\n","import { useClient } from \"./use-client\";\nimport { responseMapper } from \"../utils/response-mapper\";\nimport { useState } from \"react\";\nimport { ApiResult, ErrorInterface } from \"@/types\";\n\nexport function useForgotPassword() {\n const { client, loading } = useClient();\n const [forgotPasswordLoading, setForgotPasswordLoading] = useState(false);\n const [forgotPasswordError, setForgotPasswordError] = useState<Error | null>(\n null\n );\n\n const forgotPassword = async (\n email: string\n ): Promise<ApiResult<{}, ErrorInterface>> => {\n setForgotPasswordLoading(true);\n setForgotPasswordError(null);\n\n const form = new FormData();\n form.append(\"email\", email);\n\n const response = await client(\"/auth/forgot-password\", {\n method: \"POST\",\n body: form,\n });\n\n const result = await responseMapper<{}>(response);\n\n setForgotPasswordLoading(false);\n\n if (\"errors\" in result && result.errors) {\n setForgotPasswordError(new Error(result.errors[0].message));\n }\n\n return result;\n };\n\n return {\n loading: loading || forgotPasswordLoading,\n forgotPassword,\n error: forgotPasswordError,\n };\n}\n\nexport function useResetPassword() {\n const { client, loading } = useClient();\n const [resetPasswordLoading, setResetPasswordLoading] = useState(false);\n const [resetPasswordError, setResetPasswordError] = useState<Error | null>(\n null\n );\n\n const resetPassword = async (\n email: string,\n otp: string,\n password: string\n ): Promise<ApiResult<{}, ErrorInterface>> => {\n setResetPasswordLoading(true);\n setResetPasswordError(null);\n\n const form = new FormData();\n form.append(\"email\", email);\n form.append(\"otp\", otp);\n form.append(\"password\", password);\n\n const response = await client(\"/auth/reset-password\", {\n method: \"POST\",\n body: form,\n });\n\n const result = await responseMapper<{}>(response);\n\n setResetPasswordLoading(false);\n\n if (\"errors\" in result && result.errors) {\n setResetPasswordError(new Error(result.errors[0].message));\n }\n\n return result;\n };\n\n return {\n loading: loading || resetPasswordLoading,\n resetPassword,\n error: resetPasswordError,\n };\n}\n","import { useEffect, useRef, useCallback, useState } from 'react';\nimport { useSession } from './use-session';\nimport { useDeployment } from './use-deployment';\n\nexport interface NotificationMessage {\n id: number;\n user_id: number;\n deployment_id: number;\n title: string;\n body: string;\n severity: string;\n action_url?: string;\n action_label?: string;\n created_at: string;\n}\n\ninterface WebSocketMessage {\n type: 'connected' | 'notification' | 'error';\n data?: NotificationMessage;\n message?: string;\n error?: string;\n}\n\nexport interface UseNotificationStreamOptions {\n enabled?: boolean;\n channels?: string[];\n organizationIds?: number[];\n workspaceIds?: number[];\n onNotification?: (notification: NotificationMessage) => void;\n onError?: (error: string) => void;\n reconnectDelay?: number;\n maxReconnectAttempts?: number;\n}\n\nexport function useNotificationStream({\n enabled = true,\n channels,\n organizationIds,\n workspaceIds,\n onNotification,\n onError,\n reconnectDelay = 1000,\n maxReconnectAttempts = 5,\n}: UseNotificationStreamOptions = {}) {\n const { session, loading: sessionLoading } = useSession();\n const { deployment, loading: deploymentLoading } = useDeployment();\n const [isConnected, setIsConnected] = useState(false);\n const [connectionError, setConnectionError] = useState<string | null>(null);\n \n const wsRef = useRef<WebSocket | null>(null);\n const reconnectTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const reconnectAttemptsRef = useRef(0);\n const pingIntervalRef = useRef<NodeJS.Timeout | null>(null);\n \n // Use refs to prevent recreating connect function\n const onNotificationRef = useRef(onNotification);\n const onErrorRef = useRef(onError);\n const channelsRef = useRef(channels);\n const organizationIdsRef = useRef(organizationIds);\n const workspaceIdsRef = useRef(workspaceIds);\n const reconnectDelayRef = useRef(reconnectDelay);\n const maxReconnectAttemptsRef = useRef(maxReconnectAttempts);\n \n // Update refs when values change\n onNotificationRef.current = onNotification;\n onErrorRef.current = onError;\n channelsRef.current = channels;\n organizationIdsRef.current = organizationIds;\n workspaceIdsRef.current = workspaceIds;\n reconnectDelayRef.current = reconnectDelay;\n maxReconnectAttemptsRef.current = maxReconnectAttempts;\n\n const cleanup = useCallback(() => {\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n \n if (pingIntervalRef.current) {\n clearInterval(pingIntervalRef.current);\n pingIntervalRef.current = null;\n }\n\n if (wsRef.current) {\n wsRef.current.close();\n wsRef.current = null;\n }\n }, []);\n\n const connect = useCallback(async () => {\n if (!enabled || sessionLoading || deploymentLoading || !session || !deployment) {\n return;\n }\n\n // Clean up any existing connection\n cleanup();\n\n // Parse the backend host URL and construct WebSocket URL\n const backendUrl = new URL(deployment.backend_host);\n const wsProtocol = backendUrl.protocol === 'https:' ? 'wss:' : 'ws:';\n const wsUrl = new URL(`/realtime/notifications`, `${wsProtocol}//${backendUrl.host}`);\n \n // Add session token for development environments (like frontend API)\n if (deployment.mode === \"staging\") {\n const devSession = localStorage.getItem(\"__dev_session__\");\n if (devSession) {\n wsUrl.searchParams.set('__dev_session__', devSession);\n }\n }\n \n // Add channel parameters if provided\n if (channelsRef.current && channelsRef.current.length > 0) {\n channelsRef.current.forEach(channel => wsUrl.searchParams.append('channels', channel));\n }\n if (organizationIdsRef.current && organizationIdsRef.current.length > 0) {\n organizationIdsRef.current.forEach(id => wsUrl.searchParams.append('organization_ids', id.toString()));\n }\n if (workspaceIdsRef.current && workspaceIdsRef.current.length > 0) {\n workspaceIdsRef.current.forEach(id => wsUrl.searchParams.append('workspace_ids', id.toString()));\n }\n\n try {\n const ws = new WebSocket(wsUrl.toString());\n wsRef.current = ws;\n\n ws.onopen = () => {\n // Notification stream connected\n setIsConnected(true);\n setConnectionError(null);\n reconnectAttemptsRef.current = 0;\n\n // Set up ping interval to keep connection alive\n pingIntervalRef.current = setInterval(() => {\n if (ws.readyState === WebSocket.OPEN) {\n ws.send('ping');\n }\n }, 30000); // Ping every 30 seconds\n };\n\n ws.onmessage = (event) => {\n try {\n const message: WebSocketMessage = JSON.parse(event.data);\n \n if (message.type === 'notification' && message.data) {\n onNotificationRef.current?.(message.data);\n } else if (message.type === 'error') {\n const error = message.error || 'Unknown error occurred';\n setConnectionError(error);\n onErrorRef.current?.(error);\n } else if (message.type === 'connected') {\n // Notification stream ready\n }\n } catch (err) {\n // Failed to parse notification message\n }\n };\n\n ws.onerror = () => {\n // WebSocket error occurred\n setConnectionError('Connection error occurred');\n onErrorRef.current?.('Connection error occurred');\n };\n\n ws.onclose = (event) => {\n // Notification stream disconnected\n setIsConnected(false);\n \n if (pingIntervalRef.current) {\n clearInterval(pingIntervalRef.current);\n pingIntervalRef.current = null;\n }\n\n // Attempt to reconnect if not manually closed\n if (enabled && event.code !== 1000 && reconnectAttemptsRef.current < maxReconnectAttemptsRef.current) {\n reconnectAttemptsRef.current++;\n const delay = reconnectDelayRef.current * Math.pow(2, reconnectAttemptsRef.current - 1); // Exponential backoff\n \n // Reconnecting to notification stream\n \n reconnectTimeoutRef.current = setTimeout(() => {\n connect();\n }, delay);\n } else if (reconnectAttemptsRef.current >= maxReconnectAttemptsRef.current) {\n setConnectionError('Max reconnection attempts reached');\n onErrorRef.current?.('Max reconnection attempts reached');\n }\n };\n } catch (error) {\n // Failed to create WebSocket connection\n setConnectionError('Failed to connect');\n onErrorRef.current?.('Failed to connect');\n }\n }, [enabled, sessionLoading, deploymentLoading, session, deployment, cleanup]);\n\n useEffect(() => {\n connect();\n \n return () => {\n cleanup();\n };\n }, [connect, cleanup]);\n\n // Reconnect when channel parameters change\n useEffect(() => {\n if (wsRef.current && wsRef.current.readyState === WebSocket.OPEN) {\n // Only reconnect if we're currently connected and parameters changed\n connect();\n }\n }, [channels, organizationIds, workspaceIds, connect]);\n\n const disconnect = useCallback(() => {\n cleanup();\n setIsConnected(false);\n }, [cleanup]);\n\n const reconnect = useCallback(() => {\n reconnectAttemptsRef.current = 0;\n connect();\n }, [connect]);\n\n return {\n isConnected,\n connectionError,\n disconnect,\n reconnect,\n };\n}","import { responseMapper } from \"../utils/response-mapper\";\nimport { useClient } from \"./use-client\";\nimport useSWR from \"swr\";\nimport { useCallback } from \"react\";\nimport { ApiResult } from \"@/types\";\nimport {\n Notification,\n NotificationListResponse,\n BulkUpdateResponse,\n NotificationListParams,\n ChannelCounts,\n} from \"@/types/notification\";\nimport { Client } from \"@/types\";\nimport {\n useNotificationStream,\n type NotificationMessage,\n} from \"./use-notification-stream\";\n\ntype UseNotificationsReturnType =\n | {\n loading: true;\n notifications: never;\n unreadCount: never;\n unreadCounts: never;\n channels: never;\n hasMore: never;\n markAsRead: never;\n markAllAsRead: never;\n deleteNotification: never;\n error: Error | null;\n refetch: () => Promise<void>;\n }\n | {\n loading: false;\n error: Error | null;\n notifications: Notification[];\n unreadCount: number;\n unreadCounts: ChannelCounts;\n channels: string[];\n hasMore: boolean;\n markAsRead: (notificationId: string) => Promise<void>;\n markAllAsRead: () => Promise<void>;\n deleteNotification: (notificationId: string) => Promise<void>;\n refetch: () => Promise<void>;\n };\n\nasync function fetchNotifications(\n client: Client,\n params?: NotificationListParams,\n): Promise<NotificationListResponse> {\n const queryString = new URLSearchParams();\n\n if (params) {\n if (params.limit) queryString.append(\"limit\", params.limit.toString());\n if (params.offset) queryString.append(\"offset\", params.offset.toString());\n if (params.channels) {\n params.channels.forEach((channel) =>\n queryString.append(\"channels\", channel),\n );\n }\n if (params.organization_ids) {\n params.organization_ids.forEach((id) =>\n queryString.append(\"organization_ids\", id.toString()),\n );\n }\n if (params.workspace_ids) {\n params.workspace_ids.forEach((id) =>\n queryString.append(\"workspace_ids\", id.toString()),\n );\n }\n if (params.is_read !== undefined)\n queryString.append(\"is_read\", params.is_read.toString());\n if (params.is_archived !== undefined)\n queryString.append(\"is_archived\", params.is_archived.toString());\n if (params.severity) queryString.append(\"severity\", params.severity);\n }\n\n const url = `/notifications${queryString.toString() ? \"?\" + queryString.toString() : \"\"}`;\n\n const response = await client(url, {\n method: \"GET\",\n });\n const responseParsed =\n await responseMapper<NotificationListResponse>(response);\n return responseParsed.data;\n}\n\nexport async function fetchChannelCounts(\n client: Client,\n): Promise<ChannelCounts> {\n const response = await client(\"/notifications/channel-counts\", {\n method: \"GET\",\n });\n const responseParsed = await responseMapper<ChannelCounts>(response);\n return responseParsed.data;\n}\n\nasync function markNotificationAsRead(\n client: Client,\n notificationId: string,\n): Promise<ApiResult<{ success: boolean }>> {\n const response = await client(`/notifications/${notificationId}/read`, {\n method: \"POST\",\n });\n return responseMapper(response);\n}\n\nasync function markAllNotificationsAsRead(\n client: Client,\n): Promise<ApiResult<BulkUpdateResponse>> {\n const response = await client(\"/notifications/mark-all-read\", {\n method: \"POST\",\n });\n return responseMapper(response);\n}\n\nasync function deleteNotification(\n client: Client,\n notificationId: string,\n): Promise<ApiResult<{ success: boolean }>> {\n const response = await client(`/notifications/${notificationId}/delete`, {\n method: \"POST\",\n });\n return responseMapper(response);\n}\n\nexport function useNotifications(\n params?: NotificationListParams,\n): UseNotificationsReturnType {\n const { client, loading: clientLoading } = useClient();\n\n const {\n data,\n error,\n mutate: refetch,\n isLoading: notificationLading,\n } = useSWR(\n !clientLoading ? [\"notifications\", JSON.stringify(params)] : null,\n () => fetchNotifications(client, params),\n {\n refreshInterval: 60000,\n revalidateOnFocus: true,\n },\n );\n\n useNotificationStream({\n enabled: !clientLoading && !!data,\n onNotification: useCallback(\n (notification: NotificationMessage) => {\n refetch(async (current) => {\n if (!current) return current;\n\n const exists = current.notifications.some(\n (n) => n.id === notification.id.toString(),\n );\n if (exists) return current;\n\n return {\n ...current,\n notifications: [\n {\n id: notification.id.toString(),\n user_id: notification.user_id.toString(),\n deployment_id: notification.deployment_id.toString(),\n title: notification.title,\n body: notification.body,\n severity: notification.severity,\n action_url: notification.action_url,\n action_label: notification.action_label,\n is_read: false,\n is_archived: false,\n created_at: notification.created_at,\n updated_at: notification.created_at,\n } as Notification,\n ...current.notifications,\n ],\n unread_count: current.unread_count + 1,\n total: current.total + 1,\n };\n }, false);\n },\n [refetch],\n ),\n onError: useCallback(() => {}, []),\n });\n\n const markAsRead = useCallback(\n async (notificationId: string) => {\n if (clientLoading) return;\n\n await refetch(async (current) => {\n if (!current) return current;\n return {\n ...current,\n notifications: current.notifications.map((n) =>\n n.id === notificationId ? { ...n, is_read: true } : n,\n ),\n unread_count: Math.max(0, current.unread_count - 1),\n };\n }, false);\n\n await markNotificationAsRead(client, notificationId);\n\n await refetch();\n },\n [client, clientLoading, refetch],\n );\n\n const markAllAsRead = useCallback(async () => {\n if (clientLoading) return;\n\n await refetch(async (current) => {\n if (!current) return current;\n return {\n ...current,\n notifications: current.notifications.map((n) => ({\n ...n,\n is_read: true,\n })),\n unread_count: 0,\n };\n }, false);\n\n await markAllNotificationsAsRead(client);\n\n await refetch();\n }, [client, refetch]);\n\n const deleteNotificationCallback = useCallback(\n async (notificationId: string) => {\n if (clientLoading) return;\n\n await refetch(async (current) => {\n if (!current) return current;\n const notification = current.notifications.find(\n (n) => n.id === notificationId,\n );\n return {\n ...current,\n notifications: current.notifications.filter(\n (n) => n.id !== notificationId,\n ),\n unread_count:\n notification && !notification.is_read\n ? Math.max(0, current.unread_count - 1)\n : current.unread_count,\n total: Math.max(0, current.total - 1),\n };\n }, false);\n\n await deleteNotification(client, notificationId);\n\n await refetch();\n },\n [client, clientLoading, refetch],\n );\n\n const refetchWrapper = useCallback(async () => {\n await refetch();\n }, [refetch]);\n\n if (!data || clientLoading || notificationLading) {\n return {\n loading: true,\n notifications: undefined as never,\n unreadCount: undefined as never,\n unreadCounts: undefined as never,\n channels: undefined as never,\n hasMore: undefined as never,\n markAsRead: undefined as never,\n markAllAsRead: undefined as never,\n deleteNotification: undefined as never,\n error,\n refetch: refetchWrapper,\n } as const;\n }\n\n return {\n loading: false,\n error,\n notifications: data.notifications,\n unreadCount: data.unread_count,\n unreadCounts: data.unread_counts,\n channels: data.channels,\n hasMore: data.has_more,\n markAsRead,\n markAllAsRead,\n deleteNotification: deleteNotificationCallback,\n refetch: refetchWrapper,\n } as const;\n}\n","import { responseMapper } from \"../utils/response-mapper\";\nimport { useClient } from \"./use-client\";\nimport useSWR from \"swr\";\nimport { ChannelCounts } from \"@/types/notification\";\nimport { Client } from \"@/types\";\n\nasync function fetchChannelCounts(client: Client): Promise<ChannelCounts> {\n const response = await client(\"/notifications/channel-counts\", {\n method: \"GET\",\n });\n const responseParsed = await responseMapper<ChannelCounts>(response);\n return responseParsed.data;\n}\n\ntype UseChannelCountsReturnType =\n | {\n loading: true;\n counts: never;\n error: Error | null;\n refetch: () => Promise<void>;\n }\n | {\n loading: false;\n counts: ChannelCounts;\n error: Error | null;\n refetch: () => Promise<void>;\n };\n\nexport function useChannelCounts(): UseChannelCountsReturnType {\n const { client, loading: clientLoading } = useClient();\n\n const {\n data,\n error,\n mutate: refetch,\n } = useSWR(\n !clientLoading ? [\"notifications\", \"channel-counts\"] : null,\n () => fetchChannelCounts(client),\n {\n refreshInterval: 30000, // Poll every 30 seconds\n revalidateOnFocus: true,\n }\n );\n\n const refetchWrapper = async () => {\n await refetch();\n };\n\n if (!data || clientLoading) {\n return {\n loading: true,\n counts: undefined as never,\n error,\n refetch: refetchWrapper,\n } as const;\n }\n\n return {\n loading: false,\n counts: data,\n error,\n refetch: refetchWrapper,\n } as const;\n}","import { WebsocketMessage } from '../models/websocket';\n\ntype MessageHandler = (message: WebsocketMessage<any>) => void;\ntype ConnectionStateHandler = (state: { isConnected: boolean; error?: string }) => void;\n\nexport interface StoredMessage {\n id: string;\n type: string;\n content: string;\n timestamp: Date;\n metadata?: any;\n}\n\nexport interface SessionMessages {\n [sessionKey: string]: StoredMessage[];\n}\n\nclass WebSocketManager {\n private static instance: WebSocketManager;\n private ws: WebSocket | null = null;\n private messageHandlers: Set<MessageHandler> = new Set();\n private connectionStateHandlers: Set<ConnectionStateHandler> = new Set();\n private reconnectTimer: NodeJS.Timeout | null = null;\n private reconnectAttempts = 0;\n private url: string | null = null;\n private isIntentionalDisconnect = false;\n private sessionMessages: SessionMessages = {};\n private currentSessionKey: string | null = null;\n\n private constructor() {}\n\n static getInstance(): WebSocketManager {\n if (!WebSocketManager.instance) {\n WebSocketManager.instance = new WebSocketManager();\n }\n return WebSocketManager.instance;\n }\n\n connect(url: string) {\n this.url = url;\n this.isIntentionalDisconnect = false;\n \n // If already connected to the same URL, just notify handlers\n if (this.ws?.readyState === WebSocket.OPEN && this.url === url) {\n // WebSocket already connected\n this.notifyConnectionState({ isConnected: true });\n return;\n }\n \n // If connecting, wait for it to complete\n if (this.ws?.readyState === WebSocket.CONNECTING) {\n // WebSocket already connecting, skipping\n return;\n }\n\n // Creating singleton WebSocket connection\n this.createConnection();\n }\n\n private createConnection() {\n if (!this.url) return;\n\n try {\n this.ws = new WebSocket(this.url);\n \n this.ws.onopen = () => {\n // WebSocket connected\n this.reconnectAttempts = 0;\n this.notifyConnectionState({ isConnected: true });\n };\n\n this.ws.onmessage = (event) => {\n try {\n // WebSocket message received\n const message = JSON.parse(event.data);\n // WebSocket message parsed\n this.notifyMessageHandlers(message);\n } catch (error) {\n // Failed to parse WebSocket message\n }\n };\n\n this.ws.onerror = () => {\n // WebSocket error occurred\n this.notifyConnectionState({ isConnected: false, error: \"Connection error\" });\n };\n\n this.ws.onclose = () => {\n // WebSocket closed\n this.ws = null;\n this.notifyConnectionState({ isConnected: false });\n \n // Always reconnect unless intentionally disconnected\n if (!this.isIntentionalDisconnect) {\n this.scheduleReconnect();\n }\n };\n } catch (error) {\n // Failed to create WebSocket\n this.notifyConnectionState({ \n isConnected: false, \n error: error instanceof Error ? error.message : \"Failed to connect\" \n });\n }\n }\n\n private scheduleReconnect() {\n this.reconnectAttempts++;\n \n // Exponential backoff with jitter to prevent thundering herd\n const baseDelay = Math.min(1000 * Math.pow(2, this.reconnectAttempts - 1), 30000);\n const jitter = Math.random() * 0.3 * baseDelay; // 0-30% jitter\n const delay = Math.floor(baseDelay + jitter);\n \n // Scheduling reconnect attempt\n \n this.reconnectTimer = setTimeout(() => {\n // Reconnect attempt in progress\n this.createConnection();\n }, delay);\n }\n\n disconnect() {\n this.isIntentionalDisconnect = true;\n \n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n \n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n\n send(message: any) {\n // Attempting to send WebSocket message\n if (this.ws?.readyState === WebSocket.OPEN) {\n const jsonMessage = JSON.stringify(message);\n // Sending WebSocket message\n this.ws.send(jsonMessage);\n } else {\n // WebSocket not connected, cannot send message\n }\n }\n\n onMessage(handler: MessageHandler): () => void {\n this.messageHandlers.add(handler);\n return () => {\n this.messageHandlers.delete(handler);\n };\n }\n\n onConnectionStateChange(handler: ConnectionStateHandler): () => void {\n this.connectionStateHandlers.add(handler);\n // Immediately notify the current state\n handler({ isConnected: this.ws?.readyState === WebSocket.OPEN });\n return () => {\n this.connectionStateHandlers.delete(handler);\n };\n }\n\n private notifyMessageHandlers(message: WebsocketMessage<any>) {\n this.messageHandlers.forEach(handler => {\n try {\n handler(message);\n } catch (error) {\n // Error in message handler\n }\n });\n }\n\n private notifyConnectionState(state: { isConnected: boolean; error?: string }) {\n this.connectionStateHandlers.forEach(handler => {\n try {\n handler(state);\n } catch (error) {\n // Error in connection state handler\n }\n });\n }\n\n isConnected(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n setCurrentSession(sessionKey: string) {\n this.currentSessionKey = sessionKey;\n if (!this.sessionMessages[sessionKey]) {\n this.sessionMessages[sessionKey] = [];\n }\n }\n\n addMessage(message: StoredMessage) {\n if (!this.currentSessionKey) return;\n \n if (!this.sessionMessages[this.currentSessionKey]) {\n this.sessionMessages[this.currentSessionKey] = [];\n }\n \n this.sessionMessages[this.currentSessionKey].push(message);\n }\n\n getSessionMessages(sessionKey: string): StoredMessage[] {\n return this.sessionMessages[sessionKey] || [];\n }\n\n clearSessionMessages(sessionKey: string) {\n if (this.sessionMessages[sessionKey]) {\n this.sessionMessages[sessionKey] = [];\n }\n }\n}\n\nexport const wsManager = WebSocketManager.getInstance();","export const CONNECTION_STATES = {\n DISCONNECTED: \"disconnected\",\n CONNECTING: \"connecting\", \n CONNECTED: \"connected\",\n ERROR: \"error\",\n} as const;\n\nexport const MESSAGE_TYPES = {\n USER: \"user\",\n AGENT: \"agent\",\n SYSTEM: \"system\",\n ERROR: \"error\",\n PLANNING: \"planning\",\n EXECUTING: \"executing\",\n COMPLETED: \"completed\",\n REASONING: \"reasoning\",\n VALIDATING: \"validating\",\n CONTEXT: \"context\",\n} as const;\n\nexport const WS_MESSAGE_TYPES = {\n SESSION_CONNECT: \"session_connect\",\n SESSION_CONNECTED: \"session_connected\",\n FETCH_CONTEXT_MESSAGES: \"fetch_context_messages\",\n MESSAGE_INPUT: \"message_input\",\n NEW_MESSAGE_CHUNK: \"new_message_chunk\",\n EXECUTION_COMPLETE: \"execution_complete\",\n TASK_UPDATE: \"task_update\",\n TOOL_EXECUTION: \"tool_execution\",\n WORKFLOW_EXECUTION: \"workflow_execution\",\n EXECUTION_ERROR: \"execution_error\",\n CLOSE_CONNECTION: \"close_connection\",\n PLATFORM_EVENT: \"platform_event\",\n PLATFORM_FUNCTION: \"platform_function\",\n PLATFORM_FUNCTION_RESULT: \"platform_function_result\",\n AGENT_MESSAGE: \"agent_message\",\n CONVERSATION_MESSAGE: \"conversation_message\",\n USER_INPUT_REQUEST: \"user_input_request\",\n USER_INPUT_RESPONSE: \"user_input_response\",\n} as const;\n\nexport const DEFAULT_OPTIONS = {\n AUTO_CONNECT: true,\n RECONNECT_INTERVAL: 3000,\n MAX_RECONNECT_ATTEMPTS: 5,\n} as const;","/**\n * Unified execution status mapping between frontend and backend\n */\n\n// Frontend status values\nexport const FRONTEND_STATUS = {\n IDLE: 'idle',\n STARTING: 'starting', \n RUNNING: 'running',\n WAITING_FOR_INPUT: 'waiting_for_input',\n COMPLETED: 'completed',\n FAILED: 'failed'\n} as const;\n\n// Backend status values\nexport const BACKEND_STATUS = {\n IDLE: 'Idle',\n STARTING: 'Starting',\n RUNNING: 'Running',\n WAITING_FOR_INPUT: 'WaitingForInput',\n COMPLETED: 'Completed',\n FAILED: 'Failed',\n CANCELLED: 'Cancelled'\n} as const;\n\nexport type FrontendStatus = typeof FRONTEND_STATUS[keyof typeof FRONTEND_STATUS];\nexport type BackendStatus = typeof BACKEND_STATUS[keyof typeof BACKEND_STATUS];\n\n/**\n * Map backend status to frontend status\n */\nexport function mapBackendToFrontendStatus(backendStatus: string): FrontendStatus {\n switch (backendStatus) {\n case BACKEND_STATUS.IDLE:\n return FRONTEND_STATUS.IDLE;\n case BACKEND_STATUS.STARTING:\n return FRONTEND_STATUS.STARTING;\n case BACKEND_STATUS.RUNNING:\n return FRONTEND_STATUS.RUNNING;\n case BACKEND_STATUS.WAITING_FOR_INPUT:\n return FRONTEND_STATUS.WAITING_FOR_INPUT;\n case BACKEND_STATUS.COMPLETED:\n return FRONTEND_STATUS.COMPLETED;\n case BACKEND_STATUS.FAILED:\n case BACKEND_STATUS.CANCELLED:\n return FRONTEND_STATUS.FAILED;\n default:\n // Unknown backend status\n return FRONTEND_STATUS.IDLE;\n }\n}\n\n/**\n * Map frontend status to backend status\n */\nexport function mapFrontendToBackendStatus(frontendStatus: FrontendStatus): BackendStatus {\n switch (frontendStatus) {\n case FRONTEND_STATUS.IDLE:\n return BACKEND_STATUS.IDLE;\n case FRONTEND_STATUS.STARTING:\n return BACKEND_STATUS.STARTING;\n case FRONTEND_STATUS.RUNNING:\n return BACKEND_STATUS.RUNNING;\n case FRONTEND_STATUS.WAITING_FOR_INPUT:\n return BACKEND_STATUS.WAITING_FOR_INPUT;\n case FRONTEND_STATUS.COMPLETED:\n return BACKEND_STATUS.COMPLETED;\n case FRONTEND_STATUS.FAILED:\n return BACKEND_STATUS.FAILED;\n default:\n // Unknown frontend status\n return BACKEND_STATUS.IDLE;\n }\n}\n\n/**\n * Check if status indicates execution is active\n */\nexport function isExecutionActive(status: FrontendStatus): boolean {\n return status === FRONTEND_STATUS.STARTING || \n status === FRONTEND_STATUS.RUNNING || \n status === FRONTEND_STATUS.WAITING_FOR_INPUT;\n}\n\n/**\n * Check if status indicates execution has ended\n */\nexport function isExecutionEnded(status: FrontendStatus): boolean {\n return status === FRONTEND_STATUS.COMPLETED || \n status === FRONTEND_STATUS.FAILED ||\n status === FRONTEND_STATUS.IDLE;\n}","import { useState, useRef, useCallback, useEffect } from \"react\";\nimport { wsManager } from \"../services/websocket-manager\";\nimport { CONNECTION_STATES } from \"../constants/ai-agent\";\nimport {\n FrontendStatus,\n mapBackendToFrontendStatus,\n isExecutionActive,\n FRONTEND_STATUS,\n} from \"../constants/execution-status\";\nimport { useDeployment } from \"./use-deployment\";\nimport { useClient } from \"./use-client\";\n\nexport interface UserInputRequest {\n question: string;\n context: string;\n input_type: \"text\" | \"number\" | \"select\" | \"multiselect\" | \"boolean\" | \"date\";\n options?: string[];\n default_value?: string;\n placeholder?: string;\n}\n\nexport interface ImageData {\n mime_type: string;\n data?: string;\n url?: string;\n}\n\nexport interface ConversationMessage {\n id: string | number;\n role: \"user\" | \"assistant\" | \"system\";\n content: string;\n timestamp: Date;\n isStreaming?: boolean;\n images?: ImageData[];\n metadata?: {\n type?: \"user_input_request\" | \"log\";\n userInputRequest?: UserInputRequest;\n messageType?: string;\n };\n}\n\ninterface UseAgentConversationProps {\n contextId: string;\n agentName: string;\n token: string;\n platformAdapter?: {\n onPlatformEvent?: (eventName: string, eventData: unknown) => void;\n onPlatformFunction?: (\n functionName: string,\n parameters: unknown,\n executionId: string,\n ) => Promise<unknown>;\n };\n onUserInputRequest?: (request: UserInputRequest) => Promise<string>;\n autoConnect?: boolean;\n}\n\nexport function useAgentConversation({\n contextId,\n agentName,\n token,\n platformAdapter,\n autoConnect = true,\n}: UseAgentConversationProps) {\n const { deployment } = useDeployment();\n const { client } = useClient();\n const [messages, setMessages] = useState<ConversationMessage[]>([]);\n const [pendingMessage, setPendingMessage] = useState<string | null>(null);\n const [pendingImages, setPendingImages] = useState<ImageData[] | null>(null);\n const [isConnected, setIsConnected] = useState(false);\n const [isExecuting, setIsExecuting] = useState(false);\n const [executionStatus, setExecutionStatus] = useState<FrontendStatus>(\n FRONTEND_STATUS.IDLE,\n );\n const [connectionState, setConnectionState] = useState<{\n status: (typeof CONNECTION_STATES)[keyof typeof CONNECTION_STATES];\n }>({ status: CONNECTION_STATES.DISCONNECTED });\n const [hasMoreMessages, setHasMoreMessages] = useState(true);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const oldestMessageIdRef = useRef<string | null>(null);\n\n const streamingMessageRef = useRef<{ id: number; content: string } | null>(\n null,\n );\n\n // Handle incoming WebSocket messages\n const handleWebSocketMessage = useCallback(\n (message: any) => {\n switch (message.message_type) {\n case \"session_connected\":\n setIsConnected(true);\n setConnectionState({ status: CONNECTION_STATES.CONNECTED });\n\n // Update execution state from backend if provided\n if (message.data?.execution_status) {\n const backendStatus = message.data.execution_status;\n const frontendStatus = mapBackendToFrontendStatus(backendStatus);\n setExecutionStatus(frontendStatus);\n setIsExecuting(isExecutionActive(frontendStatus));\n }\n\n // Don't reload messages if they've already been loaded\n // They're now loaded immediately on mount\n break;\n\n case \"conversation_message\":\n handleConversationMessage(message.data);\n break;\n\n case \"user_input_request\":\n handleUserInputRequest(message.data);\n break;\n\n case \"platform_event\":\n handlePlatformEvent(message.data);\n break;\n\n case \"platform_function\":\n // Platform function received\n handlePlatformFunction(message.data);\n break;\n\n case \"execution_complete\":\n setIsExecuting(false);\n setExecutionStatus(FRONTEND_STATUS.IDLE);\n streamingMessageRef.current = null;\n break;\n\n case \"execution_error\":\n setIsExecuting(false);\n setExecutionStatus(FRONTEND_STATUS.FAILED);\n streamingMessageRef.current = null;\n break;\n\n case \"execution_cancelled\":\n setIsExecuting(false);\n setExecutionStatus(FRONTEND_STATUS.IDLE);\n streamingMessageRef.current = null;\n break;\n\n case \"execution_status\":\n // Handle execution status updates from backend\n const status = message.data?.status;\n if (status) {\n const frontendStatus = mapBackendToFrontendStatus(status);\n setExecutionStatus(frontendStatus);\n setIsExecuting(isExecutionActive(frontendStatus));\n }\n break;\n\n // Messages are now loaded from API via fetchMessages() instead of WebSocket\n }\n },\n [pendingMessage],\n );\n\n // Handle conversation messages\n const handleConversationMessage = useCallback((data: any) => {\n const { id, message_type, content } = data;\n\n // Check if message already exists to prevent duplicates\n const messageExists = (messageId: string | number) => {\n return messages.some((msg) => msg.id === messageId);\n };\n\n // Handle system/log messages\n if (\n message_type === \"system_decision\" ||\n message_type === \"action_execution_result\" ||\n message_type === \"assistant_task_breakdown\" ||\n message_type === \"assistant_validation\" ||\n message_type === \"assistant_action_planning\" ||\n message_type === \"context_results\"\n ) {\n setPendingMessage(null);\n setPendingImages(null);\n\n let logContent = \"\";\n\n if (message_type === \"system_decision\") {\n // Check if this is a gather_context step and add more context\n const step = content?.step;\n const reasoning = content?.reasoning;\n\n if (step === \"gathercontext\") {\n // Show the actual reasoning, clipped to a reasonable length\n if (reasoning && reasoning.length > 0) {\n const maxLength = 60;\n logContent =\n reasoning.length > maxLength\n ? `${reasoning.substring(0, maxLength)}...`\n : reasoning;\n } else {\n logContent = \"Gathering context...\";\n }\n } else if (step === \"executeaction\") {\n logContent = \"Executing action\";\n } else if (step === \"deliverresponse\") {\n logContent = \"Preparing response\";\n } else if (step === \"taskplanning\") {\n logContent = \"Planning approach\";\n } else if (step === \"validateprogress\") {\n logContent = \"Validating progress\";\n } else if (step === \"acknowledge\") {\n logContent = \"Processing request\";\n } else if (step === \"finishplanning\") {\n logContent = \"Finalizing plan\";\n } else if (step === \"executetasks\") {\n logContent = \"Executing tasks\";\n } else if (step === \"requestuserinput\") {\n logContent = \"Waiting for input\";\n } else if (step === \"complete\") {\n logContent = \"Completed\";\n } else if (step === \"examinetool\") {\n logContent = \"Examining tool\";\n } else if (step === \"examineworkflow\") {\n logContent = \"Examining workflow\";\n } else {\n // Default with varied text based on confidence\n const confidence = content?.confidence || 0.5;\n if (confidence > 0.8) {\n logContent = \"Analyzing\";\n } else if (confidence > 0.6) {\n logContent = \"Thinking\";\n } else {\n logContent = \"Reasoning\";\n }\n }\n } else if (message_type === \"action_execution_result\") {\n if (content.task_execution?.status === \"completed\") {\n logContent = \"Task execution completed\";\n } else if (content.task_execution?.approach) {\n logContent = content.task_execution.approach;\n } else {\n logContent = \"Executing task\";\n }\n } else if (message_type === \"assistant_task_breakdown\") {\n if (content.task_breakdown?.total_tasks) {\n logContent = `Identified ${content.task_breakdown.total_tasks} tasks`;\n } else {\n logContent = \"Planning tasks\";\n }\n } else if (message_type === \"assistant_validation\") {\n logContent = \"Validated results\";\n } else if (message_type === \"assistant_action_planning\") {\n if (content.task_execution?.total_tasks) {\n logContent = `Planned ${content.task_execution.total_tasks} tasks`;\n } else if (content.task_execution?.tasks?.length) {\n logContent = `Planned ${content.task_execution.tasks.length} tasks`;\n } else {\n logContent = \"Planning actions\";\n }\n } else if (message_type === \"context_results\") {\n const query = content.query;\n const resultCount = content.result_count || 0;\n if (query && query !== \"General context gathering\") {\n logContent = `${query}: Found ${resultCount} results`;\n } else {\n logContent = `Found ${resultCount} results`;\n }\n }\n\n if (logContent && !messageExists(id)) {\n setMessages((prev) => [\n ...prev,\n {\n id,\n role: \"system\",\n content: logContent,\n timestamp: new Date(),\n metadata: {\n type: \"log\",\n messageType: message_type,\n },\n },\n ]);\n }\n return;\n }\n\n if (message_type === \"user_message\") {\n if (!messageExists(id)) {\n setPendingMessage(null);\n setPendingImages(null);\n setMessages((prev) => [\n ...prev,\n {\n id,\n role: \"user\",\n content: content.message,\n images: content.images, // Include images from backend\n timestamp: new Date(),\n },\n ]);\n }\n } else if (message_type === \"agent_response\") {\n if (!messageExists(id)) {\n // Agent response indicates execution is complete\n setPendingMessage(null);\n setPendingImages(null);\n setIsExecuting(false);\n setExecutionStatus(FRONTEND_STATUS.IDLE);\n streamingMessageRef.current = null;\n\n // Add the final response message\n setMessages((prev) => [\n ...prev,\n {\n id,\n role: \"assistant\",\n content: content.response,\n timestamp: new Date(),\n isStreaming: false,\n },\n ]);\n }\n } else if (message_type === \"assistant_acknowledgment\") {\n if (!messageExists(id)) {\n setPendingMessage(null);\n setPendingImages(null);\n setMessages((prev) => [\n ...prev,\n {\n id,\n role: \"assistant\",\n content: content.acknowledgment_message,\n timestamp: new Date(),\n },\n ]);\n }\n } else if (\n message_type === \"assistant_ideation\" ||\n message_type === \"assistant_action_planning\" ||\n message_type === \"action_execution_result\" ||\n message_type === \"assistant_validation\" ||\n message_type === \"assistant_context_gathering\" ||\n message_type === \"assistant_task_breakdown\"\n ) {\n // Handle various assistant message types\n let messageContent = \"\";\n\n if (content.reasoning_summary) {\n messageContent = content.reasoning_summary;\n } else if (content.task_execution?.approach) {\n messageContent = content.task_execution.approach;\n } else if (content.strategic_synthesis) {\n messageContent = content.strategic_synthesis;\n } else if (content.task_breakdown?.total_tasks) {\n messageContent = `Breaking down into ${content.task_breakdown.total_tasks} tasks...`;\n } else if (content.acknowledgment_message) {\n messageContent = content.acknowledgment_message;\n } else {\n // Skip if no meaningful content\n return;\n }\n\n setMessages((prev) => [\n ...prev,\n {\n id,\n role: \"assistant\",\n content: messageContent,\n timestamp: new Date(),\n },\n ]);\n } else if (message_type === \"user_input_request\") {\n // Handle user input request from conversation messages\n const inputRequest = {\n question: content.question,\n context: content.context,\n input_type: content.input_type,\n options: content.options || content.suggestions,\n default_value: content.default_value,\n placeholder: content.placeholder,\n };\n\n setExecutionStatus(\"waiting_for_input\");\n\n // Add as a system message with metadata for the component\n setMessages((prev) => [\n ...prev,\n {\n id,\n role: \"system\",\n content: inputRequest.question,\n timestamp: new Date(),\n metadata: {\n type: \"user_input_request\",\n userInputRequest: inputRequest,\n },\n },\n ]);\n }\n }, []);\n\n // Handle user input requests\n const handleUserInputRequest = useCallback(async (data: UserInputRequest) => {\n setExecutionStatus(\"waiting_for_input\");\n\n // Add the user input request as a system message\n const requestId = `input-request-${Date.now()}`;\n setMessages((prev) => [\n ...prev,\n {\n id: requestId,\n role: \"system\",\n content: data.question,\n timestamp: new Date(),\n metadata: {\n type: \"user_input_request\",\n userInputRequest: data,\n },\n },\n ]);\n }, []);\n\n // Handle platform events\n const handlePlatformEvent = useCallback(\n (data: any) => {\n const { event_label, event_data } = data;\n if (platformAdapter?.onPlatformEvent) {\n platformAdapter.onPlatformEvent(event_label, event_data);\n }\n },\n [platformAdapter],\n );\n\n // Handle platform function calls\n const handlePlatformFunction = useCallback(\n async (data: any) => {\n const { function_name, function_data } = data;\n const { parameters, execution_id } = function_data;\n\n // Processing platform function\n\n if (!platformAdapter?.onPlatformFunction) {\n // No handler registered for platform function\n wsManager.send({\n message_type: {\n platform_function_result: [\n execution_id,\n {\n error: `No platform function handler registered`,\n },\n ],\n },\n data: {},\n });\n return;\n }\n\n try {\n // Calling platform function handler\n const result = await platformAdapter.onPlatformFunction(\n function_name,\n parameters,\n execution_id,\n );\n // Platform function handler completed\n\n const message = {\n message_type: {\n platform_function_result: [execution_id, result],\n },\n data: {},\n };\n // Sending platform function result back\n wsManager.send(message);\n } catch (error) {\n // Platform function handler error\n wsManager.send({\n message_type: {\n platform_function_result: [\n execution_id,\n {\n error:\n error instanceof Error\n ? error.message\n : \"Function execution failed\",\n stack: error instanceof Error ? error.stack : undefined,\n },\n ],\n },\n data: {},\n });\n }\n },\n [platformAdapter],\n );\n\n // Connect to WebSocket (once per deployment)\n useEffect(() => {\n if (!deployment) return;\n\n // Parse the backend host URL and construct WebSocket URL\n // const backendUrl = new URL(deployment.backend_host);\n\n // Connect to WebSocket\n const backendHost = deployment?.backend_host.replace(/https?:\\/\\//, \"\");\n const wsUrl = `wss://${backendHost}/realtime/agent?token=${encodeURIComponent(token)}`;\n\n setConnectionState({ status: CONNECTION_STATES.CONNECTING });\n wsManager.connect(wsUrl);\n }, [deployment, token]);\n\n // Handle WebSocket connection state changes\n useEffect(() => {\n const unsubConnection = wsManager.onConnectionStateChange((state) => {\n setConnectionState({\n status: state.isConnected\n ? CONNECTION_STATES.CONNECTED\n : state.error\n ? CONNECTION_STATES.ERROR\n : CONNECTION_STATES.DISCONNECTED,\n });\n setIsConnected(state.isConnected);\n });\n\n return unsubConnection;\n }, []);\n\n // Handle WebSocket messages\n useEffect(() => {\n const unsubscribe = wsManager.onMessage(handleWebSocketMessage);\n return unsubscribe;\n }, [handleWebSocketMessage]);\n\n // Connect to specific context when WebSocket is ready\n useEffect(() => {\n if (isConnected && contextId && agentName && autoConnect) {\n // Send session connect for this specific context\n wsManager.send({\n message_type: { session_connect: [contextId, agentName] },\n data: {},\n });\n }\n }, [isConnected, contextId, agentName, autoConnect]);\n\n // Manual connection function (simplified)\n const connect = useCallback(async () => {\n if (isConnected && contextId && agentName) {\n // Send session connect for this specific context\n wsManager.send({\n message_type: { session_connect: [contextId, agentName] },\n data: {},\n });\n }\n return () => {}; // No cleanup needed for individual contexts\n }, [isConnected, contextId, agentName]);\n\n // Send user message\n const sendMessage = useCallback(\n (content: string, images?: ImageData[]) => {\n if (!isConnected) return;\n\n setPendingMessage(content);\n setPendingImages(images || null);\n setIsExecuting(true);\n setExecutionStatus(FRONTEND_STATUS.STARTING);\n\n wsManager.send({\n message_type: { message_input: content },\n data: images ? { images } : {},\n });\n },\n [isConnected],\n );\n\n // Clear messages\n const clearMessages = useCallback(() => {\n setMessages([]);\n streamingMessageRef.current = null;\n }, []);\n\n // Submit user input response\n const submitUserInput = useCallback(\n (value: string) => {\n if (!isConnected || executionStatus !== FRONTEND_STATUS.WAITING_FOR_INPUT)\n return;\n\n // Send the response using the dedicated user input response type\n wsManager.send({\n message_type: { user_input_response: value },\n data: {},\n });\n\n // Update status back to running\n setExecutionStatus(FRONTEND_STATUS.RUNNING);\n },\n [isConnected, executionStatus],\n );\n\n // Fetch messages from API (1-1 conversion from WebSocket logic)\n const fetchMessages = useCallback(async (beforeId?: string) => {\n if (!token || !contextId) return;\n \n try {\n const params = new URLSearchParams({\n token: token,\n limit: '50',\n });\n \n if (beforeId) {\n params.append('before_id', beforeId);\n setIsLoadingMore(true);\n }\n \n const response = await client(`/api/agent/contexts/${contextId}/messages?${params}`, {\n method: 'GET',\n });\n \n const result = await response.json();\n \n if (result.status === 200 && result.data) {\n const messageData = result.data;\n \n // Exact same processing as WebSocket fetch_context_messages\n if (Array.isArray(messageData.data)) {\n const pastMessages = messageData.data\n .filter((msg: any) => {\n // Parse content if needed\n let parsedContent = msg.content;\n if (typeof msg.content === 'string') {\n try {\n parsedContent = JSON.parse(msg.content);\n } catch {\n parsedContent = { message: msg.content };\n }\n }\n \n // Get message_type from metadata or parsed content\n const message_type = msg.metadata?.message_type || parsedContent?.message_type;\n \n // Include same message types as WebSocket\n return (\n message_type === \"user_message\" ||\n message_type === \"agent_response\" ||\n message_type === \"assistant_acknowledgment\" ||\n message_type === \"user_input_request\" ||\n message_type === \"system_decision\" ||\n message_type === \"action_execution_result\" ||\n message_type === \"assistant_task_breakdown\" ||\n message_type === \"assistant_validation\" ||\n message_type === \"assistant_action_planning\" ||\n message_type === \"context_results\"\n );\n })\n .map((msg: any) => {\n let content = \"\";\n let images = undefined;\n let metadata = undefined;\n \n // Parse content if needed\n let parsedContent = msg.content;\n if (typeof msg.content === 'string') {\n try {\n parsedContent = JSON.parse(msg.content);\n } catch {\n parsedContent = msg.content;\n }\n }\n \n // Get message_type from metadata or parsed content\n const message_type = msg.metadata?.message_type || parsedContent?.message_type;\n \n // Exact same content extraction logic\n if (message_type === \"user_message\") {\n content = parsedContent?.message || \"\";\n images = parsedContent?.images || undefined;\n } else if (message_type === \"agent_response\") {\n content = parsedContent?.response || \"\";\n } else if (message_type === \"assistant_acknowledgment\") {\n content = parsedContent?.acknowledgment_message || \"\";\n } else if (message_type === \"user_input_request\") {\n content = parsedContent?.question || \"\";\n metadata = {\n type: \"user_input_request\",\n userInputRequest: {\n question: parsedContent?.question || \"\",\n context: parsedContent?.context || \"\",\n input_type: parsedContent?.input_type || \"text\",\n options: parsedContent?.options || parsedContent?.suggestions || [],\n default_value: parsedContent?.default_value || \"\",\n placeholder: parsedContent?.placeholder || \"\",\n },\n };\n }\n \n // Handle system/log messages - exact same logic\n if (\n message_type === \"system_decision\" ||\n message_type === \"action_execution_result\" ||\n message_type === \"assistant_task_breakdown\" ||\n message_type === \"assistant_validation\" ||\n message_type === \"assistant_action_planning\" ||\n message_type === \"context_results\"\n ) {\n let logContent = \"\";\n \n if (message_type === \"system_decision\") {\n const step = parsedContent?.step;\n const reasoning = parsedContent?.reasoning;\n \n if (step === \"gathercontext\") {\n if (reasoning && reasoning.length > 0) {\n const maxLength = 60;\n logContent = reasoning.length > maxLength\n ? `${reasoning.substring(0, maxLength)}...`\n : reasoning;\n } else {\n logContent = \"Gathering context...\";\n }\n } else if (step === \"executeaction\") {\n logContent = \"Executing action\";\n } else if (step === \"deliverresponse\") {\n logContent = \"Preparing response\";\n } else if (step === \"taskplanning\") {\n logContent = \"Planning approach\";\n } else if (step === \"validateprogress\") {\n logContent = \"Validating progress\";\n } else if (step === \"acknowledge\") {\n logContent = \"Processing request\";\n } else if (step === \"finishplanning\") {\n logContent = \"Finalizing plan\";\n } else if (step === \"executetasks\") {\n logContent = \"Executing tasks\";\n } else if (step === \"requestuserinput\") {\n logContent = \"Waiting for input\";\n } else if (step === \"complete\") {\n logContent = \"Completed\";\n } else if (step === \"examinetool\") {\n logContent = \"Examining tool\";\n } else if (step === \"examineworkflow\") {\n logContent = \"Examining workflow\";\n } else {\n const confidence = parsedContent?.confidence || 0.5;\n if (confidence > 0.8) {\n logContent = \"Analyzing\";\n } else if (confidence > 0.6) {\n logContent = \"Thinking\";\n } else {\n logContent = \"Reasoning\";\n }\n }\n } else if (message_type === \"action_execution_result\") {\n if (parsedContent?.task_execution?.status === \"completed\") {\n logContent = \"Task execution completed\";\n } else if (parsedContent?.task_execution?.approach) {\n logContent = parsedContent.task_execution.approach;\n } else {\n logContent = \"Executing task\";\n }\n } else if (message_type === \"assistant_task_breakdown\") {\n if (parsedContent?.task_breakdown?.total_tasks) {\n logContent = `Identified ${parsedContent.task_breakdown.total_tasks} tasks`;\n } else {\n logContent = \"Planning tasks\";\n }\n } else if (message_type === \"assistant_validation\") {\n logContent = \"Validated results\";\n } else if (message_type === \"assistant_action_planning\") {\n if (parsedContent?.task_execution?.total_tasks) {\n logContent = `Planned ${parsedContent.task_execution.total_tasks} tasks`;\n } else if (parsedContent?.task_execution?.tasks?.length) {\n logContent = `Planned ${parsedContent.task_execution.tasks.length} tasks`;\n } else {\n logContent = \"Planning actions\";\n }\n } else if (message_type === \"context_results\") {\n const query = parsedContent?.query;\n const resultCount = parsedContent?.result_count || 0;\n if (query && query !== \"General context gathering\") {\n logContent = `${query}: Found ${resultCount} results`;\n } else {\n logContent = `Found ${resultCount} results`;\n }\n }\n \n content = logContent;\n metadata = { type: \"log\", messageType: message_type };\n }\n \n return {\n id: msg.id,\n role:\n message_type === \"user_message\"\n ? \"user\"\n : message_type === \"user_input_request\"\n ? \"system\"\n : \"assistant\",\n content,\n images,\n timestamp: new Date(msg.timestamp || msg.created_at || Date.now()),\n metadata,\n };\n })\n .filter((msg: any) => msg.content || msg.metadata || msg.images)\n .sort((a: any, b: any) => {\n // Sort by snowflake ID (ascending order - oldest first)\n const aId = BigInt(a.id);\n const bId = BigInt(b.id);\n return aId < bId ? -1 : aId > bId ? 1 : 0;\n });\n \n // Update oldest message ID for pagination\n if (pastMessages.length > 0) {\n oldestMessageIdRef.current = pastMessages[0].id;\n }\n \n // If this is pagination (beforeId provided), prepend to existing messages\n if (beforeId) {\n setMessages((prev) => [...pastMessages, ...prev]);\n setHasMoreMessages(pastMessages.length >= 50);\n } else {\n // Initial load\n setMessages(pastMessages);\n \n // Check if the last message is a user_input_request to restore waiting state\n if (pastMessages.length > 0) {\n const lastMessage = pastMessages[pastMessages.length - 1];\n if (lastMessage.metadata?.type === \"user_input_request\") {\n setExecutionStatus(FRONTEND_STATUS.WAITING_FOR_INPUT);\n }\n }\n }\n \n setIsLoadingMore(false);\n }\n }\n } catch (error) {\n console.error('Failed to fetch messages:', error);\n setIsLoadingMore(false);\n }\n }, [token, contextId, client]);\n\n // Load messages immediately on mount (don't wait for WebSocket)\n useEffect(() => {\n if (contextId && token) {\n fetchMessages();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [contextId, token]); // fetchMessages excluded to prevent infinite loop\n\n // Load more messages (pagination)\n const loadMoreMessages = useCallback(async () => {\n if (\n isLoadingMore ||\n !hasMoreMessages ||\n !oldestMessageIdRef.current\n )\n return;\n\n setIsLoadingMore(true);\n\n try {\n await fetchMessages(oldestMessageIdRef.current);\n } finally {\n setIsLoadingMore(false);\n }\n }, [isLoadingMore, hasMoreMessages, fetchMessages]);\n\n // Cancel current execution\n const cancelExecution = useCallback(() => {\n if (!isConnected || !isExecuting) return;\n\n wsManager.send({\n message_type: { cancel_execution: null },\n data: {},\n });\n\n // Optimistically update state\n setIsExecuting(false);\n setExecutionStatus(\"idle\");\n }, [isConnected, isExecuting]);\n\n return {\n messages,\n pendingMessage,\n pendingImages,\n connectionState,\n isConnected,\n isExecuting,\n executionStatus,\n isWaitingForInput: executionStatus === \"waiting_for_input\",\n hasMoreMessages,\n isLoadingMore,\n sendMessage,\n submitUserInput,\n clearMessages,\n loadMoreMessages,\n cancelExecution,\n connect,\n disconnect: () => wsManager.disconnect(),\n };\n}\n","import { useState, useCallback } from \"react\";\nimport { useClient } from \"./use-client\";\nimport { responseMapper } from \"../utils/response-mapper\";\n\nexport interface AcceptInvitationResponse {\n organization?: {\n id: string;\n name: string;\n };\n workspace?: {\n id: string;\n name: string;\n };\n signin_id?: string;\n already_member?: boolean;\n message?: string;\n requires_signin?: boolean;\n invited_email?: string;\n error_code?: string;\n}\n\nexport const useInvitation = () => {\n const { client } = useClient();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [invitationData, setInvitationData] = useState<AcceptInvitationResponse | null>(null);\n\n const acceptInvitation = useCallback(async (token: string): Promise<AcceptInvitationResponse> => {\n setLoading(true);\n setError(null);\n setInvitationData(null);\n\n try {\n const response = await client(\"/organizations/invitations/accept\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ token }),\n });\n\n const result = await responseMapper<AcceptInvitationResponse>(response);\n\n // The backend returns everything in data field, including error cases\n const data = result.data;\n setInvitationData(data);\n\n // Set error if there's an error_code in the response\n if (data.error_code) {\n setError(data.message || \"Failed to accept invitation\");\n }\n\n return data;\n } catch (err: any) {\n // This only happens for network errors or if responseMapper throws\n const errorMessage = err.message || \"Failed to accept invitation\";\n setError(errorMessage);\n const errorData = { error_code: \"NETWORK_ERROR\", message: errorMessage };\n setInvitationData(errorData);\n return errorData;\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const reset = useCallback(() => {\n setError(null);\n setInvitationData(null);\n }, []);\n\n return {\n acceptInvitation,\n invitationData,\n loading,\n error,\n reset,\n };\n};","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useDeployment } from \"../hooks/use-deployment\";\n\ninterface DeploymentInstanceProps {\n children: ReactNode;\n}\n\nconst DeploymentInitialized: React.FC<DeploymentInstanceProps> = ({\n children,\n}: DeploymentInstanceProps) => {\n const { loading } = useDeployment();\n\n if (loading) return null;\n\n return <>{children}</>;\n};\n\nconst DeploymentInitializing: React.FC<DeploymentInstanceProps> = ({\n children,\n}: DeploymentInstanceProps) => {\n const { loading } = useDeployment();\n\n if (loading) return <>{children}</>;\n\n return null;\n};\n\nexport { DeploymentInitialized, DeploymentInitializing };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace, substr, match} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @param {object[]} children\n * @return {string}\n */\nexport function prefix (value, length, children) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// tab-size\n\t\tcase 4789:\n\t\t\treturn MOZ + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t\t// default: fallthrough to below\n\t\t\t}\n\t\t// flex, flex-direction, scroll-snap-type, writing-mode\n\t\tcase 6828: case 4268: case 2903:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/g, '') + (!match(value, /flex-|baseline/) ? MS + 'grid-row-' + replace(value, /flex-|-self/g, '') : '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/g, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// justify-self\n\t\tcase 4200:\n\t\t\tif (!match(value, /flex-|baseline/)) return MS + 'grid-column-align' + substr(value, length) + value\n\t\t\tbreak\n\t\t// grid-template-(columns|rows)\n\t\tcase 2592: case 3360:\n\t\t\treturn MS + replace(value, 'template-', '') + value\n\t\t// grid-(row|column)-start\n\t\tcase 4384: case 3616:\n\t\t\tif (children && children.some(function (element, index) { return length = index, match(element.props, /grid-\\w+-end/) })) {\n\t\t\t\treturn ~indexof(value + (children = children[length].value), 'span', 0) ? value : (MS + replace(value, '-start', '') + value + MS + 'grid-row-span:' + (~indexof(children, 'span', 0) ? match(children, /\\d+/) : +match(children, /\\d+/) - +match(value, /\\d+/)) + ';')\n\t\t\t}\n\t\t\treturn MS + replace(value, '-start', '') + value\n\t\t// grid-(row|column)-end\n\t\tcase 4896: case 4128:\n\t\t\treturn (children && children.some(function (element) { return match(element.props, /grid-\\w+-start/) })) ? value : MS + replace(replace(value, '-end', '-span'), 'span ', '') + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch', 0) ? prefix(replace(value, 'stretch', 'fill-available'), length, children) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// grid-(column|row)\n\t\tcase 5152: case 5920:\n\t\t\treturn replace(value, /(.+?):(\\d+)(\\s*\\/\\s*(span)?\\s*(\\d+))?(.*)/, function (_, a, b, c, d, e, f) { return (MS + a + ':' + b + f) + (c ? (MS + a + '-span:' + (d ? e : +e - +b)) + f : '') + value })\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// stick(y)?\n\t\t\tif (charat(value, length + 6) === 121)\n\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\tbreak\n\t\t// display: (flex|inline-flex|grid|inline-grid)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, charat(value, 14) === 45 ? 18 : 11)) {\n\t\t\t\t// (inline-)?fle(x)\n\t\t\t\tcase 120:\n\t\t\t\t\treturn replace(value, /(.+:)([^;\\s!]+)(;|(\\s+)?!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t\t// (inline-)?gri(d)\n\t\t\t\tcase 100:\n\t\t\t\t\treturn replace(value, ':', ':' + MS) + value\n\t\t\t}\n\t\t\tbreak\n\t\t// scroll-margin, scroll-margin-(top|right|bottom|left)\n\t\tcase 5719: case 2647: case 2135: case 3927: case 2391:\n\t\t\treturn replace(value, 'scroll-', 'scroll-snap-') + value\n\t}\n\n\treturn value\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine, filter, assign} from './Utility.js'\nimport {copy, lift, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(children = element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, callback = /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tassign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import{__spreadArray as e,__assign as t}from\"tslib\";import n from\"@emotion/is-prop-valid\";import o,{useRef as r,useState as s,useMemo as i,useEffect as a,useContext as c,useDebugValue as l,createElement as u}from\"react\";import p from\"shallowequal\";import*as d from\"stylis\";import h from\"@emotion/unitless\";var f=\"undefined\"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||\"data-styled\",m=\"active\",y=\"data-styled-version\",v=\"6.1.19\",g=\"/*!sc*/\\n\",S=\"undefined\"!=typeof window&&\"undefined\"!=typeof document,w=Boolean(\"boolean\"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:\"undefined\"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&\"\"!==process.env.REACT_APP_SC_DISABLE_SPEEDY?\"false\"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:\"undefined\"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&\"\"!==process.env.SC_DISABLE_SPEEDY?\"false\"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY:\"production\"!==process.env.NODE_ENV),b={},E=/invalid hook call/i,N=new Set,P=function(t,n){if(\"production\"!==process.env.NODE_ENV){var o=n?' with the id of \"'.concat(n,'\"'):\"\",s=\"The component \".concat(t).concat(o,\" has been created dynamically.\\n\")+\"You may see this warning because you've called styled inside another component.\\nTo resolve this only create new StyledComponents outside of any render method and function component.\\nSee https://styled-components.com/docs/basics#define-styled-components-outside-of-the-render-method for more info.\\n\",i=console.error;try{var a=!0;console.error=function(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];E.test(t)?(a=!1,N.delete(s)):i.apply(void 0,e([t],n,!1))},r(),a&&!N.has(s)&&(console.warn(s),N.add(s))}catch(e){E.test(e.message)&&N.delete(s)}finally{console.error=i}}},_=Object.freeze([]),C=Object.freeze({});function I(e,t,n){return void 0===n&&(n=C),e.theme!==n.theme&&e.theme||t||n.theme}var A=new Set([\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"base\",\"bdi\",\"bdo\",\"big\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"data\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\",\"mark\",\"menu\",\"menuitem\",\"meta\",\"meter\",\"nav\",\"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"u\",\"ul\",\"use\",\"var\",\"video\",\"wbr\",\"circle\",\"clipPath\",\"defs\",\"ellipse\",\"foreignObject\",\"g\",\"image\",\"line\",\"linearGradient\",\"marker\",\"mask\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialGradient\",\"rect\",\"stop\",\"svg\",\"text\",\"tspan\"]),O=/[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~-]+/g,D=/(^-|-$)/g;function R(e){return e.replace(O,\"-\").replace(D,\"\")}var T=/(a)(d)/gi,k=52,j=function(e){return String.fromCharCode(e+(e>25?39:97))};function x(e){var t,n=\"\";for(t=Math.abs(e);t>k;t=t/k|0)n=j(t%k)+n;return(j(t%k)+n).replace(T,\"$1-$2\")}var V,F=5381,M=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},z=function(e){return M(F,e)};function $(e){return x(z(e)>>>0)}function B(e){return\"production\"!==process.env.NODE_ENV&&\"string\"==typeof e&&e||e.displayName||e.name||\"Component\"}function L(e){return\"string\"==typeof e&&(\"production\"===process.env.NODE_ENV||e.charAt(0)===e.charAt(0).toLowerCase())}var G=\"function\"==typeof Symbol&&Symbol.for,Y=G?Symbol.for(\"react.memo\"):60115,W=G?Symbol.for(\"react.forward_ref\"):60112,q={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},H={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},U={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},J=((V={})[W]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},V[Y]=U,V);function X(e){return(\"type\"in(t=e)&&t.type.$$typeof)===Y?U:\"$$typeof\"in e?J[e.$$typeof]:q;var t}var Z=Object.defineProperty,K=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,ee=Object.getOwnPropertyDescriptor,te=Object.getPrototypeOf,ne=Object.prototype;function oe(e,t,n){if(\"string\"!=typeof t){if(ne){var o=te(t);o&&o!==ne&&oe(e,o,n)}var r=K(t);Q&&(r=r.concat(Q(t)));for(var s=X(e),i=X(t),a=0;a<r.length;++a){var c=r[a];if(!(c in H||n&&n[c]||i&&c in i||s&&c in s)){var l=ee(t,c);try{Z(e,c,l)}catch(e){}}}}return e}function re(e){return\"function\"==typeof e}function se(e){return\"object\"==typeof e&&\"styledComponentId\"in e}function ie(e,t){return e&&t?\"\".concat(e,\" \").concat(t):e||t||\"\"}function ae(e,t){if(0===e.length)return\"\";for(var n=e[0],o=1;o<e.length;o++)n+=t?t+e[o]:e[o];return n}function ce(e){return null!==e&&\"object\"==typeof e&&e.constructor.name===Object.name&&!(\"props\"in e&&e.$$typeof)}function le(e,t,n){if(void 0===n&&(n=!1),!n&&!ce(e)&&!Array.isArray(e))return t;if(Array.isArray(t))for(var o=0;o<t.length;o++)e[o]=le(e[o],t[o]);else if(ce(t))for(var o in t)e[o]=le(e[o],t[o]);return e}function ue(e,t){Object.defineProperty(e,\"toString\",{value:t})}var pe=\"production\"!==process.env.NODE_ENV?{1:\"Cannot create styled-component for component: %s.\\n\\n\",2:\"Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n- Are you trying to reuse it across renders?\\n- Are you accidentally calling collectStyles twice?\\n\\n\",3:\"Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n\",4:\"The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n- Does this error occur on the client and is your target falsy?\\n- Does this error occur on the server and is the sheet falsy?\\n\\n\",5:\"The clone method cannot be used on the client!\\n\\n- Are you running in a client-like environment on the server?\\n- Are you trying to run SSR on the client?\\n\\n\",6:\"Trying to insert a new style tag, but the given Node is unmounted!\\n\\n- Are you using a custom target that isn't mounted?\\n- Does your document not have a valid head element?\\n- Have you accidentally removed a style tag manually?\\n\\n\",7:'ThemeProvider: Please return an object from your \"theme\" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n',8:'ThemeProvider: Please make your \"theme\" prop an object.\\n\\n',9:\"Missing document `<head>`\\n\\n\",10:\"Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\",11:\"_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\\n\\n\",12:\"It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\\\`\\\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\\n\\n\",13:\"%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\\n\\n\",14:'ThemeProvider: \"theme\" prop is required.\\n\\n',15:\"A stylis plugin has been supplied that is not named. We need a name for each plugin to be able to prevent styling collisions between different stylis configurations within the same app. Before you pass your plugin to `<StyleSheetManager stylisPlugins={[]}>`, please make sure each plugin is uniquely-named, e.g.\\n\\n```js\\nObject.defineProperty(importedPlugin, 'name', { value: 'some-unique-name' });\\n```\\n\\n\",16:\"Reached the limit of how many styled components may be created at group %s.\\nYou may only create up to 1,073,741,824 components. If you're creating components dynamically,\\nas for instance in your render method then you may be running into this limitation.\\n\\n\",17:\"CSSStyleSheet could not be found on HTMLStyleElement.\\nHas styled-components' style tag been unmounted or altered by another script?\\n\",18:\"ThemeProvider: Please make sure your useTheme hook is within a `<ThemeProvider>`\"}:{};function de(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=e[0],o=[],r=1,s=e.length;r<s;r+=1)o.push(e[r]);return o.forEach(function(e){n=n.replace(/%[a-z]/,e)}),n}function he(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];return\"production\"===process.env.NODE_ENV?new Error(\"An error occurred. See https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#\".concat(t,\" for more information.\").concat(n.length>0?\" Args: \".concat(n.join(\", \")):\"\")):new Error(de.apply(void 0,e([pe[t]],n,!1)).trim())}var fe=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n<e;n++)t+=this.groupSizes[n];return t},e.prototype.insertRules=function(e,t){if(e>=this.groupSizes.length){for(var n=this.groupSizes,o=n.length,r=o;e>=r;)if((r<<=1)<0)throw he(16,\"\".concat(e));this.groupSizes=new Uint32Array(r),this.groupSizes.set(n),this.length=r;for(var s=o;s<r;s++)this.groupSizes[s]=0}for(var i=this.indexOfGroup(e+1),a=(s=0,t.length);s<a;s++)this.tag.insertRule(i,t[s])&&(this.groupSizes[e]++,i++)},e.prototype.clearGroup=function(e){if(e<this.length){var t=this.groupSizes[e],n=this.indexOfGroup(e),o=n+t;this.groupSizes[e]=0;for(var r=n;r<o;r++)this.tag.deleteRule(n)}},e.prototype.getGroup=function(e){var t=\"\";if(e>=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],o=this.indexOfGroup(e),r=o+n,s=o;s<r;s++)t+=\"\".concat(this.tag.getRule(s)).concat(g);return t},e}(),me=1<<30,ye=new Map,ve=new Map,ge=1,Se=function(e){if(ye.has(e))return ye.get(e);for(;ve.has(ge);)ge++;var t=ge++;if(\"production\"!==process.env.NODE_ENV&&((0|t)<0||t>me))throw he(16,\"\".concat(t));return ye.set(e,t),ve.set(t,e),t},we=function(e,t){ge=t+1,ye.set(e,t),ve.set(t,e)},be=\"style[\".concat(f,\"][\").concat(y,'=\"').concat(v,'\"]'),Ee=new RegExp(\"^\".concat(f,'\\\\.g(\\\\d+)\\\\[id=\"([\\\\w\\\\d-]+)\"\\\\].*?\"([^\"]*)')),Ne=function(e,t,n){for(var o,r=n.split(\",\"),s=0,i=r.length;s<i;s++)(o=r[s])&&e.registerName(t,o)},Pe=function(e,t){for(var n,o=(null!==(n=t.textContent)&&void 0!==n?n:\"\").split(g),r=[],s=0,i=o.length;s<i;s++){var a=o[s].trim();if(a){var c=a.match(Ee);if(c){var l=0|parseInt(c[1],10),u=c[2];0!==l&&(we(u,l),Ne(e,u,c[3]),e.getTag().insertRules(l,r)),r.length=0}else r.push(a)}}},_e=function(e){for(var t=document.querySelectorAll(be),n=0,o=t.length;n<o;n++){var r=t[n];r&&r.getAttribute(f)!==m&&(Pe(e,r),r.parentNode&&r.parentNode.removeChild(r))}};function Ce(){return\"undefined\"!=typeof __webpack_nonce__?__webpack_nonce__:null}var Ie=function(e){var t=document.head,n=e||t,o=document.createElement(\"style\"),r=function(e){var t=Array.from(e.querySelectorAll(\"style[\".concat(f,\"]\")));return t[t.length-1]}(n),s=void 0!==r?r.nextSibling:null;o.setAttribute(f,m),o.setAttribute(y,v);var i=Ce();return i&&o.setAttribute(\"nonce\",i),n.insertBefore(o,s),o},Ae=function(){function e(e){this.element=Ie(e),this.element.appendChild(document.createTextNode(\"\")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,n=0,o=t.length;n<o;n++){var r=t[n];if(r.ownerNode===e)return r}throw he(17)}(this.element),this.length=0}return e.prototype.insertRule=function(e,t){try{return this.sheet.insertRule(t,e),this.length++,!0}catch(e){return!1}},e.prototype.deleteRule=function(e){this.sheet.deleteRule(e),this.length--},e.prototype.getRule=function(e){var t=this.sheet.cssRules[e];return t&&t.cssText?t.cssText:\"\"},e}(),Oe=function(){function e(e){this.element=Ie(e),this.nodes=this.element.childNodes,this.length=0}return e.prototype.insertRule=function(e,t){if(e<=this.length&&e>=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e<this.length?this.nodes[e].textContent:\"\"},e}(),De=function(){function e(e){this.rules=[],this.length=0}return e.prototype.insertRule=function(e,t){return e<=this.length&&(this.rules.splice(e,0,t),this.length++,!0)},e.prototype.deleteRule=function(e){this.rules.splice(e,1),this.length--},e.prototype.getRule=function(e){return e<this.length?this.rules[e]:\"\"},e}(),Re=S,Te={isServer:!S,useCSSOMInjection:!w},ke=function(){function e(e,n,o){void 0===e&&(e=C),void 0===n&&(n={});var r=this;this.options=t(t({},Te),e),this.gs=n,this.names=new Map(o),this.server=!!e.isServer,!this.server&&S&&Re&&(Re=!1,_e(this)),ue(this,function(){return function(e){for(var t=e.getTag(),n=t.length,o=\"\",r=function(n){var r=function(e){return ve.get(e)}(n);if(void 0===r)return\"continue\";var s=e.names.get(r),i=t.getGroup(n);if(void 0===s||!s.size||0===i.length)return\"continue\";var a=\"\".concat(f,\".g\").concat(n,'[id=\"').concat(r,'\"]'),c=\"\";void 0!==s&&s.forEach(function(e){e.length>0&&(c+=\"\".concat(e,\",\"))}),o+=\"\".concat(i).concat(a,'{content:\"').concat(c,'\"}').concat(g)},s=0;s<n;s++)r(s);return o}(r)})}return e.registerId=function(e){return Se(e)},e.prototype.rehydrate=function(){!this.server&&S&&_e(this)},e.prototype.reconstructWithOptions=function(n,o){return void 0===o&&(o=!0),new e(t(t({},this.options),n),this.gs,o&&this.names||void 0)},e.prototype.allocateGSInstance=function(e){return this.gs[e]=(this.gs[e]||0)+1},e.prototype.getTag=function(){return this.tag||(this.tag=(e=function(e){var t=e.useCSSOMInjection,n=e.target;return e.isServer?new De(n):t?new Ae(n):new Oe(n)}(this.options),new fe(e)));var e},e.prototype.hasNameForId=function(e,t){return this.names.has(e)&&this.names.get(e).has(t)},e.prototype.registerName=function(e,t){if(Se(e),this.names.has(e))this.names.get(e).add(t);else{var n=new Set;n.add(t),this.names.set(e,n)}},e.prototype.insertRules=function(e,t,n){this.registerName(e,t),this.getTag().insertRules(Se(e),n)},e.prototype.clearNames=function(e){this.names.has(e)&&this.names.get(e).clear()},e.prototype.clearRules=function(e){this.getTag().clearGroup(Se(e)),this.clearNames(e)},e.prototype.clearTag=function(){this.tag=void 0},e}(),je=/&/g,xe=/^\\s*\\/\\/.*$/gm;function Ve(e,t){return e.map(function(e){return\"rule\"===e.type&&(e.value=\"\".concat(t,\" \").concat(e.value),e.value=e.value.replaceAll(\",\",\",\".concat(t,\" \")),e.props=e.props.map(function(e){return\"\".concat(t,\" \").concat(e)})),Array.isArray(e.children)&&\"@keyframes\"!==e.type&&(e.children=Ve(e.children,t)),e})}function Fe(e){var t,n,o,r=void 0===e?C:e,s=r.options,i=void 0===s?C:s,a=r.plugins,c=void 0===a?_:a,l=function(e,o,r){return r.startsWith(n)&&r.endsWith(n)&&r.replaceAll(n,\"\").length>0?\".\".concat(t):e},u=c.slice();u.push(function(e){e.type===d.RULESET&&e.value.includes(\"&\")&&(e.props[0]=e.props[0].replace(je,n).replace(o,l))}),i.prefix&&u.push(d.prefixer),u.push(d.stringify);var p=function(e,r,s,a){void 0===r&&(r=\"\"),void 0===s&&(s=\"\"),void 0===a&&(a=\"&\"),t=a,n=r,o=new RegExp(\"\\\\\".concat(n,\"\\\\b\"),\"g\");var c=e.replace(xe,\"\"),l=d.compile(s||r?\"\".concat(s,\" \").concat(r,\" { \").concat(c,\" }\"):c);i.namespace&&(l=Ve(l,i.namespace));var p=[];return d.serialize(l,d.middleware(u.concat(d.rulesheet(function(e){return p.push(e)})))),p};return p.hash=c.length?c.reduce(function(e,t){return t.name||he(15),M(e,t.name)},F).toString():\"\",p}var Me=new ke,ze=Fe(),$e=o.createContext({shouldForwardProp:void 0,styleSheet:Me,stylis:ze}),Be=$e.Consumer,Le=o.createContext(void 0);function Ge(){return c($e)}function Ye(e){var t=s(e.stylisPlugins),n=t[0],r=t[1],c=Ge().styleSheet,l=i(function(){var t=c;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t},[e.disableCSSOMInjection,e.sheet,e.target,c]),u=i(function(){return Fe({options:{namespace:e.namespace,prefix:e.enableVendorPrefixes},plugins:n})},[e.enableVendorPrefixes,e.namespace,n]);a(function(){p(n,e.stylisPlugins)||r(e.stylisPlugins)},[e.stylisPlugins]);var d=i(function(){return{shouldForwardProp:e.shouldForwardProp,styleSheet:l,stylis:u}},[e.shouldForwardProp,l,u]);return o.createElement($e.Provider,{value:d},o.createElement(Le.Provider,{value:u},e.children))}var We=function(){function e(e,t){var n=this;this.inject=function(e,t){void 0===t&&(t=ze);var o=n.name+t.hash;e.hasNameForId(n.id,o)||e.insertRules(n.id,o,t(n.rules,o,\"@keyframes\"))},this.name=e,this.id=\"sc-keyframes-\".concat(e),this.rules=t,ue(this,function(){throw he(12,String(n.name))})}return e.prototype.getName=function(e){return void 0===e&&(e=ze),this.name+e.hash},e}(),qe=function(e){return e>=\"A\"&&e<=\"Z\"};function He(e){for(var t=\"\",n=0;n<e.length;n++){var o=e[n];if(1===n&&\"-\"===o&&\"-\"===e[0])return e;qe(o)?t+=\"-\"+o.toLowerCase():t+=o}return t.startsWith(\"ms-\")?\"-\"+t:t}var Ue=function(e){return null==e||!1===e||\"\"===e},Je=function(t){var n,o,r=[];for(var s in t){var i=t[s];t.hasOwnProperty(s)&&!Ue(i)&&(Array.isArray(i)&&i.isCss||re(i)?r.push(\"\".concat(He(s),\":\"),i,\";\"):ce(i)?r.push.apply(r,e(e([\"\".concat(s,\" {\")],Je(i),!1),[\"}\"],!1)):r.push(\"\".concat(He(s),\": \").concat((n=s,null==(o=i)||\"boolean\"==typeof o||\"\"===o?\"\":\"number\"!=typeof o||0===o||n in h||n.startsWith(\"--\")?String(o).trim():\"\".concat(o,\"px\")),\";\")))}return r};function Xe(e,t,n,o){if(Ue(e))return[];if(se(e))return[\".\".concat(e.styledComponentId)];if(re(e)){if(!re(s=e)||s.prototype&&s.prototype.isReactComponent||!t)return[e];var r=e(t);return\"production\"===process.env.NODE_ENV||\"object\"!=typeof r||Array.isArray(r)||r instanceof We||ce(r)||null===r||console.error(\"\".concat(B(e),\" is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\")),Xe(r,t,n,o)}var s;return e instanceof We?n?(e.inject(n,o),[e.getName(o)]):[e]:ce(e)?Je(e):Array.isArray(e)?Array.prototype.concat.apply(_,e.map(function(e){return Xe(e,t,n,o)})):[e.toString()]}function Ze(e){for(var t=0;t<e.length;t+=1){var n=e[t];if(re(n)&&!se(n))return!1}return!0}var Ke=z(v),Qe=function(){function e(e,t,n){this.rules=e,this.staticRulesId=\"\",this.isStatic=\"production\"===process.env.NODE_ENV&&(void 0===n||n.isStatic)&&Ze(e),this.componentId=t,this.baseHash=M(Ke,t),this.baseStyle=n,ke.registerId(t)}return e.prototype.generateAndInjectStyles=function(e,t,n){var o=this.baseStyle?this.baseStyle.generateAndInjectStyles(e,t,n):\"\";if(this.isStatic&&!n.hash)if(this.staticRulesId&&t.hasNameForId(this.componentId,this.staticRulesId))o=ie(o,this.staticRulesId);else{var r=ae(Xe(this.rules,e,t,n)),s=x(M(this.baseHash,r)>>>0);if(!t.hasNameForId(this.componentId,s)){var i=n(r,\".\".concat(s),void 0,this.componentId);t.insertRules(this.componentId,s,i)}o=ie(o,s),this.staticRulesId=s}else{for(var a=M(this.baseHash,n.hash),c=\"\",l=0;l<this.rules.length;l++){var u=this.rules[l];if(\"string\"==typeof u)c+=u,\"production\"!==process.env.NODE_ENV&&(a=M(a,u));else if(u){var p=ae(Xe(u,e,t,n));a=M(a,p+l),c+=p}}if(c){var d=x(a>>>0);t.hasNameForId(this.componentId,d)||t.insertRules(this.componentId,d,n(c,\".\".concat(d),void 0,this.componentId)),o=ie(o,d)}}return o},e}(),et=o.createContext(void 0),tt=et.Consumer;function nt(){var e=c(et);if(!e)throw he(18);return e}function ot(e){var n=o.useContext(et),r=i(function(){return function(e,n){if(!e)throw he(14);if(re(e)){var o=e(n);if(\"production\"!==process.env.NODE_ENV&&(null===o||Array.isArray(o)||\"object\"!=typeof o))throw he(7);return o}if(Array.isArray(e)||\"object\"!=typeof e)throw he(8);return n?t(t({},n),e):e}(e.theme,n)},[e.theme,n]);return e.children?o.createElement(et.Provider,{value:r},e.children):null}var rt={},st=new Set;function it(e,r,s){var i=se(e),a=e,c=!L(e),p=r.attrs,d=void 0===p?_:p,h=r.componentId,f=void 0===h?function(e,t){var n=\"string\"!=typeof e?\"sc\":R(e);rt[n]=(rt[n]||0)+1;var o=\"\".concat(n,\"-\").concat($(v+n+rt[n]));return t?\"\".concat(t,\"-\").concat(o):o}(r.displayName,r.parentComponentId):h,m=r.displayName,y=void 0===m?function(e){return L(e)?\"styled.\".concat(e):\"Styled(\".concat(B(e),\")\")}(e):m,g=r.displayName&&r.componentId?\"\".concat(R(r.displayName),\"-\").concat(r.componentId):r.componentId||f,S=i&&a.attrs?a.attrs.concat(d).filter(Boolean):d,w=r.shouldForwardProp;if(i&&a.shouldForwardProp){var b=a.shouldForwardProp;if(r.shouldForwardProp){var E=r.shouldForwardProp;w=function(e,t){return b(e,t)&&E(e,t)}}else w=b}var N=new Qe(s,g,i?a.componentStyle:void 0);function O(e,r){return function(e,r,s){var i=e.attrs,a=e.componentStyle,c=e.defaultProps,p=e.foldedComponentIds,d=e.styledComponentId,h=e.target,f=o.useContext(et),m=Ge(),y=e.shouldForwardProp||m.shouldForwardProp;\"production\"!==process.env.NODE_ENV&&l(d);var v=I(r,f,c)||C,g=function(e,n,o){for(var r,s=t(t({},n),{className:void 0,theme:o}),i=0;i<e.length;i+=1){var a=re(r=e[i])?r(s):r;for(var c in a)s[c]=\"className\"===c?ie(s[c],a[c]):\"style\"===c?t(t({},s[c]),a[c]):a[c]}return n.className&&(s.className=ie(s.className,n.className)),s}(i,r,v),S=g.as||h,w={};for(var b in g)void 0===g[b]||\"$\"===b[0]||\"as\"===b||\"theme\"===b&&g.theme===v||(\"forwardedAs\"===b?w.as=g.forwardedAs:y&&!y(b,S)||(w[b]=g[b],y||\"development\"!==process.env.NODE_ENV||n(b)||st.has(b)||!A.has(S)||(st.add(b),console.warn('styled-components: it looks like an unknown prop \"'.concat(b,'\" is being sent through to the DOM, which will likely trigger a React console error. If you would like automatic filtering of unknown props, you can opt-into that behavior via `<StyleSheetManager shouldForwardProp={...}>` (connect an API like `@emotion/is-prop-valid`) or consider using transient props (`$` prefix for automatic filtering.)')))));var E=function(e,t){var n=Ge(),o=e.generateAndInjectStyles(t,n.styleSheet,n.stylis);return\"production\"!==process.env.NODE_ENV&&l(o),o}(a,g);\"production\"!==process.env.NODE_ENV&&e.warnTooManyClasses&&e.warnTooManyClasses(E);var N=ie(p,d);return E&&(N+=\" \"+E),g.className&&(N+=\" \"+g.className),w[L(S)&&!A.has(S)?\"class\":\"className\"]=N,s&&(w.ref=s),u(S,w)}(D,e,r)}O.displayName=y;var D=o.forwardRef(O);return D.attrs=S,D.componentStyle=N,D.displayName=y,D.shouldForwardProp=w,D.foldedComponentIds=i?ie(a.foldedComponentIds,a.styledComponentId):\"\",D.styledComponentId=g,D.target=i?a.target:e,Object.defineProperty(D,\"defaultProps\",{get:function(){return this._foldedDefaultProps},set:function(e){this._foldedDefaultProps=i?function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var o=0,r=t;o<r.length;o++)le(e,r[o],!0);return e}({},a.defaultProps,e):e}}),\"production\"!==process.env.NODE_ENV&&(P(y,g),D.warnTooManyClasses=function(e,t){var n={},o=!1;return function(r){if(!o&&(n[r]=!0,Object.keys(n).length>=200)){var s=t?' with the id of \"'.concat(t,'\"'):\"\";console.warn(\"Over \".concat(200,\" classes were generated for component \").concat(e).concat(s,\".\\n\")+\"Consider using the attrs method, together with a style object for frequently changed styles.\\nExample:\\n const Component = styled.div.attrs(props => ({\\n style: {\\n background: props.background,\\n },\\n }))`width: 100%;`\\n\\n <Component />\"),o=!0,n={}}}}(y,g)),ue(D,function(){return\".\".concat(D.styledComponentId)}),c&&oe(D,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0}),D}function at(e,t){for(var n=[e[0]],o=0,r=t.length;o<r;o+=1)n.push(t[o],e[o+1]);return n}var ct=function(e){return Object.assign(e,{isCss:!0})};function lt(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];if(re(t)||ce(t))return ct(Xe(at(_,e([t],n,!0))));var r=t;return 0===n.length&&1===r.length&&\"string\"==typeof r[0]?Xe(r):ct(Xe(at(r,n)))}function ut(n,o,r){if(void 0===r&&(r=C),!o)throw he(1,o);var s=function(t){for(var s=[],i=1;i<arguments.length;i++)s[i-1]=arguments[i];return n(o,r,lt.apply(void 0,e([t],s,!1)))};return s.attrs=function(e){return ut(n,o,t(t({},r),{attrs:Array.prototype.concat(r.attrs,e).filter(Boolean)}))},s.withConfig=function(e){return ut(n,o,t(t({},r),e))},s}var pt=function(e){return ut(it,e)},dt=pt;A.forEach(function(e){dt[e]=pt(e)});var ht=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Ze(e),ke.registerId(this.componentId+1)}return e.prototype.createStyles=function(e,t,n,o){var r=o(ae(Xe(this.rules,t,n,o)),\"\"),s=this.componentId+e;n.insertRules(s,s,r)},e.prototype.removeStyles=function(e,t){t.clearRules(this.componentId+e)},e.prototype.renderStyles=function(e,t,n,o){e>2&&ke.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,o)},e}();function ft(n){for(var r=[],s=1;s<arguments.length;s++)r[s-1]=arguments[s];var i=lt.apply(void 0,e([n],r,!1)),a=\"sc-global-\".concat($(JSON.stringify(i))),c=new ht(i,a);\"production\"!==process.env.NODE_ENV&&P(a);var l=function(e){var t=Ge(),n=o.useContext(et),r=o.useRef(t.styleSheet.allocateGSInstance(a)).current;return\"production\"!==process.env.NODE_ENV&&o.Children.count(e.children)&&console.warn(\"The global style component \".concat(a,\" was given child JSX. createGlobalStyle does not render children.\")),\"production\"!==process.env.NODE_ENV&&i.some(function(e){return\"string\"==typeof e&&-1!==e.indexOf(\"@import\")})&&console.warn(\"Please do not use @import CSS syntax in createGlobalStyle at this time, as the CSSOM APIs we use in production do not handle it well. Instead, we recommend using a library such as react-helmet to inject a typical <link> meta tag to the stylesheet, or simply embedding it manually in your index.html <head> section for a simpler app.\"),t.styleSheet.server&&u(r,e,t.styleSheet,n,t.stylis),o.useLayoutEffect(function(){if(!t.styleSheet.server)return u(r,e,t.styleSheet,n,t.stylis),function(){return c.removeStyles(r,t.styleSheet)}},[r,e,t.styleSheet,n,t.stylis]),null};function u(e,n,o,r,s){if(c.isStatic)c.renderStyles(e,b,o,s);else{var i=t(t({},n),{theme:I(n,r,l.defaultProps)});c.renderStyles(e,i,o,s)}}return o.memo(l)}function mt(t){for(var n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.\");var r=ae(lt.apply(void 0,e([t],n,!1))),s=$(r);return new We(s,r)}function yt(e){var n=o.forwardRef(function(n,r){var s=I(n,o.useContext(et),e.defaultProps);return\"production\"!==process.env.NODE_ENV&&void 0===s&&console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class \"'.concat(B(e),'\"')),o.createElement(e,t({},n,{theme:s,ref:r}))});return n.displayName=\"WithTheme(\".concat(B(e),\")\"),oe(n,e)}var vt=function(){function e(){var e=this;this._emitSheetCSS=function(){var t=e.instance.toString();if(!t)return\"\";var n=Ce(),o=ae([n&&'nonce=\"'.concat(n,'\"'),\"\".concat(f,'=\"true\"'),\"\".concat(y,'=\"').concat(v,'\"')].filter(Boolean),\" \");return\"<style \".concat(o,\">\").concat(t,\"</style>\")},this.getStyleTags=function(){if(e.sealed)throw he(2);return e._emitSheetCSS()},this.getStyleElement=function(){var n;if(e.sealed)throw he(2);var r=e.instance.toString();if(!r)return[];var s=((n={})[f]=\"\",n[y]=v,n.dangerouslySetInnerHTML={__html:r},n),i=Ce();return i&&(s.nonce=i),[o.createElement(\"style\",t({},s,{key:\"sc-0-0\"}))]},this.seal=function(){e.sealed=!0},this.instance=new ke({isServer:!0}),this.sealed=!1}return e.prototype.collectStyles=function(e){if(this.sealed)throw he(2);return o.createElement(Ye,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw he(3)},e}(),gt={StyleSheet:ke,mainSheet:Me};\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"It looks like you've imported 'styled-components' on React Native.\\nPerhaps you're looking to import 'styled-components/native'?\\nRead more about this at https://www.styled-components.com/docs/basics#react-native\");var St=\"__sc-\".concat(f,\"__\");\"production\"!==process.env.NODE_ENV&&\"test\"!==process.env.NODE_ENV&&\"undefined\"!=typeof window&&(window[St]||(window[St]=0),1===window[St]&&console.warn(\"It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles to not render properly, errors during the rehydration process, a missing theme prop, and makes your application bigger without good reason.\\n\\nSee https://s-c.sh/2BAXzed for more info.\"),window[St]+=1);export{vt as ServerStyleSheet,Be as StyleSheetConsumer,$e as StyleSheetContext,Ye as StyleSheetManager,tt as ThemeConsumer,et as ThemeContext,ot as ThemeProvider,gt as __PRIVATE__,ft as createGlobalStyle,lt as css,dt as default,se as isStyledComponent,mt as keyframes,dt as styled,nt as useTheme,v as version,yt as withTheme};\n//# sourceMappingURL=styled-components.browser.esm.js.map\n","import styled from \"styled-components\";\n\nexport const DefaultStylesProvider = styled.div`\n /* Colors - Light Mode */\n --color-background: #ffffff;\n --color-foreground: #111827;\n --color-secondary-text: #6b7280;\n --color-muted: #64748b;\n --color-border: #e5e7eb;\n --color-border-subtle: #f3f4f6;\n --color-input-background: #ffffff;\n --color-input-border: #e2e8f0;\n --color-input-focus-border: #a5b4fc;\n --color-primary: #6366f1;\n --color-primary-hover: #4f46e5;\n --color-primary-background: rgba(99, 102, 241, 0.08);\n --color-primary-border: #e5e7ff;\n --color-primary-shadow: rgba(99, 102, 241, 0.15);\n --color-background-hover: #f8fafb;\n --color-background-subtle: #f9fafb;\n --color-border-hover: #d1d5db;\n --color-text: #1e293b;\n --color-error: #ef4444;\n --color-error-background: rgba(239, 68, 68, 0.1);\n --color-error-border: rgba(239, 68, 68, 0.2);\n --color-warning: #854d0e;\n --color-warning-background: #fef9c3;\n --color-warning-border: #fef08a;\n --color-warning-text: #92400e;\n --color-success: #166534;\n --color-success-background: #dcfce7;\n --color-success-border: rgba(34, 197, 94, 0.3);\n --color-success-text: #065f46;\n --color-info: #3b82f6;\n --color-info-background: #dbeafe;\n --color-info-border: rgba(59, 130, 246, 0.3);\n --color-info-text: #1e40af;\n --color-placeholder: #9ca3af;\n --color-text-disabled: #d1d5db;\n --color-background-disabled: #f3f4f6;\n --color-secondary: #6b7280;\n --color-secondary-hover: #4b5563;\n --color-primary-gradient: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n --color-divider: #e5e7eb;\n --color-scrollbar-track: #f5f5f5;\n --color-scrollbar-thumb: #d1d5db;\n --color-scrollbar-thumb-hover: #9ca3af;\n --color-shadow: rgba(0, 0, 0, 0.08);\n --color-shadow-light: rgba(0, 0, 0, 0.05);\n --color-shadow-medium: rgba(0, 0, 0, 0.15);\n --color-success-shadow: rgba(34, 197, 94, 0.2);\n --color-success-background-light: rgba(34, 197, 94, 0.05);\n --color-button-ripple: rgba(255, 255, 255, 0.2);\n --color-dialog-backdrop: rgba(0, 0, 0, 0.86);\n\n /* Spacing */\n --space-2xs: 2px;\n --space-xs: 4px;\n --space-sm: 8px;\n --space-md: 12px;\n --space-lg: 16px;\n --space-xl: 20px;\n --space-2xl: 24px;\n --space-3xl: 28px;\n\n /* Font Sizes */\n --font-2xs: 11px;\n --font-xs: 13px;\n --font-sm: 14px;\n --font-md: 16px;\n --font-lg: 18px;\n --font-xl: 20px;\n\n /* Border Radius */\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n .dark & {\n /* Colors - Dark Mode */\n --color-background: #1a1a1a;\n --color-foreground: #f5f5f5;\n --color-secondary-text: #a3a3a3;\n --color-muted: #737373;\n --color-border: #242424;\n --color-border-subtle: #333333;\n --color-input-background: #2a2a2a;\n --color-input-border: #525252;\n --color-input-focus-border: rgba(99, 102, 241, 0.5);\n --color-primary: #6366f1;\n --color-primary-hover: #4f46e5;\n --color-primary-background: rgba(99, 102, 241, 0.1);\n --color-primary-border: rgba(99, 102, 241, 0.3);\n --color-primary-shadow: rgba(99, 102, 241, 0.2);\n --color-background-hover: #262626;\n --color-background-subtle: #232323;\n --color-border-hover: #525252;\n --color-text: #f5f5f5;\n --color-error: #f87171;\n --color-error-background: rgba(248, 113, 113, 0.1);\n --color-error-border: rgba(248, 113, 113, 0.3);\n --color-warning: #fbbf24;\n --color-warning-background: rgba(251, 191, 36, 0.1);\n --color-warning-border: rgba(251, 191, 36, 0.3);\n --color-warning-text: #fbbf24;\n --color-success: #22c55e;\n --color-success-background: rgba(34, 197, 94, 0.1);\n --color-success-border: rgba(34, 197, 94, 0.3);\n --color-success-text: #22c55e;\n --color-info: #60a5fa;\n --color-info-background: rgba(96, 165, 250, 0.1);\n --color-info-border: rgba(96, 165, 250, 0.3);\n --color-info-text: #60a5fa;\n --color-placeholder: #6b7280;\n --color-text-disabled: #525252;\n --color-background-disabled: #2a2a2a;\n --color-secondary: #9ca3af;\n --color-secondary-hover: #d1d5db;\n --color-primary-gradient: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n --color-divider: #2a2a2a;\n --color-scrollbar-track: #2a2a2a;\n --color-scrollbar-thumb: #525252;\n --color-scrollbar-thumb-hover: #737373;\n --color-shadow: rgba(0, 0, 0, 0.1);\n --color-shadow-light: rgba(0, 0, 0, 0.08);\n --color-shadow-medium: rgba(0, 0, 0, 0.2);\n --color-success-shadow: rgba(34, 197, 94, 0.3);\n --color-success-background-light: rgba(34, 197, 94, 0.08);\n --color-button-ripple: rgba(255, 255, 255, 0.15);\n --color-dialog-backdrop: rgba(0, 0, 0, 0.9);\n }\n\n * {\n box-sizing: border-box;\n font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n scrollbar-width: thin;\n scrollbar-color: var(--color-scrollbar-thumb) var(--color-scrollbar-track);\n\n ::-webkit-scrollbar {\n width: var(--space-xs);\n }\n ::-webkit-scrollbar-track {\n background: var(--color-scrollbar-track);\n }\n\n ::-webkit-scrollbar-thumb {\n background: var(--color-scrollbar-thumb);\n border-radius: var(--radius-sm);\n }\n\n ::-webkit-scrollbar-thumb:hover {\n background: var(--color-scrollbar-thumb-hover);\n }\n }\n`;\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport styled from \"styled-components\";\n\nconst Container = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n`;\n\nconst InputGroup = styled.div`\n display: flex;\n gap: var(--space-xs);\n justify-content: center;\n`;\n\nconst InputBox = styled.input`\n width: 40px;\n height: 40px;\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n font-size: var(--font-md);\n color: var(--color-foreground);\n background: var(--color-input-background);\n text-align: center;\n transition: all 0.2s;\n\n &:focus {\n outline: none;\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px var(--color-input-focus-border);\n background: var(--color-background);\n }\n\n &::placeholder {\n color: var(--color-secondary-text);\n }\n`;\n\nconst ErrorMessage = styled.p`\n font-size: var(--font-2xs);\n color: var(--color-error);\n margin: 0;\n margin-top: var(--space-2xs);\n text-align: center;\n`;\n\nconst ResendButton = styled.button`\n background: none;\n border: none;\n color: var(--color-primary);\n font-size: var(--font-xs);\n font-weight: 500;\n cursor: pointer;\n padding: 0;\n margin-top: var(--space-2xs);\n text-align: center;\n width: 100%;\n\n &:hover:not(:disabled) {\n color: var(--color-primary-hover);\n }\n\n &:disabled {\n color: var(--color-secondary-text);\n cursor: not-allowed;\n }\n`;\n\nconst Timer = styled.span`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n display: block;\n text-align: center;\n`;\n\ninterface OTPInputProps {\n\tlength?: number;\n\tonComplete: ((code: string) => Promise<void>) | ((code: string) => void);\n\tonResend?: () => Promise<void>;\n\terror?: string;\n\tisSubmitting?: boolean;\n}\n\nexport function OTPInput({\n\tlength = 6,\n\tonComplete,\n\tonResend,\n\terror,\n\tisSubmitting = false,\n}: OTPInputProps) {\n\tconst [otp, setOtp] = useState<string[]>(new Array(length).fill(\"\"));\n\tconst [resendTimer, setResendTimer] = useState(60);\n\tconst [canResend, setCanResend] = useState(false);\n\tconst inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\n\tconst startTimer = useCallback(() => {\n\t\tconst timer = setInterval(() => {\n\t\t\tsetResendTimer((prev) => {\n\t\t\t\tif (prev <= 1) {\n\t\t\t\t\tsetCanResend(true);\n\t\t\t\t\tclearInterval(timer);\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn prev - 1;\n\t\t\t});\n\t\t}, 1000);\n\n\t\treturn timer;\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst timer = startTimer();\n\t\treturn () => clearInterval(timer);\n\t}, [startTimer]);\n\n\tconst handleResend = async () => {\n\t\tif (!canResend || isSubmitting || !onResend) return;\n\t\tawait onResend();\n\t\tsetCanResend(false);\n\t\tsetResendTimer(60);\n\t\tsetOtp(new Array(length).fill(\"\"));\n\t\tinputRefs.current[0]?.focus();\n\t\tstartTimer();\n\t};\n\n\tconst handleChange = (element: HTMLInputElement, index: number) => {\n\t\tif (isSubmitting) return;\n\n\t\tconst value = element.value;\n\t\tconst newOtp = [...otp];\n\n\t\tnewOtp[index] = value.replace(/[^0-9]/g, \"\");\n\n\t\tsetOtp(newOtp);\n\n\t\tconst combinedOtp = newOtp.join(\"\");\n\t\tif (combinedOtp.length === length) {\n\t\t\tonComplete(combinedOtp);\n\t\t}\n\n\t\tif (value && index < length - 1) {\n\t\t\tinputRefs.current[index + 1]?.focus();\n\t\t}\n\t};\n\n\tconst handleKeyDown = (\n\t\te: React.KeyboardEvent<HTMLInputElement>,\n\t\tindex: number,\n\t) => {\n\t\tif (isSubmitting) return;\n\n\t\tif (e.key === \"Backspace\" && !otp[index] && index > 0) {\n\t\t\tinputRefs.current[index - 1]?.focus();\n\t\t}\n\t};\n\n\tconst handlePaste = (\n\t\te: React.ClipboardEvent<HTMLInputElement>,\n\t\tindex: number,\n\t) => {\n\t\tif (isSubmitting) return;\n\n\t\te.preventDefault();\n\t\tconst pastedData = e.clipboardData.getData(\"text/plain\");\n\t\tconst pastedDigits = pastedData.replace(/[^0-9]/g, \"\").slice(0, length);\n\n\t\tif (pastedDigits.length === 0) return;\n\n\t\tconst newOtp = [...otp];\n\t\t\n\t\t// Fill in the digits starting from the current index\n\t\tfor (let i = 0; i < pastedDigits.length && index + i < length; i++) {\n\t\t\tnewOtp[index + i] = pastedDigits[i];\n\t\t}\n\n\t\t// If pasting from the first input and we have a complete code, fill from start\n\t\tif (index === 0 && pastedDigits.length === length) {\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tnewOtp[i] = pastedDigits[i];\n\t\t\t}\n\t\t}\n\n\t\tsetOtp(newOtp);\n\n\t\t// Check if we have a complete OTP\n\t\tconst combinedOtp = newOtp.join(\"\");\n\t\tif (combinedOtp.length === length) {\n\t\t\tonComplete(combinedOtp);\n\t\t\t// Focus the last input\n\t\t\tinputRefs.current[length - 1]?.focus();\n\t\t} else {\n\t\t\t// Focus the next empty input or the last filled input\n\t\t\tconst nextEmptyIndex = newOtp.findIndex((val, idx) => idx >= index && !val);\n\t\t\tif (nextEmptyIndex !== -1) {\n\t\t\t\tinputRefs.current[nextEmptyIndex]?.focus();\n\t\t\t} else {\n\t\t\t\tconst lastFilledIndex = newOtp.map((val, idx) => val ? idx : -1).filter(idx => idx !== -1).pop();\n\t\t\t\tif (lastFilledIndex !== undefined && lastFilledIndex < length - 1) {\n\t\t\t\t\tinputRefs.current[lastFilledIndex + 1]?.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\treturn (\n\t\t<Container>\n\t\t\t<InputGroup>\n\t\t\t\t{otp.map((digit, index) => (\n\t\t\t\t\t<InputBox\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: <explanation>\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tmaxLength={1}\n\t\t\t\t\t\tvalue={digit}\n\t\t\t\t\t\tonChange={(e) => handleChange(e.target, index)}\n\t\t\t\t\t\tonKeyDown={(e) => handleKeyDown(e, index)}\n\t\t\t\t\t\tonPaste={(e) => handlePaste(e, index)}\n\t\t\t\t\t\tref={(ref: HTMLInputElement | null) => {\n\t\t\t\t\t\t\tinputRefs.current[index] = ref;\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\tautoFocus={index === 0}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</InputGroup>\n\t\t\t{error && <ErrorMessage>{error}</ErrorMessage>}\n\t\t\t{onResend && (\n\t\t\t\t<div>\n\t\t\t\t\t{canResend ? (\n\t\t\t\t\t\t<ResendButton\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleResend}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tDidn't receive a code? Resend\n\t\t\t\t\t\t</ResendButton>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Timer>Resend code in {resendTimer}s</Timer>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Container>\n\t);\n}\n","export const GithubIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n width=\"800px\"\n height=\"800px\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-labelledby=\"githubIconTitle\"\n {...props}\n >\n <title id=\"githubIconTitle\">GitHub</title>\n <path d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.109-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.91 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\" />\n </svg>\n);\n","export const MicrosoftIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n width=\"800px\"\n height=\"800px\"\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n {...props}\n >\n <path fill=\"#F35325\" d=\"M1 1h6.5v6.5H1V1z\" />\n <path fill=\"#81BC06\" d=\"M8.5 1H15v6.5H8.5V1z\" />\n <path fill=\"#05A6F0\" d=\"M1 8.5h6.5V15H1V8.5z\" />\n <path fill=\"#FFBA08\" d=\"M8.5 8.5H15V15H8.5V8.5z\" />\n </svg>\n);\n","export const GoogleIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n width=\"800px\"\n height=\"800px\"\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n {...props}\n >\n <path\n fill=\"#4285F4\"\n d=\"M14.9 8.161c0-.476-.039-.954-.121-1.422h-6.64v2.695h3.802a3.24 3.24 0 01-1.407 2.127v1.75h2.269c1.332-1.22 2.097-3.02 2.097-5.15z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M8.14 15c1.898 0 3.499-.62 4.665-1.69l-2.268-1.749c-.631.427-1.446.669-2.395.669-1.836 0-3.393-1.232-3.952-2.888H1.85v1.803A7.044 7.044 0 008.14 15z\"\n />\n <path\n fill=\"#FBBC04\"\n d=\"M4.187 9.342a4.17 4.17 0 010-2.68V4.859H1.849a6.97 6.97 0 000 6.286l2.338-1.803z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M8.14 3.77a3.837 3.837 0 012.7 1.05l2.01-1.999a6.786 6.786 0 00-4.71-1.82 7.042 7.042 0 00-6.29 3.858L4.186 6.66c.556-1.658 2.116-2.89 3.952-2.89z\"\n />\n </svg>\n);\n","export const XIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n x=\"0px\"\n y=\"0px\"\n width=\"50\"\n height=\"50\"\n viewBox=\"0 0 50 50\"\n {...props}\n >\n <path d=\"M 6.9199219 6 L 21.136719 26.726562 L 6.2285156 44 L 9.40625 44 L 22.544922 28.777344 L 32.986328 44 L 43 44 L 28.123047 22.3125 L 42.203125 6 L 39.027344 6 L 26.716797 20.261719 L 16.933594 6 L 6.9199219 6 z\"></path>\n </svg>\n);\n","export const FacebookIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z\"/>\n </svg>\n);\n","export const LinkedInIcon = () => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n >\n <path \n fill=\"#0A66C2\" \n d=\"M12.225 12.225h-1.778V9.44c0-.664-.012-1.519-.925-1.519-.926 0-1.068.724-1.068 1.47v2.834H6.676V6.498h1.707v.783h.024c.348-.594.996-.95 1.684-.925 1.802 0 2.135 1.185 2.135 2.728l-.001 3.14zM4.67 5.715a1.037 1.037 0 01-1.032-1.031c0-.566.466-1.032 1.032-1.032.566 0 1.031.466 1.032 1.032 0 .566-.466 1.032-1.032 1.032zm.889 6.51h-1.78V6.498h1.78v5.727zM13.11 2H2.885A.88.88 0 002 2.866v10.268a.88.88 0 00.885.866h10.226a.882.882 0 00.889-.866V2.865a.88.88 0 00-.889-.864z\"\n />\n </svg>\n);","export const GitLabIcon = () => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 21.42L15.54 10.86H8.46L12 21.42Z\" fill=\"#E24329\"/>\n <path d=\"M12 21.42L8.46 10.86H2.28L12 21.42Z\" fill=\"#FC6D26\"/>\n <path d=\"M2.28 10.86L0.86 15.14C0.72 15.54 0.86 15.98 1.18 16.24L12 21.42L2.28 10.86Z\" fill=\"#FCA326\"/>\n <path d=\"M2.28 10.86H8.46L6.12 3.58C5.98 3.18 5.42 3.18 5.28 3.58L2.28 10.86Z\" fill=\"#E24329\"/>\n <path d=\"M12 21.42L15.54 10.86H21.72L12 21.42Z\" fill=\"#FC6D26\"/>\n <path d=\"M21.72 10.86L23.14 15.14C23.28 15.54 23.14 15.98 22.82 16.24L12 21.42L21.72 10.86Z\" fill=\"#FCA326\"/>\n <path d=\"M21.72 10.86H15.54L17.88 3.58C18.02 3.18 18.58 3.18 18.72 3.58L21.72 10.86Z\" fill=\"#E24329\"/>\n </svg>\n);","export const AppleIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"/>\n </svg>\n);\n","export const DiscordIcon = () => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 1024 1024\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"512\" cy=\"512\" r=\"512\" style={{fill: \"#5865f2\"}}/>\n <path \n d=\"M689.43 349a422.21 422.21 0 0 0-104.22-32.32 1.58 1.58 0 0 0-1.68.79 294.11 294.11 0 0 0-13 26.66 389.78 389.78 0 0 0-117.05 0 269.75 269.75 0 0 0-13.18-26.66 1.64 1.64 0 0 0-1.68-.79A421 421 0 0 0 334.44 349a1.49 1.49 0 0 0-.69.59c-66.37 99.17-84.55 195.9-75.63 291.41a1.76 1.76 0 0 0 .67 1.2 424.58 424.58 0 0 0 127.85 64.63 1.66 1.66 0 0 0 1.8-.59 303.45 303.45 0 0 0 26.15-42.54 1.62 1.62 0 0 0-.89-2.25 279.6 279.6 0 0 1-39.94-19 1.64 1.64 0 0 1-.16-2.72c2.68-2 5.37-4.1 7.93-6.22a1.58 1.58 0 0 1 1.65-.22c83.79 38.26 174.51 38.26 257.31 0a1.58 1.58 0 0 1 1.68.2c2.56 2.11 5.25 4.23 8 6.24a1.64 1.64 0 0 1-.14 2.72 262.37 262.37 0 0 1-40 19 1.63 1.63 0 0 0-.87 2.28 340.72 340.72 0 0 0 26.13 42.52 1.62 1.62 0 0 0 1.8.61 423.17 423.17 0 0 0 128-64.63 1.64 1.64 0 0 0 .67-1.18c10.68-110.44-17.88-206.38-75.7-291.42a1.3 1.3 0 0 0-.63-.63zM427.09 582.85c-25.23 0-46-23.16-46-51.6s20.38-51.6 46-51.6c25.83 0 46.42 23.36 46 51.6.02 28.44-20.37 51.6-46 51.6zm170.13 0c-25.23 0-46-23.16-46-51.6s20.38-51.6 46-51.6c25.83 0 46.42 23.36 46 51.6.01 28.44-20.17 51.6-46 51.6z\" \n style={{fill: \"#fff\"}}\n />\n </svg>\n);","import styled, { css } from \"styled-components\";\nimport { GithubIcon } from \"../icons/github\";\nimport { MicrosoftIcon } from \"../icons/microsoft\";\nimport { GoogleIcon } from \"../icons/google\";\nimport { XIcon } from \"../icons/x\";\nimport { FacebookIcon } from \"../icons/facebook\";\nimport { LinkedInIcon } from \"../icons/linkedin\";\nimport { GitLabIcon } from \"../icons/gitlab\";\nimport { AppleIcon } from \"../icons/apple\";\nimport { DiscordIcon } from \"../icons/discord\";\nimport { DeploymentSocialConnection } from \"@/types\";\n\nconst socialAuthProviders = {\n google_oauth: {\n shortLabel: \"Google\",\n fullLabel: \"Continue with Google\",\n icon: <GoogleIcon />,\n },\n microsoft_oauth: {\n shortLabel: \"Microsoft\",\n fullLabel: \"Continue with Microsoft\",\n icon: <MicrosoftIcon />,\n },\n github_oauth: {\n shortLabel: \"GitHub\",\n fullLabel: \"Continue with GitHub\",\n icon: <GithubIcon />,\n },\n x_oauth: {\n shortLabel: \"X\",\n fullLabel: \"Continue with X\",\n icon: <XIcon />,\n },\n facebook_oauth: {\n shortLabel: \"Facebook\",\n fullLabel: \"Continue with Facebook\",\n icon: <FacebookIcon />,\n },\n linkedin_oauth: {\n shortLabel: \"LinkedIn\",\n fullLabel: \"Continue with LinkedIn\",\n icon: <LinkedInIcon />,\n },\n gitlab_oauth: {\n shortLabel: \"GitLab\",\n fullLabel: \"Continue with GitLab\",\n icon: <GitLabIcon />,\n },\n apple_oauth: {\n shortLabel: \"Apple\",\n fullLabel: \"Continue with Apple\",\n icon: <AppleIcon />,\n },\n discord_oauth: {\n shortLabel: \"Discord\",\n fullLabel: \"Continue with Discord\",\n icon: <DiscordIcon />,\n },\n};\n\nconst SocialAuthButtonsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n margin-bottom: var(--space-md);\n`;\n\nconst ButtonRow = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-xs);\n`;\n\nconst SocialAuthButton = styled.button<{\n $isWide?: boolean;\n $totalProviders: number;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-sm);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n background: var(--color-background);\n cursor: pointer;\n transition: all 0.2s;\n font-size: var(--font-xs);\n color: var(--color-foreground);\n font-weight: 500;\n height: 34px;\n\n ${(props) => {\n if (props.$totalProviders <= 6) {\n return css`\n flex: 1 1 0;\n `;\n }\n return css`\n flex: 0 0 calc((100% - (var(--space-xs) * 5)) / 6);\n ${props.$isWide &&\n css`\n flex: 0 0 calc((100% - (var(--space-xs) * 3)) / 4);\n `}\n `;\n }}\n\n &:hover {\n background-color: var(--color-background-hover);\n border-color: var(--color-border-hover);\n }\n\n svg {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n }\n`;\n\ninterface SocialAuthButtonsProps {\n connections: DeploymentSocialConnection[];\n callback: (provider: DeploymentSocialConnection) => void;\n}\n\nexport const SocialAuthButtons = ({\n connections,\n callback,\n}: SocialAuthButtonsProps) => {\n const organizeButtons = () => {\n if (connections.length <= 6) {\n return [connections];\n }\n if (connections.length <= 12) {\n return [connections.slice(0, 4), connections.slice(4)];\n }\n return [\n connections.slice(0, 4),\n connections.slice(4, 8),\n connections.slice(8),\n ];\n };\n\n const totalProviders = connections.length;\n\n const buttonRows = organizeButtons();\n\n return (\n <SocialAuthButtonsContainer>\n {buttonRows.map((row, rowIndex) => (\n <ButtonRow key={`row-${rowIndex}`}>\n {row.map((connection, connectionIndex) => {\n const provider =\n connection.provider as keyof typeof socialAuthProviders;\n return (\n <SocialAuthButton\n key={`${connection.provider}-${connectionIndex}`}\n onClick={() => callback(connection)}\n type=\"button\"\n $isWide={\n buttonRows.length > 1 && rowIndex < buttonRows.length - 1\n }\n $totalProviders={totalProviders}\n >\n {socialAuthProviders[provider].icon}\n {totalProviders < 3 && (\n <span>\n {totalProviders === 1\n ? socialAuthProviders[provider].fullLabel\n : socialAuthProviders[provider].shortLabel}\n </span>\n )}\n </SocialAuthButton>\n );\n })}\n </ButtonRow>\n ))}\n </SocialAuthButtonsContainer>\n );\n};\n","import React, { useCallback } from \"react\";\nimport { useNavigation } from \"@/hooks\";\n\nexport interface NavigationProps {\n to: string;\n replace?: boolean;\n children?: React.ReactNode;\n [key: string]: any;\n}\n\nexport const NavigationLink: React.FC<NavigationProps> = ({\n to,\n replace,\n children,\n ...props\n}) => {\n const { navigate } = useNavigation();\n\n const handleNavigation = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n navigate(to, { replace });\n },\n [to, replace, navigate]\n );\n\n return (\n <a href={to} onClick={handleNavigation} {...props}>\n {children}\n </a>\n );\n};\n","import styled from \"styled-components\";\n\nconst breakpoints = {\n\tsm: \"36rem\",\n\tmd: \"48rem\",\n\tlg: \"62rem\",\n\txl: \"75rem\",\n};\n\nexport const Input = styled.input`\n padding: var(--space-sm) var(--space-md);\n width: 100%;\n height: 36px;\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n font-size: var(--font-xs);\n color: var(--color-foreground);\n background: var(--color-input-background);\n transition: all 0.2s;\n\n &:not(:placeholder-shown):invalid {\n outline: none;\n border: 0.0625rem solid var(--color-error);\n background: var(--color-background);\n }\n\n &:not(:placeholder-shown):valid {\n outline: none;\n background: var(--color-background);\n }\n\n &:focus:valid {\n outline: none;\n border-color: var(--color-success);\n box-shadow: 0 0 0 0.1875rem var(--color-success-background);\n background: var(--color-background);\n }\n\n &:focus:invalid {\n outline: none;\n border-color: var(--color-primary);\n box-shadow: 0 0 0 0.1875rem var(--color-input-focus-border);\n background: var(--color-background);\n }\n\n &::placeholder {\n color: var(--color-secondary-text);\n }\n\n @media (max-width: ${breakpoints.sm}) {\n height: 32px;\n font-size: var(--font-2xs);\n padding: var(--space-xs) var(--space-sm);\n }\n`;\n","interface Country {\n\tname: string;\n\tcode: string;\n\tdialCode: string;\n\tflag: string;\n}\n\nexport const countries: Country[] = [\n\t{ name: \"Afghanistan\", code: \"AF\", dialCode: \"+93\", flag: \"🇦🇫\" },\n\t{ name: \"Albania\", code: \"AL\", dialCode: \"+355\", flag: \"🇦🇱\" },\n\t{ name: \"Algeria\", code: \"DZ\", dialCode: \"+213\", flag: \"🇩🇿\" },\n\t{ name: \"American Samoa\", code: \"AS\", dialCode: \"+1684\", flag: \"🇺🇸\" },\n\t{ name: \"Andorra\", code: \"AD\", dialCode: \"+376\", flag: \"🇦🇩\" },\n\t{ name: \"Angola\", code: \"AO\", dialCode: \"+244\", flag: \"🇦🇴\" },\n\t{ name: \"Anguilla\", code: \"AI\", dialCode: \"+1264\", flag: \"🇦🇮\" },\n\t{ name: \"Antarctica\", code: \"AQ\", dialCode: \"+672\", flag: \"🇦🇶\" },\n\t{ name: \"Antigua and Barbuda\", code: \"AG\", dialCode: \"+1268\", flag: \"🇦🇬\" },\n\t{ name: \"Argentina\", code: \"AR\", dialCode: \"+54\", flag: \"🇦🇷\" },\n\t{ name: \"Armenia\", code: \"AM\", dialCode: \"+374\", flag: \"🇦🇲\" },\n\t{ name: \"Aruba\", code: \"AW\", dialCode: \"+297\", flag: \"🇦🇼\" },\n\t{ name: \"Australia\", code: \"AU\", dialCode: \"+61\", flag: \"🇦🇺\" },\n\t{ name: \"Austria\", code: \"AT\", dialCode: \"+43\", flag: \"🇦🇹\" },\n\t{ name: \"Azerbaijan\", code: \"AZ\", dialCode: \"+994\", flag: \"🇦🇿\" },\n\t{ name: \"Bahamas\", code: \"BS\", dialCode: \"+1242\", flag: \"🇧🇸\" },\n\t{ name: \"Bahrain\", code: \"BH\", dialCode: \"+973\", flag: \"🇧🇭\" },\n\t{ name: \"Bangladesh\", code: \"BD\", dialCode: \"+880\", flag: \"🇧🇩\" },\n\t{ name: \"Barbados\", code: \"BB\", dialCode: \"+1246\", flag: \"🇧🇧\" },\n\t{ name: \"Belarus\", code: \"BY\", dialCode: \"+375\", flag: \"🇧🇾\" },\n\t{ name: \"Belgium\", code: \"BE\", dialCode: \"+32\", flag: \"🇧🇪\" },\n\t{ name: \"Belize\", code: \"BZ\", dialCode: \"+501\", flag: \"🇧🇿\" },\n\t{ name: \"Benin\", code: \"BJ\", dialCode: \"+229\", flag: \"🇧🇯\" },\n\t{ name: \"Bermuda\", code: \"BM\", dialCode: \"+1441\", flag: \"🇧🇲\" },\n\t{ name: \"Bhutan\", code: \"BT\", dialCode: \"+975\", flag: \"🇧🇹\" },\n\t{ name: \"Bolivia\", code: \"BO\", dialCode: \"+591\", flag: \"🇧🇴\" },\n\t{ name: \"Bosnia and Herzegovina\", code: \"BA\", dialCode: \"+387\", flag: \"🇧🇦\" },\n\t{ name: \"Botswana\", code: \"BW\", dialCode: \"+267\", flag: \"🇧🇼\" },\n\t{ name: \"Brazil\", code: \"BR\", dialCode: \"+55\", flag: \"🇧🇷\" },\n\t{\n\t\tname: \"British Indian Ocean Territory\",\n\t\tcode: \"IO\",\n\t\tdialCode: \"+246\",\n\t\tflag: \"🇮🇴\",\n\t},\n\t{ name: \"British Virgin Islands\", code: \"VG\", dialCode: \"+1284\", flag: \"🇻🇬\" },\n\t{ name: \"Brunei\", code: \"BN\", dialCode: \"+673\", flag: \"🇧🇳\" },\n\t{ name: \"Bulgaria\", code: \"BG\", dialCode: \"+359\", flag: \"🇧🇬\" },\n\t{ name: \"Burkina Faso\", code: \"BF\", dialCode: \"+226\", flag: \"🇧🇫\" },\n\t{ name: \"Burundi\", code: \"BI\", dialCode: \"+257\", flag: \"🇧🇮\" },\n\t{ name: \"Cambodia\", code: \"KH\", dialCode: \"+855\", flag: \"🇰🇭\" },\n\t{ name: \"Cameroon\", code: \"CM\", dialCode: \"+237\", flag: \"🇨🇲\" },\n\t{ name: \"Canada\", code: \"CA\", dialCode: \"+1\", flag: \"🇨🇦\" },\n\t{ name: \"Cape Verde\", code: \"CV\", dialCode: \"+238\", flag: \"🇨🇻\" },\n\t{ name: \"Cayman Islands\", code: \"KY\", dialCode: \"+1345\", flag: \"🇰🇾\" },\n\t{\n\t\tname: \"Central African Republic\",\n\t\tcode: \"CF\",\n\t\tdialCode: \"+236\",\n\t\tflag: \"🇨🇫\",\n\t},\n\t{ name: \"Chad\", code: \"TD\", dialCode: \"+235\", flag: \"🇹🇩\" },\n\t{ name: \"Chile\", code: \"CL\", dialCode: \"+56\", flag: \"🇨🇱\" },\n\t{ name: \"China\", code: \"CN\", dialCode: \"+86\", flag: \"🇨🇳\" },\n\t{ name: \"Christmas Island\", code: \"CX\", dialCode: \"+61\", flag: \"🇨🇽\" },\n\t{ name: \"Cocos Islands\", code: \"CC\", dialCode: \"+61\", flag: \"🇨🇨\" },\n\t{ name: \"Colombia\", code: \"CO\", dialCode: \"+57\", flag: \"🇨🇴\" },\n\t{ name: \"Comoros\", code: \"KM\", dialCode: \"+269\", flag: \"🇰🇲\" },\n\t{ name: \"Cook Islands\", code: \"CK\", dialCode: \"+682\", flag: \"🇨🇰\" },\n\t{ name: \"Costa Rica\", code: \"CR\", dialCode: \"+506\", flag: \"🇨🇷\" },\n\t{ name: \"Croatia\", code: \"HR\", dialCode: \"+385\", flag: \"🇭🇷\" },\n\t{ name: \"Cuba\", code: \"CU\", dialCode: \"+53\", flag: \"🇨🇺\" },\n\t{ name: \"Curacao\", code: \"CW\", dialCode: \"+599\", flag: \"🇨🇼\" },\n\t{ name: \"Cyprus\", code: \"CY\", dialCode: \"+357\", flag: \"🇨🇾\" },\n\t{ name: \"Czech Republic\", code: \"CZ\", dialCode: \"+420\", flag: \"🇨🇿\" },\n\t{\n\t\tname: \"Democratic Republic of the Congo\",\n\t\tcode: \"CD\",\n\t\tdialCode: \"+243\",\n\t\tflag: \"🇨🇩\",\n\t},\n\t{ name: \"Denmark\", code: \"DK\", dialCode: \"+45\", flag: \"🇩🇰\" },\n\t{ name: \"Djibouti\", code: \"DJ\", dialCode: \"+253\", flag: \"🇩🇯\" },\n\t{ name: \"Dominica\", code: \"DM\", dialCode: \"+1767\", flag: \"🇩🇲\" },\n\t{ name: \"Dominican Republic\", code: \"DO\", dialCode: \"+1849\", flag: \"🇩🇴\" },\n\t{ name: \"East Timor\", code: \"TL\", dialCode: \"+670\", flag: \"🇹🇱\" },\n\t{ name: \"Ecuador\", code: \"EC\", dialCode: \"+593\", flag: \"🇪🇨\" },\n\t{ name: \"Egypt\", code: \"EG\", dialCode: \"+20\", flag: \"🇪🇬\" },\n\t{ name: \"El Salvador\", code: \"SV\", dialCode: \"+503\", flag: \"🇸🇻\" },\n\t{ name: \"Equatorial Guinea\", code: \"GQ\", dialCode: \"+240\", flag: \"🇬🇶\" },\n\t{ name: \"Eritrea\", code: \"ER\", dialCode: \"+291\", flag: \"🇪🇷\" },\n\t{ name: \"Estonia\", code: \"EE\", dialCode: \"+372\", flag: \"🇪🇪\" },\n\t{ name: \"Ethiopia\", code: \"ET\", dialCode: \"+251\", flag: \"🇪🇹\" },\n\t{ name: \"Falkland Islands\", code: \"FK\", dialCode: \"+500\", flag: \"🇫🇰\" },\n\t{ name: \"Faroe Islands\", code: \"FO\", dialCode: \"+298\", flag: \"🇫🇴\" },\n\t{ name: \"Fiji\", code: \"FJ\", dialCode: \"+679\", flag: \"🇫🇯\" },\n\t{ name: \"Finland\", code: \"FI\", dialCode: \"+358\", flag: \"🇫🇮\" },\n\t{ name: \"France\", code: \"FR\", dialCode: \"+33\", flag: \"🇫🇷\" },\n\t{ name: \"French Polynesia\", code: \"PF\", dialCode: \"+689\", flag: \"🇵🇫\" },\n\t{ name: \"Gabon\", code: \"GA\", dialCode: \"+241\", flag: \"🇬🇦\" },\n\t{ name: \"Gambia\", code: \"GM\", dialCode: \"+220\", flag: \"🇬🇲\" },\n\t{ name: \"Georgia\", code: \"GE\", dialCode: \"+995\", flag: \"🇬🇪\" },\n\t{ name: \"Germany\", code: \"DE\", dialCode: \"+49\", flag: \"🇩🇪\" },\n\t{ name: \"Ghana\", code: \"GH\", dialCode: \"+233\", flag: \"🇬🇭\" },\n\t{ name: \"Gibraltar\", code: \"GI\", dialCode: \"+350\", flag: \"🇬🇮\" },\n\t{ name: \"Greece\", code: \"GR\", dialCode: \"+30\", flag: \"🇬🇷\" },\n\t{ name: \"Greenland\", code: \"GL\", dialCode: \"+299\", flag: \"🇬🇱\" },\n\t{ name: \"Grenada\", code: \"GD\", dialCode: \"+1473\", flag: \"🇬🇩\" },\n\t{ name: \"Guam\", code: \"GU\", dialCode: \"+1671\", flag: \"🇬🇺\" },\n\t{ name: \"Guatemala\", code: \"GT\", dialCode: \"+502\", flag: \"🇬🇹\" },\n\t{ name: \"Guernsey\", code: \"GG\", dialCode: \"+44\", flag: \"🇬🇬\" },\n\t{ name: \"Guinea\", code: \"GN\", dialCode: \"+224\", flag: \"🇬🇳\" },\n\t{ name: \"Guinea-Bissau\", code: \"GW\", dialCode: \"+245\", flag: \"🇬🇼\" },\n\t{ name: \"Guyana\", code: \"GY\", dialCode: \"+592\", flag: \"🇬🇾\" },\n\t{ name: \"Haiti\", code: \"HT\", dialCode: \"+509\", flag: \"🇭🇹\" },\n\t{ name: \"Honduras\", code: \"HN\", dialCode: \"+504\", flag: \"🇭🇳\" },\n\t{ name: \"Hong Kong\", code: \"HK\", dialCode: \"+852\", flag: \"🇭🇰\" },\n\t{ name: \"Hungary\", code: \"HU\", dialCode: \"+36\", flag: \"🇭🇺\" },\n\t{ name: \"Iceland\", code: \"IS\", dialCode: \"+354\", flag: \"🇮🇸\" },\n\t{ name: \"India\", code: \"IN\", dialCode: \"+91\", flag: \"🇮🇳\" },\n\t{ name: \"Indonesia\", code: \"ID\", dialCode: \"+62\", flag: \"🇮🇩\" },\n\t{ name: \"Iran\", code: \"IR\", dialCode: \"+98\", flag: \"🇮🇷\" },\n\t{ name: \"Iraq\", code: \"IQ\", dialCode: \"+964\", flag: \"🇮🇶\" },\n\t{ name: \"Ireland\", code: \"IE\", dialCode: \"+353\", flag: \"🇮🇪\" },\n\t{ name: \"Isle of Man\", code: \"IM\", dialCode: \"+44\", flag: \"🇮🇲\" },\n\t{ name: \"Israel\", code: \"IL\", dialCode: \"+972\", flag: \"🇮🇱\" },\n\t{ name: \"Italy\", code: \"IT\", dialCode: \"+39\", flag: \"🇮🇹\" },\n\t{ name: \"Ivory Coast\", code: \"CI\", dialCode: \"+225\", flag: \"🇨🇮\" },\n\t{ name: \"Jamaica\", code: \"JM\", dialCode: \"+1876\", flag: \"🇯🇲\" },\n\t{ name: \"Japan\", code: \"JP\", dialCode: \"+81\", flag: \"🇯🇵\" },\n\t{ name: \"Jersey\", code: \"JE\", dialCode: \"+44\", flag: \"🇬🇬\" },\n\t{ name: \"Jordan\", code: \"JO\", dialCode: \"+962\", flag: \"🇯🇴\" },\n\t{ name: \"Kazakhstan\", code: \"KZ\", dialCode: \"+7\", flag: \"🇰🇿\" },\n\t{ name: \"Kenya\", code: \"KE\", dialCode: \"+254\", flag: \"🇰🇪\" },\n\t{ name: \"Kiribati\", code: \"KI\", dialCode: \"+686\", flag: \"🇰🇮\" },\n\t{ name: \"Kosovo\", code: \"XK\", dialCode: \"+383\", flag: \"🇽🇰\" },\n\t{ name: \"Kuwait\", code: \"KW\", dialCode: \"+965\", flag: \"🇰🇼\" },\n\t{ name: \"Kyrgyzstan\", code: \"KG\", dialCode: \"+996\", flag: \"🇰🇬\" },\n\t{ name: \"Laos\", code: \"LA\", dialCode: \"+856\", flag: \"🇱🇦\" },\n\t{ name: \"Latvia\", code: \"LV\", dialCode: \"+371\", flag: \"🇱🇻\" },\n\t{ name: \"Lebanon\", code: \"LB\", dialCode: \"+961\", flag: \"🇱🇧\" },\n\t{ name: \"Lesotho\", code: \"LS\", dialCode: \"+266\", flag: \"🇱🇸\" },\n\t{ name: \"Liberia\", code: \"LR\", dialCode: \"+231\", flag: \"🇱🇷\" },\n\t{ name: \"Libya\", code: \"LY\", dialCode: \"+218\", flag: \"🇱🇾\" },\n\t{ name: \"Liechtenstein\", code: \"LI\", dialCode: \"+423\", flag: \"🇱🇮\" },\n\t{ name: \"Lithuania\", code: \"LT\", dialCode: \"+370\", flag: \"🇱🇹\" },\n\t{ name: \"Luxembourg\", code: \"LU\", dialCode: \"+352\", flag: \"🇱🇺\" },\n\t{ name: \"Macau\", code: \"MO\", dialCode: \"+853\", flag: \"🇲🇴\" },\n\t{ name: \"Macedonia\", code: \"MK\", dialCode: \"+389\", flag: \"🇲🇰\" },\n\t{ name: \"Madagascar\", code: \"MG\", dialCode: \"+261\", flag: \"🇲🇬\" },\n\t{ name: \"Malawi\", code: \"MW\", dialCode: \"+265\", flag: \"🇲🇼\" },\n\t{ name: \"Malaysia\", code: \"MY\", dialCode: \"+60\", flag: \"🇲🇾\" },\n\t{ name: \"Maldives\", code: \"MV\", dialCode: \"+960\", flag: \"🇲🇻\" },\n\t{ name: \"Mali\", code: \"ML\", dialCode: \"+223\", flag: \"🇲🇱\" },\n\t{ name: \"Malta\", code: \"MT\", dialCode: \"+356\", flag: \"🇲🇹\" },\n\t{ name: \"Marshall Islands\", code: \"MH\", dialCode: \"+692\", flag: \"🇲🇭\" },\n\t{ name: \"Mauritania\", code: \"MR\", dialCode: \"+222\", flag: \"🇲🇷\" },\n\t{ name: \"Mauritius\", code: \"MU\", dialCode: \"+230\", flag: \"🇲🇺\" },\n\t{ name: \"Mayotte\", code: \"YT\", dialCode: \"+262\", flag: \"🇾🇹\" },\n\t{ name: \"Mexico\", code: \"MX\", dialCode: \"+52\", flag: \"🇲🇽\" },\n\t{ name: \"Micronesia\", code: \"FM\", dialCode: \"+691\", flag: \"🇫🇲\" },\n\t{ name: \"Moldova\", code: \"MD\", dialCode: \"+373\", flag: \"🇲🇩\" },\n\t{ name: \"Monaco\", code: \"MC\", dialCode: \"+377\", flag: \"🇲🇨\" },\n\t{ name: \"Mongolia\", code: \"MN\", dialCode: \"+976\", flag: \"🇲🇳\" },\n\t{ name: \"Montenegro\", code: \"ME\", dialCode: \"+382\", flag: \"🇲🇪\" },\n\t{ name: \"Montserrat\", code: \"MS\", dialCode: \"+1664\", flag: \"🇲🇸\" },\n\t{ name: \"Morocco\", code: \"MA\", dialCode: \"+212\", flag: \"🇲🇦\" },\n\t{ name: \"Mozambique\", code: \"MZ\", dialCode: \"+258\", flag: \"🇲🇿\" },\n\t{ name: \"Myanmar\", code: \"MM\", dialCode: \"+95\", flag: \"🇲🇲\" },\n\t{ name: \"Namibia\", code: \"NA\", dialCode: \"+264\", flag: \"🇳🇦\" },\n\t{ name: \"Nauru\", code: \"NR\", dialCode: \"+674\", flag: \"🇳🇷\" },\n\t{ name: \"Nepal\", code: \"NP\", dialCode: \"+977\", flag: \"🇳🇵\" },\n\t{ name: \"Netherlands\", code: \"NL\", dialCode: \"+31\", flag: \"🇳🇱\" },\n\t{ name: \"Netherlands Antilles\", code: \"AN\", dialCode: \"+599\", flag: \"🇳🇱\" },\n\t{ name: \"New Caledonia\", code: \"NC\", dialCode: \"+687\", flag: \"🇳🇨\" },\n\t{ name: \"New Zealand\", code: \"NZ\", dialCode: \"+64\", flag: \"🇳🇿\" },\n\t{ name: \"Nicaragua\", code: \"NI\", dialCode: \"+505\", flag: \"🇳🇮\" },\n\t{ name: \"Niger\", code: \"NE\", dialCode: \"+227\", flag: \"🇳🇪\" },\n\t{ name: \"Nigeria\", code: \"NG\", dialCode: \"+234\", flag: \"🇳🇬\" },\n\t{ name: \"Niue\", code: \"NU\", dialCode: \"+683\", flag: \"🇳🇺\" },\n\t{ name: \"North Korea\", code: \"KP\", dialCode: \"+850\", flag: \"🇰🇵\" },\n\t{\n\t\tname: \"Northern Mariana Islands\",\n\t\tcode: \"MP\",\n\t\tdialCode: \"+1670\",\n\t\tflag: \"🇲🇵\",\n\t},\n\t{ name: \"Norway\", code: \"NO\", dialCode: \"+47\", flag: \"🇳🇴\" },\n\t{ name: \"Oman\", code: \"OM\", dialCode: \"+968\", flag: \"🇴🇲\" },\n\t{ name: \"Pakistan\", code: \"PK\", dialCode: \"+92\", flag: \"🇵🇰\" },\n\t{ name: \"Palau\", code: \"PW\", dialCode: \"+680\", flag: \"🇵🇼\" },\n\t{ name: \"Palestine\", code: \"PS\", dialCode: \"+970\", flag: \"🇵🇸\" },\n\t{ name: \"Panama\", code: \"PA\", dialCode: \"+507\", flag: \"🇵🇦\" },\n\t{ name: \"Papua New Guinea\", code: \"PG\", dialCode: \"+675\", flag: \"🇵🇬\" },\n\t{ name: \"Paraguay\", code: \"PY\", dialCode: \"+595\", flag: \"🇵🇾\" },\n\t{ name: \"Peru\", code: \"PE\", dialCode: \"+51\", flag: \"🇵🇪\" },\n\t{ name: \"Philippines\", code: \"PH\", dialCode: \"+63\", flag: \"🇵🇭\" },\n\t{ name: \"Pitcairn\", code: \"PN\", dialCode: \"+64\", flag: \"🇵🇳\" },\n\t{ name: \"Poland\", code: \"PL\", dialCode: \"+48\", flag: \"🇵🇱\" },\n\t{ name: \"Portugal\", code: \"PT\", dialCode: \"+351\", flag: \"🇵🇹\" },\n\t{ name: \"Puerto Rico\", code: \"PR\", dialCode: \"+1939\", flag: \"🇵🇷\" },\n\t{ name: \"Qatar\", code: \"QA\", dialCode: \"+974\", flag: \"🇶🇦\" },\n\t{ name: \"Republic of the Congo\", code: \"CG\", dialCode: \"+242\", flag: \"🇨🇬\" },\n\t{ name: \"Reunion\", code: \"RE\", dialCode: \"+262\", flag: \"🇷🇪\" },\n\t{ name: \"Romania\", code: \"RO\", dialCode: \"+40\", flag: \"🇷🇴\" },\n\t{ name: \"Russia\", code: \"RU\", dialCode: \"+7\", flag: \"🇷🇺\" },\n\t{ name: \"Rwanda\", code: \"RW\", dialCode: \"+250\", flag: \"🇷🇼\" },\n\t{ name: \"Saint Barthelemy\", code: \"BL\", dialCode: \"+590\", flag: \"🇧🇱\" },\n\t{ name: \"Saint Helena\", code: \"SH\", dialCode: \"+290\", flag: \"🇸🇭\" },\n\t{ name: \"Saint Kitts and Nevis\", code: \"KN\", dialCode: \"+1869\", flag: \"🇰🇳\" },\n\t{ name: \"Saint Lucia\", code: \"LC\", dialCode: \"+1758\", flag: \"🇱🇨\" },\n\t{ name: \"Saint Martin\", code: \"MF\", dialCode: \"+590\", flag: \"🇲🇫\" },\n\t{\n\t\tname: \"Saint Pierre and Miquelon\",\n\t\tcode: \"PM\",\n\t\tdialCode: \"+508\",\n\t\tflag: \"🇵🇲\",\n\t},\n\t{\n\t\tname: \"Saint Vincent and the Grenadines\",\n\t\tcode: \"VC\",\n\t\tdialCode: \"+1784\",\n\t\tflag: \"🇻🇨\",\n\t},\n\t{ name: \"Samoa\", code: \"WS\", dialCode: \"+685\", flag: \"🇼🇸\" },\n\t{ name: \"San Marino\", code: \"SM\", dialCode: \"+378\", flag: \"🇸🇲\" },\n\t{ name: \"Sao Tome and Principe\", code: \"ST\", dialCode: \"+239\", flag: \"🇸🇹\" },\n\t{ name: \"Saudi Arabia\", code: \"SA\", dialCode: \"+966\", flag: \"🇸🇦\" },\n\t{ name: \"Senegal\", code: \"SN\", dialCode: \"+221\", flag: \"🇸🇳\" },\n\t{ name: \"Serbia\", code: \"RS\", dialCode: \"+381\", flag: \"🇷🇸\" },\n\t{ name: \"Seychelles\", code: \"SC\", dialCode: \"+248\", flag: \"🇸🇨\" },\n\t{ name: \"Sierra Leone\", code: \"SL\", dialCode: \"+232\", flag: \"🇸🇱\" },\n\t{ name: \"Singapore\", code: \"SG\", dialCode: \"+65\", flag: \"🇸🇬\" },\n\t{ name: \"Sint Maarten\", code: \"SX\", dialCode: \"+1721\", flag: \"🇸🇽\" },\n\t{ name: \"Slovakia\", code: \"SK\", dialCode: \"+421\", flag: \"🇸🇰\" },\n\t{ name: \"Slovenia\", code: \"SI\", dialCode: \"+386\", flag: \"🇸🇮\" },\n\t{ name: \"Solomon Islands\", code: \"SB\", dialCode: \"+677\", flag: \"🇸🇧\" },\n\t{ name: \"Somalia\", code: \"SO\", dialCode: \"+252\", flag: \"🇸🇴\" },\n\t{ name: \"South Africa\", code: \"ZA\", dialCode: \"+27\", flag: \"🇿🇦\" },\n\t{ name: \"South Korea\", code: \"KR\", dialCode: \"+82\", flag: \"🇰🇷\" },\n\t{ name: \"South Sudan\", code: \"SS\", dialCode: \"+211\", flag: \"🇸🇸\" },\n\t{ name: \"Spain\", code: \"ES\", dialCode: \"+34\", flag: \"🇪🇸\" },\n\t{ name: \"Sri Lanka\", code: \"LK\", dialCode: \"+94\", flag: \"🇱🇰\" },\n\t{ name: \"Sudan\", code: \"SD\", dialCode: \"+249\", flag: \"🇸🇩\" },\n\t{ name: \"Suriname\", code: \"SR\", dialCode: \"+597\", flag: \"🇸🇷\" },\n\t{ name: \"Svalbard and Jan Mayen\", code: \"SJ\", dialCode: \"+47\", flag: \"🇸🇯\" },\n\t{ name: \"Swaziland\", code: \"SZ\", dialCode: \"+268\", flag: \"🇸🇿\" },\n\t{ name: \"Sweden\", code: \"SE\", dialCode: \"+46\", flag: \"🇸🇪\" },\n\t{ name: \"Switzerland\", code: \"CH\", dialCode: \"+41\", flag: \"🇨🇭\" },\n\t{ name: \"Syria\", code: \"SY\", dialCode: \"+963\", flag: \"🇸🇾\" },\n\t{ name: \"Taiwan\", code: \"TW\", dialCode: \"+886\", flag: \"🇹🇼\" },\n\t{ name: \"Tajikistan\", code: \"TJ\", dialCode: \"+992\", flag: \"🇹🇯\" },\n\t{ name: \"Tanzania\", code: \"TZ\", dialCode: \"+255\", flag: \"🇹🇿\" },\n\t{ name: \"Thailand\", code: \"TH\", dialCode: \"+66\", flag: \"🇹🇭\" },\n\t{ name: \"Togo\", code: \"TG\", dialCode: \"+228\", flag: \"🇹🇬\" },\n\t{ name: \"Tokelau\", code: \"TK\", dialCode: \"+690\", flag: \"🇹🇰\" },\n\t{ name: \"Tonga\", code: \"TO\", dialCode: \"+676\", flag: \"🇹🇴\" },\n\t{ name: \"Trinidad and Tobago\", code: \"TT\", dialCode: \"+1868\", flag: \"🇹🇹\" },\n\t{ name: \"Tunisia\", code: \"TN\", dialCode: \"+216\", flag: \"🇹🇳\" },\n\t{ name: \"Turkey\", code: \"TR\", dialCode: \"+90\", flag: \"🇹🇷\" },\n\t{ name: \"Turkmenistan\", code: \"TM\", dialCode: \"+993\", flag: \"🇹🇲\" },\n\t{\n\t\tname: \"Turks and Caicos Islands\",\n\t\tcode: \"TC\",\n\t\tdialCode: \"+1649\",\n\t\tflag: \"🇹🇨\",\n\t},\n\t{ name: \"Tuvalu\", code: \"TV\", dialCode: \"+688\", flag: \"🇹🇻\" },\n\t{ name: \"U.S. Virgin Islands\", code: \"VI\", dialCode: \"+1340\", flag: \"🇻🇮\" },\n\t{ name: \"Uganda\", code: \"UG\", dialCode: \"+256\", flag: \"🇺🇬\" },\n\t{ name: \"Ukraine\", code: \"UA\", dialCode: \"+380\", flag: \"🇺🇦\" },\n\t{ name: \"United Arab Emirates\", code: \"AE\", dialCode: \"+971\", flag: \"🇦🇪\" },\n\t{ name: \"United Kingdom\", code: \"GB\", dialCode: \"+44\", flag: \"🇬🇧\" },\n\t{ name: \"United States\", code: \"US\", dialCode: \"+1\", flag: \"🇺🇸\" },\n\t{ name: \"Uruguay\", code: \"UY\", dialCode: \"+598\", flag: \"🇺🇾\" },\n\t{ name: \"Uzbekistan\", code: \"UZ\", dialCode: \"+998\", flag: \"🇺🇿\" },\n\t{ name: \"Vanuatu\", code: \"VU\", dialCode: \"+678\", flag: \"🇻🇺\" },\n\t{ name: \"Vatican\", code: \"VA\", dialCode: \"+379\", flag: \"🇻🇦\" },\n\t{ name: \"Venezuela\", code: \"VE\", dialCode: \"+58\", flag: \"🇻🇪\" },\n\t{ name: \"Vietnam\", code: \"VN\", dialCode: \"+84\", flag: \"🇻🇳\" },\n\t{ name: \"Wallis and Futuna\", code: \"WF\", dialCode: \"+681\", flag: \"🇼🇫\" },\n\t{ name: \"Western Sahara\", code: \"EH\", dialCode: \"+212\", flag: \"🇪🇭\" },\n\t{ name: \"Yemen\", code: \"YE\", dialCode: \"+967\", flag: \"🇾🇪\" },\n\t{ name: \"Zambia\", code: \"ZM\", dialCode: \"+260\", flag: \"🇿🇲\" },\n\t{ name: \"Zimbabwe\", code: \"ZW\", dialCode: \"+263\", flag: \"🇿🇼\" },\n];\n","import styled from \"styled-components\";\nimport { Input } from \"./input\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { countries } from \"@/constants/geo\";\n\nconst breakpoints = {\n\tsm: \"36rem\",\n\tmd: \"48rem\",\n\tlg: \"62rem\",\n\txl: \"75rem\",\n};\n\nconst PhoneInputGroup = styled.div`\n display: flex;\n gap: var(--space-xs);\n width: 100%;\n\n @media (max-width: ${breakpoints.sm}) {\n gap: 0.375rem;\n }\n`;\n\nconst CountryCodeSelect = styled.div`\n position: relative;\n`;\n\nconst CountryCodeButton = styled.button`\n display: flex;\n align-items: center;\n gap: 0.375rem;\n padding: 0.5rem 0.75rem;\n width: 100%;\n border: 0.0625rem solid var(--color-border);\n border-radius: var(--radius-md);\n font-size: var(--font-xs);\n color: var(--color-foreground);\n background: var(--color-input-background);\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n border-color: var(--color-input-border);\n }\n\n &:focus {\n outline: none;\n border-color: var(--color-primary);\n box-shadow: 0 0 0 0.1875rem var(--color-input-focus-border);\n background: var(--color-background);\n }\n\n @media (max-width: ${breakpoints.sm}) {\n padding: 0.375rem 0.625rem;\n font-size: 0.8125rem;\n }\n`;\n\nconst CountryCodeDropdown = styled.div<{ $isOpen: boolean }>`\n position: absolute;\n top: calc(100% + 0.25rem);\n left: 0;\n width: 17.5rem;\n max-height: 18.75rem;\n overflow-y: auto;\n background: var(--color-background);\n border: 0.0625rem solid var(--color-border);\n border-radius: var(--radius-md);\n box-shadow:\n 0 0.25rem 0.375rem -0.0625rem var(--color-shadow),\n 0 0.125rem 0.25rem -0.0625rem var(--color-shadow);\n z-index: 1000;\n display: ${(props) => (props.$isOpen ? \"block\" : \"none\")};\n\n @media (max-width: ${breakpoints.sm}) {\n width: 15rem;\n max-height: 15rem;\n }\n`;\n\nconst CountrySearch = styled.input`\n width: 100%;\n padding: 0.5rem 0.75rem;\n border: none;\n border-bottom: 0.0625rem solid var(--color-border);\n font-size: var(--font-xs);\n color: var(--color-foreground);\n background: var(--color-background);\n\n &:focus {\n outline: none;\n border-color: var(--color-primary);\n }\n\n &::placeholder {\n color: var(--color-secondary-text);\n }\n\n @media (max-width: ${breakpoints.sm}) {\n padding: 0.375rem 0.625rem;\n font-size: 0.8125rem;\n }\n`;\n\nconst CountryList = styled.div`\n max-height: 15.625rem;\n overflow-y: auto;\n\n @media (max-width: ${breakpoints.sm}) {\n max-height: 12.5rem;\n }\n`;\n\nconst CountryOption = styled.button`\n display: flex;\n align-items: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.5rem 0.75rem;\n border: none;\n background: transparent;\n font-size: var(--font-xs);\n color: var(--color-foreground);\n cursor: pointer;\n text-align: left;\n\n &:hover {\n background: var(--color-input-background);\n }\n\n .country-code {\n color: var(--color-secondary-text);\n margin-left: auto;\n }\n\n @media (max-width: ${breakpoints.sm}) {\n padding: 0.375rem 0.625rem;\n font-size: 0.8125rem;\n gap: 0.375rem;\n }\n`;\n\nconst PhoneInput = styled(Input)`\n flex: 1;\n`;\n\nexport const PhoneNumberInput = ({\n\tvalue,\n\tonChange,\n\terror,\n\tcountryCode,\n\tsetCountryCode,\n}: {\n\tvalue: string | number | readonly string[] | undefined;\n\tonChange: React.ChangeEventHandler<HTMLInputElement>;\n\terror: string | undefined;\n\tcountryCode: string | undefined;\n\tsetCountryCode: React.Dispatch<React.SetStateAction<string | undefined>>;\n}) => {\n\tconst [isCountryDropdownOpen, setIsCountryDropdownOpen] = useState(false);\n\tconst [selectedCountry, setSelectedCountry] = useState(\n\t\tcountries.find((c) => c.code === countryCode) || countries[0],\n\t);\n\tconst countryDropdownRef = useRef<HTMLDivElement>(null);\n\tconst [countrySearch, setCountrySearch] = useState(\"\");\n\tconst phoneNumberInputRef = useRef<HTMLInputElement>(null);\n\n\tuseEffect(() => {\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tif (\n\t\t\t\tcountryDropdownRef.current &&\n\t\t\t\t!countryDropdownRef.current.contains(event.target as Node)\n\t\t\t) {\n\t\t\t\tsetIsCountryDropdownOpen(false);\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t};\n\t}, []);\n\n\tconst filteredCountries = countries.filter(\n\t\t(country) =>\n\t\t\tcountry.name.toLowerCase().includes(countrySearch.toLowerCase()) ||\n\t\t\tcountry.dialCode.includes(countrySearch),\n\t);\n\n\tuseEffect(() => {\n\t\tsetCountryCode(selectedCountry.dialCode);\n\t}, [selectedCountry, setCountryCode]);\n\n\treturn (\n\t\t<PhoneInputGroup>\n\t\t\t<CountryCodeSelect ref={countryDropdownRef}>\n\t\t\t\t<CountryCodeButton\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => setIsCountryDropdownOpen((prev) => !prev)}\n\t\t\t\t>\n\t\t\t\t\t<span>{selectedCountry.flag}</span>\n\t\t\t\t\t<span>{selectedCountry.dialCode}</span>\n\t\t\t\t</CountryCodeButton>\n\t\t\t\t<CountryCodeDropdown $isOpen={isCountryDropdownOpen}>\n\t\t\t\t\t<CountrySearch\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tplaceholder=\"Search country...\"\n\t\t\t\t\t\tvalue={countrySearch}\n\t\t\t\t\t\tonChange={(e) => setCountrySearch(e.target.value)}\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t/>\n\t\t\t\t\t<CountryList>\n\t\t\t\t\t\t{filteredCountries.map((country) => (\n\t\t\t\t\t\t\t<CountryOption\n\t\t\t\t\t\t\t\tkey={country.code}\n\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\tsetSelectedCountry(country);\n\t\t\t\t\t\t\t\t\tsetIsCountryDropdownOpen(false);\n\t\t\t\t\t\t\t\t\tphoneNumberInputRef.current?.focus();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span>{country.flag}</span>\n\t\t\t\t\t\t\t\t<span>{country.name}</span>\n\t\t\t\t\t\t\t\t<span className=\"country-code\">{country.dialCode}</span>\n\t\t\t\t\t\t\t</CountryOption>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</CountryList>\n\t\t\t\t</CountryCodeDropdown>\n\t\t\t</CountryCodeSelect>\n\t\t\t<PhoneInput\n\t\t\t\tstyle={{ height: \"100%\" }}\n\t\t\t\ttype=\"tel\"\n\t\t\t\tid=\"phone\"\n\t\t\t\tname=\"phone\"\n\t\t\t\trequired\n\t\t\t\tminLength={7}\n\t\t\t\tmaxLength={15}\n\t\t\t\tref={phoneNumberInputRef}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={onChange}\n\t\t\t\tplaceholder=\"Phone number\"\n\t\t\t\taria-invalid={!!error}\n\t\t\t\tpattern=\"^\\d{7,15}$\"\n\t\t\t/>\n\t\t</PhoneInputGroup>\n\t);\n};\n","import styled from \"styled-components\";\nimport { useDeployment } from \"../../hooks/use-deployment\";\n\nconst ImageContainer = styled.div`\n display: flex;\n justify-content: center;\n margin-bottom: var(--space-lg);\n`;\n\nconst LogoImage = styled.img`\n max-width: 60px;\n max-height: 60px;\n width: auto;\n height: auto;\n object-fit: contain;\n`;\n\nexport function AuthFormImage() {\n const { deployment } = useDeployment();\n\n const logoUrl = deployment?.ui_settings?.logo_image_url;\n\n if (!logoUrl) {\n return null;\n }\n\n return (\n <ImageContainer>\n <LogoImage\n src={logoUrl}\n alt=\"Logo\"\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n />\n </ImageContainer>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { useSignUp } from \"../../hooks/use-signup\";\nimport {\n useSignInWithStrategy,\n SignInStrategy,\n type OAuthProvider,\n} from \"../../hooks/use-signin\";\nimport { useDeployment } from \"../../hooks/use-deployment\";\nimport { useNavigation } from \"../../hooks/use-navigation\";\nimport { useSession } from \"../../hooks/use-session\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { OTPInput } from \"@/components/utility/otp-input\";\n\nimport { SocialAuthButtons } from \"./social-buttons\";\nimport { NavigationLink } from \"../utility/navigation\";\nimport { Input } from \"../utility/input\";\nimport { PhoneNumberInput } from \"../utility/phone\";\nimport type { SignUpParams } from \"@/types\";\nimport type { DeploymentSocialConnection } from \"@/types\";\nimport { AuthFormImage } from \"./auth-image\";\n\nconst breakpoints = {\n sm: \"36rem\",\n md: \"48rem\",\n lg: \"62rem\",\n xl: \"75rem\",\n};\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n\n @media (max-width: ${breakpoints.sm}) {\n max-width: 100%;\n padding: var(--space-lg);\n border-radius: 0;\n }\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n position: relative;\n\n @media (max-width: ${breakpoints.sm}) {\n margin-bottom: var(--space-md);\n }\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n\n @media (max-width: ${breakpoints.sm}) {\n font-size: var(--font-md);\n }\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n margin: 0;\n\n @media (max-width: ${breakpoints.sm}) {\n font-size: var(--font-2xs);\n }\n`;\n\nconst Divider = styled.div`\n position: relative;\n text-align: center;\n margin: var(--space-lg) 0;\n\n &::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--color-divider);\n }\n\n @media (max-width: ${breakpoints.sm}) {\n margin: var(--space-md) 0;\n }\n`;\n\nconst DividerText = styled.span`\n position: relative;\n background: var(--color-background);\n padding: 0 var(--space-sm);\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n`;\n\nconst Form = styled.form`\n display: flex;\n flex-direction: column;\n gap: var(--space-lg);\n\n @media (max-width: ${breakpoints.sm}) {\n gap: 1rem;\n }\n`;\n\nconst NameFields = styled.div<{ $isBothEnabled: boolean }>`\n display: grid;\n grid-template-columns: ${(props) =>\n props.$isBothEnabled ? \"1fr 1fr\" : \"1fr\"};\n gap: var(--space-sm);\n\n @media (max-width: ${breakpoints.sm}) {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n`;\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n`;\n\nconst Label = styled.label`\n font-size: var(--font-xs);\n text-align: left;\n font-weight: 500;\n color: var(--color-foreground);\n\n @media (max-width: ${breakpoints.sm}) {\n font-size: 0.75rem;\n }\n`;\n\nconst PasswordGroup = styled.div`\n position: relative;\n`;\n\nconst ErrorMessage = styled.p`\n font-size: var(--font-2xs);\n color: var(--color-error);\n margin: 0;\n margin-top: var(--space-2xs);\n`;\n\nconst SubmitButton = styled.button`\n width: 100%;\n padding: 0.5625rem 1rem;\n background: var(--color-primary);\n color: white;\n border: none;\n border-radius: var(--radius-md);\n font-weight: 500;\n font-size: var(--font-xs);\n cursor: pointer;\n transition: background-color 0.2s;\n margin-top: var(--space-xs);\n\n &:hover:not(:disabled) {\n background: var(--color-primary-hover);\n }\n\n &:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n }\n\n @media (max-width: ${breakpoints.sm}) {\n padding: 0.5rem 0.875rem;\n font-size: 0.8125rem;\n }\n`;\n\nconst Footer = styled.div`\n margin-top: var(--space-lg);\n text-align: center;\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n\n @media (max-width: ${breakpoints.sm}) {\n margin-top: 1rem;\n font-size: 0.75rem;\n }\n`;\n\nconst Link = styled.span`\n color: var(--color-primary);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s;\n\n &:hover {\n color: var(--color-primary-hover);\n }\n`;\n\nconst RestrictedMessage = styled.div`\n text-align: center;\n padding: var(--space-xl);\n margin-bottom: var(--space-lg);\n`;\n\nconst RestrictedText = styled.p`\n font-size: var(--font-size-md);\n color: var(--color-text-secondary);\n margin: 0 0 var(--space-sm) 0;\n line-height: 1.5;\n`;\n\nconst RestrictedFooter = styled.div`\n text-align: center;\n margin-top: var(--space-lg);\n`;\n\nconst RestrictedFooterText = styled.p`\n font-size: var(--font-xs);\n color: var(--color-muted);\n margin: 0;\n`;\n\nconst RestrictedLink = styled.a`\n color: var(--color-primary);\n text-decoration: none;\n cursor: pointer;\n`;\n\nconst RequiredAsterisk = styled.span`\n color: var(--color-danger);\n margin-left: 2px;\n`;\n\nexport function SignUpForm() {\n const {\n loading,\n signUp,\n signupAttempt,\n discardSignupAttempt,\n errors: signUpErrors,\n } = useSignUp();\n const { signIn: oauthSignIn } = useSignInWithStrategy(SignInStrategy.Oauth);\n const { deployment } = useDeployment();\n const { navigate } = useNavigation();\n const { session, refetch: refetchSession } = useSession();\n const [formData, setFormData] = useState<SignUpParams>({\n first_name: \"\",\n last_name: \"\",\n email: \"\",\n password: \"\",\n username: \"\",\n phone_number: \"\",\n });\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [countryCode, setCountryCode] = useState<string | undefined>(undefined);\n const [inviteData, setInviteData] = useState<{\n valid: boolean;\n first_name?: string;\n last_name?: string;\n email?: string;\n message?: string;\n } | null>(null);\n const [inviteToken, setInviteToken] = useState<string | null>(null);\n\n const isSignupRestricted =\n deployment?.restrictions?.sign_up_mode === \"restricted\";\n const isWaitlistMode = deployment?.restrictions?.sign_up_mode === \"waitlist\";\n\n useEffect(() => {\n if (!deployment) return;\n\n if (isWaitlistMode) {\n const waitlistUrl =\n deployment.ui_settings?.waitlist_page_url ||\n `${deployment.frontend_host}/waitlist` ||\n \"/waitlist\";\n navigate(waitlistUrl);\n return;\n }\n\n // Check for deployment invite token\n const params = new URLSearchParams(window.location.search);\n const token = params.get(\"invite_token\");\n if (token && !inviteData && signUp) {\n setInviteToken(token);\n // Fetch invitation details using the signup hook\n signUp\n .validateDeploymentInvitation(token)\n .then((data) => {\n setInviteData(data);\n // Pre-fill form if invitation is valid\n if (data.valid) {\n setFormData((prev) => ({\n ...prev,\n first_name: data.first_name || prev.first_name,\n last_name: data.last_name || prev.last_name,\n email: data.email || prev.email,\n }));\n }\n })\n .catch((err) => {\n console.error(\"Failed to validate invitation:\", err);\n });\n }\n }, [deployment, isWaitlistMode, navigate, inviteData, signUp]);\n\n const [otpSent, setOtpSent] = useState(false);\n const [otpCode, setOtpCode] = useState(\"\");\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let { name, value } = e.target;\n if (name === \"phone_number\") {\n value = value.replace(/[^0-9-]/g, \"\");\n } else if (name === \"email\") {\n value = value.toLowerCase();\n }\n setFormData((prev) => ({ ...prev, [name]: value }));\n setErrors((prev) => ({ ...prev, [name]: \"\" }));\n };\n\n const resetFormData = () => {\n setFormData({\n first_name: \"\",\n last_name: \"\",\n email: \"\",\n password: \"\",\n username: \"\",\n phone_number: \"\",\n });\n setErrors({});\n setOtpSent(false);\n setOtpCode(\"\");\n discardSignupAttempt();\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n console.log(\"Signup form - handleSubmit called\");\n console.log(\"Auth settings:\", authSettings);\n console.log(\"Form data:\", formData);\n\n if (loading || isSubmitting) return;\n\n const newErrors: Record<string, string> = {};\n\n const namePattern = /^[a-zA-Z]{3,30}$/;\n const usernamePattern = /^[a-zA-Z][a-zA-Z0-9_.]{2,29}$/;\n const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n const phonePattern = /^\\d{7,15}$/;\n const passwordPattern =\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,125}$/;\n\n // Only validate first_name if it's enabled\n if (authSettings?.first_name.enabled) {\n if (authSettings?.first_name.required && !formData.first_name) {\n newErrors.first_name = \"First name is required\";\n } else if (\n formData.first_name &&\n !namePattern.test(formData.first_name)\n ) {\n newErrors.first_name = \"Invalid name\";\n }\n }\n\n // Only validate last_name if it's enabled\n if (authSettings?.last_name.enabled) {\n if (authSettings?.last_name.required && !formData.last_name) {\n newErrors.last_name = \"Last name is required\";\n } else if (formData.last_name && !namePattern.test(formData.last_name)) {\n newErrors.last_name = \"Invalid last name\";\n }\n }\n\n if (authSettings?.username.enabled) {\n if (authSettings?.username.required && !formData.username) {\n newErrors.username = \"Username is required\";\n } else if (\n formData.username &&\n !usernamePattern.test(formData.username)\n ) {\n newErrors.username = \"Username must be 3-20 characters\";\n }\n }\n\n if (authSettings?.email_address.enabled) {\n if (authSettings?.email_address.required && !formData.email) {\n newErrors.email = \"Email address is required\";\n } else if (formData.email && !emailPattern.test(formData.email)) {\n newErrors.email = \"Invalid email address\";\n }\n }\n\n if (authSettings?.phone_number.enabled) {\n if (authSettings?.phone_number.required && !formData.phone_number) {\n newErrors.phone_number = \"Phone number is required\";\n } else if (\n formData.phone_number &&\n !phonePattern.test(formData.phone_number)\n ) {\n newErrors.phone_number = \"Phone number must contain 7-15 digits\";\n }\n }\n\n if (authSettings?.password.enabled) {\n if (!formData.password) {\n newErrors.password = \"Password is required\";\n } else if (!passwordPattern.test(formData.password)) {\n newErrors.password =\n \"Password must be 8-125 characters and include uppercase, lowercase, number, and special character\";\n }\n }\n\n setErrors(newErrors);\n\n if (Object.keys(newErrors).length > 0) {\n console.log(\"Signup validation failed. Errors:\", newErrors);\n return;\n }\n\n console.log(\"Signup validation passed\");\n\n setIsSubmitting(true);\n try {\n const submitData: any = { ...formData };\n if (formData.phone_number && countryCode) {\n submitData.phone_country_code = countryCode;\n }\n if (inviteToken) {\n submitData.invite_token = inviteToken;\n }\n console.log(\"Submitting signup data:\", submitData);\n console.log(\"Phone number:\", submitData.phone_number);\n console.log(\"Phone country code:\", submitData.phone_country_code);\n await signUp.create(submitData);\n } catch (err) {\n setErrors({ submit: (err as Error).message });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleSocialSignIn = async (connection: DeploymentSocialConnection) => {\n if (loading || isSubmitting) return;\n\n setIsSubmitting(true);\n try {\n const searchParams = new URLSearchParams(window.location.search);\n const redirectUri = searchParams.get(\"redirect_uri\") || undefined;\n\n const { data } = await oauthSignIn.create({\n provider: connection.provider as OAuthProvider,\n redirectUri,\n });\n if (data && typeof data === \"object\" && \"oauth_url\" in data) {\n window.location.href = data.oauth_url as string;\n }\n } catch (err) {\n setErrors({ submit: (err as Error).message });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const enabledSocialProviders =\n deployment?.social_connections.filter((conn) => conn.enabled) || [];\n\n const authSettings = deployment?.auth_settings;\n\n const isBothNamesEnabled = Boolean(\n authSettings?.first_name?.enabled && authSettings?.last_name?.enabled,\n );\n\n const completeVerification = async (e: React.FormEvent) => {\n e.preventDefault();\n if (loading || isSubmitting) return;\n setIsSubmitting(true);\n const newErrors: Record<string, string> = {};\n if (!otpCode) {\n newErrors.otp = \"OTP code is required\";\n setErrors(newErrors);\n setIsSubmitting(false);\n return;\n }\n setErrors(newErrors);\n\n try {\n const result = await signUp.completeVerification(otpCode);\n if (\"data\" in result && result.data?.active_signin) {\n await refetchSession();\n }\n } catch (error) {\n console.error(\"Verification failed:\", error);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n useEffect(() => {\n if (!signupAttempt) return;\n\n if (signupAttempt.completed) {\n let redirectUri: string | null = new URLSearchParams(\n window.location.search,\n ).get(\"redirect_uri\");\n if (!redirectUri) {\n redirectUri =\n deployment?.ui_settings?.after_signup_redirect_url || null;\n }\n if (!redirectUri && deployment?.frontend_host) {\n redirectUri = `https://${deployment.frontend_host}`;\n }\n if (redirectUri) {\n const uri = new URL(redirectUri);\n if (deployment?.mode === \"staging\") {\n uri.searchParams.set(\n \"__dev_session__\",\n localStorage.getItem(\"__dev_session__\") || \"\",\n );\n }\n navigate(uri.toString());\n }\n return;\n }\n\n if (otpSent) {\n return;\n }\n\n switch (signupAttempt.current_step) {\n case \"verify_email\":\n signUp.prepareVerification({ strategy: \"email_otp\" });\n break;\n case \"verify_phone\":\n signUp.prepareVerification({ strategy: \"phone_otp\" });\n break;\n }\n\n setOtpSent(true);\n }, [signupAttempt, signUp, otpSent, deployment, session, navigate]);\n\n useEffect(() => {\n const newErrors: Record<string, string> = {};\n if (signUpErrors?.errors) {\n if (Array.isArray(signUpErrors?.errors)) {\n for (const err of signUpErrors.errors) {\n if (err.code === \"USERNAME_EXISTS\") {\n newErrors.username = err.message;\n }\n\n if (err.code === \"EMAIL_EXISTS\") {\n newErrors.email = err.message;\n }\n\n if (err.code === \"PHONE_NUMBER_EXISTS\") {\n newErrors.phone_number = err.message;\n }\n\n if (err.code === \"INVALID_CREDENTIALS\") {\n newErrors.password = err.message;\n }\n if (\n [\n \"COUNTRY_RESTRICTED\",\n \"EMAIL_NOT_ALLOWED\",\n \"EMAIL_BLOCKED\",\n \"DISPOSABLE_EMAIL_BLOCKED\",\n \"VOIP_NUMBER_BLOCKED\",\n \"BANNED_KEYWORD\",\n ].includes(err.code)\n ) {\n newErrors.submit = err.message;\n }\n }\n }\n }\n\n // New validation errors\n setErrors(newErrors);\n }, [signUpErrors]);\n\n // Show restricted message if signup is restricted\n if (isSignupRestricted) {\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n\n <Header>\n <Title>Sign up Restricted!</Title>\n </Header>\n\n <RestrictedMessage>\n <RestrictedText>\n New account registration is currently restricted. Please check\n back later.\n </RestrictedText>\n </RestrictedMessage>\n\n <RestrictedFooter>\n <RestrictedFooterText>\n Need assistance?{\" \"}\n <RestrictedLink\n href={\n deployment?.ui_settings?.sign_in_page_url\n ? `${deployment.ui_settings.sign_in_page_url}?help=true`\n : \"/contact\"\n }\n >\n Get help\n </RestrictedLink>\n </RestrictedFooterText>\n </RestrictedFooter>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n return (\n <DefaultStylesProvider>\n <Container>\n {otpSent ? (\n <>\n <Header>\n <Title>\n Check your{\" \"}\n {signupAttempt?.current_step === \"verify_email\"\n ? \"email\"\n : \"phone\"}\n </Title>\n <Subtitle>\n {signupAttempt?.current_step === \"verify_email\"\n ? `${formData.email} to continue to ${deployment?.ui_settings?.app_name}`\n : `${formData.phone_number} to continue to ${deployment?.ui_settings?.app_name}`}\n </Subtitle>\n </Header>\n <Form\n style={{ gap: \"15px\" }}\n onSubmit={completeVerification}\n noValidate\n >\n <OTPInput\n onComplete={async (code) => {\n setOtpCode(code);\n }}\n onResend={async () => {\n const strategy =\n signupAttempt?.current_step === \"verify_email\"\n ? \"email_otp\"\n : \"phone_otp\";\n await signUp.prepareVerification({ strategy });\n }}\n error={errors.otp}\n isSubmitting={isSubmitting}\n />\n\n <SubmitButton\n type=\"submit\"\n disabled={isSubmitting || loading || !otpCode}\n >\n {isSubmitting\n ? \"Verifying...\"\n : `Continue to ${deployment?.ui_settings?.app_name}`}\n </SubmitButton>\n </Form>\n <Footer>\n Having trouble?{\" \"}\n <Link>\n <NavigationLink to={deployment!.ui_settings.support_page_url}>\n Contact support\n </NavigationLink>\n </Link>\n <div style={{ marginTop: \"var(--space-sm)\" }}>\n <Link\n onClick={() => {\n resetFormData();\n }}\n style={{ cursor: \"pointer\" }}\n >\n Use other method\n </Link>\n </div>\n </Footer>\n </>\n ) : (\n <>\n <AuthFormImage />\n\n <Header>\n <Title>Create your account</Title>\n <Subtitle>\n {inviteData?.valid\n ? \"You've been invited! Complete your registration below.\"\n : \"Welcome! Please fill in the details to get started.\"}\n </Subtitle>\n </Header>\n\n {enabledSocialProviders.length > 0 && (\n <>\n <SocialAuthButtons\n connections={enabledSocialProviders}\n callback={handleSocialSignIn}\n />\n\n <Divider>\n <DividerText>or</DividerText>\n </Divider>\n </>\n )}\n\n <Form onSubmit={handleSubmit} noValidate>\n {(authSettings?.first_name?.enabled ||\n authSettings?.last_name?.enabled) && (\n <NameFields $isBothEnabled={isBothNamesEnabled}>\n {authSettings?.first_name?.enabled && (\n <FormGroup>\n <Label htmlFor=\"first_name\">\n First name\n {authSettings?.first_name?.required && (\n <RequiredAsterisk>*</RequiredAsterisk>\n )}\n </Label>\n <Input\n type=\"text\"\n id=\"first_name\"\n name=\"first_name\"\n required\n minLength={3}\n maxLength={30}\n value={formData.first_name}\n onChange={handleInputChange}\n placeholder=\"First name\"\n aria-invalid={!!errors.first_name}\n pattern=\"^[a-zA-Z]{3,30}$\"\n />\n {errors.first_name && (\n <ErrorMessage>{errors.first_name}</ErrorMessage>\n )}\n </FormGroup>\n )}\n {authSettings?.last_name?.enabled && (\n <FormGroup>\n <Label htmlFor=\"last_name\">\n Last name\n {authSettings?.last_name?.required && (\n <RequiredAsterisk>*</RequiredAsterisk>\n )}\n </Label>\n <Input\n type=\"text\"\n id=\"last_name\"\n name=\"last_name\"\n required\n minLength={3}\n maxLength={30}\n value={formData.last_name}\n onChange={handleInputChange}\n placeholder=\"Last name\"\n aria-invalid={!!errors.last_name}\n pattern=\"^[a-zA-Z]{3,30}$\"\n />\n {errors.last_name && (\n <ErrorMessage>{errors.last_name}</ErrorMessage>\n )}\n </FormGroup>\n )}\n </NameFields>\n )}\n\n {authSettings?.username.enabled && (\n <FormGroup>\n <Label htmlFor=\"username\">\n Username\n {authSettings.username.required && (\n <RequiredAsterisk>*</RequiredAsterisk>\n )}\n </Label>\n <Input\n type=\"text\"\n id=\"username\"\n name=\"username\"\n minLength={3}\n maxLength={20}\n value={formData.username}\n onChange={handleInputChange}\n placeholder=\"Choose a username\"\n aria-invalid={!!errors.username}\n required\n pattern=\"^[a-zA-Z][a-zA-Z0-9_.]{2,29}$\"\n />\n\n {errors.username && (\n <ErrorMessage>{errors.username}</ErrorMessage>\n )}\n </FormGroup>\n )}\n\n {authSettings?.email_address.enabled && (\n <FormGroup>\n <Label htmlFor=\"email\">\n Email address\n {authSettings.email_address.required && (\n <RequiredAsterisk>*</RequiredAsterisk>\n )}\n </Label>\n <Input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n maxLength={320}\n value={formData.email}\n onChange={handleInputChange}\n placeholder=\"Enter your email address\"\n aria-invalid={!!errors.email}\n required\n readOnly={inviteData?.valid && !!inviteData?.email}\n pattern=\"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\"\n />\n {errors.email && <ErrorMessage>{errors.email}</ErrorMessage>}\n </FormGroup>\n )}\n\n {authSettings?.phone_number.enabled && (\n <FormGroup>\n <Label htmlFor=\"phone_number\">\n Phone number\n {authSettings.phone_number.required && (\n <RequiredAsterisk>*</RequiredAsterisk>\n )}\n </Label>\n\n <PhoneNumberInput\n value={formData.phone_number}\n onChange={handleInputChange}\n error={errors.phone_number}\n countryCode={countryCode}\n setCountryCode={setCountryCode}\n />\n\n {errors.phone_number && (\n <ErrorMessage>{errors.phone_number}</ErrorMessage>\n )}\n </FormGroup>\n )}\n\n {authSettings?.password.enabled && (\n <FormGroup>\n <Label htmlFor=\"password\">\n Password\n {authSettings.password.required && (\n <RequiredAsterisk>*</RequiredAsterisk>\n )}\n </Label>\n <PasswordGroup>\n <Input\n type=\"password\"\n id=\"password\"\n name=\"password\"\n value={formData.password}\n onChange={handleInputChange}\n placeholder=\"Enter your password\"\n aria-invalid={!!errors.password}\n required\n minLength={8}\n maxLength={128}\n pattern=\"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,125}$\"\n />\n </PasswordGroup>\n {errors.password && (\n <ErrorMessage>{errors.password}</ErrorMessage>\n )}\n </FormGroup>\n )}\n\n {errors.submit && <ErrorMessage>{errors.submit}</ErrorMessage>}\n\n <SubmitButton type=\"submit\" disabled={isSubmitting || loading}>\n {isSubmitting ? \"Creating account...\" : \"Continue\"}\n </SubmitButton>\n </Form>\n\n <Footer>\n Already have an account?{\" \"}\n <Link>\n <NavigationLink\n to={`${deployment!.ui_settings?.sign_in_page_url}${window.location.search}`}\n >\n Sign in\n </NavigationLink>\n </Link>\n </Footer>\n </>\n )}\n </Container>\n </DefaultStylesProvider>\n );\n}\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses, toKebabCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => {\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),\n ...props\n })\n );\n Component.displayName = `${iconName}`;\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2\",\n key: \"169zse\"\n }\n ]\n];\nconst Activity = createLucideIcon(\"Activity\", __iconNode);\n\nexport { __iconNode, Activity as default };\n//# sourceMappingURL=activity.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10.268 21a2 2 0 0 0 3.464 0\", key: \"vwvbt9\" }],\n [\n \"path\",\n {\n d: \"M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742\",\n key: \"178tsu\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }],\n [\"path\", { d: \"M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05\", key: \"1hqiys\" }]\n];\nconst BellOff = createLucideIcon(\"BellOff\", __iconNode);\n\nexport { __iconNode, BellOff as default };\n//# sourceMappingURL=bell-off.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10.268 21a2 2 0 0 0 3.464 0\", key: \"vwvbt9\" }],\n [\"path\", { d: \"M22 8c0-2.3-.8-4.3-2-6\", key: \"5bb3ad\" }],\n [\n \"path\",\n {\n d: \"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\",\n key: \"11g9vi\"\n }\n ],\n [\"path\", { d: \"M4 2C2.8 3.7 2 5.7 2 8\", key: \"tap9e0\" }]\n];\nconst BellRing = createLucideIcon(\"BellRing\", __iconNode);\n\nexport { __iconNode, BellRing as default };\n//# sourceMappingURL=bell-ring.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 8V4H8\", key: \"hb8ula\" }],\n [\"rect\", { width: \"16\", height: \"12\", x: \"4\", y: \"8\", rx: \"2\", key: \"enze0r\" }],\n [\"path\", { d: \"M2 14h2\", key: \"vft8re\" }],\n [\"path\", { d: \"M20 14h2\", key: \"4cs60a\" }],\n [\"path\", { d: \"M15 13v2\", key: \"1xurst\" }],\n [\"path\", { d: \"M9 13v2\", key: \"rq6x2g\" }]\n];\nconst Bot = createLucideIcon(\"Bot\", __iconNode);\n\nexport { __iconNode, Bot as default };\n//# sourceMappingURL=bot.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"16\", height: \"20\", x: \"4\", y: \"2\", rx: \"2\", ry: \"2\", key: \"76otgf\" }],\n [\"path\", { d: \"M9 22v-4h6v4\", key: \"r93iot\" }],\n [\"path\", { d: \"M8 6h.01\", key: \"1dz90k\" }],\n [\"path\", { d: \"M16 6h.01\", key: \"1x0f13\" }],\n [\"path\", { d: \"M12 6h.01\", key: \"1vi96p\" }],\n [\"path\", { d: \"M12 10h.01\", key: \"1nrarc\" }],\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n [\"path\", { d: \"M16 10h.01\", key: \"1m94wz\" }],\n [\"path\", { d: \"M16 14h.01\", key: \"1gbofw\" }],\n [\"path\", { d: \"M8 10h.01\", key: \"19clt8\" }],\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }]\n];\nconst Building = createLucideIcon(\"Building\", __iconNode);\n\nexport { __iconNode, Building as default };\n//# sourceMappingURL=building.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"Check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"ChevronDown\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"ChevronLeft\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"ChevronRight\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]];\nconst ChevronUp = createLucideIcon(\"ChevronUp\", __iconNode);\n\nexport { __iconNode, ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m7 15 5 5 5-5\", key: \"1hf1tw\" }],\n [\"path\", { d: \"m7 9 5-5 5 5\", key: \"sgt6xg\" }]\n];\nconst ChevronsUpDown = createLucideIcon(\"ChevronsUpDown\", __iconNode);\n\nexport { __iconNode, ChevronsUpDown as default };\n//# sourceMappingURL=chevrons-up-down.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"Copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n [\"polyline\", { points: \"7 10 12 15 17 10\", key: \"2ggqvy\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"15\", y2: \"3\", key: \"1vk2je\" }]\n];\nconst Download = createLucideIcon(\"Download\", __iconNode);\n\nexport { __iconNode, Download as default };\n//# sourceMappingURL=download.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m15 15 6 6\", key: \"1s409w\" }],\n [\"path\", { d: \"m15 9 6-6\", key: \"ko1vev\" }],\n [\"path\", { d: \"M21 16.2V21h-4.8\", key: \"1hrera\" }],\n [\"path\", { d: \"M21 7.8V3h-4.8\", key: \"ul1q53\" }],\n [\"path\", { d: \"M3 16.2V21h4.8\", key: \"1x04uo\" }],\n [\"path\", { d: \"m3 21 6-6\", key: \"wwnumi\" }],\n [\"path\", { d: \"M3 7.8V3h4.8\", key: \"1ijppm\" }],\n [\"path\", { d: \"M9 9 3 3\", key: \"v551iv\" }]\n];\nconst Expand = createLucideIcon(\"Expand\", __iconNode);\n\nexport { __iconNode, Expand as default };\n//# sourceMappingURL=expand.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"M10 14 21 3\", key: \"gplh6r\" }],\n [\"path\", { d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\", key: \"a6xqqp\" }]\n];\nconst ExternalLink = createLucideIcon(\"ExternalLink\", __iconNode);\n\nexport { __iconNode, ExternalLink as default };\n//# sourceMappingURL=external-link.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"EyeOff\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"Eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"Globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M9 17H7A5 5 0 0 1 7 7h2\", key: \"8i5ue5\" }],\n [\"path\", { d: \"M15 7h2a5 5 0 1 1 0 10h-2\", key: \"1b9ql8\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"12\", y2: \"12\", key: \"1jonct\" }]\n];\nconst Link2 = createLucideIcon(\"Link2\", __iconNode);\n\nexport { __iconNode, Link2 as default };\n//# sourceMappingURL=link-2.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"LoaderCircle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\", key: \"1uf3rs\" }],\n [\"polyline\", { points: \"16 17 21 12 16 7\", key: \"1gabdz\" }],\n [\"line\", { x1: \"21\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1uyos4\" }]\n];\nconst LogOut = createLucideIcon(\"LogOut\", __iconNode);\n\nexport { __iconNode, LogOut as default };\n//# sourceMappingURL=log-out.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"20\", height: \"16\", x: \"2\", y: \"4\", rx: \"2\", key: \"18n3k1\" }],\n [\"path\", { d: \"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\", key: \"1ocrg3\" }]\n];\nconst Mail = createLucideIcon(\"Mail\", __iconNode);\n\nexport { __iconNode, Mail as default };\n//# sourceMappingURL=mail.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"polyline\", { points: \"15 3 21 3 21 9\", key: \"mznyad\" }],\n [\"polyline\", { points: \"9 21 3 21 3 15\", key: \"1avn1i\" }],\n [\"line\", { x1: \"21\", x2: \"14\", y1: \"3\", y2: \"10\", key: \"ota7mn\" }],\n [\"line\", { x1: \"3\", x2: \"10\", y1: \"21\", y2: \"14\", key: \"1atl0r\" }]\n];\nconst Maximize2 = createLucideIcon(\"Maximize2\", __iconNode);\n\nexport { __iconNode, Maximize2 as default };\n//# sourceMappingURL=maximize-2.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\", key: \"vv11sd\" }]\n];\nconst MessageCircle = createLucideIcon(\"MessageCircle\", __iconNode);\n\nexport { __iconNode, MessageCircle as default };\n//# sourceMappingURL=message-circle.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M13.234 20.252 21 12.3\", key: \"1cbrk9\" }],\n [\n \"path\",\n {\n d: \"m16 6-8.414 8.586a2 2 0 0 0 0 2.828 2 2 0 0 0 2.828 0l8.414-8.586a4 4 0 0 0 0-5.656 4 4 0 0 0-5.656 0l-8.415 8.585a6 6 0 1 0 8.486 8.486\",\n key: \"1pkts6\"\n }\n ]\n];\nconst Paperclip = createLucideIcon(\"Paperclip\", __iconNode);\n\nexport { __iconNode, Paperclip as default };\n//# sourceMappingURL=paperclip.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\",\n key: \"foiqr5\"\n }\n ]\n];\nconst Phone = createLucideIcon(\"Phone\", __iconNode);\n\nexport { __iconNode, Phone as default };\n//# sourceMappingURL=phone.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"Plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n [\"path\", { d: \"m21 21-4.3-4.3\", key: \"1qie3q\" }]\n];\nconst Search = createLucideIcon(\"Search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\",\n key: \"1ffxy3\"\n }\n ],\n [\"path\", { d: \"m21.854 2.147-10.94 10.939\", key: \"12cjpa\" }]\n];\nconst Send = createLucideIcon(\"Send\", __iconNode);\n\nexport { __iconNode, Send as default };\n//# sourceMappingURL=send.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\",\n key: \"1qme2f\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Settings = createLucideIcon(\"Settings\", __iconNode);\n\nexport { __iconNode, Settings as default };\n//# sourceMappingURL=settings.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ]\n];\nconst Shield = createLucideIcon(\"Shield\", __iconNode);\n\nexport { __iconNode, Shield as default };\n//# sourceMappingURL=shield.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\", key: \"4alrt4\" }],\n [\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\", key: \"v07s0e\" }],\n [\"line\", { x1: \"10\", x2: \"10\", y1: \"11\", y2: \"17\", key: \"1uufr5\" }],\n [\"line\", { x1: \"14\", x2: \"14\", y1: \"11\", y2: \"17\", key: \"xtxkd\" }]\n];\nconst Trash2 = createLucideIcon(\"Trash2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\", key: \"4alrt4\" }],\n [\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\", key: \"v07s0e\" }]\n];\nconst Trash = createLucideIcon(\"Trash\", __iconNode);\n\nexport { __iconNode, Trash as default };\n//# sourceMappingURL=trash.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"TriangleAlert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n];\nconst User = createLucideIcon(\"User\", __iconNode);\n\nexport { __iconNode, User as default };\n//# sourceMappingURL=user.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n [\"path\", { d: \"M22 21v-2a4 4 0 0 0-3-3.87\", key: \"kshegd\" }],\n [\"path\", { d: \"M16 3.13a4 4 0 0 1 0 7.75\", key: \"1da9ce\" }]\n];\nconst Users = createLucideIcon(\"Users\", __iconNode);\n\nexport { __iconNode, Users as default };\n//# sourceMappingURL=users.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"X\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n [\"line\", { x1: \"21\", x2: \"16.65\", y1: \"21\", y2: \"16.65\", key: \"13gj7c\" }],\n [\"line\", { x1: \"11\", x2: \"11\", y1: \"8\", y2: \"14\", key: \"1vmskp\" }],\n [\"line\", { x1: \"8\", x2: \"14\", y1: \"11\", y2: \"11\", key: \"durymu\" }]\n];\nconst ZoomIn = createLucideIcon(\"ZoomIn\", __iconNode);\n\nexport { __iconNode, ZoomIn as default };\n//# sourceMappingURL=zoom-in.js.map\n","/**\n * @license lucide-react v0.474.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n [\"line\", { x1: \"21\", x2: \"16.65\", y1: \"21\", y2: \"16.65\", key: \"13gj7c\" }],\n [\"line\", { x1: \"8\", x2: \"14\", y1: \"11\", y2: \"11\", key: \"durymu\" }]\n];\nconst ZoomOut = createLucideIcon(\"ZoomOut\", __iconNode);\n\nexport { __iconNode, ZoomOut as default };\n//# sourceMappingURL=zoom-out.js.map\n","\"use client\";\n\nimport {\n createContext,\n useContext,\n useEffect,\n useRef,\n useState,\n type FC,\n type ReactNode,\n} from \"react\";\nimport ReactDOM from \"react-dom\";\nimport styled from \"styled-components\";\nimport { X } from \"lucide-react\";\nimport { DefaultStylesProvider } from \"./root\";\n\n// Context for Dialog state\ninterface DialogContextValue {\n isOpen: boolean;\n onClose: () => void;\n}\n\nconst DialogContext = createContext<DialogContextValue | undefined>(undefined);\n\nconst useDialogContext = () => {\n const context = useContext(DialogContext);\n if (!context) {\n throw new Error(\"Dialog components must be used within a Dialog\");\n }\n return context;\n};\n\n// Styled components\nconst StyledOverlay = styled.div`\n position: fixed;\n inset: 0;\n background-color: var(--color-dialog-backdrop, rgba(0, 0, 0, 0.5));\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 99999;\n`;\n\nconst StyledContent = styled.div`\n background-color: var(--color-background);\n border-radius: 8px;\n box-shadow: 0 10px 25px -5px var(--color-shadow);\n max-width: 800px;\n max-height: 90vh;\n overflow-y: auto;\n position: relative;\n z-index: 100000;\n`;\n\nconst StyledHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--space-sm, 12px) var(--space-md, 16px);\n border-bottom: 1px solid var(--color-border);\n`;\n\nconst StyledTitle = styled.h2`\n font-size: 16px;\n color: var(--color-foreground);\n margin: 0;\n`;\n\nconst StyledCloseButton = styled.button`\n background: transparent;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n border-radius: 4px;\n color: var(--color-secondary-text);\n\n &:hover {\n background-color: var(--color-background-hover);\n color: var(--color-foreground);\n }\n`;\n\nconst StyledBody = styled.div`\n padding: 16px;\n`;\n\nconst StyledFooter = styled.div`\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 16px;\n border-top: 1px solid var(--color-border);\n`;\n\n// Dialog Root Component\ninterface DialogProps {\n isOpen: boolean;\n onClose: () => void;\n children: ReactNode;\n}\n\nconst DialogRoot: FC<DialogProps> = ({ isOpen, onClose, children }) => {\n const [isMounted, setIsMounted] = useState(false);\n\n useEffect(() => {\n setIsMounted(true);\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose]);\n\n if (!isOpen || !isMounted) return null;\n\n // Use portal to render outside of parent DOM hierarchy\n // Wrap with DefaultStylesProvider to ensure CSS variables are available\n return ReactDOM.createPortal(\n <DefaultStylesProvider>\n <DialogContext.Provider value={{ isOpen, onClose }}>\n {children}\n </DialogContext.Provider>\n </DefaultStylesProvider>,\n document.body\n );\n};\n\n// Dialog Overlay Component\nconst DialogOverlay: FC<{ children?: ReactNode }> = ({ children }) => {\n const { onClose } = useDialogContext();\n const contentRef = useRef<HTMLDivElement>(null);\n\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (contentRef.current && !contentRef.current.contains(e.target as Node)) {\n onClose();\n }\n };\n\n return (\n <StyledOverlay onClick={handleOverlayClick}>\n <div ref={contentRef}>{children}</div>\n </StyledOverlay>\n );\n};\n\n// Dialog Content Component\ninterface DialogContentProps {\n children: ReactNode;\n style?: React.CSSProperties;\n}\n\nconst DialogContent: FC<DialogContentProps> = ({ children, style }) => {\n return <StyledContent style={style}>{children}</StyledContent>;\n};\n\n// Dialog Header Component\ninterface DialogHeaderProps {\n children?: ReactNode;\n showCloseButton?: boolean;\n}\n\nconst DialogHeader: FC<DialogHeaderProps> = ({\n children,\n showCloseButton = true,\n}) => {\n const { onClose } = useDialogContext();\n\n return (\n <StyledHeader>\n {typeof children === \"string\" ? (\n <StyledTitle>{children}</StyledTitle>\n ) : (\n children\n )}\n {showCloseButton && (\n <StyledCloseButton onClick={onClose}>\n <X size={18} />\n </StyledCloseButton>\n )}\n </StyledHeader>\n );\n};\n\n// Dialog Body Component\ninterface DialogBodyProps {\n children: ReactNode;\n style?: React.CSSProperties;\n}\n\nconst DialogBody: FC<DialogBodyProps> = ({ children, style }) => {\n return <StyledBody style={style}>{children}</StyledBody>;\n};\n\n// Dialog Footer Component\ninterface DialogFooterProps {\n children: ReactNode;\n}\n\nconst DialogFooter: FC<DialogFooterProps> = ({ children }) => {\n return <StyledFooter>{children}</StyledFooter>;\n};\n\n// Compound Dialog Component\nexport const Dialog = Object.assign(DialogRoot, {\n Overlay: DialogOverlay,\n Content: DialogContent,\n Header: DialogHeader,\n Body: DialogBody,\n Footer: DialogFooter,\n});\n\n// Legacy/Simplified Dialog for backward compatibility and simple use cases\ninterface SimpleDialogProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n children: ReactNode;\n showCloseButton?: boolean;\n}\n\nexport const SimpleDialog: FC<SimpleDialogProps> = ({\n isOpen,\n onClose,\n title,\n children,\n showCloseButton = true,\n}) => {\n return (\n <Dialog isOpen={isOpen} onClose={onClose}>\n <Dialog.Overlay>\n <Dialog.Content>\n {title && (\n <Dialog.Header showCloseButton={showCloseButton}>\n {title}\n </Dialog.Header>\n )}\n <Dialog.Body>{children}</Dialog.Body>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog>\n );\n};\n\n// DialogTrigger Component\ninterface DialogTriggerProps {\n trigger: (props: { onClick: () => void }) => ReactNode;\n renderDialog: (props: { isOpen: boolean; onClose: () => void }) => ReactNode;\n}\n\nexport const DialogTrigger: FC<DialogTriggerProps> = ({\n trigger,\n renderDialog,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const handleOpen = () => setIsOpen(true);\n const handleClose = () => setIsOpen(false);\n\n return (\n <>\n {trigger({ onClick: handleOpen })}\n {renderDialog({ isOpen, onClose: handleClose })}\n </>\n );\n};\n","import {\n createContext,\n CSSProperties,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport styled from \"styled-components\";\n\nconst DropdownItemsContainer = styled.div`\n position: fixed;\n background: var(--color-background);\n border-radius: 8px;\n box-shadow: 0 4px 12px var(--color-shadow);\n border: 1px solid var(--color-border);\n overflow: hidden;\n z-index: 1000;\n min-width: 140px;\n display: grid;\n`;\n\nconst DropdownContainer = styled.div`\n width: fit-content;\n`;\n\ninterface DropdownProps {\n children: ReactNode;\n open?: boolean;\n openChange?: (open: boolean) => void;\n style?: CSSProperties;\n}\n\ntype DropdownContextProps = {\n open: boolean;\n openChange: (open: boolean) => void;\n};\n\nconst DropdownContext = createContext<DropdownContextProps | undefined>(\n undefined\n);\n\nconst useDropdownContext = () => {\n const context = useContext(DropdownContext);\n if (!context) {\n throw new Error(\n \"useDropdownContext must be used within a DropdownProvider\"\n );\n }\n return context;\n};\n\nexport const Dropdown = ({\n children,\n open,\n openChange,\n style,\n}: DropdownProps) => {\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [_open, _setOpen] = useState(false);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n _setOpen(false);\n }\n };\n\n if (_open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [_open, openChange]);\n\n useEffect(() => {\n openChange?.(_open);\n }, [_open]);\n\n useEffect(() => {\n _setOpen(!!open);\n }, [open]);\n\n return (\n <DropdownContext.Provider\n value={{\n open: _open,\n openChange: (v) => _setOpen(v),\n }}\n >\n <DropdownContainer style={style} ref={dropdownRef}>\n {children}\n </DropdownContainer>\n </DropdownContext.Provider>\n );\n};\n\nexport const DropdownItems = ({\n children,\n style,\n}: {\n children: ReactNode;\n style?: React.CSSProperties;\n}) => {\n const { open } = useDropdownContext();\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const [isPositioned, setIsPositioned] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (open && containerRef.current) {\n setIsPositioned(false);\n \n // Use requestAnimationFrame to ensure DOM is ready\n requestAnimationFrame(() => {\n const parent = containerRef.current?.parentElement;\n if (!parent) return;\n \n // Find the trigger element (should be the first child of the dropdown container)\n const triggerEl = parent.querySelector('[data-dropdown-trigger]') || parent.firstElementChild;\n \n if (triggerEl && triggerEl !== containerRef.current) {\n const triggerRect = triggerEl.getBoundingClientRect();\n const dropdownRect = containerRef.current?.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n \n let top = triggerRect.bottom + 4;\n let left = triggerRect.right - 200; // Default to right-aligned\n \n // Adjust if dropdown would go off the right edge\n if (left < 8) {\n left = triggerRect.left; // Align to left edge of trigger\n }\n \n // Adjust if dropdown would go off the left edge\n if (left + 200 > viewportWidth - 8) {\n left = viewportWidth - 208; // 200px width + 8px margin\n }\n \n // Adjust if dropdown would go off the bottom edge\n if (dropdownRect && top + dropdownRect.height > viewportHeight - 8) {\n top = triggerRect.top - (dropdownRect.height + 4); // Show above trigger\n }\n \n setPosition({ top, left });\n setIsPositioned(true);\n }\n });\n } else {\n setIsPositioned(false);\n }\n }, [open]);\n\n if (!open) return null;\n\n return (\n <DropdownItemsContainer \n ref={containerRef}\n style={{ \n ...style,\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: isPositioned ? 'visible' : 'hidden',\n opacity: isPositioned ? 1 : 0,\n transition: isPositioned ? 'opacity 0.15s ease-in-out' : 'none'\n }}\n >\n {children}\n </DropdownItemsContainer>\n );\n};\n\nexport const DropdownTrigger = ({ children }: { children: ReactNode }) => {\n const { openChange, open } = useDropdownContext();\n\n const toggleDropdown = useCallback(() => {\n openChange(!open);\n }, [open, openChange]);\n\n return (\n <div \n style={{ position: \"relative\" }} \n onClick={toggleDropdown}\n data-dropdown-trigger\n >\n {children}\n </div>\n );\n};\n\nexport const DropdownItem = styled.button<{ $destructive?: boolean }>`\n width: 100%;\n padding: 8px 12px;\n background: none;\n border: none;\n text-align: left;\n cursor: pointer;\n font-size: 14px;\n width: 200px;\n color: ${(props) =>\n props.$destructive ? \"var(--color-error)\" : \"var(--color-text)\"};\n\n &:hover {\n background: ${(props) =>\n props.$destructive\n ? \"var(--color-error-background)\"\n : \"var(--color-background-hover)\"};\n }\n`;\n\nexport const DropdownDivider = styled.div`\n height: 1px;\n background-color: var(--color-border);\n width: 100%;\n`;\n","import styled from \"styled-components\";\n\nexport const Form = styled.form`\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n`;\n\nexport const FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n`;\n\nexport const Label = styled.label`\n font-size: var(--font-xs);\n text-align: left;\n font-weight: 400;\n color: var(--color-foreground);\n`;\n","import styled, { keyframes } from \"styled-components\";\n\nconst spin = keyframes`\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n`;\n\nconst SpinnerWrapper = styled.div<{ $size?: number }>`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: ${(props) => props.$size ? `${props.$size}px` : \"100%\"};\n`;\n\nconst SpinnerCircle = styled.div<{ $size?: number }>`\n width: ${(props) => props.$size ? `${props.$size}px` : \"40px\"};\n height: ${(props) => props.$size ? `${props.$size}px` : \"40px\"};\n border: 3px solid var(--color-border);\n border-top: 3px solid var(--color-primary);\n border-radius: 50%;\n animation: ${spin} 1s linear infinite;\n`;\n\ninterface SpinnerProps {\n size?: number;\n className?: string;\n}\n\nexport const Spinner = ({ size, className }: SpinnerProps) => {\n return (\n <SpinnerWrapper className={className} $size={size}>\n <SpinnerCircle $size={size} />\n </SpinnerWrapper>\n );\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst SwitchContainer = styled.label`\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n position: relative;\n`;\n\nconst SwitchInput = styled.input`\n opacity: 0;\n width: 0;\n height: 0;\n position: absolute;\n`;\n\nconst SwitchSlider = styled.span<{ checked: boolean }>`\n position: relative;\n width: 40px;\n height: 24px;\n border-radius: 12px;\n background-color: ${(props) =>\n props.checked ? \"var(--color-primary)\" : \"var(--color-border)\"};\n transition: background-color 0.2s ease;\n border: 1px solid\n ${(props) =>\n props.checked ? \"var(--color-primary)\" : \"var(--color-border)\"};\n\n &::before {\n content: \"\";\n position: absolute;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background-color: ${(props) =>\n props.checked ? \"white\" : \"var(--color-muted)\"};\n top: 2px;\n left: ${(props) => (props.checked ? \"20px\" : \"2px\")};\n transition: left 0.2s ease;\n }\n`;\n\ninterface SwitchProps {\n checked: boolean;\n onChange: (checked: boolean) => void;\n}\n\nexport const Switch: React.FC<SwitchProps> = ({ checked, onChange }) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange(event.target.checked);\n };\n\n return (\n <SwitchContainer>\n <SwitchInput type=\"checkbox\" checked={checked} onChange={handleChange} />\n <SwitchSlider checked={checked} />\n </SwitchContainer>\n );\n};\n","import { useState, useCallback } from \"react\";\n\ninterface UseDialogReturn {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n}\n\n/**\n * A hook for controlling the open/closed state of a dialog\n * @returns Object with isOpen state and methods to control the dialog\n */\nexport const useDialog = (initialState = false): UseDialogReturn => {\n const [isOpen, setIsOpen] = useState(initialState);\n\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const toggle = useCallback(() => {\n setIsOpen((prevState) => !prevState);\n }, []);\n\n return {\n isOpen,\n open,\n close,\n toggle,\n };\n};\n","import { Search } from \"lucide-react\";\n\ninterface SearchInputProps {\n placeholder: string;\n value: string;\n onChange: (value: string) => void;\n}\n\nexport const SearchInput = ({\n onChange,\n placeholder,\n value,\n}: SearchInputProps) => {\n return (\n <div\n style={{\n display: \"flex\",\n flexGrow: 1,\n alignItems: \"center\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"8px\",\n padding: \"8px 12px\",\n backgroundColor: \"var(--color-input-background)\",\n minWidth: \"250px\",\n }}\n >\n <Search size={16} color=\"var(--color-secondary-text)\" style={{ marginRight: \"8px\" }} />\n <input\n type=\"text\"\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n style={{\n border: \"none\",\n outline: \"none\",\n width: \"100%\",\n fontSize: \"14px\",\n color: \"var(--color-text)\",\n }}\n />\n </div>\n );\n};\n","import styled, { css } from \"styled-components\";\n\ninterface ButtonProps {\n $primary?: boolean;\n $outline?: boolean;\n $destructive?: boolean;\n}\n\nexport const Button = styled.button<ButtonProps>`\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n border: 1px solid transparent;\n border-radius: var(--radius-md);\n font-weight: 500;\n font-size: var(--font-xs);\n cursor: pointer;\n transition:\n background-color 0.2s,\n color 0.2s,\n border-color 0.2s;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: var(--space-xs);\n height: 36px;\n background-color: var(--color-primary);\n border-color: var(--color-primary);\n color: white;\n\n &:hover:not(:disabled) {\n background-color: var(--color-primary-hover);\n }\n\n &:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n }\n\n ${(props) =>\n props.$outline &&\n css`\n background-color: var(--color-input-background);\n color: var(--color-foreground);\n border: 1px solid var(--color-border);\n\n &:hover:not(:disabled) {\n background-color: var(--color-border);\n }\n `}\n\n ${(props) =>\n props.$destructive &&\n css`\n background-color: var(--color-error-background);\n color: var(--color-error);\n border-color: var(--color-error-border);\n\n &:hover:not(:disabled) {\n background-color: var(--color-error);\n color: var(--color-background);\n }\n `}\n`;\n","import React, { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\n\nconst ComboBoxContainer = styled.div`\n position: relative;\n width: 100%;\n`;\n\nconst ComboBoxTrigger = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 8px 12px;\n background: var(--color-background);\n border: 1px solid var(--color-border);\n border-radius: 6px;\n font-size: 14px;\n color: var(--color-text);\n text-align: left;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background: var(--color-background-hover);\n border-color: var(--color-border-hover);\n }\n\n &:focus {\n outline: none;\n border-color: var(--color-primary);\n box-shadow: 0 0 0 2px var(--color-primary-shadow);\n }\n\n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n`;\n\nconst DropdownMenu = styled.div<{ isOpen: boolean }>`\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n width: 100%;\n max-height: 250px;\n overflow-y: auto;\n background: var(--color-background);\n border-radius: 6px;\n border: 1px solid var(--color-border);\n box-shadow: 0 4px 12px var(--color-shadow);\n z-index: 1000;\n opacity: ${(props) => (props.isOpen ? 1 : 0)};\n transform: ${(props) => (props.isOpen ? \"scale(1)\" : \"scale(0.95)\")};\n transform-origin: top;\n pointer-events: ${(props) => (props.isOpen ? \"auto\" : \"none\")};\n transition: all 0.2s ease;\n`;\n\nconst SearchInput = styled.input`\n width: 100%;\n padding: 8px 12px;\n border: none;\n border-bottom: 1px solid var(--color-border);\n font-size: 14px;\n outline: none;\n background: var(--color-background);\n color: var(--color-text);\n\n &::placeholder {\n color: var(--color-muted);\n }\n`;\n\nconst Option = styled.div<{ isSelected?: boolean; disabled?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n cursor: ${(props) => (props.disabled ? \"not-allowed\" : \"pointer\")};\n font-size: 14px;\n background: ${(props) =>\n props.isSelected ? \"var(--color-background-hover)\" : \"transparent\"};\n color: ${(props) =>\n props.disabled ? \"var(--color-muted)\" : \"var(--color-text)\"};\n opacity: ${(props) => (props.disabled ? 0.6 : 1)};\n transition: background 0.2s ease;\n\n &:hover {\n background: ${(props) =>\n !props.disabled ? \"var(--color-background-hover)\" : \"transparent\"};\n }\n`;\n\nconst Placeholder = styled.span`\n color: var(--color-muted);\n`;\n\nconst NoOptions = styled.div`\n padding: 8px 12px;\n color: var(--color-muted);\n font-size: 14px;\n text-align: center;\n`;\n\nconst GroupHeading = styled.div`\n padding: 6px 12px;\n font-size: 12px;\n font-weight: 500;\n text-transform: uppercase;\n color: var(--color-muted);\n background: var(--color-background-hover);\n`;\n\nexport interface ComboBoxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboBoxGroup {\n label: string;\n options: ComboBoxOption[];\n}\n\ninterface ComboBoxProps {\n options: ComboBoxOption[] | ComboBoxGroup[];\n value?: string | null;\n onChange: (value: string) => void;\n placeholder?: string;\n disabled?: boolean;\n searchable?: boolean;\n width?: string;\n name?: string;\n id?: string;\n groupsEnabled?: boolean;\n className?: string;\n}\n\nexport const ComboBox: React.FC<ComboBoxProps> = ({\n options,\n value,\n onChange,\n placeholder = \"Select an option\",\n disabled = false,\n searchable = false,\n width,\n name,\n id,\n groupsEnabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const isGrouped = groupsEnabled && \"options\" in options[0];\n\n // Flatten options if they are grouped\n const flatOptions = isGrouped\n ? (options as ComboBoxGroup[]).flatMap((group) => group.options)\n : (options as ComboBoxOption[]);\n\n const selectedOption = flatOptions.find((option) => option.value === value);\n\n const filteredOptions = searchQuery\n ? isGrouped\n ? (options as ComboBoxGroup[])\n .map((group) => ({\n ...group,\n options: group.options.filter((option) =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n ),\n }))\n .filter((group) => group.options.length > 0)\n : (options as ComboBoxOption[]).filter((option) =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n const handleOptionClick = (\n optionValue: string,\n disabled: boolean = false\n ) => {\n if (disabled) return;\n onChange(optionValue);\n setIsOpen(false);\n setSearchQuery(\"\");\n };\n\n const handleToggle = () => {\n if (disabled) return;\n setIsOpen(!isOpen);\n };\n\n // Focus search input when dropdown opens\n useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n setTimeout(() => {\n searchInputRef.current?.focus();\n }, 10);\n }\n }, [isOpen, searchable]);\n\n // Handle click outside to close dropdown\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setSearchQuery(\"\");\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n return (\n <ComboBoxContainer\n ref={containerRef}\n style={{ width }}\n className={className}\n >\n <ComboBoxTrigger\n type=\"button\"\n onClick={handleToggle}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n id={id}\n >\n {selectedOption ? (\n selectedOption.label\n ) : (\n <Placeholder>{placeholder}</Placeholder>\n )}\n {isOpen ? <ChevronUp size={16} /> : <ChevronDown size={16} />}\n </ComboBoxTrigger>\n\n <DropdownMenu isOpen={isOpen} role=\"listbox\">\n {searchable && (\n <SearchInput\n ref={searchInputRef}\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n\n {isGrouped ? (\n (filteredOptions as ComboBoxGroup[]).map((group, groupIndex) => (\n <React.Fragment key={`group-${groupIndex}`}>\n <GroupHeading>{group.label}</GroupHeading>\n {group.options.length === 0 ? (\n <NoOptions>No options available</NoOptions>\n ) : (\n group.options.map((option) => (\n <Option\n key={option.value}\n isSelected={option.value === value}\n disabled={option.disabled}\n onClick={() =>\n handleOptionClick(option.value, option.disabled)\n }\n role=\"option\"\n aria-selected={option.value === value}\n >\n {option.label}\n {option.value === value && <Check size={16} />}\n </Option>\n ))\n )}\n </React.Fragment>\n ))\n ) : (\n <>\n {(filteredOptions as ComboBoxOption[]).length === 0 ? (\n <NoOptions>No options available</NoOptions>\n ) : (\n (filteredOptions as ComboBoxOption[]).map((option) => (\n <Option\n key={option.value}\n isSelected={option.value === value}\n disabled={option.disabled}\n onClick={() =>\n handleOptionClick(option.value, option.disabled)\n }\n role=\"option\"\n aria-selected={option.value === value}\n >\n {option.label}\n {option.value === value && <Check size={16} />}\n </Option>\n ))\n )}\n </>\n )}\n </DropdownMenu>\n\n {/* Hidden select for form submission */}\n {name && <input type=\"hidden\" name={name} value={value || \"\"} />}\n </ComboBoxContainer>\n );\n};\n\n// Multi-select ComboBox\ninterface ComboBoxMultiProps {\n options: ComboBoxOption[] | ComboBoxGroup[];\n value: string[];\n onChange: (value: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n searchable?: boolean;\n width?: string;\n name?: string;\n id?: string;\n groupsEnabled?: boolean;\n className?: string;\n}\n\nexport const ComboBoxMulti: React.FC<ComboBoxMultiProps> = ({\n options,\n value,\n onChange,\n placeholder = \"Select options\",\n disabled = false,\n searchable = false,\n width,\n name,\n id,\n groupsEnabled = false,\n className,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const isGrouped = groupsEnabled && \"options\" in options[0];\n\n // Flatten options if they are grouped\n const flatOptions = isGrouped\n ? (options as ComboBoxGroup[]).flatMap((group) => group.options)\n : (options as ComboBoxOption[]);\n\n const selectedOptions = flatOptions.filter((option) =>\n value.includes(option.value)\n );\n\n const filteredOptions = searchQuery\n ? isGrouped\n ? (options as ComboBoxGroup[])\n .map((group) => ({\n ...group,\n options: group.options.filter((option) =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n ),\n }))\n .filter((group) => group.options.length > 0)\n : (options as ComboBoxOption[]).filter((option) =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n const handleOptionClick = (\n optionValue: string,\n disabled: boolean = false\n ) => {\n if (disabled) return;\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue));\n } else {\n onChange([...value, optionValue]);\n }\n };\n\n const handleToggle = () => {\n if (disabled) return;\n setIsOpen(!isOpen);\n };\n\n // Focus search input when dropdown opens\n useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n setTimeout(() => {\n searchInputRef.current?.focus();\n }, 10);\n }\n }, [isOpen, searchable]);\n\n // Handle click outside to close dropdown\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setSearchQuery(\"\");\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n return (\n <ComboBoxContainer\n ref={containerRef}\n style={{ width }}\n className={className}\n >\n <ComboBoxTrigger\n type=\"button\"\n onClick={handleToggle}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n id={id}\n >\n {selectedOptions.length > 0 ? (\n selectedOptions.map((opt) => opt.label).join(\", \")\n ) : (\n <Placeholder>{placeholder}</Placeholder>\n )}\n {isOpen ? <ChevronUp size={16} /> : <ChevronDown size={16} />}\n </ComboBoxTrigger>\n\n <DropdownMenu isOpen={isOpen} role=\"listbox\">\n {searchable && (\n <SearchInput\n ref={searchInputRef}\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n\n {isGrouped ? (\n (filteredOptions as ComboBoxGroup[]).map((group, groupIndex) => (\n <React.Fragment key={`group-${groupIndex}`}>\n <GroupHeading>{group.label}</GroupHeading>\n {group.options.length === 0 ? (\n <NoOptions>No options available</NoOptions>\n ) : (\n group.options.map((option) => (\n <Option\n key={option.value}\n isSelected={value.includes(option.value)}\n disabled={option.disabled}\n onClick={() =>\n handleOptionClick(option.value, option.disabled)\n }\n role=\"option\"\n aria-selected={value.includes(option.value)}\n >\n {option.label}\n {value.includes(option.value) && <Check size={16} />}\n </Option>\n ))\n )}\n </React.Fragment>\n ))\n ) : (\n <>\n {(filteredOptions as ComboBoxOption[]).length === 0 ? (\n <NoOptions>No options available</NoOptions>\n ) : (\n (filteredOptions as ComboBoxOption[]).map((option) => (\n <Option\n key={option.value}\n isSelected={value.includes(option.value)}\n disabled={option.disabled}\n onClick={() =>\n handleOptionClick(option.value, option.disabled)\n }\n role=\"option\"\n aria-selected={value.includes(option.value)}\n >\n {option.label}\n {value.includes(option.value) && <Check size={16} />}\n </Option>\n ))\n )}\n </>\n )}\n </DropdownMenu>\n\n {/* Hidden input for form submission */}\n {name && <input type=\"hidden\" name={name} value={value.join(\",\")} />}\n </ComboBoxContainer>\n );\n};\n","\"use client\";\n\nimport { createContext, useContext, useState } from \"react\";\nimport { useDeployment } from \"../hooks\";\nimport { FirstFactor } from \"@/types\";\nimport { DeploymentSocialConnection } from \"@/types\";\nimport { AuthSettings } from \"@/types\";\n\ninterface SignInContextType {\n email: string;\n showOtherOptions: boolean;\n showForgotPassword: boolean;\n otpSent: boolean;\n setEmail: (email: string) => void;\n setShowOtherOptions: (show: boolean) => void;\n setShowForgotPassword: (show: boolean) => void;\n setOtpSent: (sent: boolean) => void;\n enabledSocialsProviders: DeploymentSocialConnection[];\n authSettings: AuthSettings | undefined;\n firstFactor: FirstFactor | undefined;\n setFirstFactor: (factor: FirstFactor) => void;\n}\n\nconst SignInContext = createContext<SignInContextType | undefined>(undefined);\n\nexport function useSignInContext() {\n const context = useContext(SignInContext);\n if (!context) {\n throw new Error(\"useSignIn must be used within a SignInProvider\");\n }\n return context;\n}\n\ninterface SignInProviderProps {\n children: React.ReactNode;\n}\n\nexport function SignInProvider({ children }: SignInProviderProps) {\n const { deployment } = useDeployment();\n const [firstFactor, setFirstFactor] = useState<FirstFactor>(\n deployment?.auth_settings.first_factor || \"email_password\"\n );\n const [email, setEmail] = useState(\"\");\n const [showOtherOptions, setShowOtherOptions] = useState(false);\n const [showForgotPassword, setShowForgotPassword] = useState(false);\n const [otpSent, setOtpSent] = useState(false);\n\n const enabledSocialsProviders =\n deployment?.social_connections.filter((conn) => conn.enabled) || [];\n\n const authSettings = deployment?.auth_settings;\n\n return (\n <SignInContext.Provider\n value={{\n email,\n showOtherOptions,\n showForgotPassword,\n otpSent,\n setFirstFactor,\n setEmail,\n setShowOtherOptions,\n setShowForgotPassword,\n setOtpSent,\n enabledSocialsProviders,\n authSettings,\n firstFactor,\n }}\n >\n {children}\n </SignInContext.Provider>\n );\n}\n","import { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { useDeployment } from \"@/hooks/use-deployment\";\nimport {\n useSignInWithStrategy,\n SignInStrategy,\n type OAuthProvider,\n} from \"@/hooks/use-signin\";\nimport { SocialAuthButtons } from \"@/components/auth/social-buttons\";\nimport { useSignInContext } from \"@/context/signin-provider\";\nimport { DeploymentSocialConnection } from \"@/types\";\n\nconst EmailButton = styled.button`\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: var(--color-input-background);\n color: var(--color-foreground);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n font-size: var(--font-xs);\n cursor: pointer;\n text-align: center;\n transition: all 0.2s;\n margin-bottom: var(--space-xs);\n height: 36px;\n\n &:hover:not(:disabled) {\n background: var(--color-input-background);\n border-color: var(--color-input-border);\n }\n\n &:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n }\n`;\n\nexport function OtherAuthOptions() {\n const { deployment } = useDeployment();\n const { signIn: oauthSignIn } = useSignInWithStrategy(SignInStrategy.Oauth);\n const {\n setFirstFactor,\n firstFactor,\n setShowOtherOptions,\n setShowForgotPassword,\n } = useSignInContext();\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const authSettings = deployment?.auth_settings;\n const enabledSocialsProviders =\n deployment?.social_connections.filter((conn) => conn.enabled) || [];\n\n const initSocialAuthSignIn = async (\n connection: DeploymentSocialConnection\n ) => {\n if (isSubmitting) return;\n\n setIsSubmitting(true);\n try {\n const { data } = await oauthSignIn.create({\n provider: connection.provider as OAuthProvider,\n });\n if (data && typeof data === \"object\" && \"oauth_url\" in data) {\n window.location.href = data.oauth_url as string;\n }\n } catch (err) {\n // OAuth sign-in error\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleBack = () => {\n setShowForgotPassword(false);\n setShowOtherOptions(false);\n };\n\n return (\n <>\n {enabledSocialsProviders.length > 0 && (\n <SocialAuthButtons\n connections={enabledSocialsProviders}\n callback={initSocialAuthSignIn}\n />\n )}\n\n <div>\n {firstFactor !== \"email_magic_link\" &&\n authSettings?.auth_factors_enabled.email_magic_link && (\n <EmailButton\n onClick={() => {\n setFirstFactor(\"email_magic_link\");\n handleBack();\n }}\n >\n Get a magic link on your email\n </EmailButton>\n )}\n {firstFactor !== \"email_password\" &&\n authSettings?.auth_factors_enabled.email_password && (\n <EmailButton\n onClick={() => {\n setFirstFactor(\"email_password\");\n handleBack();\n }}\n >\n Sign in with email and password\n </EmailButton>\n )}\n {firstFactor !== \"email_otp\" &&\n authSettings?.auth_factors_enabled.email_otp && (\n <EmailButton\n onClick={() => {\n setFirstFactor(\"email_otp\");\n handleBack();\n }}\n >\n Sign in with email and OTP\n </EmailButton>\n )}\n {firstFactor !== \"phone_otp\" &&\n authSettings?.auth_factors_enabled.phone_otp && (\n <EmailButton\n onClick={() => {\n setFirstFactor(\"phone_otp\");\n handleBack();\n }}\n >\n Sign in with phone number\n </EmailButton>\n )}\n {firstFactor !== \"username_password\" &&\n authSettings?.auth_factors_enabled.username_password && (\n <EmailButton\n onClick={() => {\n setFirstFactor(\"username_password\");\n handleBack();\n }}\n >\n Sign in with username and password\n </EmailButton>\n )}\n </div>\n </>\n );\n}\n","import { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Button, Input, FormGroup, Label, Form } from \"../utility\";\nimport { OTPInput } from \"../utility/otp-input\";\nimport {\n useForgotPassword,\n useResetPassword,\n} from \"../../hooks/use-forgot-password\";\nimport { OtherAuthOptions } from \"./other-auth-options\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { AuthFormImage } from \"./auth-image\";\n\ninterface ForgotPasswordProps {\n onBack: () => void;\n}\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n color: var(--color-foreground);\n margin: 0 0 var(--space-xs) 0;\n`;\n\nconst Message = styled.p`\n font-size: var(--font-sm);\n color: var(--color-muted);\n margin: 0;\n`;\n\nconst ErrorMessage = styled.p`\n font-size: var(--font-2xs);\n color: var(--color-error);\n margin: 0;\n margin-top: var(--space-2xs);\n`;\n\nconst ResetButton = styled(Button)`\n width: 100%;\n margin-bottom: var(--space-lg);\n`;\n\nconst Divider = styled.div`\n display: flex;\n align-items: center;\n text-align: center;\n margin: var(--space-lg) 0;\n color: var(--color-muted);\n font-size: var(--font-xs);\n\n &::before,\n &::after {\n content: \"\";\n flex: 1;\n border-bottom: 1px solid var(--color-border);\n }\n\n &::before {\n margin-right: var(--space-sm);\n }\n\n &::after {\n margin-left: var(--space-sm);\n }\n`;\n\nconst DividerText = styled.span`\n white-space: nowrap;\n`;\n\nconst Footer = styled.div`\n text-align: center;\n margin-top: var(--space-lg);\n`;\n\nconst FooterText = styled.p`\n font-size: var(--font-sm);\n color: var(--color-muted);\n margin: 0;\n`;\n\nconst Link = styled.a`\n color: var(--color-primary);\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n`;\n\nexport function ForgotPassword({ onBack }: ForgotPasswordProps) {\n const [step, setStep] = useState<\"start\" | \"email\" | \"otp\" | \"reset\">(\n \"start\"\n );\n const [email, setEmail] = useState(\"\");\n const [otp, setOtp] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const {\n forgotPassword,\n loading: forgotPasswordLoading,\n error: forgotPasswordError,\n } = useForgotPassword();\n const {\n resetPassword,\n loading: resetPasswordLoading,\n error: resetPasswordError,\n } = useResetPassword();\n\n const handleEmailSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email) {\n return;\n }\n const result = await forgotPassword(email);\n if (!result.errors) {\n setStep(\"otp\");\n }\n };\n\n const handleOtpSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (otp.length !== 6) {\n return;\n }\n setStep(\"reset\");\n };\n\n const handleResetSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (password !== confirmPassword) {\n return;\n }\n if (password.length < 8) {\n return;\n }\n const result = await resetPassword(email, otp, password);\n if (!result.errors) {\n onBack(); // Go back to sign in form\n }\n };\n\n const renderInitialView = () => (\n <>\n <AuthFormImage />\n\n <Header>\n <Title>Forgot Password</Title>\n </Header>\n\n <ResetButton\n onClick={() => setStep(\"email\")}\n disabled={forgotPasswordLoading}\n >\n Reset your password\n </ResetButton>\n\n <Divider>\n <DividerText>Or, sign in with another method</DividerText>\n </Divider>\n\n <OtherAuthOptions />\n\n <Footer>\n <FooterText>\n Unable to reset password? <Link href=\"/contact\">Get help</Link>\n </FooterText>\n <FooterText style={{ marginTop: \"var(--space-sm)\" }}>\n <Link onClick={onBack} style={{ cursor: \"pointer\" }}>\n Back to login\n </Link>\n </FooterText>\n </Footer>\n </>\n );\n\n return (\n <DefaultStylesProvider>\n <Container>\n {step === \"start\" && renderInitialView()}\n\n {step === \"email\" && (\n <>\n <Header>\n <Title>Forgot Password</Title>\n <Message>\n Enter your email address and we'll send you a code to reset your\n password.\n </Message>\n </Header>\n <Form onSubmit={handleEmailSubmit} noValidate>\n <FormGroup>\n <Label htmlFor=\"email\">Email Address</Label>\n <Input\n type=\"email\"\n id=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"Enter your email\"\n required\n />\n </FormGroup>\n {forgotPasswordError && (\n <ErrorMessage>{forgotPasswordError.message}</ErrorMessage>\n )}\n <Button\n type=\"submit\"\n disabled={forgotPasswordLoading}\n style={{ width: \"100%\", marginTop: \"var(--space-md)\" }}\n >\n {forgotPasswordLoading ? \"Sending...\" : \"Send Code\"}\n </Button>\n </Form>\n <Footer>\n <FooterText style={{ marginTop: \"var(--space-sm)\" }}>\n <Link onClick={onBack} style={{ cursor: \"pointer\" }}>\n Back to login\n </Link>\n </FooterText>\n </Footer>\n </>\n )}\n\n {step === \"otp\" && (\n <>\n <Header>\n <Title>Enter Verification Code</Title>\n <Message>\n We've sent a 6-digit code to {email}. Please enter it below.\n </Message>\n </Header>\n <Form onSubmit={handleOtpSubmit} noValidate>\n <OTPInput\n onComplete={(code) => setOtp(code)}\n isSubmitting={resetPasswordLoading}\n error={resetPasswordError?.message}\n onResend={async () => {\n await forgotPassword(email);\n }}\n />\n {resetPasswordError && (\n <ErrorMessage>{resetPasswordError.message}</ErrorMessage>\n )}\n <Button\n type=\"submit\"\n disabled={resetPasswordLoading || otp.length !== 6}\n style={{ width: \"100%\", marginTop: \"var(--space-md)\" }}\n >\n {resetPasswordLoading ? \"Verifying...\" : \"Verify\"}\n </Button>\n </Form>\n <Footer>\n <FooterText style={{ marginTop: \"var(--space-sm)\" }}>\n <Link onClick={onBack} style={{ cursor: \"pointer\" }}>\n Back to login\n </Link>\n </FooterText>\n </Footer>\n </>\n )}\n\n {step === \"reset\" && (\n <>\n <Header>\n <Title>Reset Password</Title>\n <Message>Create a new password for your account.</Message>\n </Header>\n <Form onSubmit={handleResetSubmit} noValidate>\n <FormGroup>\n <Label htmlFor=\"password\">New Password</Label>\n <Input\n type=\"password\"\n id=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"Enter new password\"\n required\n />\n </FormGroup>\n <FormGroup>\n <Label htmlFor=\"confirmPassword\">Confirm New Password</Label>\n <Input\n type=\"password\"\n id=\"confirmPassword\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder=\"Confirm new password\"\n required\n />\n </FormGroup>\n {resetPasswordError && (\n <ErrorMessage>{resetPasswordError.message}</ErrorMessage>\n )}\n <Button\n type=\"submit\"\n disabled={resetPasswordLoading}\n style={{ width: \"100%\", marginTop: \"var(--space-md)\" }}\n >\n {resetPasswordLoading ? \"Resetting...\" : \"Reset Password\"}\n </Button>\n </Form>\n <Footer>\n <FooterText style={{ marginTop: \"var(--space-sm)\" }}>\n <Link onClick={onBack} style={{ cursor: \"pointer\" }}>\n Back to login\n </Link>\n </FooterText>\n </Footer>\n </>\n )}\n </Container>\n </DefaultStylesProvider>\n );\n}\n","import styled from \"styled-components\";\nimport { DefaultStylesProvider } from \"@/components/utility/root\";\nimport { OtherAuthOptions } from \"@/components/auth/other-auth-options\";\nimport { AuthFormImage } from \"./auth-image\";\n\nconst Container = styled.div`\n max-width: 360px;\n width: 360px;\n padding: var(--space-2xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n position: relative;\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n margin: 0;\n`;\n\nconst Footer = styled.div`\n text-align: center;\n margin-top: var(--space-lg);\n`;\n\nconst FooterText = styled.p`\n font-size: var(--font-xs);\n color: var(--color-muted);\n`;\n\nconst Link = styled.a`\n color: var(--color-primary);\n text-decoration: none;\n`;\n\ninterface OtherSignInOptionsProps {\n onBack: () => void;\n}\n\nexport function OtherSignInOptions({ onBack }: OtherSignInOptionsProps) {\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n <Header>\n <Title>Supported Options</Title>\n <Subtitle>Choose one of the following options to continue</Subtitle>\n </Header>\n <OtherAuthOptions />\n <Footer>\n <FooterText>\n Don't have an account? <Link href=\"/signup\">Sign up</Link>\n </FooterText>\n <FooterText style={{ marginTop: \"var(--space-sm)\" }}>\n <Link onClick={onBack} style={{ cursor: \"pointer\" }}>\n Back to login\n </Link>\n </FooterText>\n </Footer>\n </Container>\n </DefaultStylesProvider>\n );\n}\n","import { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Button } from \"@/components/utility\";\nimport { AuthFormImage } from \"./auth-image\";\nimport { DefaultStylesProvider } from \"../utility/root\";\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n position: relative;\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n`;\n\nconst MethodList = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n margin-bottom: var(--space-lg);\n`;\n\nconst MethodButton = styled.button<{ selected?: boolean }>`\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-lg);\n background: ${props => props.selected ? 'var(--color-primary-background)' : 'var(--color-background)'};\n border: 1px solid ${props => props.selected ? 'var(--color-primary)' : 'var(--color-border)'};\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all 0.2s;\n text-align: left;\n width: 100%;\n\n &:hover:not(:disabled) {\n background: ${props => props.selected ? 'var(--color-primary-background)' : 'var(--color-background-hover)'};\n border-color: var(--color-primary);\n box-shadow: 0 2px 4px var(--color-shadow);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst MethodIcon = styled.div`\n width: 44px;\n height: 44px;\n background: var(--color-background-hover);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n svg {\n width: 20px;\n height: 20px;\n color: var(--color-foreground);\n }\n`;\n\nconst MethodInfo = styled.div`\n flex: 1;\n`;\n\nconst MethodName = styled.div`\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-2xs);\n font-size: var(--font-sm);\n`;\n\nconst MethodDescription = styled.div`\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n line-height: 1.4;\n`;\n\nconst ContinueButton = styled(Button)`\n width: 100%;\n`;\n\nconst Footer = styled.div`\n margin-top: var(--space-lg);\n text-align: center;\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n`;\n\nconst Link = styled.span`\n color: var(--color-primary);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s;\n cursor: pointer;\n\n &:hover {\n color: var(--color-primary-hover);\n }\n`;\n\nexport interface TwoFactorMethod {\n id: string;\n name: string;\n description: string;\n icon: React.ReactNode;\n available: boolean;\n phoneNumber?: string;\n}\n\ninterface TwoFactorMethodSelectorProps {\n methods: TwoFactorMethod[];\n onSelectMethod: (methodId: string) => void;\n onBack?: () => void;\n}\n\nexport function TwoFactorMethodSelector({ methods, onSelectMethod, onBack }: TwoFactorMethodSelectorProps) {\n const [selectedMethod, setSelectedMethod] = useState<string | null>(null);\n\n const handleContinue = () => {\n if (selectedMethod) {\n onSelectMethod(selectedMethod);\n }\n };\n\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n\n <Header>\n <Title>Two-factor authentication</Title>\n <Subtitle>\n Choose how you'd like to verify your identity\n </Subtitle>\n </Header>\n\n <MethodList>\n {methods.map((method) => (\n <MethodButton\n key={method.id}\n onClick={() => setSelectedMethod(method.id)}\n selected={selectedMethod === method.id}\n disabled={!method.available}\n >\n <MethodIcon>{method.icon}</MethodIcon>\n <MethodInfo>\n <MethodName>{method.name}</MethodName>\n <MethodDescription>\n {method.description}\n {method.phoneNumber && ` to ${method.phoneNumber}`}\n </MethodDescription>\n </MethodInfo>\n </MethodButton>\n ))}\n </MethodList>\n\n <ContinueButton\n onClick={handleContinue}\n disabled={!selectedMethod}\n >\n Continue\n </ContinueButton>\n\n {onBack && (\n <Footer>\n <Link onClick={onBack} style={{ cursor: \"pointer\" }}>\n Back to login\n </Link>\n </Footer>\n )}\n </Container>\n </DefaultStylesProvider>\n );\n}","import { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Button } from \"@/components/utility\";\nimport { Input } from \"@/components/utility/input\";\nimport { Form, FormGroup, Label } from \"../utility/form\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { AuthFormImage } from \"./auth-image\";\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n position: relative;\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n`;\n\nconst ErrorMessage = styled.p`\n font-size: var(--font-2xs);\n color: var(--color-error);\n margin: 0;\n margin-top: var(--space-2xs);\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: var(--space-sm);\n width: 100%;\n`;\n\nconst Footer = styled.div`\n margin-top: var(--space-lg);\n text-align: center;\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n`;\n\nconst Link = styled.span`\n color: var(--color-primary);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s;\n cursor: pointer;\n\n &:hover {\n color: var(--color-primary-hover);\n }\n`;\n\nconst LastDigitsInput = styled(Input)`\n text-align: center;\n font-size: var(--font-xl);\n letter-spacing: 0.8em;\n font-family: monospace;\n font-weight: 600;\n padding: var(--space-lg);\n`;\n\ninterface PhoneVerificationProps {\n onVerify: (lastFourDigits: string) => void;\n onBack: () => void;\n loading?: boolean;\n}\n\nexport function PhoneVerification({\n onVerify,\n onBack,\n loading,\n}: PhoneVerificationProps) {\n const [lastFourDigits, setLastFourDigits] = useState(\"\");\n const [error, setError] = useState(\"\");\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n\n if (lastFourDigits.length !== 4) {\n setError(\"Please enter the last 4 digits of your phone number\");\n return;\n }\n\n onVerify(lastFourDigits);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value.replace(/\\D/g, \"\").slice(0, 4);\n setLastFourDigits(value);\n setError(\"\");\n };\n\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n\n <Header>\n <Title>Verify your phone number</Title>\n <Subtitle>\n To send a verification code, please confirm the last 4 digits of\n your primary phone number\n </Subtitle>\n </Header>\n\n <Form onSubmit={handleSubmit} noValidate>\n <FormGroup>\n <Label htmlFor=\"lastDigits\">Last 4 digits</Label>\n <LastDigitsInput\n type=\"text\"\n id=\"lastDigits\"\n name=\"lastDigits\"\n value={lastFourDigits}\n onChange={handleInputChange}\n placeholder=\"0000\"\n maxLength={4}\n autoComplete=\"off\"\n aria-invalid={!!error}\n autoFocus\n />\n {error && <ErrorMessage>{error}</ErrorMessage>}\n </FormGroup>\n\n <SubmitButton\n type=\"submit\"\n disabled={loading || lastFourDigits.length !== 4}\n >\n {loading ? \"Verifying...\" : \"Send code\"}\n </SubmitButton>\n </Form>\n\n <Footer>\n <Link onClick={onBack} style={{ cursor: \"pointer\" }}>\n Choose a different method\n </Link>\n </Footer>\n </Container>\n </DefaultStylesProvider>\n );\n}\n","export const ShieldIcon = () => (\n <svg \n viewBox=\"0 0 24 24\" \n fill=\"none\" \n stroke=\"currentColor\" \n strokeWidth=\"2\" \n strokeLinecap=\"round\" \n strokeLinejoin=\"round\"\n >\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n </svg>\n);","export const SmartphoneIcon = () => (\n <svg \n viewBox=\"0 0 24 24\" \n fill=\"none\" \n stroke=\"currentColor\" \n strokeWidth=\"2\" \n strokeLinecap=\"round\" \n strokeLinejoin=\"round\"\n >\n <rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\" />\n <path d=\"M12 18h.01\" />\n </svg>\n);","export const KeyIcon = () => (\n <svg \n viewBox=\"0 0 24 24\" \n fill=\"none\" \n stroke=\"currentColor\" \n strokeWidth=\"2\" \n strokeLinecap=\"round\" \n strokeLinejoin=\"round\"\n >\n <path d=\"m21 2-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0 3 3L22 7l-3-3m-3.5 3.5L19 4\" />\n </svg>\n);","import { useEffect, useState } from \"react\";\nimport styled, { keyframes } from \"styled-components\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { OTPInput } from \"@/components/utility/otp-input\";\nimport { Input } from \"@/components/utility/input\";\nimport { Form, FormGroup, Label } from \"../utility/form\";\nimport { Button } from \"@/components/utility\";\nimport { AuthFormImage } from \"./auth-image\";\nimport { useDeployment } from \"@/hooks/use-deployment\";\nimport { NavigationLink } from \"../utility/navigation\";\nimport {\n TwoFactorMethodSelector,\n type TwoFactorMethod,\n} from \"./two-factor-method-selector\";\nimport { PhoneVerification } from \"./phone-verification\";\nimport { ShieldIcon } from \"../icons/shield\";\nimport { SmartphoneIcon } from \"../icons/smartphone\";\nimport { KeyIcon } from \"../icons/key\";\nimport { ProfileCompletionProps } from \"@snipextt/wacht-types\";\nimport { useNavigation } from \"@/hooks\";\nimport { Loader2 } from \"lucide-react\";\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst LoadingContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n\n svg {\n animation: ${spin} 1s linear infinite;\n color: var(--color-primary);\n }\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n position: relative;\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n`;\n\nconst ErrorMessage = styled.p`\n font-size: var(--font-2xs);\n color: var(--color-error);\n margin: 0;\n margin-top: var(--space-2xs);\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: var(--space-sm);\n`;\n\nconst Footer = styled.div`\n margin-top: var(--space-lg);\n text-align: center;\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n`;\n\nconst Link = styled.span`\n color: var(--color-primary);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s;\n cursor: pointer;\n\n &:hover {\n color: var(--color-primary-hover);\n }\n`;\n\nconst CodeInput = styled(Input)`\n text-align: center;\n font-size: var(--font-lg);\n letter-spacing: 0.5em;\n font-family: monospace;\n`;\n\nexport function TwoFactorVerification({\n onBack,\n attempt,\n completeVerification,\n prepareVerification,\n}: Omit<ProfileCompletionProps, \"completeProfile\">) {\n const { deployment } = useDeployment();\n const [verificationCode, setVerificationCode] = useState(\"\");\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [selectedMethod, setSelectedMethod] = useState<string | null>(null);\n const [showMethodSelector, setShowMethodSelector] = useState(true);\n const [showPhoneVerification, setShowPhoneVerification] = useState(false);\n const [maskedPhone, setMaskedPhone] = useState(\"\");\n const [isRedirecting, setIsRedirecting] = useState(false);\n\n const { navigate } = useNavigation();\n\n const available2FAMethods = attempt?.available_2fa_methods || [];\n\n const availableMethods: TwoFactorMethod[] = [\n {\n id: \"authenticator\",\n name: \"Authenticator app\",\n description: \"Use your authenticator app\",\n icon: <ShieldIcon />,\n available: available2FAMethods.includes(\"authenticator\"),\n },\n {\n id: \"phone_otp\",\n name: \"Text message\",\n description: \"Get a code via SMS\",\n icon: <SmartphoneIcon />,\n available: available2FAMethods.includes(\"phone_otp\"),\n phoneNumber: maskedPhone,\n },\n {\n id: \"backup_code\",\n name: \"Backup code\",\n description: \"Use one of your backup codes\",\n icon: <KeyIcon />,\n available: available2FAMethods.includes(\"backup_code\"),\n },\n ].filter((method) => method.available);\n\n const handleMethodSelect = async (methodId: string) => {\n setSelectedMethod(methodId);\n setShowMethodSelector(false);\n\n if (methodId === \"phone_otp\") {\n setShowPhoneVerification(true);\n }\n };\n\n const handlePhoneVerification = async (lastFourDigits: string) => {\n if (!attempt) return;\n\n setIsSubmitting(true);\n try {\n const response = await prepareVerification({\n strategy: \"phone_otp\",\n lastDigits: lastFourDigits,\n });\n\n if (response && \"data\" in response && response.data?.otp_sent) {\n if (response.data?.masked_phone) {\n setMaskedPhone(response.data.masked_phone);\n }\n setShowPhoneVerification(false);\n } else {\n setErrors({ phone: \"Phone number verification failed\" });\n }\n } catch (err) {\n setErrors({ phone: (err as Error).message });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (isSubmitting) return;\n\n const newErrors: Record<string, string> = {};\n\n if (!verificationCode) {\n newErrors.code = \"Verification code is required\";\n } else if (\n selectedMethod === \"authenticator\" &&\n verificationCode.length !== 6\n ) {\n newErrors.code = \"Authentication code must be 6 digits\";\n } else if (\n selectedMethod === \"phone_otp\" &&\n verificationCode.length !== 6\n ) {\n newErrors.code = \"SMS code must be 6 digits\";\n }\n\n setErrors(newErrors);\n\n if (Object.keys(newErrors).length > 0) {\n return;\n }\n\n setIsSubmitting(true);\n try {\n await completeVerification(verificationCode);\n } catch (err) {\n setErrors({ submit: (err as Error).message });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value.replace(/\\D/g, \"\").slice(0, 6);\n setVerificationCode(value);\n setErrors((prev) => ({ ...prev, code: \"\" }));\n };\n\n useEffect(() => {\n if (attempt.completed) {\n setIsRedirecting(true);\n let redirectUri: string | null = new URLSearchParams(\n window.location.search,\n ).get(\"redirect_uri\");\n\n if (!redirectUri) {\n redirectUri =\n deployment?.ui_settings?.after_signin_redirect_url || null;\n }\n\n if (!redirectUri && deployment?.frontend_host) {\n redirectUri = `https://${deployment.frontend_host}`;\n }\n\n if (redirectUri) {\n const uri = new URL(redirectUri);\n\n if (deployment?.mode === \"staging\") {\n uri.searchParams.set(\n \"__dev_session__\",\n localStorage.getItem(\"__dev_session__\") || \"\",\n );\n }\n\n navigate(uri.toString());\n }\n return;\n }\n }, [attempt, deployment]);\n\n if (isRedirecting) {\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n <LoadingContainer>\n <Loader2 size={32} />\n </LoadingContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n if (showMethodSelector) {\n if (availableMethods.length === 0) {\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n <Header>\n <Title>Set Up Two-Factor Authentication</Title>\n <Subtitle>\n Your account requires two-factor authentication, but you haven't\n set up any methods yet. Please contact your administrator to set\n up 2FA.\n </Subtitle>\n </Header>\n <Footer>\n {onBack && (\n <div>\n <Link onClick={onBack} style={{ cursor: \"pointer\" }}>\n Back to login\n </Link>\n </div>\n )}\n <div style={{ marginTop: \"var(--space-sm)\" }}>\n Having trouble?{\" \"}\n <Link>\n <NavigationLink\n to={deployment?.ui_settings.support_page_url || \"#\"}\n >\n Get help\n </NavigationLink>\n </Link>\n </div>\n </Footer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n return (\n <TwoFactorMethodSelector\n methods={availableMethods}\n onSelectMethod={handleMethodSelect}\n onBack={onBack}\n />\n );\n }\n\n if (showPhoneVerification && selectedMethod === \"phone_otp\") {\n return (\n <PhoneVerification\n onVerify={handlePhoneVerification}\n onBack={() => {\n setShowPhoneVerification(false);\n setShowMethodSelector(true);\n setSelectedMethod(null);\n }}\n loading={isSubmitting}\n />\n );\n }\n\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n\n <Header>\n <Title>Two-factor authentication</Title>\n <Subtitle>\n {selectedMethod === \"authenticator\" &&\n \"Enter the 6-digit code from your authenticator app\"}\n {selectedMethod === \"phone_otp\" &&\n `Enter the 6-digit code sent to your phone ${maskedPhone}`}\n {selectedMethod === \"backup_code\" &&\n \"Enter one of your backup codes\"}\n </Subtitle>\n </Header>\n\n <Form onSubmit={handleSubmit} noValidate>\n {selectedMethod === \"backup_code\" ? (\n <FormGroup>\n <Label htmlFor=\"code\">Backup code</Label>\n <CodeInput\n type=\"text\"\n id=\"code\"\n name=\"code\"\n value={verificationCode}\n onChange={handleInputChange}\n placeholder=\"Enter backup code\"\n maxLength={20}\n autoComplete=\"one-time-code\"\n aria-invalid={!!errors.code}\n autoFocus\n />\n {errors.code && <ErrorMessage>{errors.code}</ErrorMessage>}\n </FormGroup>\n ) : (\n <OTPInput\n onComplete={async (code) => {\n setVerificationCode(code);\n if (selectedMethod !== \"backup_code\") {\n const event = new Event(\"submit\", {\n bubbles: true,\n cancelable: true,\n });\n await handleSubmit(event as any);\n }\n }}\n onResend={\n selectedMethod === \"phone_otp\"\n ? async () => {\n try {\n await prepareVerification({\n strategy: \"phone_otp\",\n lastDigits: maskedPhone.slice(-4),\n });\n } catch (error) {\n setErrors({ submit: (error as Error).message });\n }\n }\n : undefined\n }\n error={errors.code}\n isSubmitting={isSubmitting}\n />\n )}\n\n <div>\n {errors.submit && <ErrorMessage>{errors.submit}</ErrorMessage>}\n\n <SubmitButton\n type=\"submit\"\n disabled={isSubmitting || !verificationCode}\n >\n {isSubmitting ? \"Verifying...\" : \"Verify\"}\n </SubmitButton>\n </div>\n </Form>\n\n <Footer>\n <Link\n onClick={() => {\n setShowMethodSelector(true);\n setSelectedMethod(null);\n setVerificationCode(\"\");\n setErrors({});\n }}\n style={{ cursor: \"pointer\" }}\n >\n Try another method\n </Link>\n <div style={{ marginTop: \"var(--space-sm)\" }}>\n Having trouble?{\" \"}\n <Link>\n <NavigationLink\n to={deployment?.ui_settings.support_page_url || \"#\"}\n >\n Get help\n </NavigationLink>\n </Link>\n </div>\n {onBack && (\n <div style={{ marginTop: \"var(--space-sm)\" }}>\n <Link onClick={onBack} style={{ cursor: \"pointer\" }}>\n Back to login\n </Link>\n </div>\n )}\n </Footer>\n </Container>\n </DefaultStylesProvider>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Loader2 } from \"lucide-react\";\nimport { useDeployment } from \"../../hooks/use-deployment\";\nimport { useNavigation } from \"../../hooks/use-navigation\";\nimport { PhoneNumberInput } from \"../utility/phone\";\nimport { OTPInput } from \"../utility/otp-input\";\nimport { ProfileCompletionData, ProfileCompletionProps } from \"@snipextt/wacht-types\";\nimport { AuthFormImage } from \"./auth-image\";\nimport { NavigationLink } from \"../utility/navigation\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { Button } from \"../utility/button\";\nimport { Form, FormGroup, Label } from \"../utility/form\";\nimport { Input } from \"../utility/input\";\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n position: relative;\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n`;\n\nconst NameFields = styled.div<{ $isBothEnabled: boolean }>`\n display: grid;\n grid-template-columns: ${(props) =>\n props.$isBothEnabled ? \"1fr 1fr\" : \"1fr\"};\n gap: var(--space-sm);\n`;\n\nconst ErrorMessage = styled.p`\n font-size: var(--font-2xs);\n color: var(--color-error);\n margin: 0;\n margin-top: var(--space-2xs);\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: var(--space-sm);\n`;\n\nconst Footer = styled.div`\n margin-top: var(--space-lg);\n text-align: center;\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n`;\n\nconst Link = styled.span`\n color: var(--color-primary);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s;\n cursor: pointer;\n\n &:hover {\n color: var(--color-primary-hover);\n }\n`;\n\nconst LoadingContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n\n svg {\n animation: spin 1s linear infinite;\n color: var(--color-primary);\n }\n\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n`;\n\nexport function ProfileCompletion({\n attempt,\n onBack,\n completeProfile,\n completeVerification,\n prepareVerification,\n}: ProfileCompletionProps) {\n const { deployment } = useDeployment();\n const { navigate } = useNavigation();\n\n const [formData, setFormData] = useState<ProfileCompletionData>({});\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [countryCode, setCountryCode] = useState<string | undefined>(\"US\");\n const [showVerification, setShowVerification] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [isRedirecting, setIsRedirecting] = useState(false);\n\n const displayError = error;\n const isLoading = loading;\n\n const handleComplete = async (data: ProfileCompletionData) => {\n setLoading(true);\n setError(null);\n\n try {\n const session = await completeProfile(data);\n\n // Check if completed and redirect\n if (session) {\n setIsRedirecting(true);\n let redirectUri: string | null = new URLSearchParams(\n window.location.search,\n ).get(\"redirect_uri\");\n if (!redirectUri) {\n redirectUri =\n deployment?.ui_settings?.after_signin_redirect_url || null;\n }\n if (!redirectUri && deployment?.frontend_host) {\n redirectUri = `https://${deployment.frontend_host}`;\n }\n if (redirectUri) {\n const uri = new URL(redirectUri);\n if (deployment?.mode === \"staging\") {\n uri.searchParams.set(\n \"__dev_session__\",\n localStorage.getItem(\"__dev_session__\") || \"\",\n );\n }\n navigate(uri.toString());\n }\n }\n } catch (err) {\n const error = err as Error;\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n };\n\n const handleVerificationComplete = async (code: string) => {\n setLoading(true);\n setError(null);\n\n try {\n const session = await completeVerification(code);\n\n // Check if completed and redirect\n if (session) {\n setIsRedirecting(true);\n let redirectUri: string | null = new URLSearchParams(\n window.location.search,\n ).get(\"redirect_uri\");\n if (!redirectUri) {\n redirectUri =\n deployment?.ui_settings?.after_signin_redirect_url || null;\n }\n if (!redirectUri && deployment?.frontend_host) {\n redirectUri = `https://${deployment.frontend_host}`;\n }\n if (redirectUri) {\n const uri = new URL(redirectUri);\n if (deployment?.mode === \"staging\") {\n uri.searchParams.set(\n \"__dev_session__\",\n localStorage.getItem(\"__dev_session__\") || \"\",\n );\n }\n navigate(uri.toString());\n }\n }\n return true;\n } catch (err) {\n const error = err as Error;\n setError(error);\n return false;\n } finally {\n setLoading(false);\n }\n };\n\n\n // Show loading state while redirecting\n if (isRedirecting || !attempt) {\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n <LoadingContainer>\n <Loader2 size={32} />\n </LoadingContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n const missingFields = attempt.missing_fields || [];\n const title = \"Complete Your Profile\";\n const message = \"Please provide the following information to continue\";\n\n const authSettings = deployment?.auth_settings;\n const isVerifying = attempt?.current_step === \"verify_phone_otp\" ||\n attempt?.current_step === \"verify_email_otp\" ||\n showVerification;\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n if (errors[name]) {\n setErrors((prev) => ({ ...prev, [name]: \"\" }));\n }\n };\n\n const validateForm = () => {\n const newErrors: Record<string, string> = {};\n\n missingFields.forEach((field: string) => {\n const fieldValue = formData[field as keyof ProfileCompletionData];\n let isFieldEnabled = false;\n\n switch (field) {\n case \"first_name\":\n isFieldEnabled = authSettings?.first_name?.enabled || false;\n break;\n case \"last_name\":\n isFieldEnabled = authSettings?.last_name?.enabled || false;\n break;\n case \"username\":\n isFieldEnabled = authSettings?.username?.enabled || false;\n break;\n case \"phone_number\":\n isFieldEnabled = authSettings?.phone_number?.enabled || false;\n break;\n case \"email_address\":\n isFieldEnabled = authSettings?.email_address?.enabled || false;\n break;\n default:\n isFieldEnabled = true;\n }\n\n if (isFieldEnabled && (!fieldValue || fieldValue.trim() === \"\")) {\n const fieldName = field.replace(\"_\", \" \").replace(/\\b\\w/g, (l: string) => l.toUpperCase());\n newErrors[field] = `${fieldName} is required`;\n }\n });\n\n // Additional validation\n if (formData.username && missingFields.includes(\"username\")) {\n const usernameRegex = /^[a-zA-Z0-9_-]{3,30}$/;\n if (!usernameRegex.test(formData.username)) {\n newErrors.username = \"Username must be 3-30 characters and contain only letters, numbers, underscores, and hyphens\";\n }\n }\n\n if (formData.phone_number && missingFields.includes(\"phone_number\")) {\n const phonePattern = /^\\d{7,15}$/;\n if (!phonePattern.test(formData.phone_number)) {\n newErrors.phone_number = \"Phone number must contain 7-15 digits\";\n }\n }\n\n if (formData.email && missingFields.includes(\"email_address\")) {\n const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n if (!emailPattern.test(formData.email)) {\n newErrors.email_address = \"Please enter a valid email address\";\n }\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!validateForm()) {\n return;\n }\n const submitData: any = { ...formData };\n if (formData.phone_number && countryCode) {\n submitData.phone_country_code = countryCode;\n }\n await handleComplete(submitData);\n };\n\n const handlePhoneChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setFormData((prev) => ({ ...prev, phone_number: value }));\n if (errors.phone_number) {\n setErrors((prev) => ({ ...prev, phone_number: \"\" }));\n }\n };\n\n if (isVerifying) {\n const verificationTitle = attempt.current_step === \"verify_phone_otp\"\n ? \"Verify Your Phone Number\"\n : \"Verify Your Email\";\n const verificationMessage = attempt.current_step === \"verify_phone_otp\"\n ? \"Enter the 6-digit code sent to your phone\"\n : \"Enter the 6-digit code sent to your email\";\n const resendStrategy: \"phone_otp\" | \"email_otp\" = attempt.current_step === \"verify_phone_otp\" ? \"phone_otp\" : \"email_otp\";\n\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n \n <Header>\n <Title>{verificationTitle}</Title>\n <Subtitle>{verificationMessage}</Subtitle>\n </Header>\n\n <Form onSubmit={(e) => e.preventDefault()} noValidate>\n <OTPInput\n onComplete={handleVerificationComplete}\n onResend={async () => {\n await prepareVerification({ strategy: resendStrategy });\n }}\n error={displayError?.message}\n isSubmitting={isLoading}\n />\n\n {displayError && (\n <ErrorMessage style={{ marginBottom: \"var(--space-md)\" }}>\n {displayError.message}\n </ErrorMessage>\n )}\n </Form>\n\n <Footer>\n <div>\n <Link onClick={() => setShowVerification(false)} style={{ cursor: \"pointer\" }}>\n Back to profile completion\n </Link>\n </div>\n <div style={{ marginTop: \"var(--space-sm)\" }}>\n Having trouble?{\" \"}\n <Link>\n <NavigationLink to={deployment?.ui_settings.support_page_url || \"#\"}>\n Get help\n </NavigationLink>\n </Link>\n </div>\n </Footer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n \n <Header>\n <Title>{title}</Title>\n <Subtitle>{message}</Subtitle>\n </Header>\n\n <Form onSubmit={handleSubmit} noValidate>\n {(missingFields.includes(\"first_name\") || missingFields.includes(\"last_name\")) &&\n (authSettings?.first_name?.enabled || authSettings?.last_name?.enabled) && (\n <NameFields $isBothEnabled={!!(authSettings?.first_name?.enabled && authSettings?.last_name?.enabled &&\n missingFields.includes(\"first_name\") && missingFields.includes(\"last_name\"))}>\n {missingFields.includes(\"first_name\") && authSettings?.first_name?.enabled && (\n <FormGroup>\n <Label htmlFor=\"first_name\">\n First name {authSettings.first_name.required && \"*\"}\n </Label>\n <Input\n type=\"text\"\n id=\"first_name\"\n name=\"first_name\"\n value={formData.first_name || \"\"}\n onChange={handleInputChange}\n placeholder=\"Enter your first name\"\n aria-invalid={!!errors.first_name}\n disabled={isLoading}\n autoComplete=\"given-name\"\n />\n {errors.first_name && <ErrorMessage>{errors.first_name}</ErrorMessage>}\n </FormGroup>\n )}\n\n {missingFields.includes(\"last_name\") && authSettings?.last_name?.enabled && (\n <FormGroup>\n <Label htmlFor=\"last_name\">\n Last name {authSettings.last_name.required && \"*\"}\n </Label>\n <Input\n type=\"text\"\n id=\"last_name\"\n name=\"last_name\"\n value={formData.last_name || \"\"}\n onChange={handleInputChange}\n placeholder=\"Enter your last name\"\n aria-invalid={!!errors.last_name}\n disabled={isLoading}\n autoComplete=\"family-name\"\n />\n {errors.last_name && <ErrorMessage>{errors.last_name}</ErrorMessage>}\n </FormGroup>\n )}\n </NameFields>\n )}\n\n {missingFields.includes(\"username\") && authSettings?.username?.enabled && (\n <FormGroup>\n <Label htmlFor=\"username\">\n Username {authSettings.username.required && \"*\"}\n </Label>\n <Input\n type=\"text\"\n id=\"username\"\n name=\"username\"\n value={formData.username || \"\"}\n onChange={handleInputChange}\n placeholder=\"Choose a username\"\n aria-invalid={!!errors.username}\n disabled={isLoading}\n autoComplete=\"username\"\n />\n {errors.username && <ErrorMessage>{errors.username}</ErrorMessage>}\n </FormGroup>\n )}\n\n {missingFields.includes(\"phone_number\") && authSettings?.phone_number?.enabled && (\n <FormGroup>\n <Label htmlFor=\"phone_number\">\n Phone number {authSettings.phone_number.required && \"*\"}\n </Label>\n <PhoneNumberInput\n value={formData.phone_number || \"\"}\n onChange={handlePhoneChange}\n error={errors.phone_number}\n countryCode={countryCode}\n setCountryCode={setCountryCode}\n />\n {errors.phone_number && <ErrorMessage>{errors.phone_number}</ErrorMessage>}\n </FormGroup>\n )}\n\n {missingFields.includes(\"email_address\") && authSettings?.email_address?.enabled && (\n <FormGroup>\n <Label htmlFor=\"email\">\n Email address {authSettings.email_address.required && \"*\"}\n </Label>\n <Input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n value={formData.email || \"\"}\n onChange={handleInputChange}\n placeholder=\"Enter your email address\"\n aria-invalid={!!errors.email_address}\n disabled={isLoading}\n autoComplete=\"email\"\n />\n {errors.email_address && <ErrorMessage>{errors.email_address}</ErrorMessage>}\n </FormGroup>\n )}\n\n {displayError && (\n <ErrorMessage style={{ marginBottom: \"var(--space-md)\" }}>\n {displayError.message}\n </ErrorMessage>\n )}\n\n <SubmitButton type=\"submit\" disabled={isLoading}>\n {isLoading ? \"Completing...\" : \"Continue\"}\n </SubmitButton>\n </Form>\n\n <Footer>\n {onBack && (\n <div>\n <Link onClick={onBack} style={{ cursor: \"pointer\" }}>\n Back to login\n </Link>\n </div>\n )}\n <div style={{ marginTop: \"var(--space-sm)\" }}>\n Having trouble?{\" \"}\n <Link>\n <NavigationLink to={deployment?.ui_settings.support_page_url || \"#\"}>\n Get help\n </NavigationLink>\n </Link>\n </div>\n </Footer>\n </Container>\n </DefaultStylesProvider>\n );\n}","import { useEffect, useState } from \"react\";\nimport styled, { keyframes } from \"styled-components\";\nimport { Loader2 } from \"lucide-react\";\nimport { useSignInWithStrategy } from \"../../hooks/use-signin\";\nimport type { OAuthProvider } from \"../../hooks/use-signin\";\nimport { SignInStrategy } from \"../../hooks/use-signin\";\nimport { useSession } from \"../../hooks/use-session\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { OTPInput } from \"@/components/utility/otp-input\";\n\nimport { SocialAuthButtons } from \"./social-buttons\";\nimport { ForgotPassword } from \"./forgot-password\";\nimport { OtherSignInOptions } from \"./other-signin-options\";\nimport { TwoFactorVerification } from \"./two-factor-verification\";\nimport { ProfileCompletion } from \"./profile-completion\";\nimport {\n useSignInContext,\n SignInProvider,\n} from \"../../context/signin-provider\";\nimport { NavigationLink } from \"../utility/navigation\";\nimport { Input } from \"@/components/utility/input\";\nimport { PhoneNumberInput } from \"../utility/phone\";\nimport { Form, FormGroup, Label } from \"../utility/form\";\nimport { ErrorCode } from \"@/types\";\nimport type { SignInParams } from \"@/types\";\nimport type { DeploymentSocialConnection } from \"@/types\";\nimport { useDeployment } from \"@/hooks/use-deployment\";\nimport { useNavigation } from \"@/hooks/use-navigation\";\nimport { Button } from \"@/components/utility\";\nimport { AuthFormImage } from \"./auth-image\";\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst LoadingContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 200px;\n\n svg {\n animation: ${spin} 1s linear infinite;\n color: var(--color-primary);\n }\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n position: relative;\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n`;\n\nconst Divider = styled.div`\n position: relative;\n text-align: center;\n margin: var(--space-2xl) 0;\n\n &::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--color-border);\n }\n`;\n\nconst DividerText = styled.span`\n position: relative;\n background: var(--color-background);\n padding: 0 var(--space-md);\n color: var(--color-muted);\n font-size: var(--font-xs);\n font-weight: 500;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n`;\n\nconst PasswordGroup = styled.div`\n position: relative;\n`;\n\nconst ErrorMessage = styled.p`\n font-size: var(--font-2xs);\n color: var(--color-error);\n margin: 0;\n margin-top: var(--space-2xs);\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: var(--space-sm);\n`;\n\nconst Footer = styled.div`\n margin-top: var(--space-lg);\n text-align: center;\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n`;\n\nconst Link = styled.span`\n color: var(--color-primary);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s;\n cursor: pointer;\n\n &:hover {\n color: var(--color-primary-hover);\n }\n`;\n\nexport function SignInForm() {\n return (\n <SignInProvider>\n <SignInFormContent />\n </SignInProvider>\n );\n}\n\nfunction SignInFormContent() {\n const { deployment } = useDeployment();\n const { navigate } = useNavigation();\n const { session, loading: sessionLoading } = useSession();\n const {\n setEmail,\n otpSent,\n setOtpSent,\n showForgotPassword,\n setShowForgotPassword,\n showOtherOptions,\n setShowOtherOptions,\n enabledSocialsProviders,\n firstFactor,\n } = useSignInContext();\n const {\n loading,\n signIn,\n signinAttempt,\n discardSignInAttempt,\n error: signInErrors,\n setSignInAttempt,\n } = useSignInWithStrategy(SignInStrategy.Generic);\n const { signIn: oauthSignIn } = useSignInWithStrategy(SignInStrategy.Oauth);\n const [formData, setFormData] = useState<SignInParams>({\n email: \"\",\n username: \"\",\n password: \"\",\n phone: \"\",\n });\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [otpCode, setOtpCode] = useState(\"\");\n const [countryCode, setCountryCode] = useState<string | undefined>(\"US\");\n const [isRedirecting, setIsRedirecting] = useState(false);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let { name, value } = e.target;\n if (name === \"phone\") {\n value = value.replace(/[^0-9]/g, \"\");\n } else if (name === \"email\") {\n setEmail(value);\n value = value.toLowerCase();\n }\n setFormData((prev) => ({ ...prev, [name]: value }));\n setErrors((prev) => ({ ...prev, [name]: \"\" }));\n };\n\n const resetFormData = () => {\n setFormData({\n email: \"\",\n username: \"\",\n password: \"\",\n phone: \"\",\n });\n setErrors({});\n setCountryCode(\"US\");\n };\n\n const createSignIn = async (e: React.FormEvent) => {\n e.preventDefault();\n if (loading || isSubmitting) return;\n discardSignInAttempt();\n\n const newErrors: Record<string, string> = {};\n\n if (firstFactor === \"email_password\") {\n if (!formData.email) {\n newErrors.email = \"Email address is required\";\n }\n if (!formData.password) {\n newErrors.password = \"Password is required\";\n }\n } else if (firstFactor === \"username_password\") {\n if (!formData.username) {\n newErrors.username = \"Username is required\";\n }\n if (!formData.password) {\n newErrors.password = \"Password is required\";\n }\n } else if (firstFactor === \"email_otp\") {\n if (!formData.email) {\n newErrors.email = \"Email address is required\";\n }\n } else if (firstFactor === \"email_magic_link\") {\n if (!formData.email) {\n newErrors.email = \"Email address is required\";\n }\n } else if (firstFactor === \"phone_otp\") {\n if (!formData.phone) {\n newErrors.phone = \"Phone number is required\";\n } else {\n // Validate phone number format like in signup\n const phonePattern = /^\\d{7,15}$/;\n if (!phonePattern.test(formData.phone)) {\n newErrors.phone = \"Phone number must contain 7-15 digits\";\n }\n }\n }\n\n setErrors(newErrors);\n\n if (Object.keys(newErrors).length > 0) {\n return;\n }\n\n let strategy = \"\";\n switch (firstFactor) {\n case \"email_password\":\n strategy = \"plain_email\";\n break;\n case \"username_password\":\n strategy = \"plain_username\";\n break;\n case \"email_otp\":\n strategy = \"email_otp\";\n break;\n case \"email_magic_link\":\n strategy = \"magic_link\";\n break;\n case \"phone_otp\":\n strategy = \"phone_otp\";\n break;\n }\n\n setIsSubmitting(true);\n try {\n const submitData: any = {\n ...formData,\n strategy,\n };\n\n if (firstFactor === \"phone_otp\" && countryCode) {\n submitData.phone_country_code = countryCode;\n }\n\n await signIn.create(submitData);\n } catch (err) {\n setErrors({ submit: (err as Error).message });\n setIsSubmitting(false);\n }\n };\n\n const completeVerification = async (e: React.FormEvent) => {\n e.preventDefault();\n if (loading || isSubmitting) return;\n\n const newErrors: Record<string, string> = {};\n if (!otpCode) {\n newErrors.otp = \"OTP code is required\";\n setErrors(newErrors);\n return;\n }\n\n setIsSubmitting(true);\n setErrors({});\n\n try {\n await signIn.completeVerification(otpCode);\n setOtpSent(false);\n setOtpCode(\"\");\n } catch (err) {\n setErrors({ otp: (err as Error).message || \"Verification failed\" });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const initSocialAuthSignIn = async (\n connection: DeploymentSocialConnection,\n ) => {\n if (loading || isSubmitting) return;\n\n setIsSubmitting(true);\n try {\n const searchParams = new URLSearchParams(window.location.search);\n const redirectUri = searchParams.get(\"redirect_uri\") || undefined;\n const { data } = await oauthSignIn.create({\n provider: connection.provider as OAuthProvider,\n redirectUri,\n });\n if (data && typeof data === \"object\" && \"oauth_url\" in data) {\n window.location.href = data.oauth_url as string;\n }\n } catch (err) {\n setErrors({ submit: (err as Error).message });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n useEffect(() => {\n if (sessionLoading) return;\n\n const urlParams = new URLSearchParams(window.location.search);\n const attemptId = urlParams.get(\"signin_attempt_id\");\n\n if (attemptId && session?.signin_attempts && !signinAttempt) {\n const attempt = session.signin_attempts.find((a) => a.id === attemptId);\n if (attempt) {\n setSignInAttempt(attempt);\n\n urlParams.delete(\"signin_attempt_id\");\n const newUrl = urlParams.toString()\n ? `${window.location.pathname}?${urlParams.toString()}`\n : window.location.pathname;\n window.history.replaceState({}, \"\", newUrl);\n }\n }\n }, [session, sessionLoading, signinAttempt, setSignInAttempt]);\n\n useEffect(() => {\n if (!signinAttempt) return;\n\n if (signinAttempt.completed) {\n setIsRedirecting(true);\n let redirectUri: string | null = new URLSearchParams(\n window.location.search,\n ).get(\"redirect_uri\");\n\n if (!redirectUri) {\n redirectUri =\n deployment?.ui_settings?.after_signin_redirect_url || null;\n }\n\n if (!redirectUri && deployment?.frontend_host) {\n redirectUri = `https://${deployment.frontend_host}`;\n }\n\n if (redirectUri) {\n const uri = new URL(redirectUri);\n\n if (deployment?.mode === \"staging\") {\n uri.searchParams.set(\n \"__dev_session__\",\n localStorage.getItem(\"__dev_session__\") || \"\",\n );\n }\n\n navigate(uri.toString());\n }\n return;\n }\n\n if (!signIn || otpSent) return;\n\n const strategyMap: Record<\n string,\n \"phone_otp\" | \"email_otp\" | \"magic_link\"\n > = {\n verify_email: \"email_otp\",\n verify_email_otp: \"email_otp\",\n verify_email_link: \"magic_link\",\n verify_phone: \"phone_otp\",\n verify_phone_otp: \"phone_otp\",\n };\n\n const strategy = strategyMap[signinAttempt.current_step];\n if (!strategy) return;\n\n const prepareVerificationAsync = async () => {\n try {\n await signIn.prepareVerification({ strategy });\n setOtpSent(true);\n } catch (err) {\n console.error(\"Failed to prepare verification:\", err);\n setErrors({ submit: \"Failed to send verification. Please try again.\" });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n prepareVerificationAsync();\n }, [signinAttempt, signIn, otpSent, setOtpSent, navigate, deployment]);\n\n useEffect(() => {\n const newErrors: Record<string, string> = {};\n if (signInErrors?.errors) {\n if (Array.isArray(signInErrors?.errors)) {\n for (const err of signInErrors.errors) {\n if (\n [\n ErrorCode.InvalidCredentials,\n ErrorCode.UserNotFound,\n ErrorCode.UserAlreadySignedIn,\n ErrorCode.Internal,\n ErrorCode.UserDisabled,\n ErrorCode.CountryRestricted,\n ErrorCode.EmailNotAllowed,\n ErrorCode.EmailBlocked,\n ErrorCode.DisposableEmailBlocked,\n ErrorCode.VoipNumberBlocked,\n ErrorCode.BannedKeyword,\n ].includes(err.code)\n ) {\n newErrors.submit = err.message;\n }\n }\n }\n }\n\n setErrors(newErrors);\n }, [signInErrors]);\n\n if (showOtherOptions) {\n return <OtherSignInOptions onBack={() => setShowOtherOptions(false)} />;\n }\n\n if (showForgotPassword) {\n return <ForgotPassword onBack={() => setShowForgotPassword(false)} />;\n }\n\n if (signinAttempt?.current_step === \"verify_second_factor\") {\n return (\n <TwoFactorVerification\n attempt={signinAttempt}\n completeVerification={signIn.completeVerification}\n prepareVerification={signIn.prepareVerification}\n onBack={() => {\n discardSignInAttempt();\n resetFormData();\n setOtpSent(false);\n }}\n />\n );\n }\n\n if (signinAttempt?.current_step === \"complete_profile\") {\n return (\n <ProfileCompletion\n attempt={signinAttempt}\n completeProfile={signIn.completeProfile}\n completeVerification={signIn.completeVerification}\n prepareVerification={signIn.prepareVerification}\n onBack={() => {\n discardSignInAttempt();\n resetFormData();\n setOtpSent(false);\n }}\n />\n );\n }\n\n if (sessionLoading) {\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n <LoadingContainer>\n <Loader2 size={32} />\n </LoadingContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n if (isRedirecting) {\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n <LoadingContainer>\n <Loader2 size={32} />\n </LoadingContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n const isVerificationStep =\n signinAttempt?.current_step &&\n [\n \"verify_email\",\n \"verify_email_otp\",\n \"verify_email_link\",\n \"verify_phone\",\n \"verify_phone_otp\",\n ].includes(signinAttempt.current_step);\n\n const showOtpForm = isVerificationStep && otpSent;\n\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n\n {showOtpForm ? (\n <>\n <Header>\n <Title>\n {firstFactor === \"phone_otp\"\n ? \"Check your phone\"\n : \"Check your email\"}\n </Title>\n <Subtitle>\n {firstFactor === \"email_magic_link\"\n ? `If ${formData.email} exists in our records, you will receive a magic link. Click the link to sign in.`\n : firstFactor === \"phone_otp\"\n ? `If ${formData.phone} exists in our records, you will receive a verification code via SMS. Enter it below to continue.`\n : `If ${formData.email} exists in our records, you will receive a verification code. Enter it below to continue.`}\n </Subtitle>\n </Header>\n </>\n ) : (\n <Header>\n <Title>Sign in to your account</Title>\n <Subtitle>\n Please enter your details to continue to{\" \"}\n {deployment?.ui_settings.app_name || \"App\"}!\n </Subtitle>\n </Header>\n )}\n\n {!showOtpForm ? (\n <>\n {enabledSocialsProviders.length > 0 && (\n <>\n <SocialAuthButtons\n connections={enabledSocialsProviders}\n callback={initSocialAuthSignIn}\n />\n\n <Divider>\n <DividerText>or</DividerText>\n </Divider>\n </>\n )}\n\n <Form onSubmit={createSignIn} noValidate>\n {(firstFactor === \"email_password\" ||\n firstFactor === \"email_otp\" ||\n firstFactor === \"email_magic_link\") &&\n deployment?.auth_settings?.email_address?.enabled && (\n <FormGroup>\n <Label htmlFor=\"email\">Email address</Label>\n <Input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n value={formData.email}\n onChange={handleInputChange}\n placeholder=\"Enter your email address\"\n aria-invalid={!!errors.email}\n />\n {errors.email && (\n <ErrorMessage>{errors.email}</ErrorMessage>\n )}\n </FormGroup>\n )}\n\n {firstFactor === \"username_password\" &&\n deployment?.auth_settings?.username?.enabled && (\n <FormGroup>\n <Label htmlFor=\"username\">Username</Label>\n <Input\n type=\"text\"\n id=\"username\"\n name=\"username\"\n value={formData.username}\n onChange={handleInputChange}\n placeholder=\"Enter your username\"\n aria-invalid={!!errors.username}\n />\n {errors.username && (\n <ErrorMessage>{errors.username}</ErrorMessage>\n )}\n </FormGroup>\n )}\n\n {firstFactor === \"phone_otp\" &&\n deployment?.auth_settings?.phone_number?.enabled && (\n <FormGroup>\n <Label htmlFor=\"phone\">Phone number</Label>\n <PhoneNumberInput\n value={formData.phone}\n onChange={handleInputChange}\n error={errors.phone}\n countryCode={countryCode}\n setCountryCode={setCountryCode}\n />\n {errors.phone && (\n <ErrorMessage>{errors.phone}</ErrorMessage>\n )}\n </FormGroup>\n )}\n\n {(firstFactor === \"email_password\" ||\n firstFactor === \"username_password\") &&\n deployment?.auth_settings?.password?.enabled && (\n <FormGroup>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n }}\n >\n <Label htmlFor=\"password\">Password</Label>\n <Link\n style={{ fontSize: \"12px\" }}\n onClick={() => setShowForgotPassword(true)}\n >\n Forgot password?\n </Link>\n </div>\n <PasswordGroup>\n <Input\n type=\"password\"\n id=\"password\"\n name=\"password\"\n value={formData.password}\n onChange={handleInputChange}\n placeholder=\"Enter your password\"\n aria-invalid={!!errors.password}\n />\n </PasswordGroup>\n {errors.password && (\n <ErrorMessage>{errors.password}</ErrorMessage>\n )}\n </FormGroup>\n )}\n\n <div>\n {errors.submit && <ErrorMessage>{errors.submit}</ErrorMessage>}\n\n <SubmitButton type=\"submit\" disabled={isSubmitting || loading}>\n {isSubmitting ? \"Signing in...\" : \"Sign in\"}\n </SubmitButton>\n </div>\n\n <Link\n style={{ fontSize: \"12px\", textAlign: \"center\" }}\n onClick={() => setShowOtherOptions(true)}\n >\n Use other methods\n </Link>\n </Form>\n <Footer>\n Don't have an account?{\" \"}\n <Link>\n <NavigationLink\n to={`${deployment!.ui_settings?.sign_up_page_url}${window.location.search}`}\n >\n Sign up\n </NavigationLink>\n </Link>\n </Footer>\n </>\n ) : firstFactor === \"email_magic_link\" ? (\n <Footer>\n Having trouble?{\" \"}\n <Link>\n <NavigationLink to={deployment!.ui_settings.support_page_url}>\n Get help\n </NavigationLink>\n </Link>\n <div style={{ marginTop: \"var(--space-sm)\" }}>\n <Link\n onClick={() => {\n setOtpSent(false);\n discardSignInAttempt();\n resetFormData();\n }}\n style={{ cursor: \"pointer\" }}\n >\n Back to login\n </Link>\n </div>\n </Footer>\n ) : (\n <>\n <Form\n style={{ gap: \"15px\" }}\n onSubmit={completeVerification}\n noValidate\n >\n <OTPInput\n onComplete={async (code) => {\n setOtpCode(code);\n if (code && code.length === 6) {\n setIsSubmitting(true);\n setErrors({});\n try {\n await signIn.completeVerification(code);\n // Clear OTP state after successful verification\n // This allows the component to transition to the next step\n setOtpSent(false);\n } catch (err) {\n setErrors({\n otp: (err as Error).message || \"Verification failed\",\n });\n } finally {\n setIsSubmitting(false);\n }\n }\n }}\n onResend={async () => {\n const strategy =\n firstFactor === \"email_otp\" ? \"email_otp\" : \"phone_otp\";\n await signIn.prepareVerification({ strategy });\n }}\n error={errors.otp}\n isSubmitting={isSubmitting}\n />\n\n <SubmitButton\n type=\"submit\"\n disabled={isSubmitting || loading || !otpCode}\n style={{ margin: 0 }}\n >\n {isSubmitting\n ? \"Verifying...\"\n : `Continue to ${deployment?.ui_settings?.app_name}`}\n </SubmitButton>\n </Form>\n <Footer>\n Having trouble?{\" \"}\n <Link>\n <NavigationLink to={deployment!.ui_settings.support_page_url}>\n Get help\n </NavigationLink>\n </Link>\n <div style={{ marginTop: \"var(--space-sm)\" }}>\n <Link\n onClick={() => {\n setOtpSent(false);\n discardSignInAttempt();\n resetFormData();\n }}\n style={{ cursor: \"pointer\" }}\n >\n Back to login\n </Link>\n </div>\n </Footer>\n </>\n )}\n </Container>\n </DefaultStylesProvider>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Check } from \"lucide-react\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { Input } from \"../utility/input\";\nimport { useDeployment } from \"@/hooks/use-deployment\";\nimport { useWaitlist, type WaitlistParams } from \"@/hooks/use-waitlist\";\nimport { AuthFormImage } from \"./auth-image\";\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n margin: 0;\n`;\n\nconst Form = styled.form`\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n`;\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n`;\n\nconst NameFields = styled.div<{ $isBothEnabled: boolean }>`\n display: grid;\n grid-template-columns: ${(props) =>\n props.$isBothEnabled ? \"1fr 1fr\" : \"1fr\"};\n gap: var(--space-md);\n`;\n\nconst Label = styled.label`\n font-size: var(--font-xs);\n font-weight: 500;\n color: var(--color-foreground);\n text-align: left;\n`;\n\nconst RequiredAsterisk = styled.span`\n color: var(--color-error);\n margin-left: var(--space-2xs);\n`;\n\nconst Button = styled.button<{ $primary?: boolean }>`\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n border: ${(props) =>\n props.$primary ? \"none\" : \"1px solid var(--color-input-border)\"};\n border-radius: var(--radius-md);\n font-size: var(--font-xs);\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.2s;\n background: ${(props) =>\n props.$primary ? \"var(--color-primary)\" : \"var(--color-background)\"};\n color: ${(props) => (props.$primary ? \"white\" : \"var(--color-foreground)\")};\n margin-top: var(--space-sm);\n height: 36px;\n\n &:hover:not(:disabled) {\n background: ${(props) =>\n props.$primary\n ? \"var(--color-primary-hover)\"\n : \"var(--color-input-background)\"};\n }\n\n &:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n }\n`;\n\nconst ErrorMessage = styled.div`\n color: var(--color-error);\n font-size: var(--font-2xs);\n margin-top: var(--space-2xs);\n`;\n\nconst SuccessContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-md);\n text-align: center;\n`;\n\nconst SuccessIcon = styled.div`\n width: 48px;\n height: 48px;\n background: var(--color-success);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n`;\n\nconst SuccessTitle = styled.h2`\n font-size: var(--font-lg);\n color: var(--color-foreground);\n margin: 0;\n`;\n\nconst SuccessMessage = styled.p`\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n margin: 0;\n line-height: 1.5;\n`;\n\nconst Footer = styled.div`\n text-align: center;\n margin-top: var(--space-lg);\n`;\n\nconst FooterText = styled.p`\n font-size: var(--font-xs);\n color: var(--color-muted);\n margin: 0;\n`;\n\nconst Link = styled.a`\n color: var(--color-primary);\n text-decoration: none;\n cursor: pointer;\n`;\n\nexport function WaitlistForm() {\n const { deployment } = useDeployment();\n const { loading, error, joinWaitlist } = useWaitlist();\n const [formData, setFormData] = useState<WaitlistParams>({\n first_name: \"\",\n last_name: \"\",\n email: \"\",\n });\n const [isSubmitted, setIsSubmitted] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const getErrorMessage = (field?: string): string | undefined => {\n if (!error?.errors) return undefined;\n\n if (field) {\n const fieldError = error.errors.find((err: any) =>\n err.code?.toLowerCase().includes(field.toLowerCase())\n );\n if (fieldError) return fieldError.message;\n } else return error?.errors[0]?.message;\n };\n\n const authSettings = deployment?.auth_settings;\n const isBothNamesEnabled = Boolean(\n authSettings?.first_name?.enabled && authSettings?.last_name?.enabled\n );\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({\n ...prev,\n [name]: value,\n }));\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!authSettings) return;\n\n setIsSubmitting(true);\n try {\n const result = await joinWaitlist(formData);\n if (result.data) {\n setIsSubmitted(true);\n }\n } catch (error) {\n } finally {\n setIsSubmitting(false);\n }\n };\n\n if (isSubmitted) {\n return (\n <DefaultStylesProvider>\n <Container>\n <SuccessContainer>\n <SuccessIcon>\n <Check size={32} />\n </SuccessIcon>\n <SuccessTitle>You're on the waitlist!</SuccessTitle>\n <SuccessMessage>\n Thanks for your interest! We'll notify you at {formData.email}{\" \"}\n when we're ready for you to join.\n </SuccessMessage>\n </SuccessContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n\n <Header>\n <Title>Join the waitlist</Title>\n <Subtitle>Be the first to know when we launch!</Subtitle>\n </Header>\n\n <Form onSubmit={handleSubmit} noValidate>\n {(authSettings?.first_name?.enabled ||\n authSettings?.last_name?.enabled) && (\n <NameFields $isBothEnabled={isBothNamesEnabled}>\n {authSettings?.first_name?.enabled && (\n <FormGroup>\n <Label htmlFor=\"first_name\">\n First name\n {authSettings?.first_name?.required && (\n <RequiredAsterisk>*</RequiredAsterisk>\n )}\n </Label>\n <Input\n type=\"text\"\n id=\"first_name\"\n name=\"first_name\"\n required={authSettings?.first_name?.required}\n minLength={2}\n maxLength={50}\n value={formData.first_name}\n onChange={handleInputChange}\n placeholder=\"First name\"\n aria-invalid={!!getErrorMessage(\"first_name\")}\n />\n {getErrorMessage(\"first_name\") && (\n <ErrorMessage>{getErrorMessage(\"first_name\")}</ErrorMessage>\n )}\n </FormGroup>\n )}\n\n {authSettings?.last_name?.enabled && (\n <FormGroup>\n <Label htmlFor=\"last_name\">\n Last name\n {authSettings?.last_name?.required && (\n <RequiredAsterisk>*</RequiredAsterisk>\n )}\n </Label>\n <Input\n type=\"text\"\n id=\"last_name\"\n name=\"last_name\"\n required={authSettings?.last_name?.required}\n minLength={2}\n maxLength={50}\n value={formData.last_name}\n onChange={handleInputChange}\n placeholder=\"Last name\"\n aria-invalid={!!getErrorMessage(\"last_name\")}\n />\n {getErrorMessage(\"last_name\") && (\n <ErrorMessage>{getErrorMessage(\"last_name\")}</ErrorMessage>\n )}\n </FormGroup>\n )}\n </NameFields>\n )}\n\n <FormGroup>\n <Label htmlFor=\"email\">\n Email address\n {authSettings?.email_address?.required && (\n <RequiredAsterisk>*</RequiredAsterisk>\n )}\n </Label>\n <Input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n required={authSettings?.email_address?.required}\n value={formData.email}\n onChange={handleInputChange}\n placeholder=\"Enter your email address\"\n aria-invalid={!!getErrorMessage(\"email\")}\n />\n {getErrorMessage(\"email\") && (\n <ErrorMessage>{getErrorMessage(\"email\")}</ErrorMessage>\n )}\n </FormGroup>\n\n {getErrorMessage() && (\n <ErrorMessage>{getErrorMessage()}</ErrorMessage>\n )}\n\n <Button type=\"submit\" $primary disabled={isSubmitting || loading}>\n {isSubmitting || loading ? \"Joining waitlist...\" : \"Join waitlist\"}\n </Button>\n </Form>\n\n <Footer>\n <FooterText>\n Need assistance? <Link href=\"/contact\">Get help</Link>\n </FooterText>\n </Footer>\n </Container>\n </DefaultStylesProvider>\n );\n}\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { useSSOCallback } from \"../../hooks/use-sso-callback\";\nimport { useDeployment } from \"../../hooks/use-deployment\";\nimport { useNavigation } from \"../../hooks/use-navigation\";\nimport { Button } from \"../utility\";\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n position: relative;\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n margin: 0;\n`;\n\nconst StatusContainer = styled.div`\n padding-top: var(--space-xl);\n text-align: center;\n`;\n\nconst ErrorIcon = styled.div`\n width: calc(var(--space-3xl) * 2);\n height: calc(var(--space-3xl) * 2);\n border-radius: 50%;\n background: var(--color-error-background);\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto var(--space-lg) auto;\n color: var(--color-error);\n font-size: var(--font-xl);\n`;\n\nconst LoadingSpinner = styled.div`\n width: calc(var(--space-3xl) * 2);\n height: calc(var(--space-3xl) * 2);\n border: 3px solid var(--color-border);\n border-top: 3px solid var(--color-primary);\n border-radius: 50%;\n animation: spin 1s linear infinite;\n margin: 0 auto var(--space-lg) auto;\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nconst SuccessIcon = styled.div`\n width: calc(var(--space-3xl) * 2);\n height: calc(var(--space-3xl) * 2);\n border-radius: 50%;\n background: var(--color-success-background);\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto var(--space-lg) auto;\n color: var(--color-success);\n font-size: var(--font-xl);\n`;\n\nconst Message = styled.p`\n font-size: var(--font-sm);\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n`;\n\nconst SubMessage = styled.p`\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n margin-bottom: var(--space-lg);\n`;\n\nconst Footer = styled.div`\n margin-top: var(--space-xl);\n text-align: center;\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n`;\n\nconst Link = styled.span`\n color: var(--color-primary);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s;\n cursor: pointer;\n\n &:hover {\n color: var(--color-primary-hover);\n text-decoration: underline;\n }\n`;\n\nexport function SSOCallback() {\n const { deployment } = useDeployment();\n const { navigate } = useNavigation();\n const { error, session, processed, signinAttempt, redirectUri, loading } =\n useSSOCallback();\n\n const handleRetry = () => {\n window.location.reload();\n };\n\n const handleReturnToSignIn = () => {\n const signInUrl = deployment?.ui_settings?.sign_in_page_url || \"/sign-in\";\n navigate(signInUrl);\n };\n\n useEffect(() => {\n if (!processed || loading) return;\n\n if (signinAttempt && !signinAttempt.completed) {\n const signinUrl = deployment?.ui_settings?.sign_in_page_url;\n if (signinUrl) {\n const url = new URL(signinUrl, window.location.origin);\n url.searchParams.set(\"signin_attempt_id\", signinAttempt.id);\n\n if (redirectUri) {\n url.searchParams.set(\"redirect_uri\", redirectUri);\n }\n\n navigate(url.toString());\n }\n return;\n }\n\n if (signinAttempt?.completed) {\n const redirectUrl = new URL(\n redirectUri ||\n deployment?.ui_settings?.after_signin_redirect_url ||\n deployment?.frontend_host ||\n \"\",\n );\n\n if (redirectUrl) {\n if (deployment?.mode === \"staging\") {\n redirectUrl.searchParams.set(\n \"__dev_session__\",\n localStorage.getItem(\"__dev_session__\") || \"\",\n );\n }\n\n navigate(redirectUrl.toString());\n }\n }\n }, [\n session,\n processed,\n loading,\n redirectUri,\n deployment,\n signinAttempt,\n navigate,\n ]);\n\n useEffect(() => {\n if (error && error.message.includes(\"No OAuth callback data found\")) {\n setTimeout(() => {\n const loginUrl =\n deployment?.ui_settings?.sign_in_page_url ||\n deployment?.frontend_host;\n\n if (loginUrl) {\n navigate(loginUrl);\n }\n }, 2000);\n }\n }, [error, deployment, navigate]);\n\n if (loading && !processed) {\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Completing sign in</Title>\n <Subtitle>Please wait while we authenticate you</Subtitle>\n </Header>\n <StatusContainer>\n <LoadingSpinner />\n <Message>Verifying your credentials...</Message>\n <SubMessage>This will only take a moment.</SubMessage>\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n if (session && processed && !error) {\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Success!</Title>\n <Subtitle>Authentication completed successfully</Subtitle>\n </Header>\n <StatusContainer>\n <SuccessIcon>✓</SuccessIcon>\n <Message>Redirecting you now...</Message>\n <SubMessage>\n You'll be redirected to your destination shortly.\n </SubMessage>\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n if (error) {\n const isNoCallbackData = error.message.includes(\n \"No OAuth callback data found\",\n );\n\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Something went wrong</Title>\n <Subtitle>We couldn't complete your sign in</Subtitle>\n </Header>\n <StatusContainer>\n <ErrorIcon>✗</ErrorIcon>\n <Message>Authentication Failed</Message>\n <SubMessage>\n {error.message ||\n \"An unexpected error occurred during authentication.\"}\n </SubMessage>\n {!isNoCallbackData && (\n <Button\n onClick={handleRetry}\n style={{ marginTop: \"var(--space-lg)\" }}\n >\n Try Again\n </Button>\n )}\n </StatusContainer>\n {!isNoCallbackData && (\n <Footer>\n <div>\n Having trouble?{\" \"}\n <Link onClick={handleReturnToSignIn}>Return to sign in</Link>\n </div>\n </Footer>\n )}\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Completing sign in</Title>\n <Subtitle>Please wait while we authenticate you</Subtitle>\n </Header>\n <StatusContainer>\n <LoadingSpinner />\n <Message>Verifying your credentials...</Message>\n <SubMessage>This will only take a moment.</SubMessage>\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n}\n\nexport default SSOCallback;\n","import { useEffect, useState, useRef } from \"react\";\nimport styled from \"styled-components\";\nimport {\n useMagicLinkVerification,\n useMagicLinkParams,\n} from \"../../hooks/use-magic-link\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { Button } from \"../utility\";\nimport { useNavigation } from \"../../hooks/use-navigation\";\nimport { useDeployment } from \"../../hooks/use-deployment\";\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst Header = styled.div`\n text-align: center;\n position: relative;\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n margin: 0;\n`;\n\nconst StatusContainer = styled.div`\n padding-top: var(--space-xl);\n text-align: center;\n`;\n\nconst SuccessIcon = styled.div`\n width: calc(var(--space-3xl) * 2);\n height: calc(var(--space-3xl) * 2);\n border-radius: 50%;\n background: var(--color-success-background);\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto var(--space-lg) auto;\n color: var(--color-success);\n font-size: var(--font-xl);\n`;\n\nconst ErrorIcon = styled.div`\n width: calc(var(--space-3xl) * 2);\n height: calc(var(--space-3xl) * 2);\n border-radius: 50%;\n background: var(--color-error-background);\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto var(--space-lg) auto;\n color: var(--color-error);\n font-size: var(--font-xl);\n`;\n\nconst LoadingSpinner = styled.div`\n width: calc(var(--space-3xl) * 2);\n height: calc(var(--space-3xl) * 2);\n border: 3px solid var(--color-border);\n border-top: 3px solid var(--color-primary);\n border-radius: 50%;\n animation: spin 1s linear infinite;\n margin: 0 auto var(--space-lg) auto;\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nconst SubMessage = styled.p`\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n`;\n\ninterface MagicLinkVerificationProps {\n onSuccess?: () => void;\n onError?: (error: string) => void;\n}\n\nexport function MagicLinkVerification({\n onSuccess,\n onError,\n}: MagicLinkVerificationProps = {}) {\n const [status, setStatus] = useState<\"loading\" | \"success\" | \"error\">(\n \"loading\",\n );\n const [subMessage, setSubMessage] = useState(\"\");\n const { token, attempt, redirectUri } = useMagicLinkParams();\n const { verifyMagicLink, error, success } = useMagicLinkVerification();\n const { navigate } = useNavigation();\n const { deployment } = useDeployment();\n const hasVerified = useRef(false);\n\n useEffect(() => {\n const performVerification = async () => {\n if (hasVerified.current) return;\n\n if (!token || !attempt) {\n setStatus(\"error\");\n setSubMessage(\n \"The magic link appears to be malformed. Please try signing in again.\",\n );\n onError?.(\"Invalid magic link parameters\");\n return;\n }\n\n hasVerified.current = true;\n setStatus(\"loading\");\n setSubMessage(\"Please wait while we verify your magic link.\");\n\n await verifyMagicLink({ token, attempt, redirectUri });\n };\n\n performVerification();\n }, [token, attempt]);\n\n useEffect(() => {\n if (success) {\n setStatus(\"success\");\n setSubMessage(\"You will be redirected to your account shortly.\");\n onSuccess?.();\n\n // Handle redirect similar to signin-form\n setTimeout(() => {\n let finalRedirectUri = redirectUri;\n\n if (!finalRedirectUri) {\n finalRedirectUri = deployment?.ui_settings?.after_signin_redirect_url;\n }\n\n // Fallback to frontend host if no redirect URL configured\n if (!finalRedirectUri && deployment?.frontend_host) {\n finalRedirectUri = `https://${deployment.frontend_host}`;\n }\n\n if (finalRedirectUri) {\n const uri = new URL(finalRedirectUri);\n\n if (deployment?.mode === \"staging\") {\n uri.searchParams.set(\n \"__dev_session__\",\n localStorage.getItem(\"__dev_session__\") || \"\",\n );\n }\n\n navigate(uri.toString());\n }\n }, 2000);\n } else if (error) {\n setStatus(\"error\");\n setSubMessage(\n \"The magic link may have expired or already been used. Please try signing in again.\",\n );\n onError?.(error.message);\n }\n }, [success, error, navigate, deployment, redirectUri, onSuccess, onError]);\n\n const handleRetry = () => {\n if (deployment?.ui_settings?.sign_in_page_url) {\n navigate(deployment.ui_settings.sign_in_page_url);\n }\n };\n\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Magic Link Verification</Title>\n <Subtitle>Verifying your magic link</Subtitle>\n </Header>\n\n <StatusContainer>\n {status === \"loading\" && (\n <>\n <LoadingSpinner />\n <SubMessage>{subMessage}</SubMessage>\n </>\n )}\n\n {status === \"success\" && (\n <>\n <SuccessIcon>✓</SuccessIcon>\n <SubMessage>{subMessage}</SubMessage>\n </>\n )}\n\n {status === \"error\" && (\n <>\n <ErrorIcon>✗</ErrorIcon>\n <SubMessage>{subMessage}</SubMessage>\n <Button\n onClick={handleRetry}\n style={{ marginTop: \"var(--space-xl)\" }}\n >\n Try Again\n </Button>\n </>\n )}\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n}\n","import { Session } from \"@/types\";\n\n// Utility functions for checking and redirecting\nexport function hasIncompleteProfile(session: Session): boolean {\n if (!session) return false;\n\n const incompleteSigninAttempt = session.signin_attempts?.find(\n (attempt: any) => attempt.requires_completion && !attempt.completed\n );\n\n if (incompleteSigninAttempt) return true;\n\n const incompleteSignupAttempt = session.signup_attempts?.find(\n (attempt) =>\n attempt.missing_fields?.length > 0 ||\n (attempt.remaining_steps?.length > 0 && !attempt.completed)\n );\n\n return !!incompleteSignupAttempt;\n}\n\nexport function redirectToProfileCompletion(returnUrl?: string) {\n const url = returnUrl \n ? `/profile-completion?redirect_uri=${encodeURIComponent(returnUrl)}`\n : \"/profile-completion\";\n \n window.location.href = url;\n}\n","import { useEffect, useRef } from \"react\";\nimport styled from \"styled-components\";\nimport { useInvitation } from \"@/hooks/use-invitation\";\nimport { useNavigation } from \"@/hooks/use-navigation\";\nimport { useDeployment } from \"@/hooks/use-deployment\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { Button } from \"../utility\";\n\nconst Container = styled.div`\n max-width: 380px;\n width: 380px;\n padding: var(--space-3xl);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-lg);\n position: relative;\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n margin: 0;\n`;\n\nconst StatusContainer = styled.div`\n padding-top: var(--space-xl);\n text-align: center;\n`;\n\nconst SuccessIcon = styled.div`\n width: calc(var(--space-3xl) * 2);\n height: calc(var(--space-3xl) * 2);\n border-radius: 50%;\n background: var(--color-success-background);\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto var(--space-lg) auto;\n color: var(--color-success);\n font-size: var(--font-xl);\n`;\n\nconst ErrorIcon = styled.div`\n width: calc(var(--space-3xl) * 2);\n height: calc(var(--space-3xl) * 2);\n border-radius: 50%;\n background: var(--color-error-background);\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto var(--space-lg) auto;\n color: var(--color-error);\n font-size: var(--font-xl);\n`;\n\nconst InfoIcon = styled.div`\n width: calc(var(--space-3xl) * 2);\n height: calc(var(--space-3xl) * 2);\n border-radius: 50%;\n background: var(--color-info-background);\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto var(--space-lg) auto;\n color: var(--color-info);\n font-size: var(--font-xl);\n`;\n\nconst LoadingSpinner = styled.div`\n width: calc(var(--space-3xl) * 2);\n height: calc(var(--space-3xl) * 2);\n border: 3px solid var(--color-border);\n border-top: 3px solid var(--color-primary);\n border-radius: 50%;\n animation: spin 1s linear infinite;\n margin: 0 auto var(--space-lg) auto;\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nconst Message = styled.p`\n font-size: var(--font-sm);\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n`;\n\nconst SubMessage = styled.p`\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n margin-bottom: var(--space-lg);\n`;\n\nconst EmailHighlight = styled.span`\n color: var(--color-primary);\n font-weight: 500;\n`;\n\nconst Footer = styled.div`\n margin-top: var(--space-xl);\n text-align: center;\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n`;\n\nconst Link = styled.span`\n color: var(--color-primary);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s;\n cursor: pointer;\n\n &:hover {\n color: var(--color-primary-hover);\n }\n`;\n\ninterface AcceptInviteProps {\n token?: string;\n onSuccess?: (organizationId?: string, workspaceId?: string) => void;\n onError?: (error: string) => void;\n}\n\nexport function AcceptInvite({\n token: propToken,\n onSuccess,\n onError,\n}: AcceptInviteProps) {\n const { acceptInvitation, invitationData, loading, error } = useInvitation();\n const { navigate } = useNavigation();\n const { deployment } = useDeployment();\n const hasAttempted = useRef(false);\n\n // Get token and other params from URL\n const getUrlParams = () => {\n const params = new URLSearchParams(window.location.search);\n return {\n token: propToken || params.get(\"invite_token\") || params.get(\"token\"),\n redirectUri: params.get(\"redirect_uri\") || deployment?.ui_settings?.after_signin_redirect_url || \"/\",\n };\n };\n\n // Handle the invitation acceptance attempt\n useEffect(() => {\n if (hasAttempted.current) return;\n\n const { token } = getUrlParams();\n if (!token) return;\n\n hasAttempted.current = true;\n acceptInvitation(token);\n }, [acceptInvitation]);\n\n // Call success callback if needed\n useEffect(() => {\n if (!invitationData) return;\n\n // Successful acceptance\n if (invitationData.organization && !invitationData.requires_signin && onSuccess) {\n onSuccess(invitationData.organization.id, invitationData.workspace?.id);\n }\n\n // Handle other errors\n if (invitationData.error_code && onError) {\n onError(invitationData.message || \"Failed to accept invitation\");\n }\n }, [invitationData, onSuccess, onError]);\n\n const handleContinue = () => {\n const { redirectUri } = getUrlParams();\n navigate(redirectUri);\n };\n\n const handleGoToAuth = () => {\n const { token, redirectUri } = getUrlParams();\n const signInUrl = deployment?.ui_settings?.sign_in_page_url || \"/sign-in\";\n const signUpUrl = deployment?.ui_settings?.sign_up_page_url || \"/sign-up\";\n const params = new URLSearchParams();\n\n if (token) params.set(\"invite_token\", token);\n if (invitationData?.invited_email) params.set(\"invited_email\", invitationData.invited_email);\n if (redirectUri) params.set(\"redirect_uri\", redirectUri);\n\n // Add message for display\n if (invitationData?.message) {\n params.set(\"message\", invitationData.message);\n }\n\n // Redirect based on error code\n const isSignup = invitationData?.error_code === \"INVITATION_REQUIRES_SIGNUP\";\n navigate(`${isSignup ? signUpUrl : signInUrl}?${params.toString()}`);\n };\n\n const handleRetry = () => {\n const { token } = getUrlParams();\n if (token) {\n hasAttempted.current = false;\n acceptInvitation(token);\n }\n };\n\n const { token } = getUrlParams();\n\n // No token provided\n if (!token && !loading) {\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Invalid Invitation</Title>\n <Subtitle>No invitation token found</Subtitle>\n </Header>\n <StatusContainer>\n <ErrorIcon>✗</ErrorIcon>\n <Message>Missing Invitation Token</Message>\n <SubMessage>\n The invitation link appears to be invalid or incomplete.\n </SubMessage>\n <Button onClick={() => navigate(\"/\")} style={{ marginTop: \"var(--space-lg)\" }}>\n Go to Home\n </Button>\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n // Loading state\n if (loading) {\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Processing Invitation</Title>\n <Subtitle>Please wait while we verify your invitation</Subtitle>\n </Header>\n <StatusContainer>\n <LoadingSpinner />\n <Message>Verifying invitation...</Message>\n <SubMessage>This will only take a moment.</SubMessage>\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n // Success state\n if (invitationData?.organization && !invitationData.requires_signin) {\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Invitation Accepted!</Title>\n <Subtitle>You've successfully joined the organization</Subtitle>\n </Header>\n <StatusContainer>\n <SuccessIcon>✓</SuccessIcon>\n <Message>Welcome to {invitationData.organization.name}!</Message>\n {invitationData.workspace && (\n <SubMessage>You've been added to the {invitationData.workspace.name} workspace.</SubMessage>\n )}\n <Button onClick={handleContinue} style={{ marginTop: \"var(--space-lg)\" }}>\n Continue to Application\n </Button>\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n // Already a member\n if (invitationData?.already_member) {\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Already a Member</Title>\n <Subtitle>You're already part of this organization</Subtitle>\n </Header>\n <StatusContainer>\n <InfoIcon>ℹ</InfoIcon>\n <Message>You're already a member of {invitationData.organization?.name || \"this organization\"}</Message>\n <SubMessage>No action needed - you already have access.</SubMessage>\n <Button onClick={handleContinue} style={{ marginTop: \"var(--space-lg)\" }}>\n Continue to Application\n </Button>\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n // Needs to sign in or sign up\n if (invitationData?.requires_signin) {\n const isSignup = invitationData.error_code === \"INVITATION_REQUIRES_SIGNUP\";\n\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>{isSignup ? \"Sign Up Required\" : \"Sign In Required\"}</Title>\n <Subtitle>To accept this invitation</Subtitle>\n </Header>\n <StatusContainer>\n <InfoIcon>ℹ</InfoIcon>\n <Message>\n This invitation is for <EmailHighlight>{invitationData.invited_email}</EmailHighlight>\n </Message>\n <SubMessage>\n {isSignup\n ? \"You need to create an account with this email address to accept the invitation.\"\n : invitationData.error_code === \"INVITATION_EMAIL_MISMATCH\"\n ? \"You're currently signed in with a different account. Please sign in with the invited email.\"\n : \"Please sign in to accept this invitation.\"}\n </SubMessage>\n <Button onClick={handleGoToAuth} style={{ marginTop: \"var(--space-lg)\" }}>\n {isSignup ? \"Sign Up to Accept\" : \"Sign In to Accept\"}\n </Button>\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n // Expired invitation\n if (invitationData?.error_code === \"INVITATION_EXPIRED\") {\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Invitation Expired</Title>\n <Subtitle>This invitation is no longer valid</Subtitle>\n </Header>\n <StatusContainer>\n <ErrorIcon>⏱</ErrorIcon>\n <Message>\n Invitation for <EmailHighlight>{invitationData.invited_email}</EmailHighlight> has expired\n </Message>\n <SubMessage>\n Invitations are valid for 10 days. Please request a new invitation from your organization administrator.\n </SubMessage>\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n // Generic error state\n if (error || invitationData?.error_code) {\n return (\n <DefaultStylesProvider>\n <Container>\n <Header>\n <Title>Invitation Error</Title>\n <Subtitle>Unable to process invitation</Subtitle>\n </Header>\n <StatusContainer>\n <ErrorIcon>✗</ErrorIcon>\n <Message>Something went wrong</Message>\n <SubMessage>{invitationData?.message || error || \"Failed to accept invitation\"}</SubMessage>\n <Button onClick={handleRetry} style={{ marginTop: \"var(--space-lg)\" }}>\n Try Again\n </Button>\n <Footer>\n <div style={{ marginTop: \"var(--space-md)\" }}>\n Having trouble?{\" \"}\n <Link onClick={handleGoToAuth}>\n Sign in manually\n </Link>\n </div>\n </Footer>\n </StatusContainer>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n // Default loading state (shouldn't normally reach here)\n return null;\n}","import { createContext, useContext } from \"react\";\n\nexport type Screen =\n | \"general\"\n | \"members\"\n | \"domains\"\n | \"billing\"\n | \"security\"\n | \"roles\"\n | \"audit-logs\"\n | null;\n\ntype ScreenContextType = {\n screen: Screen;\n setScreen: React.Dispatch<React.SetStateAction<Screen>>;\n toast: (message: string, level: \"info\" | \"error\") => void;\n};\n\nexport const ScreenContext = createContext<ScreenContextType>({\n screen: null,\n setScreen: () => {},\n toast: (_message: string, _level: \"info\" | \"error\") => {},\n});\n\nexport const useScreenContext = () => {\n const context = useContext(ScreenContext);\n if (!context) {\n throw new Error(\n \"useScreenContext must be used within a ScreenContextProvider\",\n );\n }\n return context;\n};\n","import { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { useOrganizationList } from \"@/hooks/use-organization\";\nimport { ChevronLeft } from \"lucide-react\";\nimport { useScreenContext } from \"./context\";\nimport { DefaultStylesProvider } from \"../utility\";\n\nconst Container = styled.div`\n display: flex;\n height: 100%;\n min-height: 400px;\n`;\n\nconst LeftPanel = styled.div`\n width: 35%;\n background: var(--color-background-hover);\n padding: 32px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n border-right: 1px solid var(--color-border);\n`;\n\nconst RightPanel = styled.div`\n flex: 1;\n padding: 32px;\n display: flex;\n flex-direction: column;\n`;\n\nconst AvatarContainer = styled.div<{ hasImage: boolean }>`\n width: 80px;\n height: 80px;\n border-radius: 16px;\n overflow: hidden;\n background: ${(props) =>\n props.hasImage ? \"transparent\" : \"var(--color-background)\"};\n border: 2px solid var(--color-border);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 16px;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n\n &:hover {\n border-color: var(--color-border-hover);\n transform: scale(1.02);\n }\n`;\n\nconst AvatarImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst AvatarPlaceholder = styled.div`\n font-size: 32px;\n font-weight: 600;\n color: var(--color-muted);\n background: var(--color-border);\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst Title = styled.h2`\n font-size: 16px;\n font-weight: 400;\n color: var(--color-foreground);\n margin-bottom: 8px;\n`;\n\nconst Description = styled.p`\n font-size: 13px;\n color: var(--color-secondary-text);\n line-height: 1.4;\n max-width: 200px;\n`;\n\nconst FormHeader = styled.div`\n margin-bottom: 24px;\n`;\n\nconst FormTitle = styled.h3`\n font-size: 16px;\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: 6px;\n`;\n\nconst FormDescription = styled.p`\n font-size: 13px;\n color: var(--color-secondary-text);\n line-height: 1.4;\n`;\n\nconst FormContent = styled.div`\n flex: 1;\n`;\n\nconst FormGroup = styled.div`\n margin-bottom: 20px;\n`;\n\nconst Label = styled.label`\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: var(--color-foreground);\n`;\n\nconst Input = styled.input`\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--color-border);\n border-radius: 6px;\n font-size: 14px;\n outline: none;\n background: var(--color-background);\n color: var(--color-foreground);\n transition: all 0.2s ease;\n box-sizing: border-box;\n\n &:focus {\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px var(--color-primary-background);\n }\n\n &::placeholder {\n color: var(--color-muted);\n }\n`;\n\nconst TextArea = styled.textarea`\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--color-border);\n border-radius: 6px;\n font-size: 14px;\n outline: none;\n resize: vertical;\n min-height: 80px;\n background: var(--color-background);\n color: var(--color-foreground);\n transition: all 0.2s ease;\n font-family: inherit;\n box-sizing: border-box;\n\n &:focus {\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px var(--color-primary-background);\n }\n\n &::placeholder {\n color: var(--color-muted);\n }\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: auto;\n padding-top: 24px;\n`;\n\nconst BackButton = styled.button`\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: transparent;\n border: none;\n font-size: 13px;\n font-weight: 500;\n color: var(--color-secondary-text);\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n color: var(--color-foreground);\n }\n`;\n\nconst SubmitButton = styled.button`\n padding: 8px 20px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n background: var(--color-primary);\n color: white;\n border: none;\n\n &:hover:not(:disabled) {\n background: var(--color-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px var(--color-primary-shadow);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst HiddenInput = styled.input`\n display: none;\n`;\n\nconst UploadOverlay = styled.div`\n position: absolute;\n inset: 0;\n background: var(--color-dialog-backdrop);\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.2s ease;\n cursor: pointer;\n\n ${AvatarContainer}:hover & {\n opacity: 1;\n }\n`;\n\nconst UploadText = styled.div`\n color: white;\n font-size: 12px;\n font-weight: 500;\n`;\n\ninterface CreateOrganizationFormProps {\n onSuccess?: () => void;\n onCancel?: () => void;\n}\n\nexport const CreateOrganizationForm: React.FC<CreateOrganizationFormProps> = ({\n onSuccess,\n onCancel,\n}) => {\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [image, setImage] = useState<File>();\n const [previewUrl, setPreviewUrl] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const { createOrganization } = useOrganizationList();\n const { toast } = useScreenContext();\n\n const handleNameChange = (value: string) => {\n setName(value);\n };\n\n const handleImageChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files && event.target.files[0]) {\n const file = event.target.files[0];\n\n if (file.size > 2 * 1024 * 1024) {\n toast(\"File size cannot exceed 2MB\", \"error\");\n return;\n }\n\n if (!file.type.startsWith(\"image/\")) {\n toast(\"Please select a valid image file\", \"error\");\n return;\n }\n\n if (previewUrl) {\n URL.revokeObjectURL(previewUrl);\n }\n\n setImage(file);\n setPreviewUrl(URL.createObjectURL(file));\n }\n };\n\n const handleFileSelect = () => {\n fileInputRef.current?.click();\n };\n\n const getInitials = (text: string) => {\n return (\n text\n .split(\" \")\n .map((word) => word[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2) || \"O\"\n );\n };\n\n useEffect(() => {\n return () => {\n if (previewUrl) {\n URL.revokeObjectURL(previewUrl);\n }\n };\n }, [previewUrl]);\n\n const sanitizeText = (text: string): string => {\n return text.trim().replace(/[<>\\\"'&]/g, \"\");\n };\n\n const validateOrganizationName = (name: string): boolean => {\n return (\n name.length >= 2 && name.length <= 100 && /^[a-zA-Z0-9\\s_.-]+$/.test(name)\n );\n };\n\n const handleSubmit = async () => {\n const sanitizedName = sanitizeText(name);\n const sanitizedDescription = sanitizeText(description);\n\n if (!sanitizedName) {\n toast(\"Please enter an organization name\", \"error\");\n return;\n }\n\n if (!validateOrganizationName(sanitizedName)) {\n toast(\n \"Organization name must be 2-100 characters and contain only letters, numbers, spaces, dots, underscores, and hyphens\",\n \"error\",\n );\n return;\n }\n\n if (sanitizedDescription.length > 500) {\n toast(\"Description must be less than 500 characters\", \"error\");\n return;\n }\n\n setIsSubmitting(true);\n try {\n await createOrganization({\n name: sanitizedName,\n description: sanitizedDescription,\n image,\n });\n onSuccess?.();\n } catch (error: any) {\n const errorMessage =\n error.message || \"Failed to create organization. Please try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return (\n <DefaultStylesProvider>\n <Container>\n <LeftPanel>\n <AvatarContainer hasImage={!!previewUrl} onClick={handleFileSelect}>\n {previewUrl ? (\n <AvatarImage src={previewUrl} alt=\"Organization logo\" />\n ) : (\n <AvatarPlaceholder>{getInitials(name || \"O\")}</AvatarPlaceholder>\n )}\n <UploadOverlay>\n <UploadText>Upload Logo</UploadText>\n </UploadOverlay>\n </AvatarContainer>\n <HiddenInput\n type=\"file\"\n ref={fileInputRef}\n onChange={handleImageChange}\n accept=\"image/png, image/jpeg, image/gif\"\n disabled={isSubmitting}\n />\n <Title>Create new organization</Title>\n <Description>\n Organizations help you manage all your team members for an org in\n one umbrella.\n </Description>\n </LeftPanel>\n\n <RightPanel>\n <FormHeader>\n <FormTitle>Choose your organization name</FormTitle>\n <FormDescription>\n This is the name of your company or team. You can always change it\n later.\n </FormDescription>\n </FormHeader>\n\n <FormContent>\n <FormGroup>\n <Label>Organization name</Label>\n <Input\n type=\"text\"\n value={name}\n onChange={(e) => handleNameChange(e.target.value)}\n placeholder=\"Acme Inc.\"\n disabled={isSubmitting}\n />\n </FormGroup>\n\n <FormGroup>\n <Label>Description (optional)</Label>\n <TextArea\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"What does your organization do?\"\n disabled={isSubmitting}\n />\n </FormGroup>\n </FormContent>\n\n <ButtonGroup>\n <BackButton onClick={onCancel} disabled={isSubmitting}>\n <ChevronLeft size={16} />\n Back\n </BackButton>\n <SubmitButton\n onClick={handleSubmit}\n disabled={isSubmitting || !name.trim()}\n >\n {isSubmitting ? \"Creating...\" : \"Create\"}\n </SubmitButton>\n </ButtonGroup>\n </RightPanel>\n </Container>\n </DefaultStylesProvider>\n );\n};\n\nexport default CreateOrganizationForm;\n","import React from \"react\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport CreateOrganizationForm from \"./create-organization-form\";\nimport { Dialog } from \"../utility/dialog\";\n\ninterface CreateOrganizationDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onCreated?: () => void;\n}\n\nexport const CreateOrganizationDialog: React.FC<\n CreateOrganizationDialogProps\n> = ({ isOpen, onClose, onCreated }) => {\n const handleSuccess = () => {\n onCreated?.();\n onClose();\n };\n\n return (\n <DefaultStylesProvider>\n <Dialog isOpen={isOpen} onClose={onClose}>\n <Dialog.Overlay>\n <Dialog.Content style={{ width: \"900px\", maxWidth: \"90vw\" }}>\n <Dialog.Body style={{ padding: 0 }}>\n <CreateOrganizationForm\n onSuccess={handleSuccess}\n onCancel={onClose}\n />\n </Dialog.Body>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog>\n </DefaultStylesProvider>\n );\n};\n\nexport default CreateOrganizationDialog;\n","import { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { X } from \"lucide-react\";\nimport { Input } from \"@/components/utility/input\";\nimport { FormGroup, Label } from \"../utility/form\";\nimport { Button, Spinner } from \"../utility\";\nimport { OrganizationDomain } from \"@/types\";\nimport { useActiveOrganization } from \"@/hooks/use-organization\";\nimport { useScreenContext } from \"./context\";\n\nconst PopoverContainer = styled.div`\n position: fixed;\n width: 360px;\n max-width: calc(100vw - 48px);\n background: var(--color-background);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n z-index: 1001;\n \n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--space-sm) var(--space-md);\n border-bottom: 1px solid var(--color-border);\n`;\n\nconst Title = styled.h3`\n margin: 0;\n font-size: var(--font-xs);\n font-weight: 500;\n color: var(--color-foreground);\n`;\n\nconst Content = styled.div`\n padding: var(--space-md);\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: var(--space-xs);\n justify-content: flex-end;\n padding: var(--space-sm) var(--space-md);\n border-top: 1px solid var(--color-border);\n background: var(--color-background-alt);\n`;\n\nconst CloseButton = styled.button`\n background: none;\n border: none;\n padding: var(--space-xs);\n cursor: pointer;\n color: var(--color-muted);\n transition: all 0.15s ease;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n \n &:hover {\n color: var(--color-foreground);\n background: var(--color-input-background);\n }\n`;\n\ninterface AddDomainPopoverProps {\n onClose?: () => void;\n domain?: OrganizationDomain;\n triggerRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport const AddDomainPopover = ({\n onClose,\n domain,\n triggerRef,\n}: AddDomainPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [currentDomain, setCurrentDomain] = useState<OrganizationDomain>();\n const [newFqdn, setNewFqdn] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const { addDomain, verifyDomain } = useActiveOrganization();\n const { toast } = useScreenContext();\n\n const validateDomain = (domain: string): boolean => {\n // Basic domain validation - allows subdomains\n const domainRegex = /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\\.[a-zA-Z]{2,}$/;\n return domainRegex.test(domain);\n };\n\n const sanitizeDomain = (domain: string): string => {\n return domain.trim().toLowerCase().replace(/^https?:\\/\\//, '');\n };\n\n const handleDomainCreation = async () => {\n const sanitizedDomain = sanitizeDomain(newFqdn);\n \n if (!sanitizedDomain) {\n toast(\"Please enter a domain name\", \"error\");\n return;\n }\n\n // Validate domain format\n if (!validateDomain(sanitizedDomain)) {\n toast(\"Please enter a valid domain name (e.g., example.com)\", \"error\");\n return;\n }\n\n // Validate domain length\n if (sanitizedDomain.length > 253) { // RFC 1035 limit\n toast(\"Domain name is too long\", \"error\");\n return;\n }\n\n try {\n const res = await addDomain!({ fqdn: sanitizedDomain });\n if (res?.errors?.length) {\n const errorMessage = res.errors[0]?.message || res.errors[0] || \"Failed to add domain\";\n toast(typeof errorMessage === 'string' ? errorMessage : \"Failed to add domain\", \"error\");\n return;\n }\n\n toast(\"Domain added successfully\", \"info\");\n setCurrentDomain(res!.data);\n } catch (error: any) {\n const errorMessage = error.message || \"Failed to add domain. Please try again.\";\n toast(errorMessage, \"error\");\n }\n };\n\n const handleDomainVerification = async () => {\n if (!currentDomain || loading) return;\n setLoading(true);\n try {\n await verifyDomain!(currentDomain);\n onClose?.();\n toast(\"Domain verified successfully\", \"info\");\n } catch (error: any) {\n const errorMessage = error.message || \"Failed to verify domain. Please check DNS records and try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n setMounted(true);\n \n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current || !triggerRef?.current) return;\n \n const triggerButton = triggerRef.current;\n \n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 360;\n const popoverHeight = 250; // Approximate height\n const spacing = 8;\n \n let top = 0;\n let left = 0;\n \n // Check available space\n const spaceBottom = window.innerHeight - rect.bottom;\n const spaceTop = rect.top;\n \n // Prefer to open below if there's space\n if (spaceBottom >= popoverHeight + spacing) {\n top = rect.bottom + spacing;\n // Align to right edge of button (bottom-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (bottom-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // Otherwise open above\n else if (spaceTop >= popoverHeight + spacing) {\n top = rect.top - popoverHeight - spacing;\n // Align to right edge of button (top-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (top-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // If no space above or below, position it at the best available spot\n else {\n // Position at bottom with scrolling if needed\n top = rect.bottom + spacing;\n left = rect.right - popoverWidth;\n \n if (left < spacing) {\n left = rect.left;\n }\n }\n \n setPosition({ top, left });\n }\n }, 10);\n \n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n onClose?.();\n }\n };\n \n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose?.();\n }\n };\n \n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n \n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [onClose, triggerRef]);\n\n useEffect(() => {\n if (!domain) return;\n setCurrentDomain(domain);\n }, [domain]);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer \n ref={popoverRef}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? 'visible' : 'hidden'\n }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-labelledby=\"add-domain-title\"\n aria-modal=\"true\"\n >\n {!currentDomain ? (\n <>\n <Header>\n <Title id=\"add-domain-title\">Add Domain</Title>\n <CloseButton onClick={onClose} aria-label=\"Close add domain dialog\">\n <X size={16} />\n </CloseButton>\n </Header>\n\n <Content>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"var(--space-sm)\" }}>\n <FormGroup>\n <Label>Enter FQDN</Label>\n <Input\n type=\"text\"\n placeholder=\"Enter your domain\"\n value={newFqdn}\n onChange={(e) => setNewFqdn(e.target.value)}\n autoFocus\n aria-label=\"Domain name (FQDN)\"\n aria-describedby=\"domain-help\"\n />\n </FormGroup>\n </div>\n </Content>\n\n <ButtonGroup>\n <Button\n $outline\n onClick={onClose}\n style={{\n width: \"auto\",\n }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleDomainCreation}\n disabled={!newFqdn || loading}\n style={{\n width: \"auto\",\n }}\n >\n {loading ? (\n <>\n <Spinner size={14} /> Adding...\n </>\n ) : (\n \"Continue\"\n )}\n </Button>\n </ButtonGroup>\n </>\n ) : (\n <>\n <Header>\n <Title id=\"verify-domain-title\">Verify Domain</Title>\n <CloseButton onClick={onClose} aria-label=\"Close domain verification dialog\">\n <X size={16} />\n </CloseButton>\n </Header>\n\n <Content>\n <div style={{ marginBottom: \"var(--space-md)\" }}>\n <p style={{\n fontSize: \"var(--font-xs)\",\n color: \"var(--color-muted)\",\n margin: 0,\n }}>\n Add the following DNS record to your domain\n </p>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"var(--space-sm)\" }}>\n <FormGroup>\n <Label>Record Type</Label>\n <Input\n value={currentDomain?.verification_dns_record_type}\n disabled\n />\n </FormGroup>\n <FormGroup>\n <Label>Record Name</Label>\n <Input\n value={currentDomain?.verification_dns_record_name}\n disabled\n />\n </FormGroup>\n <FormGroup>\n <Label>Record Data</Label>\n <Input\n type=\"text\"\n value={currentDomain?.verification_dns_record_data}\n disabled\n />\n </FormGroup>\n </div>\n </Content>\n\n <ButtonGroup>\n <Button\n $outline\n onClick={onClose}\n style={{\n width: \"auto\",\n }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleDomainVerification}\n disabled={loading}\n style={{\n width: \"auto\",\n }}\n >\n {loading ? (\n <>\n <Spinner size={14} /> Verifying...\n </>\n ) : (\n \"Verify Domain\"\n )}\n </Button>\n </ButtonGroup>\n </>\n )}\n </PopoverContainer>\n );\n};\n","import { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { X } from \"lucide-react\";\nimport { Input } from \"@/components/utility/input\";\nimport { FormGroup, Label } from \"../utility/form\";\nimport { useActiveOrganization } from \"@/hooks/use-organization\";\nimport { Button, Spinner } from \"../utility\";\nimport { ComboBox, ComboBoxOption } from \"../utility/combo-box\";\nimport { OrganizationRole } from \"@/types\";\nimport { useScreenContext } from \"./context\";\n\nconst PopoverContainer = styled.div`\n position: fixed;\n width: 360px;\n max-width: calc(100vw - 48px);\n background: var(--color-background);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n z-index: 1001;\n \n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--space-sm) var(--space-md);\n border-bottom: 1px solid var(--color-border);\n`;\n\nconst Title = styled.h3`\n margin: 0;\n font-size: var(--font-xs);\n font-weight: 500;\n color: var(--color-foreground);\n`;\n\nconst Content = styled.div`\n padding: var(--space-md);\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: var(--space-xs);\n justify-content: flex-end;\n padding: var(--space-sm) var(--space-md);\n border-top: 1px solid var(--color-border);\n background: var(--color-background-alt);\n`;\n\nconst CloseButton = styled.button`\n background: none;\n border: none;\n padding: var(--space-xs);\n cursor: pointer;\n color: var(--color-muted);\n transition: all 0.15s ease;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n \n &:hover {\n color: var(--color-foreground);\n background: var(--color-input-background);\n }\n`;\n\ninterface InviteMemberPopoverProps {\n onClose?: () => void;\n onSuccess?: () => void;\n roles: OrganizationRole[];\n triggerRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport const InviteMemberPopover = ({\n onClose,\n onSuccess,\n roles,\n triggerRef,\n}: InviteMemberPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [email, setEmail] = useState(\"\");\n const [selectedRole, setSelectedRole] = useState<OrganizationRole | null>(\n null\n );\n const [loading, setLoading] = useState(false);\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const { inviteMember } = useActiveOrganization();\n const { toast } = useScreenContext();\n\n const roleOptions: ComboBoxOption[] = roles.map((role) => ({\n value: role.id,\n label: role.name,\n }));\n\n const validateEmail = (email: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n };\n\n const handleInvite = async () => {\n const trimmedEmail = email.trim().toLowerCase();\n \n if (!trimmedEmail || !selectedRole) return;\n\n // Validate email format\n if (!validateEmail(trimmedEmail)) {\n toast(\"Please enter a valid email address\", \"error\");\n return;\n }\n\n // Sanitize and validate email length\n if (trimmedEmail.length > 320) { // RFC 5321 limit\n toast(\"Email address is too long\", \"error\");\n return;\n }\n\n setLoading(true);\n try {\n await inviteMember({ email: trimmedEmail, organizationRole: selectedRole });\n\n onSuccess?.();\n } catch (error: any) {\n const errorMessage = error.message || \"Failed to send invitation. Please try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n setMounted(true);\n \n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current || !triggerRef?.current) return;\n \n const triggerButton = triggerRef.current;\n \n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 360;\n const popoverHeight = 250; // Approximate height\n const spacing = 8;\n \n let top = 0;\n let left = 0;\n \n // Check available space\n const spaceBottom = window.innerHeight - rect.bottom;\n const spaceTop = rect.top;\n \n // Prefer to open below if there's space\n if (spaceBottom >= popoverHeight + spacing) {\n top = rect.bottom + spacing;\n // Align to right edge of button (bottom-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (bottom-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // Otherwise open above\n else if (spaceTop >= popoverHeight + spacing) {\n top = rect.top - popoverHeight - spacing;\n // Align to right edge of button (top-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (top-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // If no space above or below, position it at the best available spot\n else {\n // Position at bottom with scrolling if needed\n top = rect.bottom + spacing;\n left = rect.right - popoverWidth;\n \n if (left < spacing) {\n left = rect.left;\n }\n }\n \n setPosition({ top, left });\n }\n }, 10);\n \n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n onClose?.();\n }\n };\n \n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose?.();\n }\n };\n \n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n \n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [onClose, triggerRef]);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer \n ref={popoverRef}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? 'visible' : 'hidden'\n }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-labelledby=\"invite-member-title\"\n aria-modal=\"true\"\n >\n <Header>\n <Title id=\"invite-member-title\">Invite Member</Title>\n <CloseButton onClick={onClose} aria-label=\"Close invite member dialog\">\n <X size={16} />\n </CloseButton>\n </Header>\n\n <Content>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"var(--space-sm)\" }}>\n <FormGroup>\n <Label>Email Address</Label>\n <Input\n type=\"email\"\n placeholder=\"colleague@company.com\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n autoFocus\n aria-label=\"Email address for invitation\"\n aria-describedby=\"email-help\"\n />\n </FormGroup>\n\n <FormGroup>\n <Label>Role</Label>\n <ComboBox\n options={roleOptions}\n value={selectedRole?.id}\n onChange={(id) =>\n setSelectedRole(roles.find((role) => role.id === id)!)\n }\n placeholder=\"Select a role\"\n aria-label=\"Select role for invited member\"\n />\n </FormGroup>\n </div>\n </Content>\n\n <ButtonGroup>\n <Button\n $outline\n onClick={onClose}\n style={{\n width: \"auto\",\n }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleInvite}\n disabled={!email || !selectedRole || loading}\n style={{\n width: \"auto\",\n }}\n >\n {loading ? (\n <>\n <Spinner size={14} /> Sending...\n </>\n ) : (\n \"Send Invitation\"\n )}\n </Button>\n </ButtonGroup>\n </PopoverContainer>\n );\n};\n","import { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { X } from \"lucide-react\";\nimport { Input } from \"@/components/utility/input\";\nimport { FormGroup, Label } from \"../utility/form\";\nimport { Button, Spinner } from \"../utility\";\nimport { OrganizationRole } from \"@/types\";\n\ninterface CreateRoleData {\n id?: string;\n name: string;\n permissions: string[];\n}\nimport { useDeployment } from \"@/hooks/use-deployment\";\nimport { ComboBoxMulti } from \"../utility/combo-box\";\nimport { useActiveOrganization } from \"@/hooks/use-organization\";\nimport { useScreenContext } from \"./context\";\n\nconst PopoverContainer = styled.div<{ $isInTable?: boolean }>`\n position: fixed;\n width: 400px;\n max-width: calc(100vw - 48px);\n background: var(--color-background);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n z-index: 1001;\n max-height: calc(100vh - 100px);\n overflow-y: auto;\n \n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--space-sm) var(--space-md);\n border-bottom: 1px solid var(--color-border);\n`;\n\nconst Title = styled.h3`\n margin: 0;\n font-size: var(--font-xs);\n font-weight: 500;\n color: var(--color-foreground);\n`;\n\nconst Content = styled.div`\n padding: var(--space-md);\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: var(--space-xs);\n justify-content: flex-end;\n padding: var(--space-sm) var(--space-md);\n border-top: 1px solid var(--color-border);\n background: var(--color-background-alt);\n`;\n\nconst CloseButton = styled.button`\n background: none;\n border: none;\n padding: var(--space-xs);\n cursor: pointer;\n color: var(--color-muted);\n transition: all 0.15s ease;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n \n &:hover {\n color: var(--color-foreground);\n background: var(--color-input-background);\n }\n`;\n\ninterface AddRolePopoverProps {\n onClose?: () => void;\n onSuccess?: (role: CreateRoleData) => void;\n role?: OrganizationRole;\n triggerRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport const AddRolePopover = ({\n onClose,\n onSuccess,\n role,\n triggerRef,\n}: AddRolePopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [name, setName] = useState(role?.name || \"\");\n const [permissions, setPermissions] = useState<string[]>(\n role?.permissions || []\n );\n const {} = useActiveOrganization();\n const [loading, setLoading] = useState(false);\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const { deployment } = useDeployment();\n const { toast } = useScreenContext();\n\n const isEditing = !!role;\n\n const permissionOptions = Array.isArray(\n deployment?.b2b_settings?.organization_permissions\n )\n ? deployment.b2b_settings.organization_permissions.map((perm) => ({\n value: perm,\n label: perm,\n }))\n : [];\n\n useEffect(() => {\n setMounted(true);\n \n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current) return;\n \n // Use triggerRef if available, otherwise fall back to existing logic\n let triggerButton: HTMLElement | null = null;\n \n if (triggerRef?.current) {\n triggerButton = triggerRef.current;\n } else if (isEditing) {\n // For edit popover, find the button with the role's data attribute\n const buttons = document.querySelectorAll('[data-role-dropdown-trigger]');\n for (let i = 0; i < buttons.length; i++) {\n const btn = buttons[i] as HTMLElement;\n if (btn.offsetParent !== null) {\n triggerButton = btn;\n break;\n }\n }\n } else {\n // For add popover, find the \"Add role\" button\n const buttons = document.querySelectorAll('button');\n for (let i = 0; i < buttons.length; i++) {\n const btn = buttons[i] as HTMLElement;\n if (btn.textContent === 'Add role' && btn.offsetParent !== null) {\n triggerButton = btn;\n break;\n }\n }\n }\n \n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 400;\n \n // Position below and aligned to right edge of trigger\n let top = rect.bottom + 8;\n let left = rect.right - popoverWidth;\n \n // Ensure it doesn't go off screen\n if (left < 10) {\n left = rect.left;\n }\n \n // If not enough space below, position above\n if (top + 300 > window.innerHeight) {\n top = rect.top - 300 - 8;\n }\n \n setPosition({ top, left });\n }\n }, 10);\n \n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n onClose?.();\n }\n };\n \n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose?.();\n }\n };\n \n // Delay adding the listeners to prevent immediate closure\n const listenerTimer = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n }, 100);\n \n return () => {\n clearTimeout(timer);\n clearTimeout(listenerTimer);\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [onClose, isEditing, triggerRef]);\n\n const sanitizeRoleName = (name: string): string => {\n return name.trim().replace(/[<>\\\"'&]/g, ''); // Remove potentially dangerous characters\n };\n\n const validateRoleName = (name: string): boolean => {\n return name.length >= 2 && name.length <= 50 && /^[a-zA-Z0-9\\s_-]+$/.test(name);\n };\n\n const handleSave = async () => {\n const sanitizedName = sanitizeRoleName(name);\n \n if (!sanitizedName) {\n toast(\"Please enter a role name\", \"error\");\n return;\n }\n\n if (!validateRoleName(sanitizedName)) {\n toast(\"Role name must be 2-50 characters and contain only letters, numbers, spaces, underscores, and hyphens\", \"error\");\n return;\n }\n\n if (permissions.length === 0) {\n toast(\"Please select at least one permission\", \"error\");\n return;\n }\n\n setLoading(true);\n try {\n const roleData: CreateRoleData = {\n id: role?.id,\n name: sanitizedName,\n permissions: permissions || [],\n };\n onSuccess?.(roleData);\n } catch (error: any) {\n const errorMessage = error.message || `Failed to ${isEditing ? 'update' : 'create'} role. Please try again.`;\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer \n ref={popoverRef}\n $isInTable={isEditing}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? 'visible' : 'hidden'\n }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-labelledby=\"role-dialog-title\"\n aria-modal=\"true\"\n >\n <Header>\n <Title id=\"role-dialog-title\">{isEditing ? \"Edit Role\" : \"Create New Role\"}</Title>\n <CloseButton onClick={onClose} aria-label={`Close ${isEditing ? 'edit' : 'create'} role dialog`}>\n <X size={16} />\n </CloseButton>\n </Header>\n\n <Content>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"var(--space-sm)\" }}>\n <FormGroup>\n <Label>Role Name</Label>\n <Input\n type=\"text\"\n placeholder=\"e.g. Admin, Editor, Viewer\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n autoFocus\n aria-label=\"Role name\"\n aria-describedby=\"role-name-help\"\n />\n </FormGroup>\n\n <FormGroup>\n <Label>Permissions</Label>\n <ComboBoxMulti\n options={permissionOptions}\n value={permissions}\n onChange={setPermissions}\n placeholder=\"Select permissions\"\n aria-label=\"Select permissions for role\"\n />\n </FormGroup>\n </div>\n </Content>\n\n <ButtonGroup>\n <Button\n $outline\n onClick={onClose}\n style={{\n width: \"auto\",\n }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSave}\n disabled={!name || loading}\n style={{\n width: \"auto\",\n }}\n >\n {loading ? (\n <>\n <Spinner size={14} /> {isEditing ? \"Updating...\" : \"Creating...\"}\n </>\n ) : isEditing ? (\n \"Update Role\"\n ) : (\n \"Create Role\"\n )}\n </Button>\n </ButtonGroup>\n </PopoverContainer>\n );\n};\n","import styled from \"styled-components\";\n\nexport const Table = styled.table`\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n font-size: 14px;\n border: 1px solid var(--color-border);\n border-radius: 8px;\n overflow: hidden;\n background: var(--color-background);\n`;\n\nexport const TableHead = styled.thead`\n background-color: var(--color-background-alt);\n`;\n\nexport const TableBody = styled.tbody`\n background-color: var(--color-background);\n \n tr:last-child td:last-child {\n overflow: visible;\n }\n`;\n\nexport const TableRow = styled.tr`\n &:not(:last-child) td {\n border-bottom: 1px solid var(--color-border);\n }\n`;\n\nexport const TableHeader = styled.th`\n text-align: left;\n padding: 8px 16px;\n font-weight: 400;\n font-size: 14px;\n color: var(--color-secondary-text);\n background-color: var(--color-background-alt);\n border-bottom: 1px solid var(--color-border);\n white-space: nowrap;\n \n &:last-child {\n text-align: right;\n width: 60px;\n }\n \n &:first-child {\n width: 40%;\n }\n`;\n\nexport const TableCell = styled.td`\n padding: 12px 16px;\n font-size: 14px;\n color: var(--color-foreground);\n vertical-align: middle;\n background-color: var(--color-background);\n white-space: nowrap;\n`;\n\nexport const TableCellFlex = styled(TableCell)`\n & > div {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n`;\n\nexport const ActionsCell = styled(TableCell)`\n text-align: right;\n width: auto;\n white-space: nowrap;\n position: relative;\n overflow: visible;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst EmptyStateContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n text-align: center;\n background-color: var(--color-background);\n border-radius: 12px;\n border: 1px dashed var(--color-border);\n height: 100%;\n width: 100%;\n`;\n\nconst Title = styled.h3`\n font-size: 16px;\n font-weight: 400;\n color: var(--color-foreground);\n margin: 0 0 8px 0;\n`;\n\nconst Description = styled.p`\n font-size: 14px;\n color: var(--color-muted);\n margin: 0;\n max-width: 380px;\n line-height: 1.5;\n`;\n\ninterface EmptyStateProps {\n title: string;\n description: string;\n action?: React.ReactNode;\n}\n\nexport const EmptyState = ({ title, description, action }: EmptyStateProps) => {\n return (\n <EmptyStateContainer>\n <Title>{title}</Title>\n <Description>{description}</Description>\n {action && <div style={{ marginTop: \"24px\" }}>{action}</div>}\n </EmptyStateContainer>\n );\n};\n","import { useRef, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Button } from \"./button\";\n\nconst PopoverContainer = styled.div`\n text-align: left;\n position: fixed;\n background: var(--color-background);\n border-radius: 8px;\n box-shadow: 0 4px 12px var(--color-shadow);\n border: 1px solid var(--color-border);\n padding: 16px;\n width: 320px;\n z-index: 1000;\n`;\n\nconst Title = styled.div`\n font-size: 14px;\n font-weight: 400;\n color: var(--color-foreground);\n margin-bottom: 16px;\n line-height: 1.4;\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n`;\n\ninterface ConfirmationPopoverProps {\n title: string;\n onConfirm: () => void;\n onCancel: () => void;\n}\n\nexport const ConfirmationPopover = ({\n title,\n onConfirm,\n onCancel,\n}: ConfirmationPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n useEffect(() => {\n // Calculate position based on parent element\n if (popoverRef.current) {\n const rect = popoverRef.current.parentElement?.getBoundingClientRect();\n if (rect) {\n setPosition({\n top: rect.bottom + 8,\n left: rect.right - 320, // 320px is the width of popover\n });\n }\n }\n }, []);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(event.target as Node)\n ) {\n onCancel();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [onCancel]);\n\n return (\n <PopoverContainer \n ref={popoverRef}\n style={{ \n top: `${position.top}px`, \n left: `${position.left}px` \n }}\n >\n <Title>{title}</Title>\n <ButtonGroup>\n <Button\n onClick={onCancel}\n style={{ \n fontSize: \"14px\", \n padding: \"6px 16px\",\n background: \"transparent\",\n border: \"1px solid var(--color-border)\",\n color: \"var(--color-foreground)\",\n }}\n >\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n style={{ \n fontSize: \"14px\", \n padding: \"6px 16px\",\n background: \"var(--color-error)\",\n border: \"1px solid var(--color-error)\",\n color: \"white\",\n }}\n >\n Confirm\n </Button>\n </ButtonGroup>\n </PopoverContainer>\n );\n};\n","import React, {\n useCallback,\n useMemo,\n useRef,\n useState,\n useEffect,\n} from \"react\";\nimport styled from \"styled-components\";\nimport {\n Building,\n AlertTriangle,\n Copy,\n ExternalLink,\n Trash,\n Check,\n Mail,\n Settings,\n Globe,\n Users,\n Shield,\n ChevronDown,\n} from \"lucide-react\";\nimport {\n useActiveOrganization,\n useOrganizationList,\n} from \"@/hooks/use-organization\";\nimport { useDeployment } from \"@/hooks/use-deployment\";\nimport { useSession } from \"@/hooks/use-session\";\nimport { AddDomainPopover } from \"./add-domain-popover\";\nimport useSWR from \"swr\";\nimport { InviteMemberPopover } from \"./invite-member-popover\";\nimport {\n OrganizationRole,\n OrganizationDomain,\n OrganizationMembership,\n OrganizationInvitation,\n} from \"@/types\";\nimport { AddRolePopover } from \"./add-role-popover\";\nimport {\n Button,\n Input,\n SearchInput,\n Spinner,\n Switch,\n ComboBox,\n Dropdown,\n DropdownItems,\n DropdownItem,\n DropdownTrigger,\n FormGroup,\n Label,\n DropdownDivider,\n} from \"@/components/utility\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableCellFlex,\n TableHead,\n TableHeader,\n TableRow,\n ActionsCell,\n} from \"@/components/utility/table\";\nimport { EmptyState } from \"@/components/utility/empty-state\";\nimport { useWorkspaceList } from \"@/hooks/use-workspace\";\nimport { ConfirmationPopover } from \"../utility/confirmation-popover\";\nimport { ScreenContext, useScreenContext } from \"./context\";\nimport OrganizationSwitcher from \"./organization-switcher\";\n\nconst TypographyProvider = styled.div`\n * {\n box-sizing: border-box;\n font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n }\n`;\n\nconst Container = styled.div`\n width: 100%;\n height: 600px;\n background: var(--color-background);\n border-radius: 20px;\n box-shadow: 0 8px 30px var(--color-shadow);\n transition: all 0.3s ease;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding-bottom: 24px;\n position: relative;\n\n @media (max-width: 768px) {\n border-radius: 16px;\n padding-bottom: 20px;\n }\n\n /* Blur effect at the bottom */\n &::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 40px;\n background: linear-gradient(\n to bottom,\n transparent 0%,\n var(--color-background) 70%\n );\n pointer-events: none;\n z-index: 1;\n }\n`;\n\nconst TabsContainer = styled.div`\n padding: 0 24px;\n border-bottom: 1px solid var(--color-border);\n\n @media (max-width: 768px) {\n padding: 0 20px;\n }\n`;\n\nconst TabsList = styled.div`\n display: flex;\n gap: 20px;\n overflow-x: auto;\n overflow-y: hidden;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst Tab = styled.button<{ $isActive: boolean }>`\n padding: 12px 12px;\n border: none;\n background: none;\n font-size: 14px;\n font-weight: 500;\n color: ${(props) =>\n props.$isActive ? \"var(--color-foreground)\" : \"var(--color-muted)\"};\n cursor: pointer;\n position: relative;\n transition: color 0.15s ease;\n white-space: nowrap;\n min-width: fit-content;\n\n &:hover {\n color: var(--color-foreground);\n }\n\n &::after {\n content: \"\";\n position: absolute;\n bottom: -1px;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--color-primary);\n opacity: ${(props) => (props.$isActive ? 1 : 0)};\n transition: opacity 0.15s ease;\n }\n`;\n\nconst TabIcon = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n`;\n\nconst TabContent = styled.div`\n flex: 1;\n padding: 24px 24px 0 24px;\n overflow-y: auto;\n position: relative;\n\n @media (max-width: 768px) {\n padding: 20px 20px 0 20px;\n }\n`;\n\nconst HeaderCTAContainer = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n margin-bottom: 24px;\n`;\n\nconst GeneralSettingsSection = () => {\n const { activeOrganization: selectedOrganization, loading } =\n useActiveOrganization();\n const { switchOrganization, refetch } = useSession();\n const { workspaces: workspaceList } = useWorkspaceList();\n const { deployment } = useDeployment();\n const { deleteOrganization: deleteOrgFromList, updateOrganization } =\n useOrganizationList();\n const { toast } = useScreenContext();\n const [name, setName] = useState(selectedOrganization?.name || \"\");\n const [description, setDescription] = useState(\n selectedOrganization?.description || \"\",\n );\n\n const [previewUrl, setPreviewUrl] = useState<string | null>(\n selectedOrganization?.image_url || null,\n );\n\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n\n const [isSaving, setIsSaving] = useState(false);\n const [security, setSecurity] = useState({\n mfa_required: false,\n ip_restrictions: false,\n allowed_ips: \"\",\n default_workspace_id: \"\",\n });\n const [confirmName, setConfirmName] = useState(\"\");\n const [isDeleting, setIsDeleting] = useState(false);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n\n const autoSave = React.useCallback(async () => {\n if (!selectedOrganization || isSaving) return;\n\n try {\n setIsSaving(true);\n await updateOrganization(selectedOrganization, {\n name,\n description,\n });\n toast(\"Changes saved\", \"info\");\n } catch (error: any) {\n const errorMessage =\n error.message || \"Failed to save changes. Please try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setIsSaving(false);\n }\n }, [\n selectedOrganization,\n name,\n description,\n previewUrl,\n security,\n updateOrganization,\n toast,\n ]);\n\n React.useEffect(() => {\n if (selectedOrganization) {\n setName(selectedOrganization.name || \"\");\n setDescription(selectedOrganization.description || \"\");\n setPreviewUrl(selectedOrganization.image_url || null);\n setSecurity({\n allowed_ips: selectedOrganization.whitelisted_ips?.join(\"\\n\") || \"\",\n ip_restrictions: selectedOrganization.enable_ip_restriction || false,\n mfa_required: selectedOrganization.enforce_mfa || false,\n default_workspace_id:\n selectedOrganization.auto_assigned_workspace_id || \"\",\n });\n }\n }, [selectedOrganization]);\n\n const workspaces = useMemo(() => {\n const currentOrgWorkspaces = workspaceList.filter(\n (workspace) => workspace.organization.id === selectedOrganization?.id,\n );\n return currentOrgWorkspaces;\n }, [workspaceList, selectedOrganization?.id]);\n\n const handleDeleteOrganization = async () => {\n if (!selectedOrganization || confirmName !== selectedOrganization.name)\n return;\n\n try {\n setIsDeleting(true);\n await switchOrganization(\"\");\n await deleteOrgFromList(selectedOrganization);\n await refetch();\n toast(\"Organization deleted successfully\", \"info\");\n } catch (error) {\n toast(\"Failed to delete organization\", \"error\");\n } finally {\n setIsDeleting(false);\n setConfirmName(\"\");\n }\n };\n\n useEffect(() => {\n return () => {\n if (previewUrl) {\n URL.revokeObjectURL(previewUrl);\n }\n };\n }, [previewUrl]);\n\n if (loading) {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"40px 0\",\n }}\n >\n <Spinner />\n </div>\n );\n }\n\n const handleImageChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files?.[0]) {\n const file = event.target.files[0];\n\n // Validate file size\n if (file.size > 2 * 1024 * 1024) {\n toast(\"File size cannot exceed 2MB\", \"error\");\n return;\n }\n\n // Validate file type\n if (!file.type.startsWith(\"image/\")) {\n toast(\"Please select a valid image file\", \"error\");\n return;\n }\n\n // Revoke previous object URL to prevent memory leaks\n if (previewUrl) {\n URL.revokeObjectURL(previewUrl);\n }\n\n setPreviewUrl(URL.createObjectURL(file));\n // Auto-save image immediately after selection\n setTimeout(() => autoSave(), 100);\n }\n };\n\n const triggerFileInput = () => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n\n return (\n <>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"var(--space-2xl)\",\n }}\n >\n {/* Logo Section - Two Column Layout */}\n <div\n style={{\n display: \"flex\",\n gap: \"var(--space-2xl)\",\n alignItems: \"center\",\n }}\n >\n {/* Left Column - Logo Preview */}\n <div style={{ flexShrink: 0 }}>\n <div\n style={{\n width: \"120px\",\n height: \"120px\",\n borderRadius: \"50%\",\n border: \"2px dashed var(--color-border)\",\n background: previewUrl\n ? \"transparent\"\n : \"var(--color-input-background)\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n transition: \"all 0.2s ease\",\n }}\n onClick={triggerFileInput}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = \"var(--color-primary)\";\n e.currentTarget.style.transform = \"scale(1.02)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = \"var(--color-border)\";\n e.currentTarget.style.transform = \"scale(1)\";\n }}\n >\n {previewUrl ? (\n <img\n src={previewUrl}\n alt=\"Organization Logo\"\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n borderRadius: \"50%\",\n }}\n />\n ) : (\n <Building size={32} color=\"var(--color-muted)\" />\n )}\n <input\n type=\"file\"\n ref={fileInputRef}\n style={{ display: \"none\" }}\n accept=\"image/*\"\n onChange={handleImageChange}\n aria-label=\"Upload organization logo\"\n />\n </div>\n </div>\n\n {/* Right Column - Content and Controls */}\n <div style={{ flex: 1 }}>\n <div style={{ marginBottom: \"var(--space-lg)\" }}>\n <h3\n style={{\n fontSize: \"var(--font-sm)\",\n color: \"var(--color-foreground)\",\n margin: \"0 0 var(--space-2xs) 0\",\n }}\n >\n Organization Logo\n </h3>\n <p\n style={{\n fontSize: \"var(--font-xs)\",\n color: \"var(--color-secondary-text)\",\n margin: 0,\n }}\n >\n Upload an image to represent your organization\n </p>\n </div>\n\n <div\n style={{\n display: \"flex\",\n gap: \"var(--space-sm)\",\n marginBottom: \"var(--space-sm)\",\n }}\n >\n <Button\n onClick={() => fileInputRef.current?.click()}\n style={{\n padding: \"var(--space-xs) var(--space-md)\",\n fontSize: \"var(--font-xs)\",\n height: \"32px\",\n width: \"100px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n }}\n >\n <Building size={14} />\n {previewUrl ? \"Change\" : \"Upload\"}\n </Button>\n <Button\n onClick={() => {\n setPreviewUrl(null);\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n }}\n style={{\n background: \"transparent\",\n color: \"var(--color-muted)\",\n border: \"1px solid var(--color-border)\",\n padding: \"var(--space-xs) var(--space-md)\",\n fontSize: \"var(--font-xs)\",\n height: \"32px\",\n width: \"100px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n }}\n >\n <Trash size={14} />\n Remove\n </Button>\n </div>\n\n {/* <p style={{\n fontSize: \"var(--font-2xs)\",\n color: \"var(--color-muted)\",\n margin: 0,\n lineHeight: 1.4,\n }}>\n Recommended: Square image, at least 200x200px. Supported formats: JPG, PNG, GIF • Max 2MB\n </p> */}\n </div>\n </div>\n\n {/* Divider */}\n <div\n style={{\n position: \"relative\",\n height: \"1px\",\n background: \"var(--color-divider)\",\n margin: \"0\",\n }}\n />\n\n {/* Organization Details */}\n <div>\n <div style={{ marginBottom: \"var(--space-md)\" }}>\n <h3\n style={{\n fontSize: \"var(--font-sm)\",\n color: \"var(--color-foreground)\",\n margin: \"0 0 var(--space-2xs) 0\",\n }}\n >\n Organization Details\n </h3>\n <p\n style={{\n fontSize: \"var(--font-xs)\",\n color: \"var(--color-secondary-text)\",\n margin: 0,\n }}\n >\n Basic information about your organization\n </p>\n </div>\n\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"var(--space-lg)\",\n }}\n >\n <FormGroup>\n <Label htmlFor=\"name\">Organization Name</Label>\n <Input\n id=\"name\"\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n onBlur={autoSave}\n placeholder=\"Enter organization name\"\n required\n />\n </FormGroup>\n\n <FormGroup>\n <Label htmlFor=\"description\">Description</Label>\n <Input\n id=\"description\"\n as=\"textarea\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onBlur={autoSave}\n placeholder=\"Enter organization description\"\n style={{\n minHeight: \"80px\",\n resize: \"vertical\",\n fontFamily: \"inherit\",\n }}\n />\n <p\n style={{\n fontSize: \"var(--font-2xs)\",\n color: \"var(--color-muted)\",\n margin: \"var(--space-2xs) 0 0 0\",\n }}\n >\n Brief description of your organization\n </p>\n </FormGroup>\n\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <div>\n <Label\n style={{\n fontSize: \"var(--font-xs)\",\n color: \"var(--color-foreground)\",\n display: \"block\",\n marginBottom: \"var(--space-2xs)\",\n }}\n >\n Multi-Factor Authentication\n </Label>\n <div\n style={{\n fontSize: \"var(--font-2xs)\",\n color: \"var(--color-muted)\",\n }}\n id=\"mfa-description\"\n >\n Require all members to set up MFA for added security\n </div>\n </div>\n <Switch\n checked={security.mfa_required}\n onChange={() => {\n setSecurity((prev) => ({\n ...prev,\n mfa_required: !prev.mfa_required,\n }));\n setTimeout(() => autoSave(), 100);\n }}\n />\n </div>\n\n {deployment?.b2b_settings?.ip_allowlist_per_org_enabled && (\n <>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <div>\n <Label\n style={{\n fontSize: \"var(--font-xs)\",\n color: \"var(--color-foreground)\",\n display: \"block\",\n marginBottom: \"var(--space-2xs)\",\n }}\n >\n IP Restrictions\n </Label>\n <div\n style={{\n fontSize: \"var(--font-2xs)\",\n color: \"var(--color-muted)\",\n }}\n id=\"ip-restrictions-description\"\n >\n Only allow access from specific IP addresses\n </div>\n </div>\n <Switch\n checked={security.ip_restrictions}\n onChange={() => {\n setSecurity((prev) => ({\n ...prev,\n ip_restrictions: !prev.ip_restrictions,\n }));\n setTimeout(() => autoSave(), 100);\n }}\n aria-label=\"Enable IP address restrictions\"\n aria-describedby=\"ip-restrictions-description\"\n />\n </div>\n\n {security.ip_restrictions && (\n <FormGroup>\n <Label htmlFor=\"allowed_ips\">Allowed IP Addresses</Label>\n <Input\n id=\"allowed_ips\"\n as=\"textarea\"\n value={security.allowed_ips}\n onChange={(e) =>\n setSecurity((prev) => ({\n ...prev,\n allowed_ips: e.target.value,\n }))\n }\n onBlur={autoSave}\n placeholder=\"192.168.1.1&#10;10.0.0.0/24\"\n style={{\n minHeight: \"80px\",\n resize: \"vertical\",\n fontFamily: \"monospace\",\n }}\n />\n <p\n style={{\n fontSize: \"var(--font-2xs)\",\n color: \"var(--color-muted)\",\n margin: \"var(--space-2xs) 0 0 0\",\n }}\n >\n Enter one IP address or CIDR block per line\n </p>\n </FormGroup>\n )}\n </>\n )}\n\n {deployment?.b2b_settings?.workspaces_enabled &&\n workspaces.length > 0 && (\n <FormGroup>\n <Label htmlFor=\"default_workspace\">Default Workspace</Label>\n <ComboBox\n options={workspaces.map((workspace) => ({\n value: workspace.id,\n label: workspace.name,\n }))}\n value={security.default_workspace_id}\n onChange={(value) => {\n setSecurity((prev) => ({\n ...prev,\n default_workspace_id: value,\n }));\n setTimeout(() => autoSave(), 100);\n }}\n placeholder=\"Select default workspace\"\n />\n <p\n style={{\n fontSize: \"var(--font-2xs)\",\n color: \"var(--color-muted)\",\n margin: \"var(--space-2xs) 0 0 0\",\n }}\n >\n Workspace that new members will be added to automatically\n </p>\n </FormGroup>\n )}\n </div>\n </div>\n\n {/* Delete Section */}\n {deployment?.b2b_settings?.allow_org_deletion && (\n <>\n <div\n style={{\n position: \"relative\",\n height: \"1px\",\n background: \"var(--color-divider)\",\n margin: \"0\",\n }}\n />\n\n <div>\n <div style={{ marginBottom: \"16px\" }}>\n <h3\n style={{\n fontSize: \"16px\",\n color: \"var(--color-foreground)\",\n margin: \"0 0 4px 0\",\n }}\n >\n Danger Zone\n </h3>\n <p\n style={{\n fontSize: \"14px\",\n color: \"var(--color-muted)\",\n margin: 0,\n }}\n >\n Irreversible and destructive actions\n </p>\n </div>\n\n <div\n style={{\n padding: \"20px\",\n border: \"1px solid var(--color-error)\",\n borderRadius: \"8px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: showDeleteConfirm ? \"20px\" : \"0\",\n }}\n >\n <div>\n <div\n style={{\n fontSize: \"14px\",\n color: \"var(--color-foreground)\",\n marginBottom: \"4px\",\n fontWeight: \"500\",\n }}\n >\n Delete Organization\n </div>\n <div\n style={{\n fontSize: \"13px\",\n color: \"var(--color-muted)\",\n }}\n >\n Once you delete this organization, there is no going back.\n Please be certain.\n </div>\n </div>\n <Button\n onClick={() => {\n if (!showDeleteConfirm) {\n setShowDeleteConfirm(true);\n } else {\n setShowDeleteConfirm(false);\n setConfirmName(\"\");\n }\n }}\n style={{\n background: \"var(--color-error)\",\n color: \"white\",\n border: \"none\",\n padding: \"6px 12px\",\n fontSize: \"13px\",\n height: \"32px\",\n width: \"auto\",\n }}\n >\n {showDeleteConfirm ? \"Cancel\" : \"Delete\"}\n </Button>\n </div>\n\n {showDeleteConfirm && (\n <div>\n <FormGroup>\n <Label htmlFor=\"confirm_name\">\n Confirm by typing the organization name\n </Label>\n <Input\n id=\"confirm_name\"\n type=\"text\"\n value={confirmName}\n onChange={(e) => setConfirmName(e.target.value)}\n placeholder={`Type \"${selectedOrganization?.name}\" to confirm`}\n />\n </FormGroup>\n <Button\n onClick={handleDeleteOrganization}\n disabled={\n confirmName !== selectedOrganization?.name || isDeleting\n }\n style={{\n background:\n confirmName === selectedOrganization?.name\n ? \"var(--color-error)\"\n : \"transparent\",\n color:\n confirmName === selectedOrganization?.name\n ? \"white\"\n : \"var(--color-muted)\",\n border: \"1px solid var(--color-border)\",\n padding: \"8px 16px\",\n fontSize: \"14px\",\n height: \"36px\",\n cursor:\n confirmName === selectedOrganization?.name\n ? \"pointer\"\n : \"not-allowed\",\n opacity:\n confirmName === selectedOrganization?.name ? 1 : 0.6,\n marginTop: \"12px\",\n }}\n >\n {isDeleting ? <Spinner size={12} /> : \"Delete Forever\"}\n </Button>\n </div>\n )}\n </div>\n </div>\n </>\n )}\n </div>\n </>\n );\n};\n\nconst Badge = styled.span`\n background: var(--color-primary-background);\n color: var(--color-primary);\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 400;\n display: flex;\n align-items: center;\n max-width: max-content;\n gap: 4px;\n border: 1px solid var(--color-border);\n white-space: nowrap;\n`;\n\nconst IconButton = styled.button`\n background: none;\n border: 1px solid var(--color-border);\n padding: 6px;\n cursor: pointer;\n color: var(--color-muted);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n font-size: 14px;\n min-width: 32px;\n height: 32px;\n\n &:hover {\n background: var(--color-input-background);\n color: var(--color-foreground);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst DomainsSection = () => {\n const {\n activeOrganization,\n loading,\n getDomains: getOrganizationDomains,\n removeDomain,\n } = useActiveOrganization();\n const tableRef = useRef<HTMLTableElement | null>(null);\n const [domainForDeletion, setDomainForDeletion] = useState<string | null>(\n null,\n );\n const {\n data: domainsFromAPI = [],\n isLoading,\n mutate,\n } = useSWR(\n activeOrganization?.id ? `/domains/${activeOrganization.id}` : null,\n async () => {\n const realDomains = (await getOrganizationDomains?.()) || [];\n return realDomains.map((domain, index) => ({\n ...domain,\n verified:\n domain.verified !== undefined ? domain.verified : index % 2 === 0,\n }));\n },\n {\n refreshInterval: 30000,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n dedupingInterval: 5000,\n },\n );\n const domains = domainsFromAPI as Array<\n OrganizationDomain & { verified: boolean }\n >;\n\n const [isAddingDomain, setIsAddingDomain] = useState(false);\n const [domainInVerification, setDomainInVerification] = useState<\n string | null\n >(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [selectedDomainInAction, setSelectedDomainAction] = useState<\n string | null\n >(null);\n const addDomainButtonRef = useRef<HTMLButtonElement>(null);\n\n const filteredDomains = React.useMemo(() => {\n let tempDomains = domains;\n if (searchQuery.trim() !== \"\") {\n const lowercasedQuery = searchQuery.toLowerCase();\n tempDomains = tempDomains.filter((domain) =>\n domain.fqdn.toLowerCase().includes(lowercasedQuery),\n );\n }\n return tempDomains;\n }, [domains, searchQuery]);\n\n const handleDeleteDomain = async (domain: OrganizationDomain) => {\n await removeDomain(domain);\n mutate();\n };\n\n const handleVerifyDomain = async (domainId: string) => {\n setDomainInVerification(domainId);\n };\n\n if (loading || isLoading) {\n return (\n <div\n style={{ display: \"flex\", justifyContent: \"center\", padding: \"40px 0\" }}\n >\n <Spinner />\n </div>\n );\n }\n\n return (\n <>\n <HeaderCTAContainer>\n <SearchInput\n value={searchQuery}\n onChange={setSearchQuery}\n placeholder=\"Search Domain\"\n />\n <div>\n <Button\n ref={addDomainButtonRef}\n onClick={() => setIsAddingDomain(!isAddingDomain)}\n style={{\n padding: \"8px 16px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n fontWeight: 500,\n height: \"36px\",\n }}\n >\n New Domain\n </Button>\n {isAddingDomain && (\n <AddDomainPopover\n onClose={() => {\n setIsAddingDomain(false);\n mutate();\n }}\n triggerRef={addDomainButtonRef}\n />\n )}\n </div>\n </HeaderCTAContainer>\n\n {!filteredDomains?.length ? (\n <EmptyState\n title={\n searchQuery !== \"all\"\n ? \"No domains match your criteria\"\n : \"No domains added\"\n }\n description=\"Add a domain to get started\"\n />\n ) : (\n <Table ref={tableRef}>\n <TableHead>\n <TableRow>\n <TableHeader>Domain</TableHeader>\n <TableHeader>Status</TableHeader>\n <TableHeader>Date Added</TableHeader>\n <TableHeader></TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredDomains.map((domain) => (\n <TableRow key={domain.id}>\n <TableCell>{domain.fqdn}</TableCell>\n <TableCell>\n {domain.verified ? (\n <Badge\n style={{\n background: \"var(--color-primary-background)\",\n color: \"var(--color-primary)\",\n }}\n >\n ✓ Verified\n </Badge>\n ) : (\n <Badge\n style={{\n background: \"var(--color-warning-background)\",\n color: \"var(--color-warning)\",\n border: \"1px solid var(--color-warning-border)\",\n }}\n >\n <AlertTriangle size={9} /> Pending Verification\n </Badge>\n )}\n </TableCell>\n <TableCell>\n {new Date(domain.created_at).toLocaleDateString()}\n </TableCell>\n <ActionsCell>\n <div style={{ position: \"relative\" }}>\n <Dropdown\n style={{ marginLeft: \"auto\" }}\n open={selectedDomainInAction === domain.id}\n openChange={(v) =>\n setSelectedDomainAction(v ? domain.id : null)\n }\n >\n <DropdownTrigger>\n <IconButton>•••</IconButton>\n </DropdownTrigger>\n\n <DropdownItems>\n {!domain.verified && (\n <DropdownItem\n onClick={() => {\n handleVerifyDomain(domain.id);\n setSelectedDomainAction(null);\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n ✓ Verify Domain\n </div>\n </DropdownItem>\n )}\n <DropdownItem\n onClick={() => {\n setSelectedDomainAction(null);\n navigator.clipboard.writeText(domain.fqdn);\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <Copy size={16} color=\"var(--color-muted)\" /> Copy\n Domain\n </div>\n </DropdownItem>\n <DropdownItem\n onClick={() => {\n window.open(`https://${domain.fqdn}`, \"_blank\");\n setSelectedDomainAction(null);\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <ExternalLink\n size={16}\n color=\"var(--color-muted)\"\n />{\" \"}\n Visit Domain\n </div>\n </DropdownItem>\n <DropdownDivider />\n <DropdownItem\n $destructive\n onClick={() => {\n setSelectedDomainAction(null);\n setDomainForDeletion(domain.id);\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <Trash size={16} color=\"var(--color-error)\" />{\" \"}\n Remove Domain\n </div>\n </DropdownItem>\n </DropdownItems>\n </Dropdown>\n {domainForDeletion === domain.id && (\n <ConfirmationPopover\n title=\"Are you sure you want to delete this domain?\"\n onConfirm={() => handleDeleteDomain(domain)}\n onCancel={() => setDomainForDeletion(null)}\n />\n )}\n {domainInVerification === domain.id && (\n <AddDomainPopover\n domain={domain}\n onClose={() => setDomainInVerification(null)}\n />\n )}\n </div>\n </ActionsCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </>\n );\n};\n\nconst AvatarPlaceholder = styled.div`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: var(--color-input-background);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-muted);\n font-weight: 500;\n font-size: 14px;\n overflow: hidden;\n`;\n\nconst MembersSection = () => {\n const {\n activeOrganization,\n loading,\n getMembers,\n getRoles,\n addMemberRole,\n removeMemberRole,\n removeMember,\n } = useActiveOrganization();\n const { session } = useSession();\n const { toast } = useScreenContext();\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isInviting, setIsInviting] = useState(false);\n const inviteMemberButtonRef = useRef<HTMLButtonElement>(null);\n\n const {\n data: members = [],\n isLoading: membersLoading,\n mutate: reloadMembers,\n } = useSWR(\n activeOrganization\n ? `/api/organizations/${activeOrganization.id}/members`\n : null,\n () => getMembers?.() || [],\n );\n\n const { data: rolesData = [], isLoading: rolesLoading } = useSWR(\n activeOrganization\n ? `/api/organizations/${activeOrganization.id}/roles`\n : null,\n () => getRoles?.() || [],\n );\n const roles = rolesData as OrganizationRole[];\n\n const filteredMembers = React.useMemo(() => {\n if (!searchQuery) return members;\n return members.filter((member: OrganizationMembership) => {\n const userData = member.user;\n if (!userData) return false;\n const firstName = userData.first_name || \"\";\n const lastName = userData.last_name || \"\";\n const email = userData.primary_email_address?.email || \"\";\n const fullName = `${firstName} ${lastName}`.trim();\n return (\n fullName.toLowerCase().includes(searchQuery.toLowerCase()) ||\n email.toLowerCase().includes(searchQuery.toLowerCase())\n );\n });\n }, [members, searchQuery]);\n\n const toggleRole = async (\n member: OrganizationMembership,\n role: OrganizationRole,\n hasRole: boolean,\n ) => {\n try {\n if (hasRole) {\n await removeMemberRole(member, role);\n toast(\"Role removed successfully\", \"info\");\n } else {\n await addMemberRole(member, role);\n toast(\"Role added successfully\", \"info\");\n }\n reloadMembers();\n } catch (error: any) {\n const errorMessage =\n error.message || \"Failed to update role. Please try again.\";\n toast(errorMessage, \"error\");\n }\n };\n\n const getInitials = (firstName = \"\", lastName = \"\") =>\n `${firstName[0] || \"\"}${lastName[0] || \"\"}`.toUpperCase();\n const memberHasRole = (member: OrganizationMembership, roleId: string) =>\n member.roles?.some((r: OrganizationRole) => r.id === roleId) || false;\n\n const handleInvitationSuccess = () => {\n setIsInviting(false);\n reloadMembers();\n toast(\"Invitation sent successfully\", \"info\");\n };\n\n if (loading || membersLoading || rolesLoading)\n return (\n <div\n style={{ display: \"flex\", justifyContent: \"center\", padding: \"40px 0\" }}\n >\n <Spinner />\n </div>\n );\n\n return (\n <>\n <div\n style={{\n marginBottom: \"24px\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: \"16px\",\n }}\n >\n <div style={{ flex: 1 }}>\n <SearchInput\n value={searchQuery}\n onChange={setSearchQuery}\n placeholder=\"Search members...\"\n />\n </div>\n <Button\n ref={inviteMemberButtonRef}\n onClick={() => setIsInviting(!isInviting)}\n style={{\n background: \"var(--color-primary)\",\n color: \"white\",\n border: \"none\",\n padding: \"8px 16px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n height: \"36px\",\n width: \"auto\",\n }}\n >\n Invite Members\n </Button>\n </div>\n\n {isInviting && (\n <InviteMemberPopover\n onClose={() => setIsInviting(false)}\n onSuccess={handleInvitationSuccess}\n roles={roles}\n triggerRef={inviteMemberButtonRef}\n />\n )}\n\n {filteredMembers.length === 0 ? (\n <EmptyState\n title={\n searchQuery ? \"No members match your search\" : \"No members yet\"\n }\n description=\"Invite members to your organization to get started.\"\n />\n ) : (\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Member</TableHeader>\n <TableHeader>Joined</TableHeader>\n <TableHeader>Roles</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredMembers.map((member) => {\n const memberRoles = member.roles || [];\n const userData = member.user;\n const isCurrentUser =\n userData?.id === session?.active_signin?.user_id;\n\n return (\n <TableRow key={member.id}>\n <TableCellFlex>\n <div>\n <AvatarPlaceholder>\n {userData?.profile_picture_url ? (\n <img\n src={userData.profile_picture_url}\n alt={`${userData.first_name || \"\"} ${\n userData.last_name || \"\"\n }`}\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n }}\n />\n ) : (\n getInitials(\n userData?.first_name,\n userData?.last_name,\n ) || \"?\"\n )}\n </AvatarPlaceholder>\n <div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <span\n style={{\n fontSize: \"14px\",\n fontWeight: 500,\n color: \"var(--color-foreground)\",\n }}\n >\n {(() => {\n if (!userData) return \"Unknown User\";\n\n const fullName =\n `${userData.first_name || \"\"} ${userData.last_name || \"\"}`.trim();\n if (fullName) return fullName;\n\n return (\n userData.primary_email_address?.email ||\n \"Unknown User\"\n );\n })()}\n </span>\n {isCurrentUser && (\n <span\n style={{\n fontSize: \"12px\",\n padding: \"2px 8px\",\n background: \"var(--color-background-alt)\",\n borderRadius: \"4px\",\n color: \"var(--color-secondary-text)\",\n }}\n >\n You\n </span>\n )}\n </div>\n <div\n style={{\n fontSize: \"13px\",\n color: \"var(--color-secondary-text)\",\n }}\n >\n {userData?.primary_email_address?.email}\n </div>\n </div>\n </div>\n </TableCellFlex>\n <TableCell>\n {new Date(member.created_at).toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n })}\n </TableCell>\n <ActionsCell>\n <div style={{ position: \"relative\" }}>\n <Dropdown>\n <DropdownTrigger>\n <Button\n style={{\n background: \"var(--color-background)\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"6px\",\n padding: \"6px 12px\",\n fontSize: \"14px\",\n color: \"var(--color-foreground)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n minWidth: \"120px\",\n justifyContent: \"space-between\",\n }}\n >\n <span>\n {memberRoles.length > 0\n ? memberRoles[0].name\n : \"No role\"}\n </span>\n <ChevronDown size={14} />\n </Button>\n </DropdownTrigger>\n <DropdownItems>\n {roles.map((role) => {\n const hasRole = memberHasRole(member, role.id);\n return (\n <DropdownItem\n key={role.id}\n onClick={() =>\n toggleRole(member, role, hasRole)\n }\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n }}\n >\n <span>{role.name}</span>\n {hasRole && (\n <Check\n size={16}\n color=\"var(--color-success)\"\n />\n )}\n </div>\n </DropdownItem>\n );\n })}\n <DropdownDivider />\n <DropdownItem\n $destructive\n onClick={() => removeMember(member)}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <Trash size={16} color=\"var(--color-error)\" />\n <span>Remove Member</span>\n </div>\n </DropdownItem>\n </DropdownItems>\n </Dropdown>\n </div>\n </ActionsCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n )}\n </>\n );\n};\n\nconst InvitationsSection = () => {\n const {\n activeOrganization,\n loading,\n getInvitations,\n getRoles,\n discardInvitation,\n resendInvitation,\n } = useActiveOrganization();\n const { toast } = useScreenContext();\n const [isInviting, setIsInviting] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const inviteMemberButtonRef = useRef<HTMLButtonElement>(null);\n\n const {\n data: invitations = [],\n isLoading: invitationsLoading,\n mutate: reloadInvitations,\n } = useSWR(\n activeOrganization\n ? `/api/organizations/${activeOrganization.id}/invitations`\n : null,\n () => getInvitations?.() || [],\n );\n\n const { data: rolesData = [], isLoading: rolesLoading } = useSWR(\n activeOrganization\n ? `/api/organizations/${activeOrganization.id}/roles`\n : null,\n () => getRoles?.() || [],\n );\n const roles = rolesData as OrganizationRole[];\n\n const filteredInvitations = React.useMemo(() => {\n if (!searchQuery) return invitations;\n return invitations.filter((invitation: OrganizationInvitation) =>\n invitation.email.toLowerCase().includes(searchQuery.toLowerCase()),\n );\n }, [invitations, searchQuery]);\n\n const handleInvitationSuccess = () => {\n toast(\"Invitation sent successfully\", \"info\");\n reloadInvitations();\n setIsInviting(false);\n };\n\n const handleCancelInvitation = async (invitation: OrganizationInvitation) => {\n try {\n await discardInvitation(invitation);\n reloadInvitations();\n toast(\"Invitation cancelled successfully\", \"info\");\n } catch (error: any) {\n const errorMessage =\n error.message || \"Failed to cancel invitation. Please try again.\";\n toast(errorMessage, \"error\");\n }\n };\n\n const handleResendInvitation = async (invitation: OrganizationInvitation) => {\n try {\n await resendInvitation(invitation);\n toast(\"Invitation resent successfully\", \"info\");\n } catch (error: any) {\n const errorMessage =\n error.message || \"Failed to resend invitation. Please try again.\";\n toast(errorMessage, \"error\");\n }\n };\n\n if (loading || invitationsLoading || rolesLoading)\n return (\n <div\n style={{ display: \"flex\", justifyContent: \"center\", padding: \"40px 0\" }}\n >\n <Spinner />\n </div>\n );\n\n return (\n <>\n <div\n style={{\n marginBottom: \"24px\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: \"16px\",\n }}\n >\n <div style={{ flex: 1 }}>\n <SearchInput\n value={searchQuery}\n onChange={setSearchQuery}\n placeholder=\"Search invitations...\"\n />\n </div>\n <Button\n ref={inviteMemberButtonRef}\n onClick={() => setIsInviting(!isInviting)}\n style={{\n background: \"var(--color-primary)\",\n color: \"white\",\n border: \"none\",\n padding: \"8px 16px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n height: \"36px\",\n width: \"auto\",\n }}\n >\n Invite Members\n </Button>\n </div>\n\n {isInviting && (\n <InviteMemberPopover\n onClose={() => setIsInviting(false)}\n onSuccess={handleInvitationSuccess}\n roles={roles}\n triggerRef={inviteMemberButtonRef}\n />\n )}\n\n {filteredInvitations.length === 0 ? (\n <EmptyState\n title={\n searchQuery\n ? \"No invitations match your search\"\n : \"No pending invitations\"\n }\n description=\"Invite new members to your organization.\"\n />\n ) : (\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Email</TableHeader>\n <TableHeader>Role</TableHeader>\n <TableHeader>Invited</TableHeader>\n <TableHeader></TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredInvitations.map((invitation) => (\n <TableRow key={invitation.id}>\n <TableCell>{invitation.email}</TableCell>\n <TableCell>\n {invitation.initial_organization_role?.name || \"No role\"}\n </TableCell>\n <TableCell>\n {new Date(invitation.created_at).toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n })}\n </TableCell>\n <ActionsCell>\n <div style={{ position: \"relative\" }}>\n <Dropdown>\n <DropdownTrigger>\n <IconButton>•••</IconButton>\n </DropdownTrigger>\n <DropdownItems>\n <DropdownItem\n onClick={() => handleResendInvitation(invitation)}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <Mail size={16} color=\"var(--color-muted)\" />\n <span>Resend Invitation</span>\n </div>\n </DropdownItem>\n <DropdownItem\n $destructive\n onClick={() => handleCancelInvitation(invitation)}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <Trash size={16} color=\"var(--color-error)\" />\n <span>Cancel Invitation</span>\n </div>\n </DropdownItem>\n </DropdownItems>\n </Dropdown>\n </div>\n </ActionsCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </>\n );\n};\n\nconst RolesSection = () => {\n const { activeOrganization, loading, getRoles, removeRole } =\n useActiveOrganization();\n\n const [rolePopover, setRolePopover] = useState<{\n isOpen: boolean;\n role?: OrganizationRole;\n }>({ isOpen: false });\n const [message, setMessage] = useState<{\n text: string;\n type: \"success\" | \"error\";\n } | null>(null);\n const [roleForOptionPopover, setRoleForOptionPopover] = useState<\n string | null\n >(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [roleForDeletion, setRoleForDeletion] = useState<string | null>(null);\n const addRoleButtonRef = useRef<HTMLButtonElement>(null);\n\n const {\n data: roles = [],\n isLoading: rolesLoading,\n mutate: reloadRoles,\n } = useSWR(\n activeOrganization\n ? `/api/organizations/${activeOrganization.id}/roles`\n : null,\n () => getRoles?.() || [],\n );\n\n const filteredRoles = React.useMemo(() => {\n if (!searchQuery) return roles;\n return roles.filter((role) =>\n role.name.toLowerCase().includes(searchQuery.toLowerCase()),\n );\n }, [roles, searchQuery]);\n\n const handleRoleSaved = async (role: {\n id?: string;\n name: string;\n description?: string;\n }) => {\n try {\n if (role.id) {\n await new Promise((resolve) => setTimeout(resolve, 1000));\n setMessage({\n text: \"Role updated successfully\",\n type: \"success\",\n });\n } else {\n // Creating new role\n await new Promise((resolve) => setTimeout(resolve, 1000));\n setMessage({\n text: \"Role created successfully\",\n type: \"success\",\n });\n }\n\n setRolePopover({ isOpen: false });\n reloadRoles();\n } catch (error) {\n // Handle error based on whether we were editing or creating\n const errorMessage =\n (error as any)?.message ||\n (role.id\n ? \"Failed to update role. Please try again.\"\n : \"Failed to create role. Please try again.\");\n if (role.id) {\n setMessage({\n text: errorMessage,\n type: \"error\",\n });\n } else {\n setMessage({\n text: errorMessage,\n type: \"error\",\n });\n }\n } finally {\n setTimeout(() => setMessage(null), 3000);\n }\n };\n\n const handleDeleteRole = async (role: OrganizationRole) => {\n try {\n await removeRole(role);\n reloadRoles();\n } catch (error) {\n } finally {\n setTimeout(() => setMessage(null), 3000);\n }\n };\n\n if (loading || rolesLoading) {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"40px 0\",\n }}\n >\n <Spinner />\n </div>\n );\n }\n\n return (\n <>\n {message && (\n <div\n style={{\n marginBottom: \"20px\",\n padding: \"8px\",\n background:\n message.type === \"success\"\n ? \"var(--color-success-background)\"\n : \"var(--color-error-background)\",\n color:\n message.type === \"success\"\n ? \"var(--color-success)\"\n : \"var(--color-error)\",\n borderRadius: \"8px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n {message.type === \"success\" ? \"✓\" : <AlertTriangle size={16} />}\n {message.text}\n </div>\n )}\n\n <HeaderCTAContainer>\n <SearchInput\n placeholder=\"Search roles\"\n onChange={setSearchQuery}\n value={searchQuery}\n />\n\n <div>\n <Button\n ref={addRoleButtonRef}\n onClick={() => setRolePopover({ isOpen: !rolePopover.isOpen })}\n style={{\n padding: \"8px 16px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n fontWeight: 500,\n height: \"36px\",\n }}\n >\n Add role\n </Button>\n {rolePopover.isOpen && !rolePopover.role && (\n <AddRolePopover\n role={rolePopover.role}\n onClose={() => setRolePopover({ isOpen: false })}\n onSuccess={handleRoleSaved}\n triggerRef={addRoleButtonRef}\n />\n )}\n </div>\n </HeaderCTAContainer>\n\n {filteredRoles.length === 0 ? (\n <EmptyState\n title={\n searchQuery\n ? \"No roles match your search\"\n : \"No roles defined yet. Create your first role to get started.\"\n }\n description=\"Create a role to get started\"\n />\n ) : (\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Role</TableHeader>\n <TableHeader>Permissions</TableHeader>\n <TableHeader></TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredRoles.map((role) => (\n <TableRow key={role.id}>\n <TableCell>\n <div\n style={{\n fontSize: \"14px\",\n fontWeight: 500,\n }}\n >\n {role.name}\n </div>\n </TableCell>\n <TableCell style={{ color: \"var(--color-secondary-text)\" }}>\n {role.permissions.join(\", \")}\n </TableCell>\n <ActionsCell>\n <div\n style={{\n display: \"flex\",\n gap: \"10px\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n position: \"relative\",\n }}\n >\n <Dropdown\n open={roleForOptionPopover === role.id}\n openChange={(open) =>\n setRoleForOptionPopover(open ? role.id : null)\n }\n >\n <DropdownTrigger>\n <IconButton\n disabled={!role.organization_id}\n data-role-dropdown-trigger={role.id}\n >\n •••\n </IconButton>\n </DropdownTrigger>\n\n <DropdownItems>\n <DropdownItem\n onClick={() => {\n setRoleForOptionPopover(null);\n setRolePopover({ isOpen: true, role });\n }}\n >\n Edit Role\n </DropdownItem>\n <DropdownItem\n $destructive\n onClick={() => {\n setRoleForOptionPopover(null);\n setRoleForDeletion(role.id);\n }}\n >\n Remove Role\n </DropdownItem>\n </DropdownItems>\n </Dropdown>\n {roleForDeletion === role.id && (\n <ConfirmationPopover\n title=\"Are you sure you want to delete this role?\"\n onConfirm={() => handleDeleteRole(role)}\n onCancel={() => setRoleForDeletion(null)}\n />\n )}\n {rolePopover.isOpen && rolePopover.role?.id === role.id && (\n <AddRolePopover\n role={rolePopover.role}\n onClose={() => {\n setRolePopover({ isOpen: false });\n setRoleForOptionPopover(null);\n }}\n onSuccess={handleRoleSaved}\n />\n )}\n </div>\n </ActionsCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </>\n );\n};\n\ntype TabType = \"general\" | \"domains\" | \"members\" | \"invitations\" | \"roles\";\n\nexport const ManageOrganization = () => {\n const { loading, activeOrganization } = useActiveOrganization();\n const [activeTab, setActiveTab] = useState<TabType>(\"general\");\n const [toastMessage, setToastMessage] = useState<string | null>(null);\n const [toastLevel, setToastLevel] = useState<\"info\" | \"error\">(\"info\");\n\n const toast = useCallback(\n (message: string, level: \"info\" | \"error\" = \"info\") => {\n setToastMessage(message);\n setToastLevel(level);\n setTimeout(() => setToastMessage(null), 3000);\n },\n [setToastMessage],\n );\n\n if (loading)\n return (\n <Container\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <Spinner />\n </Container>\n );\n\n if (!activeOrganization)\n return (\n <TypographyProvider>\n <Container>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n padding: \"40px 24px\",\n textAlign: \"center\",\n }}\n >\n <div\n style={{\n width: \"80px\",\n height: \"80px\",\n borderRadius: \"50%\",\n background: \"var(--color-input-background)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: \"24px\",\n border: \"2px dashed var(--color-border)\",\n }}\n >\n <Building size={32} color=\"var(--color-muted)\" />\n </div>\n\n <h3\n style={{\n fontSize: \"18px\",\n fontWeight: 600,\n color: \"var(--color-foreground)\",\n margin: \"0 0 8px 0\",\n }}\n >\n No Organization Selected\n </h3>\n\n <OrganizationSwitcher />\n </div>\n </Container>\n </TypographyProvider>\n );\n\n return (\n <TypographyProvider>\n <ScreenContext.Provider\n value={{ screen: null, setScreen: () => {}, toast }}\n >\n <Container>\n <TabsContainer>\n <TabsList>\n <Tab\n $isActive={activeTab === \"general\"}\n onClick={() => setActiveTab(\"general\")}\n >\n <TabIcon>\n <Settings size={16} />\n General\n </TabIcon>\n </Tab>\n <Tab\n $isActive={activeTab === \"domains\"}\n onClick={() => setActiveTab(\"domains\")}\n >\n <TabIcon>\n <Globe size={16} />\n Domains\n </TabIcon>\n </Tab>\n <Tab\n $isActive={activeTab === \"members\"}\n onClick={() => setActiveTab(\"members\")}\n >\n <TabIcon>\n <Users size={16} />\n Members\n </TabIcon>\n </Tab>\n <Tab\n $isActive={activeTab === \"invitations\"}\n onClick={() => setActiveTab(\"invitations\")}\n >\n <TabIcon>\n <Mail size={16} />\n Invitations\n </TabIcon>\n </Tab>\n <Tab\n $isActive={activeTab === \"roles\"}\n onClick={() => setActiveTab(\"roles\")}\n >\n <TabIcon>\n <Shield size={16} />\n Roles\n </TabIcon>\n </Tab>\n </TabsList>\n </TabsContainer>\n\n <TabContent>\n {activeTab === \"general\" && <GeneralSettingsSection />}\n {activeTab === \"domains\" && <DomainsSection />}\n {activeTab === \"members\" && <MembersSection />}\n {activeTab === \"invitations\" && <InvitationsSection />}\n {activeTab === \"roles\" && <RolesSection />}\n </TabContent>\n\n {toastMessage && (\n <div\n style={{\n position: \"absolute\",\n bottom: \"20px\",\n right: \"20px\",\n background: \"var(--color-input-background)\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"8px\",\n padding: \"12px 16px\",\n boxShadow: \"0 4px 12px var(--color-shadow)\",\n animation: \"slideUp 0.3s ease-out\",\n }}\n >\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}\n >\n {toastLevel === \"error\" ? (\n <AlertTriangle size={16} color=\"var(--color-error)\" />\n ) : (\n <Check size={16} color=\"var(--color-success)\" />\n )}\n <span\n style={{ fontSize: \"14px\", color: \"var(--color-foreground)\" }}\n >\n {toastMessage}\n </span>\n </div>\n </div>\n )}\n </Container>\n </ScreenContext.Provider>\n </TypographyProvider>\n );\n};\n","import type { FC, ReactNode } from \"react\";\nimport { Dialog } from \"../utility/dialog\";\nimport { ManageOrganization } from \"./manage-organization\";\n\ninterface ManageOrganizationDialogProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n showHeader?: boolean;\n headerContent?: ReactNode;\n footerContent?: ReactNode;\n customContent?: ReactNode;\n children?: ReactNode;\n showCloseButton?: boolean;\n}\n\nexport const ManageOrganizationDialog: FC<ManageOrganizationDialogProps> = ({\n isOpen,\n onClose,\n title,\n showHeader,\n headerContent,\n footerContent,\n customContent,\n children,\n showCloseButton,\n}) => {\n return (\n <Dialog isOpen={isOpen} onClose={onClose}>\n <Dialog.Overlay>\n <Dialog.Content style={{ width: \"900px\", maxWidth: \"100%\" }}>\n {showHeader && (\n <Dialog.Header showCloseButton={showCloseButton}>\n {headerContent || title}\n </Dialog.Header>\n )}\n {customContent || children || <ManageOrganization />}\n {footerContent && <Dialog.Footer>{footerContent}</Dialog.Footer>}\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog>\n );\n};\n","import React, { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { ChevronLeft, ChevronDown, Plus } from \"lucide-react\";\nimport { useWorkspaceList } from \"@/hooks/use-workspace\";\nimport { useOrganizationMemberships } from \"@/hooks/use-organization\";\nimport { useScreenContext } from \"../organization/context\";\nimport { DefaultStylesProvider } from \"../utility\";\n\nconst Container = styled.div`\n display: flex;\n height: 100%;\n min-height: 400px;\n`;\n\nconst LeftPanel = styled.div`\n width: 35%;\n background: var(--color-background-hover);\n padding: 32px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n border-right: 1px solid var(--color-border);\n`;\n\nconst RightPanel = styled.div`\n flex: 1;\n padding: 32px;\n display: flex;\n flex-direction: column;\n`;\n\nconst AvatarContainer = styled.div<{ hasImage: boolean }>`\n width: 80px;\n height: 80px;\n border-radius: 16px;\n overflow: hidden;\n background: ${(props) =>\n props.hasImage ? \"transparent\" : \"var(--color-background)\"};\n border: 2px solid var(--color-border);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 16px;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n\n &:hover {\n border-color: var(--color-border-hover);\n transform: scale(1.02);\n }\n`;\n\nconst AvatarImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst AvatarPlaceholder = styled.div`\n font-size: 32px;\n font-weight: 600;\n color: var(--color-muted);\n background: var(--color-border);\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst Title = styled.h2`\n font-size: 16px;\n font-weight: 400;\n color: var(--color-foreground);\n margin-bottom: 8px;\n`;\n\nconst Description = styled.p`\n font-size: 13px;\n color: var(--color-secondary-text);\n line-height: 1.4;\n max-width: 200px;\n`;\n\nconst FormHeader = styled.div`\n margin-bottom: 24px;\n`;\n\nconst FormTitle = styled.h3`\n font-size: 16px;\n font-weight: 400;\n color: var(--color-foreground);\n margin-bottom: 6px;\n`;\n\nconst FormDescription = styled.p`\n font-size: 13px;\n color: var(--color-secondary-text);\n line-height: 1.4;\n`;\n\nconst FormContent = styled.div`\n flex: 1;\n`;\n\nconst FormGroup = styled.div`\n margin-bottom: 20px;\n`;\n\nconst Label = styled.label`\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: var(--color-foreground);\n`;\n\nconst Input = styled.input`\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--color-border);\n border-radius: 6px;\n font-size: 14px;\n outline: none;\n background: var(--color-background);\n color: var(--color-foreground);\n transition: all 0.2s ease;\n box-sizing: border-box;\n\n &:focus {\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px var(--color-primary-background);\n }\n\n &::placeholder {\n color: var(--color-muted);\n }\n`;\n\nconst TextArea = styled.textarea`\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--color-border);\n border-radius: 6px;\n font-size: 14px;\n outline: none;\n resize: vertical;\n min-height: 80px;\n background: var(--color-background);\n color: var(--color-foreground);\n transition: all 0.2s ease;\n font-family: inherit;\n box-sizing: border-box;\n\n &:focus {\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px var(--color-primary-background);\n }\n\n &::placeholder {\n color: var(--color-muted);\n }\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: auto;\n padding-top: 24px;\n`;\n\nconst BackButton = styled.button`\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: transparent;\n border: none;\n font-size: 13px;\n font-weight: 500;\n color: var(--color-secondary-text);\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n color: var(--color-foreground);\n }\n`;\n\nconst SubmitButton = styled.button`\n padding: 8px 20px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n background: var(--color-primary);\n color: white;\n border: none;\n\n &:hover:not(:disabled) {\n background: var(--color-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px var(--color-primary-shadow);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst HiddenInput = styled.input`\n display: none;\n`;\n\nconst UploadOverlay = styled.div`\n position: absolute;\n inset: 0;\n background: var(--color-dialog-backdrop);\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.2s ease;\n cursor: pointer;\n\n ${AvatarContainer}:hover & {\n opacity: 1;\n }\n`;\n\nconst UploadText = styled.div`\n color: white;\n font-size: 12px;\n font-weight: 500;\n`;\n\nconst DropdownContainer = styled.div`\n position: relative;\n`;\n\nconst DropdownButton = styled.button`\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--color-border);\n border-radius: 6px;\n font-size: 14px;\n outline: none;\n background: var(--color-background);\n color: var(--color-foreground);\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n text-align: left;\n\n &:hover {\n border-color: var(--color-border-hover);\n }\n\n &:focus {\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px var(--color-primary-background);\n }\n\n &:disabled {\n background: var(--color-background-hover);\n cursor: not-allowed;\n }\n`;\n\nconst DropdownContent = styled.div`\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n background: var(--color-background);\n border: 1px solid var(--color-border);\n border-radius: 6px;\n box-shadow:\n 0 4px 6px -1px var(--color-shadow),\n 0 2px 4px -1px var(--color-shadow);\n z-index: 10;\n max-height: 200px;\n overflow-y: auto;\n`;\n\nconst DropdownItem = styled.button`\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: transparent;\n font-size: 14px;\n color: var(--color-foreground);\n cursor: pointer;\n text-align: left;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: background 0.1s ease;\n\n &:hover {\n background: var(--color-background-hover);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n`;\n\nconst OrgAvatar = styled.div`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n overflow: hidden;\n background: var(--color-border);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n font-weight: 600;\n color: var(--color-secondary-text);\n flex-shrink: 0;\n`;\n\nconst OrgAvatarImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst CreateOrgItem = styled(DropdownItem)`\n border-top: 1px solid var(--color-border);\n color: var(--color-primary);\n font-weight: 500;\n padding: 10px 12px;\n\n &:hover {\n background: var(--color-primary-background);\n }\n`;\n\nconst PlusIcon = styled.div`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n border: 1px dashed var(--color-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-primary);\n`;\n\ninterface CreateWorkspaceFormProps {\n organizationId: string;\n onSuccess?: () => void;\n onCancel?: () => void;\n onCreateOrganization?: () => void;\n}\n\nexport const CreateWorkspaceForm: React.FC<CreateWorkspaceFormProps> = ({\n organizationId: initialOrgId,\n onSuccess,\n onCancel,\n onCreateOrganization,\n}) => {\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [image, setImage] = useState<File>();\n const [previewUrl, setPreviewUrl] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const [selectedOrgId, setSelectedOrgId] = useState(initialOrgId);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const { toast } = useScreenContext();\n const { createWorkspace } = useWorkspaceList();\n const { organizationMemberships } = useOrganizationMemberships();\n\n const selectedOrg = organizationMemberships?.find(\n (m) => m.organization.id === selectedOrgId,\n )?.organization;\n\n const handleImageChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files && event.target.files[0]) {\n const file = event.target.files[0];\n\n if (file.size > 2 * 1024 * 1024) {\n toast(\"File size cannot exceed 2MB\", \"error\");\n return;\n }\n\n if (!file.type.startsWith(\"image/\")) {\n toast(\"Please select a valid image file\", \"error\");\n return;\n }\n\n if (previewUrl) {\n URL.revokeObjectURL(previewUrl);\n }\n\n setImage(file);\n setPreviewUrl(URL.createObjectURL(file));\n }\n };\n\n const handleFileSelect = () => {\n fileInputRef.current?.click();\n };\n\n const getInitials = (text: string) => {\n return (\n text\n .split(\" \")\n .map((word) => word[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2) || \"W\"\n );\n };\n\n const sanitizeText = (text: string): string => {\n return text.trim().replace(/[<>\\\"'&]/g, \"\");\n };\n\n const validateWorkspaceName = (name: string): boolean => {\n return (\n name.length >= 2 && name.length <= 100 && /^[a-zA-Z0-9\\s_.-]+$/.test(name)\n );\n };\n\n const handleSubmit = async () => {\n const sanitizedName = sanitizeText(name);\n const sanitizedDescription = sanitizeText(description);\n\n if (!sanitizedName || !selectedOrgId) {\n toast(\"Please enter a workspace name\", \"error\");\n return;\n }\n\n if (!validateWorkspaceName(sanitizedName)) {\n toast(\n \"Workspace name must be 2-100 characters and contain only letters, numbers, spaces, dots, underscores, and hyphens\",\n \"error\",\n );\n return;\n }\n\n if (sanitizedDescription.length > 500) {\n toast(\"Description must be less than 500 characters\", \"error\");\n return;\n }\n\n setIsSubmitting(true);\n try {\n await createWorkspace(\n selectedOrgId,\n sanitizedName,\n image,\n sanitizedDescription,\n );\n onSuccess?.();\n } catch (error: any) {\n const errorMessage =\n error.message || \"Failed to create workspace. Please try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setIsSubmitting(false);\n }\n };\n\n useEffect(() => {\n return () => {\n if (previewUrl) {\n URL.revokeObjectURL(previewUrl);\n }\n };\n }, [previewUrl]);\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setDropdownOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n return (\n <DefaultStylesProvider>\n <Container>\n <LeftPanel>\n <AvatarContainer hasImage={!!previewUrl} onClick={handleFileSelect}>\n {previewUrl ? (\n <AvatarImage src={previewUrl} alt=\"Workspace logo\" />\n ) : (\n <AvatarPlaceholder>{getInitials(name || \"W\")}</AvatarPlaceholder>\n )}\n <UploadOverlay>\n <UploadText>Upload Logo</UploadText>\n </UploadOverlay>\n </AvatarContainer>\n <HiddenInput\n type=\"file\"\n ref={fileInputRef}\n onChange={handleImageChange}\n accept=\"image/png, image/jpeg, image/gif\"\n disabled={isSubmitting}\n />\n <Title>Create new workspace</Title>\n <Description>\n Workspaces are used to organize your projects and team members into\n logical groups.\n </Description>\n </LeftPanel>\n\n <RightPanel>\n <FormHeader>\n <FormTitle>Choose your workspace name</FormTitle>\n <FormDescription>\n Enter a name for your new workspace. This will be visible to all\n members.\n </FormDescription>\n </FormHeader>\n\n <FormContent>\n <FormGroup>\n <Label>Organization</Label>\n <DropdownContainer ref={dropdownRef}>\n <DropdownButton\n type=\"button\"\n onClick={() => setDropdownOpen(!dropdownOpen)}\n disabled={isSubmitting}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <OrgAvatar>\n {selectedOrg?.image_url ? (\n <OrgAvatarImage\n src={selectedOrg.image_url}\n alt={selectedOrg.name}\n />\n ) : (\n getInitials(selectedOrg?.name || \"O\").charAt(0)\n )}\n </OrgAvatar>\n <span>{selectedOrg?.name || \"Select organization\"}</span>\n </div>\n <ChevronDown\n size={16}\n style={{ color: \"var(--color-secondary-text)\" }}\n />\n </DropdownButton>\n {dropdownOpen && (\n <DropdownContent>\n {organizationMemberships?.map((membership) => (\n <DropdownItem\n key={membership.organization.id}\n onClick={() => {\n setSelectedOrgId(membership.organization.id);\n setDropdownOpen(false);\n }}\n >\n <OrgAvatar>\n {membership.organization.image_url ? (\n <OrgAvatarImage\n src={membership.organization.image_url}\n alt={membership.organization.name}\n />\n ) : (\n getInitials(membership.organization.name).charAt(0)\n )}\n </OrgAvatar>\n <span>{membership.organization.name}</span>\n </DropdownItem>\n ))}\n <CreateOrgItem\n onClick={() => {\n setDropdownOpen(false);\n onCreateOrganization?.();\n }}\n >\n <PlusIcon>\n <Plus size={12} />\n </PlusIcon>\n <span>Create new organization</span>\n </CreateOrgItem>\n </DropdownContent>\n )}\n </DropdownContainer>\n </FormGroup>\n\n <FormGroup>\n <Label>Workspace name</Label>\n <Input\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Workspace Name\"\n disabled={isSubmitting}\n />\n </FormGroup>\n\n <FormGroup>\n <Label>Description (optional)</Label>\n <TextArea\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"What is this workspace for?\"\n disabled={isSubmitting}\n />\n </FormGroup>\n </FormContent>\n\n <ButtonGroup>\n <BackButton onClick={onCancel} disabled={isSubmitting}>\n <ChevronLeft size={16} />\n Back\n </BackButton>\n <SubmitButton\n onClick={handleSubmit}\n disabled={isSubmitting || !name.trim()}\n >\n {isSubmitting ? \"Creating...\" : \"Create\"}\n </SubmitButton>\n </ButtonGroup>\n </RightPanel>\n </Container>\n </DefaultStylesProvider>\n );\n};\n\nexport default CreateWorkspaceForm;\n","import React, { useState } from \"react\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { CreateWorkspaceForm } from \"./create-workspace-form\";\nimport { Dialog } from \"../utility/dialog\";\nimport CreateOrganizationForm from \"../organization/create-organization-form\";\nimport { useOrganizationMemberships } from \"@/hooks/use-organization\";\n\ninterface CreateWorkspaceDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onCreated?: () => void;\n organizationId: string;\n}\n\nexport const CreateWorkspaceDialog: React.FC<CreateWorkspaceDialogProps> = ({\n isOpen,\n onClose,\n onCreated,\n organizationId,\n}) => {\n const [showCreateOrg, setShowCreateOrg] = useState(false);\n const [selectedOrgId, setSelectedOrgId] = useState(organizationId);\n const { refetch: refetchOrganizations, organizationMemberships } =\n useOrganizationMemberships();\n\n const handleSuccess = () => {\n onCreated?.();\n onClose();\n };\n\n const handleCreateOrganization = () => {\n setShowCreateOrg(true);\n };\n\n const handleOrganizationCreated = async () => {\n await refetchOrganizations();\n // Select the newly created organization\n setTimeout(() => {\n if (organizationMemberships && organizationMemberships.length > 0) {\n const newestOrg =\n organizationMemberships[organizationMemberships.length - 1];\n setSelectedOrgId(newestOrg.organization.id);\n }\n setShowCreateOrg(false);\n }, 500);\n };\n\n return (\n <DefaultStylesProvider>\n <Dialog isOpen={isOpen} onClose={onClose}>\n <Dialog.Overlay>\n <Dialog.Content style={{ width: \"900px\", maxWidth: \"90vw\" }}>\n <Dialog.Body style={{ padding: 0 }}>\n {!showCreateOrg ? (\n <CreateWorkspaceForm\n organizationId={selectedOrgId || organizationId}\n onSuccess={handleSuccess}\n onCancel={onClose}\n onCreateOrganization={handleCreateOrganization}\n />\n ) : (\n <CreateOrganizationForm\n onSuccess={handleOrganizationCreated}\n onCancel={() => setShowCreateOrg(false)}\n />\n )}\n </Dialog.Body>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog>\n </DefaultStylesProvider>\n );\n};\n\nexport default CreateWorkspaceDialog;\n","import { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { X } from \"lucide-react\";\nimport { Input } from \"@/components/utility/input\";\nimport { FormGroup, Label } from \"../utility/form\";\nimport { Button, Spinner } from \"../utility\";\nimport { ComboBox, ComboBoxOption } from \"../utility/combo-box\";\nimport { WorkspaceRole } from \"@/types\";\nimport { useScreenContext } from \"../organization/context\";\n\nconst PopoverContainer = styled.div`\n position: fixed;\n width: 360px;\n max-width: calc(100vw - 48px);\n background: var(--color-background);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n z-index: 1001;\n \n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--space-sm) var(--space-md);\n border-bottom: 1px solid var(--color-border);\n`;\n\nconst Title = styled.h3`\n margin: 0;\n font-size: var(--font-xs);\n font-weight: 500;\n color: var(--color-foreground);\n`;\n\nconst Content = styled.div`\n padding: var(--space-md);\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: var(--space-xs);\n justify-content: flex-end;\n padding: var(--space-sm) var(--space-md);\n border-top: 1px solid var(--color-border);\n background: var(--color-background-alt);\n`;\n\nconst CloseButton = styled.button`\n background: none;\n border: none;\n padding: var(--space-xs);\n cursor: pointer;\n color: var(--color-muted);\n transition: all 0.15s ease;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n \n &:hover {\n color: var(--color-foreground);\n background: var(--color-input-background);\n }\n`;\n\ninterface InviteMemberPopoverProps {\n onClose?: () => void;\n onSuccess?: () => void;\n roles: WorkspaceRole[];\n createInvitation: (email: string, roleId: string) => Promise<any>;\n triggerRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport const InviteMemberPopover = ({\n onClose,\n onSuccess,\n roles,\n createInvitation,\n triggerRef,\n}: InviteMemberPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [email, setEmail] = useState(\"\");\n const [selectedRole, setSelectedRole] = useState<WorkspaceRole | null>(null);\n const [loading, setLoading] = useState(false);\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const { toast } = useScreenContext();\n\n const roleOptions: ComboBoxOption[] = roles.map((role) => ({\n value: role.id,\n label: role.name,\n }));\n\n useEffect(() => {\n setMounted(true);\n \n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current || !triggerRef?.current) return;\n \n const triggerButton = triggerRef.current;\n \n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 360;\n const popoverHeight = 250; // Approximate height\n const spacing = 8;\n \n let top = 0;\n let left = 0;\n \n // Check available space\n const spaceBottom = window.innerHeight - rect.bottom;\n const spaceTop = rect.top;\n \n // Prefer to open below if there's space\n if (spaceBottom >= popoverHeight + spacing) {\n top = rect.bottom + spacing;\n // Align to right edge of button (bottom-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (bottom-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // Otherwise open above\n else if (spaceTop >= popoverHeight + spacing) {\n top = rect.top - popoverHeight - spacing;\n // Align to right edge of button (top-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (top-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // If no space above or below, position it at the best available spot\n else {\n // Position at bottom with scrolling if needed\n top = rect.bottom + spacing;\n left = rect.right - popoverWidth;\n \n if (left < spacing) {\n left = rect.left;\n }\n }\n \n setPosition({ top, left });\n }\n }, 10);\n \n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n onClose?.();\n }\n };\n \n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose?.();\n }\n };\n \n // Delay adding the listener to prevent immediate closure\n const listenerTimer = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n }, 100);\n \n return () => {\n clearTimeout(timer);\n clearTimeout(listenerTimer);\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [onClose, triggerRef]);\n\n const validateEmail = (email: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n };\n\n const handleInvite = async () => {\n const trimmedEmail = email.trim().toLowerCase();\n \n if (!trimmedEmail || !selectedRole) return;\n\n // Validate email format\n if (!validateEmail(trimmedEmail)) {\n toast(\"Please enter a valid email address\", \"error\");\n return;\n }\n\n // Sanitize and validate email length\n if (trimmedEmail.length > 320) { // RFC 5321 limit\n toast(\"Email address is too long\", \"error\");\n return;\n }\n\n setLoading(true);\n try {\n await createInvitation(trimmedEmail, selectedRole.id);\n onSuccess?.();\n } catch (error: any) {\n const errorMessage = error.message || \"Failed to send invitation. Please try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer \n ref={popoverRef}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? 'visible' : 'hidden'\n }}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-labelledby=\"invite-workspace-member-title\"\n aria-modal=\"true\"\n >\n <Header>\n <Title id=\"invite-workspace-member-title\">Invite Member</Title>\n <CloseButton onClick={onClose} aria-label=\"Close invite member dialog\">\n <X size={16} />\n </CloseButton>\n </Header>\n\n <Content>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"var(--space-sm)\" }}>\n <FormGroup>\n <Label>Email Address</Label>\n <Input\n type=\"email\"\n placeholder=\"colleague@company.com\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n autoFocus\n aria-label=\"Email address for workspace invitation\"\n aria-describedby=\"workspace-email-help\"\n />\n </FormGroup>\n\n <FormGroup>\n <Label>Role</Label>\n <ComboBox\n options={roleOptions}\n value={selectedRole?.id}\n onChange={(id) =>\n setSelectedRole(roles.find((role) => role.id === id)!)\n }\n placeholder=\"Select a role\"\n aria-label=\"Select role for invited workspace member\"\n />\n </FormGroup>\n </div>\n </Content>\n\n <ButtonGroup>\n <Button\n $outline\n onClick={onClose}\n style={{\n width: \"auto\",\n }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleInvite}\n disabled={!email || !selectedRole || loading}\n style={{\n width: \"auto\",\n }}\n >\n {loading ? (\n <>\n <Spinner size={14} /> Sending...\n </>\n ) : (\n \"Send Invitation\"\n )}\n </Button>\n </ButtonGroup>\n </PopoverContainer>\n );\n};","import { useEffect, useRef, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { X } from \"lucide-react\";\nimport type { WorkspaceRole } from \"@/types\";\nimport { useScreenContext } from \"../organization/context\";\nimport { Button, Input, Label, FormGroup } from \"@/components/utility\";\nimport { useDeployment } from \"@/hooks/use-deployment\";\nimport { ComboBoxMulti } from \"@/components/utility/combo-box\";\n\nconst PopoverContainer = styled.div`\n position: fixed;\n width: 360px;\n max-width: calc(100vw - 48px);\n background: var(--color-background);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n z-index: 1001;\n \n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--space-sm) var(--space-md);\n border-bottom: 1px solid var(--color-border);\n`;\n\nconst Title = styled.h3`\n margin: 0;\n font-size: var(--font-xs);\n font-weight: 500;\n color: var(--color-foreground);\n`;\n\nconst Content = styled.div`\n padding: var(--space-md);\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: var(--space-xs);\n justify-content: flex-end;\n padding: var(--space-sm) var(--space-md);\n border-top: 1px solid var(--color-border);\n background: var(--color-background-alt);\n`;\n\nconst CloseButton = styled.button`\n background: none;\n border: none;\n padding: var(--space-xs);\n cursor: pointer;\n color: var(--color-muted);\n transition: all 0.15s ease;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n \n &:hover {\n color: var(--color-foreground);\n background: var(--color-input-background);\n }\n`;\n\ninterface AddWorkspaceRolePopoverProps {\n onClose?: () => void;\n onSuccess?: (role: { id?: string; name: string; permissions?: string[] }) => void;\n role?: WorkspaceRole;\n triggerRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport const AddWorkspaceRolePopover = ({\n onClose,\n onSuccess,\n role,\n triggerRef,\n}: AddWorkspaceRolePopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [name, setName] = useState(role?.name || \"\");\n const [permissions, setPermissions] = useState<string[]>(\n role?.permissions || []\n );\n const [loading, setLoading] = useState(false);\n const { deployment } = useDeployment();\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const { toast } = useScreenContext();\n const isEditing = !!role;\n\n const permissionOptions = (deployment?.b2b_settings?.workspace_permissions || []).map((perm) => ({\n value: perm,\n label: perm,\n }));\n\n useEffect(() => {\n setMounted(true);\n \n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current || !triggerRef?.current) return;\n \n const triggerButton = triggerRef.current;\n \n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 360;\n const popoverHeight = 250; // Approximate height\n const spacing = 8;\n \n let top = 0;\n let left = 0;\n \n // Check available space\n const spaceBottom = window.innerHeight - rect.bottom;\n const spaceTop = rect.top;\n \n // Prefer to open below if there's space\n if (spaceBottom >= popoverHeight + spacing) {\n top = rect.bottom + spacing;\n // Align to right edge of button (bottom-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (bottom-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // Otherwise open above\n else if (spaceTop >= popoverHeight + spacing) {\n top = rect.top - popoverHeight - spacing;\n // Align to right edge of button (top-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (top-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // If no space above or below, position it at the best available spot\n else {\n // Position at bottom with scrolling if needed\n top = rect.bottom + spacing;\n left = rect.right - popoverWidth;\n \n if (left < spacing) {\n left = rect.left;\n }\n }\n \n setPosition({ top, left });\n }\n }, 10);\n \n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n onClose?.();\n }\n };\n \n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose?.();\n }\n };\n \n // Delay adding the listener to prevent immediate closure\n const listenerTimer = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n }, 100);\n \n return () => {\n clearTimeout(timer);\n clearTimeout(listenerTimer);\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [onClose, triggerRef]);\n\n const handleSave = async () => {\n if (!name.trim()) return;\n\n setLoading(true);\n try {\n const roleData = {\n id: role?.id,\n name: name.trim(),\n permissions: permissions,\n };\n\n onSuccess?.(roleData);\n } catch (error: any) {\n const errorMessage = error.message || \"Failed to save role. Please try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer \n ref={popoverRef}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? 'visible' : 'hidden'\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <Header>\n <Title>{isEditing ? \"Edit Role\" : \"Add Role\"}</Title>\n <CloseButton onClick={onClose}>\n <X size={16} />\n </CloseButton>\n </Header>\n\n <Content>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"var(--space-sm)\" }}>\n <FormGroup>\n <Label>Role Name</Label>\n <Input\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Enter role name\"\n autoFocus\n />\n </FormGroup>\n\n <FormGroup>\n <Label>Permissions</Label>\n <ComboBoxMulti\n options={permissionOptions}\n value={permissions}\n onChange={setPermissions}\n placeholder=\"Select permissions\"\n />\n </FormGroup>\n </div>\n </Content>\n\n <ButtonGroup>\n <Button\n $outline\n onClick={onClose}\n style={{\n width: \"auto\",\n }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSave}\n disabled={!name.trim() || loading}\n style={{\n width: \"auto\",\n }}\n >\n {loading ? \"Saving...\" : isEditing ? \"Update\" : \"Create\"}\n </Button>\n </ButtonGroup>\n </PopoverContainer>\n );\n};","import { createContext, useContext } from \"react\";\n\nexport type Screen =\n | \"email\"\n | \"phone\"\n | \"social\"\n | \"password\"\n | \"2fa\"\n | \"security\"\n | \"2fa/authenticator\"\n | \"2fa/backup_code\"\n | \"2fa/phone\"\n | \"profile-details\"\n | \"active-sessions\"\n | null;\n\ninterface ScreenContextType {\n screen: Screen;\n setScreen: (screen: Screen) => void;\n toast: (message: string, level?: \"info\" | \"error\") => void;\n}\n\nexport const ScreenContext = createContext<ScreenContextType | undefined>(\n undefined\n);\n\nexport const useScreenContext = () => {\n const context = useContext(ScreenContext);\n if (!context) {\n throw new Error(\"useScreenContext must be used within a ScreenProvider\");\n }\n return context;\n};\n","import React, {\n useState,\n useCallback,\n useEffect,\n useContext,\n useRef,\n} from \"react\";\nimport styled from \"styled-components\";\nimport {\n Building,\n Settings,\n Users,\n Mail,\n Trash2,\n Send,\n Check,\n Shield,\n AlertTriangle,\n ChevronDown,\n} from \"lucide-react\";\nimport { useActiveWorkspace, useWorkspaceList } from \"@/hooks/use-workspace\";\nimport { useSession } from \"@/hooks/use-session\";\nimport type { WorkspaceRole, WorkspaceWithOrganization } from \"@/types\";\n\ninterface WorkspaceInvitation {\n id: string;\n email: string;\n role_id: string;\n workspace_role_id: string;\n initial_workspace_role: WorkspaceRole;\n status: string;\n}\n\n// Based on frontend API model/workspace_membership.go\ninterface WorkspaceMembershipResponse {\n id: string;\n workspace_id: string;\n organization_id: string;\n user_id: string;\n created_at: string;\n updated_at: string;\n public_user_data: {\n id: string;\n first_name?: string;\n last_name?: string;\n username?: string;\n profile_picture_url?: string;\n has_profile_picture?: boolean;\n primary_email_address?: {\n id: string;\n email: string;\n is_primary: boolean;\n verified: boolean;\n };\n };\n roles: WorkspaceRole[];\n}\nimport { InviteMemberPopover } from \"./invite-member-popover\";\nimport { AddWorkspaceRolePopover } from \"./add-role-popover\";\nimport { ConfirmationPopover } from \"../utility/confirmation-popover\";\nimport useSWR from \"swr\";\nimport { ScreenContext } from \"../user/context\";\nimport {\n Button,\n Input,\n Spinner,\n FormGroup,\n Label,\n SearchInput,\n Dropdown,\n DropdownItems,\n DropdownItem,\n DropdownTrigger,\n DropdownDivider,\n} from \"@/components/utility\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableCellFlex,\n TableHead,\n TableHeader,\n TableRow,\n ActionsCell,\n} from \"@/components/utility/table\";\nimport { useClient } from \"@/hooks/use-client\";\nimport { responseMapper } from \"@/utils/response-mapper\";\nimport { EmptyState } from \"@/components/utility/empty-state\";\n\nconst TypographyProvider = styled.div`\n * {\n box-sizing: border-box;\n font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n }\n`;\n\nconst Container = styled.div`\n width: 100%;\n height: 600px;\n background: var(--color-background);\n border-radius: 20px;\n box-shadow: 0 8px 30px var(--color-shadow);\n transition: all 0.3s ease;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding-bottom: 24px;\n position: relative;\n\n @media (max-width: 768px) {\n border-radius: 16px;\n padding-bottom: 20px;\n }\n\n /* Blur effect at the bottom */\n &::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 40px;\n background: linear-gradient(\n to bottom,\n transparent 0%,\n var(--color-background) 70%\n );\n pointer-events: none;\n z-index: 1;\n }\n`;\n\nconst TabsContainer = styled.div`\n padding: 0 24px;\n border-bottom: 1px solid var(--color-border);\n\n @media (max-width: 768px) {\n padding: 0 20px;\n }\n`;\n\nconst TabsList = styled.div`\n display: flex;\n gap: 20px;\n overflow-x: auto;\n overflow-y: hidden;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst Tab = styled.button<{ $isActive: boolean }>`\n padding: 12px 12px;\n border: none;\n background: none;\n font-size: 14px;\n font-weight: 500;\n color: ${(props) =>\n props.$isActive ? \"var(--color-foreground)\" : \"var(--color-muted)\"};\n cursor: pointer;\n position: relative;\n transition: color 0.15s ease;\n white-space: nowrap;\n min-width: fit-content;\n\n &:hover {\n color: var(--color-foreground);\n }\n\n &::after {\n content: \"\";\n position: absolute;\n bottom: -1px;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--color-primary);\n opacity: ${(props) => (props.$isActive ? 1 : 0)};\n transition: opacity 0.15s ease;\n }\n`;\n\nconst TabIcon = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n`;\n\nconst TabContent = styled.div`\n flex: 1;\n padding: 24px 24px 0 24px;\n overflow-y: auto;\n position: relative;\n\n @media (max-width: 768px) {\n padding: 20px 20px 0 20px;\n }\n`;\n\nconst HeaderCTAContainer = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 20px;\n`;\n\ninterface WorkspaceUpdate {\n name?: string;\n description?: string;\n image?: File;\n}\n\nconst MemberListItem = styled.div`\n background: var(--color-background);\n padding: 16px 4px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n border-bottom: 1px solid var(--color-border);\n transition: all 0.2s ease;\n\n &:hover {\n background: var(--color-input-background);\n }\n`;\n\nconst MemberListItemContent = styled.div`\n display: flex;\n align-items: center;\n gap: 12px;\n`;\n\nconst AvatarPlaceholder = styled.div`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: var(--color-input-background);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-muted);\n font-weight: 500;\n font-size: 14px;\n overflow: hidden;\n`;\n\nconst MemberInfo = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst MemberName = styled.div`\n font-size: 14px;\n color: var(--color-foreground);\n`;\n\nconst MemberEmail = styled.div`\n font-size: 12px;\n color: var(--color-muted);\n`;\n\nconst MemberListItemActions = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nconst IconButton = styled.button`\n background: none;\n border: 1px solid var(--color-border);\n padding: 3px;\n cursor: pointer;\n color: var(--color-muted);\n border-radius: 3px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n font-size: 11px;\n\n &:hover {\n background: var(--color-input-background);\n color: var(--color-foreground);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst InvitationsSection = () => {\n const { activeWorkspace, loading, getRoles } = useActiveWorkspace();\n const { workspaces } = useWorkspaceList();\n const { client } = useClient();\n\n const workspaceWithOrg = workspaces?.find(\n (w) => w.id === activeWorkspace?.id,\n ) as WorkspaceWithOrganization | undefined;\n const [rolesLoading, setRolesLoading] = useState(true);\n const [invitationsLoading, setInvitationsLoading] = useState(true);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [inviteSuccess, setInviteSuccess] = useState(\"\");\n const [invitations, setInvitations] = useState<any[]>([]);\n const [roles, setRoles] = useState<WorkspaceRole[]>([]);\n const [showInvitePopover, setShowInvitePopover] = useState(false);\n const inviteButtonRef = useRef<HTMLButtonElement>(null);\n\n // Invitation operations - using organization invitations with workspace assignment\n const getInvitations = useCallback(async () => {\n if (!activeWorkspace || !workspaceWithOrg) return [];\n try {\n const response = await responseMapper(\n await client(\n `/organizations/${workspaceWithOrg.organization.id}/invitations`,\n {\n method: \"GET\",\n },\n ),\n );\n const allInvitations = response.data as any[];\n return allInvitations.filter(\n (inv) => inv.workspace_id === activeWorkspace.id,\n );\n } catch (error) {\n // Failed to fetch invitations\n return [];\n }\n }, [client, activeWorkspace, workspaceWithOrg]);\n\n const createInvitation = useCallback(\n async (email: string, roleId: string) => {\n if (!activeWorkspace || !workspaceWithOrg) return;\n const orgRolesResponse = await responseMapper(\n await client(\n `/organizations/${workspaceWithOrg.organization.id}/roles`,\n {\n method: \"GET\",\n },\n ),\n );\n const orgRoles = orgRolesResponse.data as any[];\n const defaultOrgRole =\n orgRoles.find((r) => !r.organization_id) || orgRoles[0];\n\n const response = await responseMapper(\n await client(\n `/organizations/${workspaceWithOrg.organization.id}/invitations`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n email,\n role_id: defaultOrgRole?.id,\n workspace_id: activeWorkspace.id,\n workspace_role_id: roleId,\n }),\n },\n ),\n );\n return response.data;\n },\n [client, activeWorkspace, workspaceWithOrg],\n );\n\n const discardInvitation = useCallback(\n async (invitationId: string) => {\n if (!activeWorkspace || !workspaceWithOrg) return;\n const response = await responseMapper(\n await client(\n `/organizations/${workspaceWithOrg.organization.id}/invitations/${invitationId}/remove`,\n {\n method: \"POST\",\n },\n ),\n );\n return response.data;\n },\n [client, activeWorkspace, workspaceWithOrg],\n );\n\n // Fetch roles and invitations on mount\n useEffect(() => {\n if (!activeWorkspace) return;\n\n const fetchData = async () => {\n setRolesLoading(true);\n setInvitationsLoading(true);\n try {\n const [rolesData, invitationsData] = await Promise.all([\n getRoles(),\n getInvitations(),\n ]);\n setRoles(rolesData);\n setInvitations(invitationsData);\n } catch (error) {\n // Failed to fetch data\n } finally {\n setRolesLoading(false);\n setInvitationsLoading(false);\n }\n };\n\n fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeWorkspace?.id]);\n\n const handleCancelInvitation = async (invitation: WorkspaceInvitation) => {\n try {\n await discardInvitation(invitation.id);\n // Refresh invitations\n const updatedInvitations = await getInvitations();\n setInvitations(updatedInvitations);\n } catch (error) {\n // Failed to cancel invitation\n }\n };\n\n const handleResendInvitation = async (invitation: WorkspaceInvitation) => {\n try {\n // Resend is typically done by canceling and creating a new invitation\n await discardInvitation(invitation.id);\n await createInvitation(\n invitation.email,\n invitation.workspace_role_id ||\n invitation.initial_workspace_role?.id ||\n invitation.role_id,\n );\n // Refresh invitations\n const updatedInvitations = await getInvitations();\n setInvitations(updatedInvitations);\n setInviteSuccess(\"Invitation resent successfully\");\n setTimeout(() => setInviteSuccess(\"\"), 3000);\n } catch (error) {\n // Failed to resend invitation\n }\n };\n\n const handleInviteSuccess = async () => {\n setShowInvitePopover(false);\n // Refresh invitations\n const updatedInvitations = await getInvitations();\n setInvitations(updatedInvitations);\n setInviteSuccess(\"Invitation sent successfully\");\n setTimeout(() => setInviteSuccess(\"\"), 3000);\n };\n\n const filteredInvitations = React.useMemo(() => {\n if (!searchQuery) return invitations;\n return invitations.filter((invitation: WorkspaceInvitation) => {\n const email = invitation.email || \"\";\n return email.toLowerCase().includes(searchQuery.toLowerCase());\n });\n }, [invitations, searchQuery]);\n\n if (loading || rolesLoading || invitationsLoading) {\n return (\n <div\n style={{ display: \"flex\", justifyContent: \"center\", padding: \"40px 0\" }}\n >\n <Spinner />\n </div>\n );\n }\n\n return (\n <>\n {inviteSuccess && (\n <div\n style={{\n marginBottom: \"16px\",\n padding: \"12px 16px\",\n background: \"var(--color-success-background)\",\n color: \"var(--color-success)\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n }}\n >\n ✓ {inviteSuccess}\n </div>\n )}\n\n <HeaderCTAContainer>\n <SearchInput\n value={searchQuery}\n onChange={setSearchQuery}\n placeholder=\"Search Invitation\"\n />\n <div>\n <Button\n ref={inviteButtonRef}\n onClick={() => setShowInvitePopover(!showInvitePopover)}\n style={{\n padding: \"8px 16px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n fontWeight: 500,\n height: \"36px\",\n }}\n >\n Invite Members\n </Button>\n {showInvitePopover && (\n <InviteMemberPopover\n onClose={() => setShowInvitePopover(false)}\n onSuccess={handleInviteSuccess}\n roles={roles}\n createInvitation={createInvitation}\n triggerRef={inviteButtonRef}\n />\n )}\n </div>\n </HeaderCTAContainer>\n\n <div>\n {filteredInvitations.length === 0 ? (\n <EmptyState\n title={\n searchQuery\n ? \"No invitations match your search\"\n : \"No pending invitations\"\n }\n description=\"Invite new members to your workspace.\"\n />\n ) : (\n <div style={{ borderTop: \"1px solid var(--color-border)\" }}>\n {filteredInvitations.map((invitation) => (\n <MemberListItem key={invitation.id}>\n <MemberListItemContent>\n <MemberInfo>\n <MemberName>{invitation.email}</MemberName>\n <MemberEmail>\n {invitation.initial_workspace_role?.name ||\n invitation.initial_organization_role?.name ||\n invitation.role?.name}\n </MemberEmail>\n </MemberInfo>\n </MemberListItemContent>\n <MemberListItemActions>\n <Dropdown>\n <DropdownTrigger>\n <IconButton>•••</IconButton>\n </DropdownTrigger>\n <DropdownItems>\n <DropdownItem\n onClick={() => handleResendInvitation(invitation)}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <Mail size={16} color=\"var(--color-muted)\" />\n <span>Resend Invitation</span>\n </div>\n </DropdownItem>\n <DropdownItem\n $destructive\n onClick={() => handleCancelInvitation(invitation)}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <Trash2 size={16} color=\"var(--color-error)\" />\n <span>Cancel Invitation</span>\n </div>\n </DropdownItem>\n </DropdownItems>\n </Dropdown>\n </MemberListItemActions>\n </MemberListItem>\n ))}\n </div>\n )}\n </div>\n </>\n );\n};\n\nconst MembersSection = () => {\n const {\n activeWorkspace,\n loading,\n getMembers,\n getRoles,\n removeMember,\n addMemberRole,\n removeMemberRole,\n } = useActiveWorkspace();\n const { session } = useSession();\n const { toast } = useContext(ScreenContext) || {};\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const {\n data: members = [],\n isLoading: membersLoading,\n mutate: reloadMembers,\n } = useSWR(\n activeWorkspace ? `/api/workspaces/${activeWorkspace.id}/members` : null,\n () => getMembers() || [],\n );\n\n const { data: rolesData = [], isLoading: rolesLoading } = useSWR(\n activeWorkspace ? `/api/workspaces/${activeWorkspace.id}/roles` : null,\n () => getRoles() || [],\n );\n\n const roles = rolesData as WorkspaceRole[];\n\n const filteredMembers = React.useMemo(() => {\n if (!searchQuery)\n return members as unknown as WorkspaceMembershipResponse[];\n return (members as unknown as WorkspaceMembershipResponse[]).filter(\n (member: WorkspaceMembershipResponse) => {\n const userData = member.public_user_data;\n if (!userData) return false;\n const firstName = userData.first_name || \"\";\n const lastName = userData.last_name || \"\";\n const email = userData.primary_email_address?.email || \"\";\n const fullName = `${firstName} ${lastName}`.trim();\n return (\n fullName.toLowerCase().includes(searchQuery.toLowerCase()) ||\n email.toLowerCase().includes(searchQuery.toLowerCase())\n );\n },\n );\n }, [members, searchQuery]);\n\n const handleRemoveMember = async (memberId: string) => {\n try {\n await removeMember(memberId);\n toast?.(\"Member removed successfully\", \"info\");\n reloadMembers();\n } catch (error) {\n toast?.(\"Failed to remove member\", \"error\");\n }\n };\n\n const handleToggleRole = async (\n membershipId: string,\n roleId: string,\n hasRole: boolean,\n ) => {\n try {\n if (hasRole) {\n await removeMemberRole(membershipId, roleId);\n toast?.(\"Role removed successfully\", \"info\");\n } else {\n await addMemberRole(membershipId, roleId);\n toast?.(\"Role added successfully\", \"info\");\n }\n reloadMembers();\n } catch (error) {\n toast?.(\"Failed to toggle role\", \"error\");\n toast?.(\"Failed to update role\", \"error\");\n }\n };\n\n const getInitials = (firstName = \"\", lastName = \"\") =>\n `${firstName[0] || \"\"}${lastName[0] || \"\"}`.toUpperCase();\n\n const memberHasRole = (member: WorkspaceMembershipResponse, roleId: string) =>\n member.roles?.some((r: WorkspaceRole) => r.id === roleId) || false;\n\n if (loading || membersLoading || rolesLoading) {\n return (\n <div\n style={{ display: \"flex\", justifyContent: \"center\", padding: \"40px 0\" }}\n >\n <Spinner />\n </div>\n );\n }\n\n return (\n <>\n <HeaderCTAContainer>\n <SearchInput\n value={searchQuery}\n onChange={setSearchQuery}\n placeholder=\"Search members...\"\n />\n </HeaderCTAContainer>\n\n {filteredMembers.length === 0 ? (\n <EmptyState\n title={\n searchQuery ? \"No members match your search\" : \"No members yet\"\n }\n description=\"Invite members to your workspace to get started.\"\n />\n ) : (\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Member</TableHeader>\n <TableHeader>Joined</TableHeader>\n <TableHeader>Role</TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredMembers.map((member: WorkspaceMembershipResponse) => {\n const userData = member.public_user_data;\n const memberRoles = member.roles || [];\n const isCurrentUser =\n userData?.id === session?.active_signin?.user_id;\n\n return (\n <TableRow key={member.id}>\n <TableCellFlex>\n <div>\n <AvatarPlaceholder>\n {userData && userData.profile_picture_url ? (\n <img\n src={userData.profile_picture_url}\n alt={`${userData.first_name || \"\"} ${userData.last_name || \"\"}`}\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n }}\n />\n ) : (\n getInitials(\n userData?.first_name,\n userData?.last_name,\n ) || \"?\"\n )}\n </AvatarPlaceholder>\n <div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <span\n style={{\n fontSize: \"14px\",\n fontWeight: 500,\n color: \"var(--color-foreground)\",\n }}\n >\n {(() => {\n if (!userData) return \"Unknown User\";\n\n const fullName =\n `${userData.first_name || \"\"} ${userData.last_name || \"\"}`.trim();\n if (fullName) return fullName;\n\n return (\n userData.primary_email_address?.email ||\n \"Unknown User\"\n );\n })()}\n </span>\n {isCurrentUser && (\n <span\n style={{\n fontSize: \"12px\",\n padding: \"2px 8px\",\n background: \"var(--color-background-alt)\",\n borderRadius: \"4px\",\n color: \"var(--color-secondary-text)\",\n }}\n >\n You\n </span>\n )}\n </div>\n <div\n style={{\n fontSize: \"13px\",\n color: \"var(--color-secondary-text)\",\n }}\n >\n {userData?.primary_email_address?.email}\n </div>\n </div>\n </div>\n </TableCellFlex>\n <TableCell>\n {new Date(member.created_at).toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n })}\n </TableCell>\n <ActionsCell>\n <Dropdown>\n <DropdownTrigger>\n <Button\n style={{\n background: \"var(--color-background)\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"6px\",\n padding: \"8px 12px\",\n fontSize: \"14px\",\n color: \"var(--color-foreground)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n minWidth: \"120px\",\n justifyContent: \"space-between\",\n }}\n >\n <span>\n {memberRoles.length > 0\n ? memberRoles[0].name\n : \"No role\"}\n </span>\n <ChevronDown size={14} />\n </Button>\n </DropdownTrigger>\n <DropdownItems>\n {roles.map((role) => {\n const hasRole = memberHasRole(member, role.id);\n return (\n <DropdownItem\n key={role.id}\n onClick={() =>\n handleToggleRole(member.id, role.id, hasRole)\n }\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n }}\n >\n <span>{role.name}</span>\n {hasRole && (\n <Check\n size={16}\n color=\"var(--color-success)\"\n />\n )}\n </div>\n </DropdownItem>\n );\n })}\n <DropdownDivider />\n <DropdownItem\n $destructive\n onClick={() => handleRemoveMember(member.id)}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <Trash2 size={16} color=\"var(--color-error)\" />\n <span>Remove Member</span>\n </div>\n </DropdownItem>\n </DropdownItems>\n </Dropdown>\n </ActionsCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n )}\n </>\n );\n};\n\nconst GeneralSettingsSection = () => {\n const { activeWorkspace, loading, updateWorkspace } = useActiveWorkspace();\n const { deleteWorkspace } = useWorkspaceList();\n const { toast } = useContext(ScreenContext) || {};\n const [name, setName] = useState(activeWorkspace?.name || \"\");\n const [description, setDescription] = useState(\n activeWorkspace?.description || \"\",\n );\n const [image, setImage] = useState<File | null>(null);\n const [previewUrl, setPreviewUrl] = useState<string | null>(\n activeWorkspace?.image_url || null,\n );\n const [showSaveNotification, setShowSaveNotification] = useState(false);\n const [isAutoSaving, setIsAutoSaving] = useState(false);\n const [confirmName, setConfirmName] = useState(\"\");\n const [isDeleting, setIsDeleting] = useState(false);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n const autoSaveTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n\n React.useEffect(() => {\n if (activeWorkspace) {\n setName(activeWorkspace.name || \"\");\n setDescription(activeWorkspace.description || \"\");\n setPreviewUrl(activeWorkspace.image_url || null);\n }\n }, [activeWorkspace]);\n\n if (loading || !activeWorkspace) {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"40px 0\",\n }}\n >\n <Spinner />\n </div>\n );\n }\n\n const handleImageChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files?.[0]) {\n const file = event.target.files[0];\n setImage(file);\n setPreviewUrl(URL.createObjectURL(file));\n // Auto-save image immediately\n setTimeout(() => autoSave(), 100);\n }\n };\n\n const triggerFileInput = () => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n\n const autoSave = React.useCallback(async () => {\n if (!activeWorkspace || isAutoSaving) return;\n\n try {\n setIsAutoSaving(true);\n const data: WorkspaceUpdate = {};\n\n if (image) {\n data.image = image;\n setImage(null); // Reset after saving\n }\n if (name !== activeWorkspace.name) {\n data.name = name;\n }\n if (description !== activeWorkspace.description) {\n data.description = description;\n }\n\n // Only save if there are actual changes\n if (Object.keys(data).length > 0) {\n await updateWorkspace(data);\n setShowSaveNotification(true);\n setTimeout(() => setShowSaveNotification(false), 3000);\n }\n } catch (error) {\n toast?.(\"Failed to auto-save workspace\", \"error\");\n } finally {\n setIsAutoSaving(false);\n }\n }, [\n activeWorkspace,\n updateWorkspace,\n name,\n description,\n image,\n isAutoSaving,\n ]);\n\n const scheduleAutoSave = React.useCallback(() => {\n if (autoSaveTimeoutRef.current) {\n clearTimeout(autoSaveTimeoutRef.current);\n }\n autoSaveTimeoutRef.current = setTimeout(() => {\n autoSave();\n }, 1000); // Auto-save after 1 second of inactivity\n }, [autoSave]);\n\n const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setName(e.target.value);\n scheduleAutoSave();\n };\n\n const handleDescriptionChange = (\n e: React.ChangeEvent<HTMLTextAreaElement>,\n ) => {\n setDescription(e.target.value);\n scheduleAutoSave();\n };\n\n const handleNameBlur = () => {\n if (autoSaveTimeoutRef.current) {\n clearTimeout(autoSaveTimeoutRef.current);\n }\n autoSave();\n };\n\n const handleDescriptionBlur = () => {\n if (autoSaveTimeoutRef.current) {\n clearTimeout(autoSaveTimeoutRef.current);\n }\n autoSave();\n };\n\n const handleDeleteWorkspace = async () => {\n if (!activeWorkspace || confirmName !== activeWorkspace.name) return;\n\n try {\n setIsDeleting(true);\n await deleteWorkspace(activeWorkspace);\n toast?.(\"Workspace deleted successfully\", \"info\");\n } catch (error: any) {\n toast?.(error.message || \"Failed to delete workspace\", \"error\");\n } finally {\n setIsDeleting(false);\n setConfirmName(\"\");\n setShowDeleteConfirm(false);\n }\n };\n\n return (\n <>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"var(--space-2xl)\",\n }}\n >\n {/* Logo Section - Two Column Layout */}\n <div\n style={{\n display: \"flex\",\n gap: \"var(--space-2xl)\",\n alignItems: \"center\",\n }}\n >\n {/* Left Column - Logo Preview */}\n <div style={{ flexShrink: 0 }}>\n <div\n style={{\n width: \"120px\",\n height: \"120px\",\n borderRadius: \"50%\",\n border: \"2px dashed var(--color-border)\",\n background: previewUrl\n ? \"transparent\"\n : \"var(--color-input-background)\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n transition: \"all 0.2s ease\",\n }}\n onClick={triggerFileInput}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = \"var(--color-primary)\";\n e.currentTarget.style.transform = \"scale(1.02)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = \"var(--color-border)\";\n e.currentTarget.style.transform = \"scale(1)\";\n }}\n >\n {previewUrl ? (\n <img\n src={previewUrl}\n alt=\"Workspace Logo\"\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n borderRadius: \"50%\",\n }}\n />\n ) : (\n <Building size={32} color=\"var(--color-muted)\" />\n )}\n <input\n type=\"file\"\n ref={fileInputRef}\n style={{ display: \"none\" }}\n accept=\"image/*\"\n onChange={handleImageChange}\n />\n </div>\n </div>\n\n {/* Right Column - Content and Controls */}\n <div style={{ flex: 1 }}>\n <div style={{ marginBottom: \"var(--space-lg)\" }}>\n <h3\n style={{\n fontSize: \"var(--font-sm)\",\n color: \"var(--color-foreground)\",\n margin: \"0 0 var(--space-2xs) 0\",\n }}\n >\n Workspace Logo\n </h3>\n <p\n style={{\n fontSize: \"var(--font-xs)\",\n color: \"var(--color-secondary-text)\",\n margin: 0,\n }}\n >\n Upload an image to represent your workspace\n </p>\n </div>\n\n <div\n style={{\n display: \"flex\",\n gap: \"var(--space-sm)\",\n marginBottom: \"var(--space-sm)\",\n }}\n >\n <Button\n onClick={() => fileInputRef.current?.click()}\n style={{\n padding: \"var(--space-xs) var(--space-md)\",\n fontSize: \"var(--font-xs)\",\n height: \"32px\",\n width: \"100px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n }}\n >\n <Building size={14} />\n {previewUrl ? \"Change\" : \"Upload\"}\n </Button>\n <Button\n onClick={() => {\n setPreviewUrl(null);\n setImage(null);\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n // Auto-save the removal\n setTimeout(() => autoSave(), 100);\n }}\n style={{\n background: \"transparent\",\n color: \"var(--color-muted)\",\n border: \"1px solid var(--color-border)\",\n padding: \"var(--space-xs) var(--space-md)\",\n fontSize: \"var(--font-xs)\",\n height: \"32px\",\n width: \"100px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n }}\n >\n <Trash2 size={14} />\n Remove\n </Button>\n </div>\n\n {/* <p style={{\n fontSize: \"var(--font-2xs)\",\n color: \"var(--color-muted)\",\n margin: 0,\n lineHeight: 1.4,\n }}>\n Recommended: Square image, at least 200x200px. Supported formats: JPG, PNG, GIF • Max 2MB\n </p> */}\n </div>\n </div>\n\n {/* Divider */}\n <div\n style={{\n position: \"relative\",\n height: \"1px\",\n background: \"var(--color-divider)\",\n margin: \"0\",\n }}\n />\n\n {/* Workspace Details */}\n <div>\n <div style={{ marginBottom: \"var(--space-md)\" }}>\n <h3\n style={{\n fontSize: \"var(--font-sm)\",\n color: \"var(--color-foreground)\",\n margin: \"0 0 var(--space-2xs) 0\",\n }}\n >\n Workspace Details\n </h3>\n <p\n style={{\n fontSize: \"var(--font-xs)\",\n color: \"var(--color-secondary-text)\",\n margin: 0,\n }}\n >\n Basic information about your workspace\n </p>\n </div>\n\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"var(--space-lg)\",\n }}\n >\n <FormGroup>\n <Label htmlFor=\"name\">Workspace Name</Label>\n <Input\n id=\"name\"\n type=\"text\"\n value={name}\n onChange={handleNameChange}\n onBlur={handleNameBlur}\n placeholder=\"Enter workspace name\"\n required\n />\n </FormGroup>\n\n <FormGroup>\n <Label htmlFor=\"description\">Description</Label>\n <Input\n id=\"description\"\n as=\"textarea\"\n value={description}\n onChange={handleDescriptionChange}\n onBlur={handleDescriptionBlur}\n placeholder=\"Tell us about your workspace\"\n style={{\n minHeight: \"80px\",\n resize: \"vertical\",\n fontFamily: \"inherit\",\n }}\n />\n <p\n style={{\n fontSize: \"var(--font-2xs)\",\n color: \"var(--color-muted)\",\n margin: \"var(--space-2xs) 0 0 0\",\n }}\n >\n Brief description of your workspace and its purpose\n </p>\n </FormGroup>\n </div>\n </div>\n\n {/* Divider */}\n <div\n style={{\n position: \"relative\",\n height: \"1px\",\n background: \"var(--color-divider)\",\n margin: \"0\",\n }}\n />\n\n {/* Danger Zone */}\n <div>\n <div style={{ marginBottom: \"16px\" }}>\n <h3\n style={{\n fontSize: \"16px\",\n color: \"var(--color-foreground)\",\n margin: \"0 0 4px 0\",\n }}\n >\n Danger Zone\n </h3>\n <p\n style={{\n fontSize: \"14px\",\n color: \"var(--color-muted)\",\n margin: 0,\n }}\n >\n Irreversible and destructive actions\n </p>\n </div>\n\n <div\n style={{\n padding: \"20px\",\n border: \"1px solid var(--color-error)\",\n borderRadius: \"8px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: showDeleteConfirm ? \"20px\" : \"0\",\n }}\n >\n <div>\n <div\n style={{\n fontSize: \"14px\",\n color: \"var(--color-foreground)\",\n marginBottom: \"4px\",\n fontWeight: \"500\",\n }}\n >\n Delete Workspace\n </div>\n <div\n style={{\n fontSize: \"13px\",\n color: \"var(--color-muted)\",\n }}\n >\n Once you delete this workspace, there is no going back. Please\n be certain.\n </div>\n </div>\n <Button\n onClick={() => {\n if (!showDeleteConfirm) {\n setShowDeleteConfirm(true);\n } else {\n setShowDeleteConfirm(false);\n setConfirmName(\"\");\n }\n }}\n style={{\n background: \"var(--color-error)\",\n color: \"white\",\n border: \"none\",\n padding: \"6px 12px\",\n fontSize: \"13px\",\n height: \"32px\",\n width: \"auto\",\n }}\n >\n {showDeleteConfirm ? \"Cancel\" : \"Delete\"}\n </Button>\n </div>\n\n {showDeleteConfirm && (\n <div>\n <FormGroup>\n <Label htmlFor=\"confirm_workspace_name\">\n Confirm by typing the workspace name\n </Label>\n <Input\n id=\"confirm_workspace_name\"\n type=\"text\"\n value={confirmName}\n onChange={(e) => setConfirmName(e.target.value)}\n placeholder={`Type \"${activeWorkspace?.name}\" to confirm`}\n />\n </FormGroup>\n <Button\n onClick={handleDeleteWorkspace}\n disabled={confirmName !== activeWorkspace?.name || isDeleting}\n style={{\n background:\n confirmName === activeWorkspace?.name\n ? \"var(--color-error)\"\n : \"transparent\",\n color:\n confirmName === activeWorkspace?.name\n ? \"white\"\n : \"var(--color-muted)\",\n border: \"1px solid var(--color-border)\",\n padding: \"8px 16px\",\n fontSize: \"14px\",\n height: \"36px\",\n cursor:\n confirmName === activeWorkspace?.name\n ? \"pointer\"\n : \"not-allowed\",\n opacity: confirmName === activeWorkspace?.name ? 1 : 0.6,\n marginTop: \"12px\",\n }}\n >\n {isDeleting ? <Spinner size={12} /> : \"Delete Forever\"}\n </Button>\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Bottom Save Notification */}\n {showSaveNotification && (\n <div\n style={{\n position: \"fixed\",\n bottom: \"24px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n background: \"var(--color-success-background)\",\n color: \"var(--color-success)\",\n padding: \"var(--space-sm) var(--space-lg)\",\n borderRadius: \"var(--radius-lg)\",\n boxShadow: \"0 4px 12px var(--color-shadow)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"var(--space-xs)\",\n fontSize: \"var(--font-xs)\",\n fontWeight: 500,\n zIndex: 1000,\n animation: \"slideUp 0.3s ease-out\",\n }}\n >\n ✓ Changes saved automatically\n </div>\n )}\n\n <style>\n {`\n @keyframes slideUp {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n }\n `}\n </style>\n </>\n );\n};\n\nconst RolesSection = () => {\n const { activeWorkspace, loading, getRoles, createRole, deleteRole } =\n useActiveWorkspace();\n const { toast } = useContext(ScreenContext) || {};\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [rolePopover, setRolePopover] = useState<{\n isOpen: boolean;\n role?: WorkspaceRole;\n triggerElement?: HTMLElement | null;\n }>({ isOpen: false });\n const [roleForOptionPopover, setRoleForOptionPopover] = useState<\n string | null\n >(null);\n const [roleForDeletion, setRoleForDeletion] = useState<string | null>(null);\n const addRoleButtonRef = useRef<HTMLButtonElement>(null);\n const dropdownButtonRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n\n const {\n data: roles = [],\n isLoading: rolesLoading,\n mutate: reloadRoles,\n } = useSWR(\n activeWorkspace ? `/api/workspaces/${activeWorkspace.id}/roles` : null,\n () => getRoles() || [],\n );\n\n const filteredRoles = React.useMemo(() => {\n if (!searchQuery) return roles;\n return roles.filter((role: WorkspaceRole) =>\n role.name.toLowerCase().includes(searchQuery.toLowerCase()),\n );\n }, [roles, searchQuery]);\n\n const handleRoleSaved = async (role: {\n id?: string;\n name: string;\n permissions?: string[];\n }) => {\n try {\n await createRole(role.name, role.permissions || []);\n\n toast?.(\"Role created successfully\", \"info\");\n setRolePopover({ isOpen: false });\n reloadRoles();\n } catch (error) {\n toast?.(\"Failed to save role\", \"error\");\n toast?.(\"Failed to create role\", \"error\");\n }\n };\n\n const handleDeleteRole = async (role: WorkspaceRole) => {\n try {\n await deleteRole(role);\n\n toast?.(\"Role deleted successfully\", \"info\");\n setRoleForDeletion(null);\n reloadRoles();\n } catch (error) {\n toast?.(\"Failed to delete role\", \"error\");\n toast?.(\"Failed to delete role\", \"error\");\n }\n };\n\n if (loading || rolesLoading) {\n return (\n <div\n style={{ display: \"flex\", justifyContent: \"center\", padding: \"40px 0\" }}\n >\n <Spinner />\n </div>\n );\n }\n\n return (\n <>\n <HeaderCTAContainer>\n <SearchInput\n placeholder=\"Search roles\"\n onChange={setSearchQuery}\n value={searchQuery}\n />\n <div style={{ position: \"relative\" }}>\n <Button\n ref={addRoleButtonRef}\n onClick={() =>\n setRolePopover({\n isOpen: true,\n triggerElement: addRoleButtonRef.current,\n })\n }\n style={{\n padding: \"8px 16px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n fontWeight: 500,\n height: \"36px\",\n }}\n >\n Add role\n </Button>\n {rolePopover.isOpen && !rolePopover.role && (\n <AddWorkspaceRolePopover\n role={rolePopover.role}\n triggerRef={{ current: rolePopover.triggerElement || null }}\n onClose={() => setRolePopover({ isOpen: false })}\n onSuccess={handleRoleSaved}\n />\n )}\n </div>\n </HeaderCTAContainer>\n\n {filteredRoles.length === 0 ? (\n <EmptyState\n title={\n searchQuery ? \"No roles match your search\" : \"No roles available\"\n }\n description={\n searchQuery\n ? \"Try adjusting your search query\"\n : \"Contact your administrator to set up workspace roles.\"\n }\n />\n ) : (\n <div\n style={{\n position: \"relative\",\n overflowX: \"auto\",\n overflowY: \"visible\",\n }}\n >\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Role</TableHeader>\n <TableHeader>Permissions</TableHeader>\n <TableHeader></TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredRoles.map((role: WorkspaceRole) => (\n <TableRow key={role.id}>\n <TableCell>\n <div\n style={{\n fontSize: \"14px\",\n fontWeight: 500,\n }}\n >\n {role.name}\n </div>\n </TableCell>\n <TableCell style={{ color: \"var(--color-secondary-text)\" }}>\n {role.permissions && role.permissions.length > 0\n ? role.permissions.join(\", \")\n : \"\"}\n </TableCell>\n <ActionsCell>\n <div\n style={{\n display: \"flex\",\n gap: \"10px\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n position: \"relative\",\n }}\n >\n <Dropdown\n open={roleForOptionPopover === role.id}\n openChange={(open) =>\n setRoleForOptionPopover(open ? role.id : null)\n }\n >\n <DropdownTrigger>\n <IconButton\n ref={(el) => {\n if (el)\n dropdownButtonRefs.current.set(role.id, el);\n }}\n disabled={!(role as any).workspace_id}\n data-role-dropdown-trigger={role.id}\n >\n •••\n </IconButton>\n </DropdownTrigger>\n <DropdownItems>\n <DropdownItem\n onClick={() => {\n setRoleForOptionPopover(null);\n const triggerBtn = dropdownButtonRefs.current.get(\n role.id,\n );\n setRolePopover({\n isOpen: true,\n role,\n triggerElement: triggerBtn || null,\n });\n }}\n >\n Edit Role\n </DropdownItem>\n <DropdownItem\n $destructive\n onClick={() => {\n setRoleForOptionPopover(null);\n setRoleForDeletion(role.id);\n }}\n >\n Remove Role\n </DropdownItem>\n </DropdownItems>\n </Dropdown>\n {roleForDeletion === role.id && (\n <ConfirmationPopover\n title=\"Are you sure you want to delete this role?\"\n onConfirm={() => handleDeleteRole(role)}\n onCancel={() => setRoleForDeletion(null)}\n />\n )}\n {rolePopover.isOpen &&\n rolePopover.role?.id === role.id && (\n <AddWorkspaceRolePopover\n role={rolePopover.role}\n triggerRef={{\n current: rolePopover.triggerElement || null,\n }}\n onClose={() => {\n setRolePopover({ isOpen: false });\n setRoleForOptionPopover(null);\n }}\n onSuccess={handleRoleSaved}\n />\n )}\n </div>\n </ActionsCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n </>\n );\n};\n\nexport const ManageWorkspace = () => {\n const { activeWorkspace, loading } = useActiveWorkspace();\n const [activeTab, setActiveTab] = useState<\n \"general\" | \"members\" | \"invitations\" | \"roles\"\n >(\"general\");\n const [toastMessage, setToastMessage] = useState<string | null>(null);\n const [toastLevel, setToastLevel] = useState<\"info\" | \"error\">(\"info\");\n\n const toast = useCallback(\n (message: string, level: \"info\" | \"error\" = \"info\") => {\n setToastMessage(message);\n setToastLevel(level);\n setTimeout(() => setToastMessage(null), 3000);\n },\n [],\n );\n\n if (loading)\n return (\n <Container\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <Spinner />\n </Container>\n );\n\n if (!activeWorkspace) return null;\n\n return (\n <ScreenContext.Provider\n value={{ screen: null, setScreen: () => {}, toast }}\n >\n <TypographyProvider>\n <Container>\n <TabsContainer>\n <TabsList>\n <Tab\n $isActive={activeTab === \"general\"}\n onClick={() => setActiveTab(\"general\")}\n >\n <TabIcon>\n <Settings size={16} />\n General\n </TabIcon>\n </Tab>\n <Tab\n $isActive={activeTab === \"members\"}\n onClick={() => setActiveTab(\"members\")}\n >\n <TabIcon>\n <Users size={16} />\n Members\n </TabIcon>\n </Tab>\n <Tab\n $isActive={activeTab === \"invitations\"}\n onClick={() => setActiveTab(\"invitations\")}\n >\n <TabIcon>\n <Send size={16} />\n Invitations\n </TabIcon>\n </Tab>\n <Tab\n $isActive={activeTab === \"roles\"}\n onClick={() => setActiveTab(\"roles\")}\n >\n <TabIcon>\n <Shield size={16} />\n Roles\n </TabIcon>\n </Tab>\n </TabsList>\n </TabsContainer>\n\n <TabContent>\n {activeTab === \"general\" && <GeneralSettingsSection />}\n {activeTab === \"members\" && <MembersSection />}\n {activeTab === \"invitations\" && <InvitationsSection />}\n {activeTab === \"roles\" && <RolesSection />}\n </TabContent>\n {toastMessage && (\n <div\n style={{\n position: \"absolute\",\n bottom: \"20px\",\n right: \"20px\",\n background: \"var(--color-input-background)\",\n border: \"1px solid var(--color-border)\",\n padding: \"12px 16px\",\n borderRadius: \"8px\",\n boxShadow: \"0 4px 12px var(--color-shadow)\",\n zIndex: 50,\n animation: \"slideUp 0.3s ease-out\",\n }}\n >\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}\n >\n {toastLevel === \"error\" ? (\n <AlertTriangle size={16} color=\"var(--color-error)\" />\n ) : (\n <Check size={16} color=\"var(--color-success)\" />\n )}\n <span\n style={{ fontSize: \"14px\", color: \"var(--color-foreground)\" }}\n >\n {toastMessage}\n </span>\n </div>\n </div>\n )}\n </Container>\n </TypographyProvider>\n </ScreenContext.Provider>\n );\n};\n","import type { FC, ReactNode } from \"react\";\nimport { Dialog } from \"../utility/dialog\";\nimport { ManageWorkspace } from \"./manage-workspace\";\n\ninterface ManageWorkspaceDialogProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n showHeader?: boolean;\n headerContent?: ReactNode;\n footerContent?: ReactNode;\n customContent?: ReactNode;\n children?: ReactNode;\n showCloseButton?: boolean;\n}\n\nexport const ManageWorkspaceDialog: FC<ManageWorkspaceDialogProps> = ({\n isOpen,\n onClose,\n title,\n showHeader,\n headerContent,\n footerContent,\n customContent,\n children,\n showCloseButton,\n}) => {\n return (\n <Dialog isOpen={isOpen} onClose={onClose}>\n <Dialog.Overlay>\n <Dialog.Content style={{ width: \"900px\", maxWidth: \"100%\" }}>\n {showHeader && (\n <Dialog.Header showCloseButton={showCloseButton}>\n {headerContent || title}\n </Dialog.Header>\n )}\n {customContent || children || <ManageWorkspace />}\n {footerContent && <Dialog.Footer>{footerContent}</Dialog.Footer>}\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog>\n );\n};","\"use client\";\n\nimport React, { useState, useRef, useEffect, useMemo } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport styled from \"styled-components\";\nimport {\n ChevronsUpDown,\n ChevronDown,\n ChevronRight,\n Plus,\n User,\n Settings,\n LogOut,\n} from \"lucide-react\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport {\n useActiveOrganization,\n useOrganizationMemberships,\n} from \"@/hooks/use-organization\";\nimport { useActiveWorkspace, useWorkspaceList } from \"@/hooks/use-workspace\";\nimport { useDeployment, useSession } from \"@/hooks\";\nimport CreateOrganizationDialog from \"./create-organization-dialog\";\nimport { ManageOrganizationDialog } from \"./manage-organization-dialog\";\nimport CreateWorkspaceDialog from \"../workspace/create-workspace-dialog\";\nimport { ManageWorkspaceDialog } from \"../workspace/manage-workspace-dialog\";\nimport { useDialog } from \"../utility/use-dialog\";\nimport type { WorkspaceWithOrganization } from \"@/types\";\nimport { useScreenContext } from \"./context\";\n\nconst Container = styled.div`\n position: relative;\n display: inline-block;\n width: 100%;\n max-width: 300px;\n`;\n\nconst SwitcherButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 10px;\n font-size: 14px;\n font-weight: 400;\n cursor: pointer;\n border: 1px solid var(--color-border);\n border-radius: 6px;\n background: var(--color-background);\n color: var(--color-foreground);\n transition: background 0.1s ease;\n min-width: 200px;\n min-height: 42px;\n width: 100%;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.7;\n }\n`;\n\nconst Avatar = styled.div`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-primary);\n color: white;\n font-size: 11px;\n font-weight: 600;\n flex-shrink: 0;\n`;\n\nconst AvatarImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst ButtonContent = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nconst OrgName = styled.span`\n font-weight: 400;\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--color-foreground);\n`;\n\nconst Dropdown = styled.div<{\n $isOpen: boolean;\n $position?: { top: number; left: number };\n}>`\n position: fixed;\n top: ${(props) => props.$position?.top ?? -9999}px;\n left: ${(props) => props.$position?.left ?? -9999}px;\n width: 300px;\n background: var(--color-background);\n border-radius: 8px;\n border: 1px solid var(--color-border);\n box-shadow:\n 0 2px 8px var(--color-shadow),\n 0 0 0 1px rgba(0, 0, 0, 0.02);\n z-index: 99999;\n overflow: hidden;\n visibility: ${(props) =>\n props.$position && props.$isOpen ? \"visible\" : \"hidden\"};\n opacity: ${(props) => (props.$isOpen && props.$position ? 1 : 0)};\n transform: ${(props) =>\n props.$isOpen ? \"translateY(0)\" : \"translateY(-8px)\"};\n pointer-events: ${(props) => (props.$isOpen ? \"auto\" : \"none\")};\n transition:\n opacity 0.15s ease,\n transform 0.15s ease,\n visibility 0s linear ${(props) => (props.$isOpen ? \"0s\" : \"0.15s\")};\n`;\n\nconst MenuItem = styled.div<{ $isActive?: boolean; as?: React.ElementType }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 10px 12px 10px 22px;\n text-align: left;\n font-size: 13px;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--color-foreground);\n transition: background 0.1s ease;\n position: relative;\n\n &:hover {\n background: var(--color-background-hover);\n\n .hover-arrow {\n opacity: 1;\n }\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.7;\n }\n`;\n\nconst HoverArrow = styled(ChevronRight)`\n opacity: 0;\n transition: opacity 0.1s ease;\n color: var(--color-secondary-text);\n`;\n\nconst Separator = styled.div`\n height: 1px;\n background: var(--color-border);\n`;\n\nconst MenuItemContent = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n`;\n\nconst MenuItemAvatar = styled.div`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-primary);\n color: white;\n font-size: 10px;\n font-weight: 600;\n flex-shrink: 0;\n`;\n\nconst MenuItemAvatarImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst MenuItemInfo = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n overflow: hidden;\n flex: 1;\n`;\n\nconst MenuItemName = styled.span`\n font-weight: 500;\n font-size: 13px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--color-foreground);\n`;\n\nconst MenuItemRole = styled.span`\n font-size: 10px;\n color: var(--color-secondary-text);\n font-weight: 400;\n`;\n\nconst ManageButton = styled.button`\n padding: 3px;\n border-radius: 4px;\n border: 1px solid var(--color-border);\n background: transparent;\n color: var(--color-secondary-text);\n cursor: pointer;\n transition: all 0.1s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n\n &:hover {\n background: var(--color-background-hover);\n color: var(--color-foreground);\n }\n`;\n\nconst LogoutButton = styled(ManageButton)`\n &:hover:not(:disabled) {\n background: var(--color-error-background);\n color: var(--color-error);\n border-color: var(--color-error);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst CreateOrgButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 10px 12px;\n text-align: left;\n font-size: 13px;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--color-foreground);\n transition: background 0.1s ease;\n position: relative;\n\n &:hover {\n background: var(--color-background-hover);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.7;\n }\n`;\n\nconst PlusIcon = styled.div`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n border: 1px dashed var(--color-border);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-secondary-text);\n background: var(--color-background-hover);\n`;\n\nconst ActiveIndicator = styled.div`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--color-primary);\n position: absolute;\n left: 8px;\n top: 50%;\n transform: translateY(-50%);\n`;\n\nconst PersonalIcon = styled.div`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--color-background-hover);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-secondary-text);\n overflow: hidden;\n`;\n\nconst PersonalAvatar = styled.img`\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst WorkspaceItem = styled(MenuItem)`\n padding-left: 40px;\n font-size: 11px;\n`;\n\nconst WorkspaceAvatar = styled.div`\n width: 16px;\n height: 16px;\n border-radius: 50%;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-border);\n color: var(--color-secondary-text);\n font-size: 9px;\n font-weight: 600;\n flex-shrink: 0;\n`;\n\nconst StatusMessage = styled.div<{ $isError?: boolean }>`\n padding: 8px 10px;\n border-radius: 4px;\n font-size: 10px;\n background: ${(props) =>\n props.$isError\n ? \"var(--color-error-background)\"\n : \"var(--color-primary-background)\"};\n color: ${(props) =>\n props.$isError ? \"var(--color-error)\" : \"var(--color-primary)\"};\n border: 1px solid\n ${(props) =>\n props.$isError ? \"var(--color-error)\" : \"var(--color-primary)\"};\n display: flex;\n align-items: center;\n gap: 6px;\n`;\n\nconst Spinner = styled.div`\n width: 12px;\n height: 12px;\n border: 2px solid transparent;\n border-top-color: currentColor;\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n`;\n\nconst ShimmerWrapper = styled.div`\n padding: 8px 0;\n`;\n\nconst ShimmerItem = styled.div`\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px 4px 8px;\n animation: shimmer 1.5s ease-in-out infinite;\n\n @keyframes shimmer {\n 0% {\n opacity: 0.5;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n opacity: 0.5;\n }\n }\n`;\n\nconst ShimmerAvatar = styled.div`\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--color-border);\n`;\n\nconst ShimmerContent = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n`;\n\nconst ShimmerLine = styled.div<{ width?: string }>`\n height: 12px;\n background: var(--color-border);\n border-radius: 4px;\n width: ${(props) => props.width || \"100%\"};\n`;\n\nconst ShimmerSmallLine = styled.div<{ width?: string }>`\n height: 10px;\n background: var(--color-border);\n border-radius: 4px;\n width: ${(props) => props.width || \"60%\"};\n`;\n\nconst SkeletonButton = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 10px;\n border: 1px solid var(--color-border);\n border-radius: 6px;\n background: var(--color-background);\n min-width: 200px;\n min-height: 42px;\n width: 100%;\n animation: pulse 1.5s ease-in-out infinite;\n\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n }\n`;\n\nconst SkeletonAvatar = styled.div`\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--color-border);\n`;\n\nconst SkeletonText = styled.div`\n height: 14px;\n width: 120px;\n background: var(--color-border);\n border-radius: 4px;\n`;\n\nconst SkeletonIcon = styled.div`\n width: 16px;\n height: 16px;\n background: var(--color-border);\n border-radius: 2px;\n`;\n\nexport const OrganizationSwitcher = () => {\n const [open, setOpen] = useState(false);\n const [isSwitching, setIsSwitching] = useState(false);\n const [expandedOrgs, setExpandedOrgs] = useState<Set<string>>(new Set());\n const [dropdownPosition, setDropdownPosition] = useState<\n { top: number; left: number } | undefined\n >();\n const dropdownRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const createOrgDialog = useDialog(false);\n const manageOrgDialog = useDialog(false);\n const createWorkspaceDialog = useDialog(false);\n const manageWorkspaceDialog = useDialog(false);\n const [selectedOrgForWorkspace, setSelectedOrgForWorkspace] = useState<\n string | null\n >(null);\n const [leavingOrg, setLeavingOrg] = useState(false);\n const [leaveError, setLeaveError] = useState<string | null>(null);\n\n const {\n organizationMemberships,\n loading: organizationLoading,\n refetch: refetchOrganizations,\n } = useOrganizationMemberships();\n const { activeOrganization, leave: leaveOrganization } =\n useActiveOrganization();\n const { activeWorkspace, leave: leaveWorkspace } = useActiveWorkspace();\n const { workspaces: workspaceList, loading: workspacesLoading } =\n useWorkspaceList();\n const {\n session,\n loading: sessionLoading,\n switchOrganization,\n switchWorkspace,\n } = useSession();\n const { deployment } = useDeployment();\n const { toast } = useScreenContext();\n\n const organizationsEnabled = deployment?.b2b_settings.organizations_enabled;\n const workspacesEnabled = deployment?.b2b_settings.workspaces_enabled;\n const allowUsersToCreateOrgs =\n deployment?.b2b_settings.allow_users_to_create_orgs;\n\n const isPersonalActive =\n !session?.active_signin?.active_organization_membership_id;\n\n const currentDisplay = useMemo(() => {\n if (isPersonalActive) {\n return {\n name: \"Personal account\",\n image_url: session?.active_signin?.user?.profile_picture_url,\n isPersonal: true,\n };\n }\n\n let displayName = activeOrganization?.name || \"\";\n if (workspacesEnabled && activeWorkspace) {\n displayName = `${activeOrganization?.name} / ${activeWorkspace.name}`;\n }\n\n return {\n name: displayName,\n image_url: activeOrganization?.image_url,\n isPersonal: false,\n };\n }, [\n isPersonalActive,\n activeOrganization,\n activeWorkspace,\n session,\n workspacesEnabled,\n ]);\n\n useEffect(() => {\n if (!open) return;\n\n let cleanupFn: (() => void) | null = null;\n\n // Small delay to ensure Portal is mounted and refs are attached\n const timer = setTimeout(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n\n // Check if target is the button or inside the button\n if (buttonRef.current?.contains(target)) {\n return;\n }\n\n // Check if target is the dropdown or inside the dropdown\n if (dropdownRef.current?.contains(target)) {\n return;\n }\n\n // If we get here, click was outside both elements\n setOpen(false);\n setLeaveError(null);\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n cleanupFn = () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, 50);\n\n return () => {\n clearTimeout(timer);\n cleanupFn?.();\n };\n }, [open]);\n\n // Update dropdown position when open\n useEffect(() => {\n if (open && buttonRef.current) {\n // Small delay to ensure button ref is properly measured\n requestAnimationFrame(() => {\n if (buttonRef.current) {\n const rect = buttonRef.current.getBoundingClientRect();\n setDropdownPosition({\n top: rect.bottom + 8,\n left: rect.left,\n });\n }\n });\n } else {\n // Clear position when closing to prevent stale positions\n setDropdownPosition(undefined);\n }\n }, [open]);\n\n // Clear error after 5 seconds\n useEffect(() => {\n if (leaveError) {\n const timer = setTimeout(() => {\n setLeaveError(null);\n }, 5000);\n return () => clearTimeout(timer);\n }\n }, [leaveError]);\n\n const handleOrganizationCreated = () => {\n refetchOrganizations();\n };\n\n if (!organizationsEnabled) {\n return null;\n }\n\n const handleSwitchOrganization = (orgId?: string) => {\n setIsSwitching(true);\n switchOrganization(orgId).finally(() => {\n setIsSwitching(false);\n // Don't close dropdown - let user continue exploring or click outside to close\n });\n };\n\n const handleSwitchWorkspace = (workspaceId: string) => {\n setIsSwitching(true);\n switchWorkspace(workspaceId).finally(() => {\n setIsSwitching(false);\n // Don't close dropdown - let user continue exploring or click outside to close\n });\n };\n\n const toggleOrgExpanded = (orgId: string) => {\n const newExpanded = new Set(expandedOrgs);\n if (newExpanded.has(orgId)) {\n newExpanded.delete(orgId);\n } else {\n newExpanded.add(orgId);\n }\n setExpandedOrgs(newExpanded);\n };\n\n const getInitials = (name: string) => {\n return name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n };\n\n // Show skeleton loader while initial data is loading\n if (organizationLoading || sessionLoading) {\n return (\n <DefaultStylesProvider>\n <Container>\n <SkeletonButton>\n <ButtonContent>\n <SkeletonAvatar />\n <SkeletonText />\n </ButtonContent>\n <SkeletonIcon />\n </SkeletonButton>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n return (\n <DefaultStylesProvider>\n <Container>\n <SwitcherButton\n ref={buttonRef}\n onClick={() => {\n setOpen(!open);\n if (!open) {\n setLeaveError(null);\n }\n }}\n disabled={isSwitching}\n >\n <ButtonContent>\n <Avatar>\n {currentDisplay.image_url ? (\n <AvatarImage\n src={currentDisplay.image_url}\n alt={currentDisplay.name}\n />\n ) : currentDisplay.isPersonal ? (\n <User size={12} />\n ) : (\n getInitials(currentDisplay.name)\n )}\n </Avatar>\n <OrgName>{currentDisplay.name}</OrgName>\n </ButtonContent>\n <ChevronsUpDown size={16} />\n </SwitcherButton>\n\n {typeof window !== \"undefined\" &&\n ReactDOM.createPortal(\n <DefaultStylesProvider>\n <Dropdown\n ref={dropdownRef}\n $isOpen={open}\n $position={dropdownPosition}\n >\n {organizationLoading || workspacesLoading ? (\n <ShimmerWrapper>\n {/* Show current active item shimmer */}\n <ShimmerItem>\n <ShimmerAvatar />\n <ShimmerContent>\n <ShimmerLine width=\"120px\" />\n <ShimmerSmallLine width=\"80px\" />\n </ShimmerContent>\n </ShimmerItem>\n <Separator />\n\n {/* Show 2-3 organization shimmers */}\n <ShimmerItem>\n <ShimmerAvatar />\n <ShimmerContent>\n <ShimmerLine width=\"100px\" />\n </ShimmerContent>\n </ShimmerItem>\n <Separator />\n\n <ShimmerItem>\n <ShimmerAvatar />\n <ShimmerContent>\n <ShimmerLine width=\"140px\" />\n <ShimmerSmallLine width=\"60px\" />\n </ShimmerContent>\n </ShimmerItem>\n <Separator />\n\n <ShimmerItem>\n <ShimmerAvatar />\n <ShimmerContent>\n <ShimmerLine width=\"110px\" />\n </ShimmerContent>\n </ShimmerItem>\n </ShimmerWrapper>\n ) : (\n <div>\n {/* Always show personal account first */}\n <MenuItem\n as=\"button\"\n $isActive={isPersonalActive}\n onClick={(e) => {\n e.stopPropagation();\n if (!isPersonalActive) {\n handleSwitchOrganization();\n }\n }}\n disabled={isSwitching || isPersonalActive}\n >\n {isPersonalActive && <ActiveIndicator />}\n <MenuItemContent>\n <PersonalIcon>\n {session?.active_signin?.user?.profile_picture_url ? (\n <PersonalAvatar\n src={\n session.active_signin.user.profile_picture_url\n }\n alt=\"Personal account\"\n />\n ) : (\n <User size={12} />\n )}\n </PersonalIcon>\n <MenuItemInfo>\n <MenuItemName>Personal account</MenuItemName>\n </MenuItemInfo>\n </MenuItemContent>\n {!isPersonalActive && (\n <HoverArrow className=\"hover-arrow\" size={14} />\n )}\n </MenuItem>\n\n {/* Only show separator if we're going to show an active organization */}\n {!isPersonalActive && activeOrganization && <Separator />}\n\n {/* Show active organization if not personal */}\n {!isPersonalActive && activeOrganization && (\n <MenuItem\n $isActive={true}\n onClick={() => {\n if (workspacesEnabled) {\n toggleOrgExpanded(activeOrganization.id);\n }\n }}\n style={\n isSwitching\n ? { pointerEvents: \"none\", opacity: 0.7 }\n : undefined\n }\n >\n <ActiveIndicator />\n <MenuItemContent>\n {workspacesEnabled && (\n <ChevronDown\n size={12}\n style={{\n marginRight: \"4px\",\n transform: expandedOrgs.has(\n activeOrganization.id,\n )\n ? \"rotate(0deg)\"\n : \"rotate(-90deg)\",\n transition: \"transform 0.2s ease\",\n color: \"var(--color-secondary-text)\",\n }}\n />\n )}\n <MenuItemAvatar>\n {activeOrganization.image_url ? (\n <MenuItemAvatarImage\n src={activeOrganization.image_url}\n alt={activeOrganization.name}\n />\n ) : (\n getInitials(activeOrganization.name)\n )}\n </MenuItemAvatar>\n <MenuItemInfo>\n <MenuItemName>\n {activeOrganization.name}\n </MenuItemName>\n {(() => {\n const membership = organizationMemberships?.find(\n (m) =>\n m.organization.id === activeOrganization.id,\n );\n if (\n membership?.role &&\n membership.role.length > 0\n ) {\n return (\n <MenuItemRole>\n {membership.role[0].name === \"owner\"\n ? \"Owner\"\n : membership.role[0].name === \"admin\"\n ? \"Admin\"\n : \"Member\"}\n </MenuItemRole>\n );\n }\n return null;\n })()}\n </MenuItemInfo>\n </MenuItemContent>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <ManageButton\n onClick={(e) => {\n e.stopPropagation();\n manageOrgDialog.open();\n // Keep dropdown open\n }}\n title=\"Manage organization\"\n >\n <Settings size={12} />\n </ManageButton>\n <LogoutButton\n onClick={async (e) => {\n e.stopPropagation();\n setLeavingOrg(true);\n setLeaveError(null);\n try {\n await leaveOrganization();\n await refetchOrganizations();\n setTimeout(() => {\n // Keep dropdown open after leaving org\n setLeavingOrg(false);\n }, 500);\n } catch (error) {\n setLeaveError(\n error instanceof Error\n ? error.message\n : \"Failed to leave organization\",\n );\n setLeavingOrg(false);\n }\n }}\n disabled={leavingOrg}\n title=\"Leave organization\"\n >\n <LogOut size={12} />\n </LogoutButton>\n </div>\n </MenuItem>\n )}\n\n {/* Show workspaces if active org is expanded */}\n {activeOrganization &&\n workspacesEnabled &&\n expandedOrgs.has(activeOrganization.id) && (\n <>\n {workspaceList\n ?.filter(\n (w: WorkspaceWithOrganization) =>\n w.organization.id === activeOrganization.id,\n )\n .map((workspace: WorkspaceWithOrganization) => {\n const isWorkspaceActive =\n activeWorkspace?.id === workspace.id;\n return (\n <WorkspaceItem\n as={isWorkspaceActive ? undefined : \"button\"}\n key={workspace.id}\n $isActive={isWorkspaceActive}\n onClick={\n isWorkspaceActive\n ? undefined\n : () =>\n handleSwitchWorkspace(workspace.id)\n }\n {...(isWorkspaceActive\n ? {\n style: isSwitching\n ? {\n pointerEvents: \"none\",\n opacity: 0.7,\n }\n : undefined,\n }\n : { disabled: isSwitching })}\n >\n {isWorkspaceActive && <ActiveIndicator />}\n <MenuItemContent>\n <WorkspaceAvatar>\n {workspace.image_url ? (\n <img\n src={workspace.image_url}\n alt={workspace.name}\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n }}\n />\n ) : (\n getInitials(workspace.name).charAt(0)\n )}\n </WorkspaceAvatar>\n <MenuItemInfo>\n <MenuItemName>\n {workspace.name}\n </MenuItemName>\n </MenuItemInfo>\n </MenuItemContent>\n {isWorkspaceActive ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <ManageButton\n onClick={(e) => {\n e.stopPropagation();\n manageWorkspaceDialog.open();\n // Keep dropdown open\n }}\n title=\"Manage workspace\"\n >\n <Settings size={12} />\n </ManageButton>\n <LogoutButton\n onClick={async (e) => {\n e.stopPropagation();\n try {\n if (leaveWorkspace) {\n await leaveWorkspace();\n // Keep dropdown open\n }\n } catch (error: any) {\n const errorMessage =\n error.message ||\n \"Failed to leave workspace. Please try again.\";\n toast(errorMessage, \"error\");\n }\n }}\n title=\"Leave workspace\"\n >\n <LogOut size={12} />\n </LogoutButton>\n </div>\n ) : (\n <HoverArrow\n className=\"hover-arrow\"\n size={14}\n />\n )}\n </WorkspaceItem>\n );\n })}\n <WorkspaceItem\n as=\"button\"\n onClick={() => {\n setSelectedOrgForWorkspace(activeOrganization.id);\n createWorkspaceDialog.open();\n // Keep dropdown open\n }}\n disabled={isSwitching}\n >\n <MenuItemContent>\n <PlusIcon\n style={{ width: \"14px\", height: \"14px\" }}\n >\n <Plus size={12} />\n </PlusIcon>\n <MenuItemInfo>\n <MenuItemName>Create workspace</MenuItemName>\n </MenuItemInfo>\n </MenuItemContent>\n </WorkspaceItem>\n </>\n )}\n\n {/* Show status messages */}\n {(leavingOrg || leaveError) && (\n <>\n {leavingOrg && (\n <StatusMessage>\n <Spinner />\n Leaving organization...\n </StatusMessage>\n )}\n {leaveError && (\n <StatusMessage $isError>\n <span>⚠️</span>\n {leaveError}\n </StatusMessage>\n )}\n </>\n )}\n\n <Separator />\n\n {organizationMemberships &&\n organizationMemberships.length > 0 && (\n <>\n {organizationMemberships\n .filter(\n (m) =>\n m.organization.id !== activeOrganization?.id,\n )\n .map((membership, index, filteredArray) => {\n const org = membership.organization;\n const orgWorkspaces =\n workspaceList?.filter(\n (w: WorkspaceWithOrganization) =>\n w.organization.id === org.id,\n ) || [];\n const isExpanded = expandedOrgs.has(org.id);\n\n return (\n <React.Fragment key={org.id}>\n <MenuItem\n as=\"button\"\n $isActive={false}\n onClick={() => {\n if (workspacesEnabled) {\n toggleOrgExpanded(org.id);\n } else {\n handleSwitchOrganization(org.id);\n }\n }}\n disabled={isSwitching}\n >\n <MenuItemContent>\n {workspacesEnabled && (\n <ChevronDown\n size={12}\n style={{\n marginRight: \"4px\",\n transform: isExpanded\n ? \"rotate(0deg)\"\n : \"rotate(-90deg)\",\n transition: \"transform 0.2s ease\",\n color:\n \"var(--color-secondary-text)\",\n }}\n />\n )}\n <MenuItemAvatar>\n {org.image_url ? (\n <MenuItemAvatarImage\n src={org.image_url}\n alt={org.name}\n />\n ) : (\n getInitials(org.name)\n )}\n </MenuItemAvatar>\n <MenuItemInfo>\n <MenuItemName>{org.name}</MenuItemName>\n {membership.role &&\n membership.role.length > 0 && (\n <MenuItemRole>\n {membership.role[0].name ===\n \"owner\"\n ? \"Owner\"\n : membership.role[0].name ===\n \"admin\"\n ? \"Admin\"\n : \"Member\"}\n </MenuItemRole>\n )}\n </MenuItemInfo>\n </MenuItemContent>\n <HoverArrow\n className=\"hover-arrow\"\n size={14}\n />\n </MenuItem>\n\n {workspacesEnabled && isExpanded && (\n <>\n {orgWorkspaces.map(\n (\n workspace: WorkspaceWithOrganization,\n ) => {\n const isWorkspaceActive =\n activeWorkspace?.id ===\n workspace.id;\n return (\n <WorkspaceItem\n as={\n isWorkspaceActive\n ? undefined\n : \"button\"\n }\n key={workspace.id}\n $isActive={isWorkspaceActive}\n onClick={\n isWorkspaceActive\n ? undefined\n : () =>\n handleSwitchWorkspace(\n workspace.id,\n )\n }\n {...(isWorkspaceActive\n ? {\n style: isSwitching\n ? {\n pointerEvents: \"none\",\n opacity: 0.7,\n }\n : undefined,\n }\n : { disabled: isSwitching })}\n >\n {isWorkspaceActive && (\n <ActiveIndicator />\n )}\n <MenuItemContent>\n <WorkspaceAvatar>\n {workspace.image_url ? (\n <img\n src={workspace.image_url}\n alt={workspace.name}\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n }}\n />\n ) : (\n getInitials(\n workspace.name,\n ).charAt(0)\n )}\n </WorkspaceAvatar>\n <MenuItemInfo>\n <MenuItemName>\n {workspace.name}\n </MenuItemName>\n </MenuItemInfo>\n </MenuItemContent>\n {isWorkspaceActive ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <ManageButton\n onClick={(e) => {\n e.stopPropagation();\n manageWorkspaceDialog.open();\n // Keep dropdown open\n }}\n title=\"Manage workspace\"\n >\n <Settings size={12} />\n </ManageButton>\n <LogoutButton\n onClick={async (e) => {\n e.stopPropagation();\n try {\n if (leaveWorkspace) {\n await leaveWorkspace();\n // Keep dropdown open\n }\n } catch (error: any) {\n const errorMessage =\n error.message ||\n \"Failed to leave workspace. Please try again.\";\n toast(\n errorMessage,\n \"error\",\n );\n }\n }}\n title=\"Leave workspace\"\n >\n <LogOut size={12} />\n </LogoutButton>\n </div>\n ) : (\n <HoverArrow\n className=\"hover-arrow\"\n size={16}\n />\n )}\n </WorkspaceItem>\n );\n },\n )}\n <WorkspaceItem\n as=\"button\"\n onClick={() => {\n setSelectedOrgForWorkspace(org.id);\n createWorkspaceDialog.open();\n // Keep dropdown open\n }}\n disabled={isSwitching}\n >\n <MenuItemContent>\n <PlusIcon\n style={{\n width: \"14px\",\n height: \"14px\",\n }}\n >\n <Plus size={10} />\n </PlusIcon>\n <MenuItemInfo>\n <MenuItemName>\n Create workspace\n </MenuItemName>\n </MenuItemInfo>\n </MenuItemContent>\n </WorkspaceItem>\n </>\n )}\n {index < filteredArray.length - 1 && (\n <Separator />\n )}\n </React.Fragment>\n );\n })}\n </>\n )}\n\n {/* Always show create organization button at bottom */}\n {allowUsersToCreateOrgs && (\n <>\n <CreateOrgButton\n onClick={() => {\n createOrgDialog.open();\n // Keep dropdown open\n }}\n disabled={isSwitching}\n >\n <MenuItemContent>\n <PlusIcon>\n <Plus size={12} />\n </PlusIcon>\n <MenuItemInfo>\n <MenuItemName>Create organization</MenuItemName>\n </MenuItemInfo>\n </MenuItemContent>\n </CreateOrgButton>\n </>\n )}\n </div>\n )}\n </Dropdown>\n </DefaultStylesProvider>,\n document.body,\n )}\n\n {organizationsEnabled && allowUsersToCreateOrgs && (\n <CreateOrganizationDialog\n isOpen={createOrgDialog.isOpen}\n onClose={createOrgDialog.close}\n onCreated={handleOrganizationCreated}\n />\n )}\n\n <ManageOrganizationDialog\n isOpen={manageOrgDialog.isOpen}\n onClose={manageOrgDialog.close}\n />\n\n <ManageWorkspaceDialog\n isOpen={manageWorkspaceDialog.isOpen}\n onClose={manageWorkspaceDialog.close}\n />\n\n {selectedOrgForWorkspace && (\n <CreateWorkspaceDialog\n isOpen={createWorkspaceDialog.isOpen}\n onClose={() => {\n createWorkspaceDialog.close();\n setSelectedOrgForWorkspace(null);\n }}\n organizationId={selectedOrgForWorkspace}\n />\n )}\n </Container>\n </DefaultStylesProvider>\n );\n};\n\nexport default OrganizationSwitcher;\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/index.tsx\nimport React from \"react\";\n\n// src/third-party/qrcodegen/index.ts\n/**\n * @license QR Code generator library (TypeScript)\n * Copyright (c) Project Nayuki.\n * SPDX-License-Identifier: MIT\n */\nvar qrcodegen;\n((qrcodegen2) => {\n const _QrCode = class _QrCode {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code with the given version number,\n // error correction level, data codeword bytes, and mask number.\n // This is a low-level API that most users should not use directly.\n // A mid-level API is the encodeSegments() function.\n constructor(version, errorCorrectionLevel, dataCodewords, msk) {\n this.version = version;\n this.errorCorrectionLevel = errorCorrectionLevel;\n // The modules of this QR Code (false = light, true = dark).\n // Immutable after constructor finishes. Accessed through getModule().\n this.modules = [];\n // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n this.isFunction = [];\n if (version < _QrCode.MIN_VERSION || version > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n let row = [];\n for (let i = 0; i < this.size; i++)\n row.push(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.isFunction.push(row.slice());\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk == -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n assert(0 <= msk && msk <= 7);\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n this.isFunction = [];\n }\n /*-- Static factory functions (high level) --*/\n // Returns a QR Code representing the given Unicode text string at the given error correction level.\n // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer\n // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the\n // ecl argument if it can be done without increasing the version.\n static encodeText(text, ecl) {\n const segs = qrcodegen2.QrSegment.makeSegments(text);\n return _QrCode.encodeSegments(segs, ecl);\n }\n // Returns a QR Code representing the given binary data at the given error correction level.\n // This function always encodes using the binary segment mode, not any text mode. The maximum number of\n // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.\n // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.\n static encodeBinary(data, ecl) {\n const seg = qrcodegen2.QrSegment.makeBytes(data);\n return _QrCode.encodeSegments([seg], ecl);\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a QR Code representing the given segments with the given encoding parameters.\n // The smallest possible QR Code version within the given range is automatically\n // chosen for the output. Iff boostEcl is true, then the ECC level of the result\n // may be higher than the ecl argument if it can be done without increasing the\n // version. The mask number is either between 0 to 7 (inclusive) to force that\n // mask, or -1 to automatically choose an appropriate mask (which may be slow).\n // This function allows the user to create a custom sequence of segments that switches\n // between modes (such as alphanumeric and byte) to encode text in less space.\n // This is a mid-level API; the high-level API is encodeText() and encodeBinary().\n static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(_QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= _QrCode.MAX_VERSION) || mask < -1 || mask > 7)\n throw new RangeError(\"Invalid value\");\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = _QrCode.getNumDataCodewords(version, ecl) * 8;\n const usedBits = QrSegment.getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [_QrCode.Ecc.MEDIUM, _QrCode.Ecc.QUARTILE, _QrCode.Ecc.HIGH]) {\n if (boostEcl && dataUsedBits <= _QrCode.getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n let bb = [];\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n assert(bb.length == dataUsedBits);\n const dataCapacityBits = _QrCode.getNumDataCodewords(version, ecl) * 8;\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n assert(bb.length % 8 == 0);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n let dataCodewords = [];\n while (dataCodewords.length * 8 < bb.length)\n dataCodewords.push(0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new _QrCode(version, ecl, dataCodewords, mask);\n }\n /*-- Accessor methods --*/\n // Returns the color of the module (pixel) at the given coordinates, which is false\n // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n // If the given coordinates are out of bounds, then false (light) is returned.\n getModule(x, y) {\n return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];\n }\n // Modified to expose modules for easy access\n getModules() {\n return this.modules;\n }\n /*-- Private helper methods for constructor: Drawing function modules --*/\n // Reads this object's version field, and draws and marks all function modules.\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 == 0);\n this.setFunctionModule(i, 6, i % 2 == 0);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n // Draws two copies of the format bits (with its own error correction code)\n // based on the given mask and this object's error correction level field.\n drawFormatBits(mask) {\n const data = this.errorCorrectionLevel.formatBits << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n assert(bits >>> 15 == 0);\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n // Draws two copies of the version bits (with its own error correction code),\n // based on this object's version field, iff 7 <= version <= 40.\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n assert(bits >>> 18 == 0);\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // Draws a 9*9 finder pattern including the border separator,\n // with the center module at (x, y). Modules can be out of bounds.\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n this.setFunctionModule(xx, yy, dist != 2 && dist != 4);\n }\n }\n }\n // Draws a 5*5 alignment pattern, with the center module\n // at (x, y). All modules must be in bounds.\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++)\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);\n }\n }\n // Sets the color of a module and marks it as a function module.\n // Only used by the constructor. Coordinates must be in bounds.\n setFunctionModule(x, y, isDark) {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n /*-- Private helper methods for constructor: Codewords and masking --*/\n // Returns a new byte string representing the given data with the appropriate error correction\n // codewords appended to it, based on this object's version and error correction level.\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.errorCorrectionLevel;\n if (data.length != _QrCode.getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n const blockEccLen = _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];\n const rawCodewords = Math.floor(_QrCode.getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n let blocks = [];\n const rsDiv = _QrCode.reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = _QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n let result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n assert(result.length == rawCodewords);\n return result;\n }\n // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n // data area of this QR Code. Function modules need to be marked off before this is called.\n drawCodewords(data) {\n if (data.length != Math.floor(_QrCode.getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right == 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) == 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.isFunction[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n assert(i == data.length * 8);\n }\n // XORs the codeword modules in this QR Code with the given mask pattern.\n // The function modules must be marked and the codeword bits must be drawn\n // before masking. Due to the arithmetic of XOR, calling applyMask() with\n // the same mask value a second time will undo the mask. A final well-formed\n // QR Code needs exactly one (not zero, two, etc.) mask applied.\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 == 0;\n break;\n case 1:\n invert = y % 2 == 0;\n break;\n case 2:\n invert = x % 3 == 0;\n break;\n case 3:\n invert = (x + y) % 3 == 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 == 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 == 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 == 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.isFunction[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n // Calculates and returns the penalty score based on state of this QR Code's current modules.\n // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] == runColor) {\n runX++;\n if (runX == 5)\n result += _QrCode.PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] == runColor) {\n runY++;\n if (runY == 5)\n result += _QrCode.PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])\n result += _QrCode.PENALTY_N2;\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n assert(0 <= k && k <= 9);\n result += k * _QrCode.PENALTY_N4;\n assert(0 <= result && result <= 2568888);\n return result;\n }\n /*-- Private helper functions --*/\n // Returns an ascending list of positions of alignment patterns for this version number.\n // Each position is in the range [0,177), and are used on both the x and y axes.\n // This could be implemented as lookup table of 40 variable-length lists of integers.\n getAlignmentPatternPositions() {\n if (this.version == 1)\n return [];\n else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n let result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n // Returns the number of data bits that can be stored in a QR Code of the given version number, after\n // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.\n // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.\n static getNumRawDataModules(ver) {\n if (ver < _QrCode.MIN_VERSION || ver > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n }\n // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any\n // QR Code of the given version number and error correction level, with remainder bits discarded.\n // This stateless pure function could be implemented as a (40*4)-cell lookup table.\n static getNumDataCodewords(ver, ecl) {\n return Math.floor(_QrCode.getNumRawDataModules(ver) / 8) - _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n }\n // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be\n // implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n static reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n let result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = _QrCode.reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = _QrCode.reedSolomonMultiply(root, 2);\n }\n return result;\n }\n // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials.\n static reedSolomonComputeRemainder(data, divisor) {\n let result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= _QrCode.reedSolomonMultiply(coef, factor));\n }\n return result;\n }\n // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n static reedSolomonMultiply(x, y) {\n if (x >>> 8 != 0 || y >>> 8 != 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n assert(z >>> 8 == 0);\n return z;\n }\n // Can only be called immediately after a light run is added, and\n // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n assert(n <= this.size * 3);\n const core = n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] == 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n };\n /*-- Constants and tables --*/\n // The minimum version number supported in the QR Code Model 2 standard.\n _QrCode.MIN_VERSION = 1;\n // The maximum version number supported in the QR Code Model 2 standard.\n _QrCode.MAX_VERSION = 40;\n // For use in getPenaltyScore(), when evaluating which mask is best.\n _QrCode.PENALTY_N1 = 3;\n _QrCode.PENALTY_N2 = 3;\n _QrCode.PENALTY_N3 = 40;\n _QrCode.PENALTY_N4 = 10;\n _QrCode.ECC_CODEWORDS_PER_BLOCK = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Low\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n // Medium\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Quartile\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n // High\n ];\n _QrCode.NUM_ERROR_CORRECTION_BLOCKS = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n // Low\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n // Medium\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n // Quartile\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n // High\n ];\n let QrCode = _QrCode;\n qrcodegen2.QrCode = _QrCode;\n function appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len != 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n }\n function getBit(x, i) {\n return (x >>> i & 1) != 0;\n }\n function assert(cond) {\n if (!cond)\n throw new Error(\"Assertion error\");\n }\n const _QrSegment = class _QrSegment {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code segment with the given attributes and data.\n // The character count (numChars) must agree with the mode and the bit buffer length,\n // but the constraint isn't checked. The given bit buffer is cloned and stored.\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a segment representing the given binary data encoded in\n // byte mode. All input byte arrays are acceptable. Any text string\n // can be converted to UTF-8 bytes and encoded as a byte mode segment.\n static makeBytes(data) {\n let bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new _QrSegment(_QrSegment.Mode.BYTE, data.length, bb);\n }\n // Returns a segment representing the given string of decimal digits encoded in numeric mode.\n static makeNumeric(digits) {\n if (!_QrSegment.isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n let bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new _QrSegment(_QrSegment.Mode.NUMERIC, digits.length, bb);\n }\n // Returns a segment representing the given text string encoded in alphanumeric mode.\n // The characters allowed are: 0 to 9, A to Z (uppercase only), space,\n // dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static makeAlphanumeric(text) {\n if (!_QrSegment.isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n let bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(_QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new _QrSegment(_QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n }\n // Returns a new mutable list of zero or more segments to represent the given Unicode text string.\n // The result may use various segment modes and switch modes to optimize the length of the bit stream.\n static makeSegments(text) {\n if (text == \"\")\n return [];\n else if (_QrSegment.isNumeric(text))\n return [_QrSegment.makeNumeric(text)];\n else if (_QrSegment.isAlphanumeric(text))\n return [_QrSegment.makeAlphanumeric(text)];\n else\n return [_QrSegment.makeBytes(_QrSegment.toUtf8ByteArray(text))];\n }\n // Returns a segment representing an Extended Channel Interpretation\n // (ECI) designator with the given assignment value.\n static makeEci(assignVal) {\n let bb = [];\n if (assignVal < 0)\n throw new RangeError(\"ECI assignment value out of range\");\n else if (assignVal < 1 << 7)\n appendBits(assignVal, 8, bb);\n else if (assignVal < 1 << 14) {\n appendBits(2, 2, bb);\n appendBits(assignVal, 14, bb);\n } else if (assignVal < 1e6) {\n appendBits(6, 3, bb);\n appendBits(assignVal, 21, bb);\n } else\n throw new RangeError(\"ECI assignment value out of range\");\n return new _QrSegment(_QrSegment.Mode.ECI, 0, bb);\n }\n // Tests whether the given string can be encoded as a segment in numeric mode.\n // A string is encodable iff each character is in the range 0 to 9.\n static isNumeric(text) {\n return _QrSegment.NUMERIC_REGEX.test(text);\n }\n // Tests whether the given string can be encoded as a segment in alphanumeric mode.\n // A string is encodable iff each character is in the following set: 0 to 9, A to Z\n // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static isAlphanumeric(text) {\n return _QrSegment.ALPHANUMERIC_REGEX.test(text);\n }\n /*-- Methods --*/\n // Returns a new copy of the data bits of this segment.\n getData() {\n return this.bitData.slice();\n }\n // (Package-private) Calculates and returns the number of bits needed to encode the given segments at\n // the given version. The result is infinity if a segment has too many characters to fit its length field.\n static getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = seg.mode.numCharCountBits(version);\n if (seg.numChars >= 1 << ccbits)\n return Infinity;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n }\n // Returns a new array of bytes representing the given string encoded in UTF-8.\n static toUtf8ByteArray(str) {\n str = encodeURI(str);\n let result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) != \"%\")\n result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n }\n };\n /*-- Constants --*/\n // Describes precisely all strings that are encodable in numeric mode.\n _QrSegment.NUMERIC_REGEX = /^[0-9]*$/;\n // Describes precisely all strings that are encodable in alphanumeric mode.\n _QrSegment.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\\/:-]*$/;\n // The set of all legal characters in alphanumeric mode,\n // where each character value maps to the index in the string.\n _QrSegment.ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n let QrSegment = _QrSegment;\n qrcodegen2.QrSegment = _QrSegment;\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrCode;\n ((QrCode2) => {\n const _Ecc = class _Ecc {\n // The QR Code can tolerate about 30% erroneous codewords\n /*-- Constructor and fields --*/\n constructor(ordinal, formatBits) {\n this.ordinal = ordinal;\n this.formatBits = formatBits;\n }\n };\n /*-- Constants --*/\n _Ecc.LOW = new _Ecc(0, 1);\n // The QR Code can tolerate about 7% erroneous codewords\n _Ecc.MEDIUM = new _Ecc(1, 0);\n // The QR Code can tolerate about 15% erroneous codewords\n _Ecc.QUARTILE = new _Ecc(2, 3);\n // The QR Code can tolerate about 25% erroneous codewords\n _Ecc.HIGH = new _Ecc(3, 2);\n let Ecc = _Ecc;\n QrCode2.Ecc = _Ecc;\n })(QrCode = qrcodegen2.QrCode || (qrcodegen2.QrCode = {}));\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrSegment;\n ((QrSegment2) => {\n const _Mode = class _Mode {\n /*-- Constructor and fields --*/\n constructor(modeBits, numBitsCharCount) {\n this.modeBits = modeBits;\n this.numBitsCharCount = numBitsCharCount;\n }\n /*-- Method --*/\n // (Package-private) Returns the bit width of the character count field for a segment in\n // this mode in a QR Code at the given version number. The result is in the range [0, 16].\n numCharCountBits(ver) {\n return this.numBitsCharCount[Math.floor((ver + 7) / 17)];\n }\n };\n /*-- Constants --*/\n _Mode.NUMERIC = new _Mode(1, [10, 12, 14]);\n _Mode.ALPHANUMERIC = new _Mode(2, [9, 11, 13]);\n _Mode.BYTE = new _Mode(4, [8, 16, 16]);\n _Mode.KANJI = new _Mode(8, [8, 10, 12]);\n _Mode.ECI = new _Mode(7, [0, 0, 0]);\n let Mode = _Mode;\n QrSegment2.Mode = _Mode;\n })(QrSegment = qrcodegen2.QrSegment || (qrcodegen2.QrSegment = {}));\n})(qrcodegen || (qrcodegen = {}));\nvar qrcodegen_default = qrcodegen;\n\n// src/index.tsx\n/**\n * @license qrcode.react\n * Copyright (c) Paul O'Shannessy\n * SPDX-License-Identifier: ISC\n */\nvar ERROR_LEVEL_MAP = {\n L: qrcodegen_default.QrCode.Ecc.LOW,\n M: qrcodegen_default.QrCode.Ecc.MEDIUM,\n Q: qrcodegen_default.QrCode.Ecc.QUARTILE,\n H: qrcodegen_default.QrCode.Ecc.HIGH\n};\nvar DEFAULT_SIZE = 128;\nvar DEFAULT_LEVEL = \"L\";\nvar DEFAULT_BGCOLOR = \"#FFFFFF\";\nvar DEFAULT_FGCOLOR = \"#000000\";\nvar DEFAULT_INCLUDEMARGIN = false;\nvar DEFAULT_MINVERSION = 1;\nvar SPEC_MARGIN_SIZE = 4;\nvar DEFAULT_MARGIN_SIZE = 0;\nvar DEFAULT_IMG_SCALE = 0.1;\nfunction generatePath(modules, margin = 0) {\n const ops = [];\n modules.forEach(function(row, y) {\n let start = null;\n row.forEach(function(cell, x) {\n if (!cell && start !== null) {\n ops.push(\n `M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`\n );\n start = null;\n return;\n }\n if (x === row.length - 1) {\n if (!cell) {\n return;\n }\n if (start === null) {\n ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n } else {\n ops.push(\n `M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`\n );\n }\n return;\n }\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join(\"\");\n}\nfunction excavateModules(modules, excavation) {\n return modules.slice().map((row, y) => {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n return row.map((cell, x) => {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n return false;\n });\n });\n}\nfunction getImageSettings(cells, size, margin, imageSettings) {\n if (imageSettings == null) {\n return null;\n }\n const numCells = cells.length + margin * 2;\n const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n const scale = numCells / size;\n const w = (imageSettings.width || defaultSize) * scale;\n const h = (imageSettings.height || defaultSize) * scale;\n const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n const y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n const opacity = imageSettings.opacity == null ? 1 : imageSettings.opacity;\n let excavation = null;\n if (imageSettings.excavate) {\n let floorX = Math.floor(x);\n let floorY = Math.floor(y);\n let ceilW = Math.ceil(w + x - floorX);\n let ceilH = Math.ceil(h + y - floorY);\n excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };\n }\n const crossOrigin = imageSettings.crossOrigin;\n return { x, y, h, w, excavation, opacity, crossOrigin };\n}\nfunction getMarginSize(includeMargin, marginSize) {\n if (marginSize != null) {\n return Math.max(Math.floor(marginSize), 0);\n }\n return includeMargin ? SPEC_MARGIN_SIZE : DEFAULT_MARGIN_SIZE;\n}\nfunction useQRCode({\n value,\n level,\n minVersion,\n includeMargin,\n marginSize,\n imageSettings,\n size,\n boostLevel\n}) {\n let qrcode = React.useMemo(() => {\n const values = Array.isArray(value) ? value : [value];\n const segments = values.reduce((accum, v) => {\n accum.push(...qrcodegen_default.QrSegment.makeSegments(v));\n return accum;\n }, []);\n return qrcodegen_default.QrCode.encodeSegments(\n segments,\n ERROR_LEVEL_MAP[level],\n minVersion,\n void 0,\n void 0,\n boostLevel\n );\n }, [value, level, minVersion, boostLevel]);\n const { cells, margin, numCells, calculatedImageSettings } = React.useMemo(() => {\n let cells2 = qrcode.getModules();\n const margin2 = getMarginSize(includeMargin, marginSize);\n const numCells2 = cells2.length + margin2 * 2;\n const calculatedImageSettings2 = getImageSettings(\n cells2,\n size,\n margin2,\n imageSettings\n );\n return {\n cells: cells2,\n margin: margin2,\n numCells: numCells2,\n calculatedImageSettings: calculatedImageSettings2\n };\n }, [qrcode, size, imageSettings, includeMargin, marginSize]);\n return {\n qrcode,\n margin,\n cells,\n numCells,\n calculatedImageSettings\n };\n}\nvar SUPPORTS_PATH2D = function() {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n return true;\n}();\nvar QRCodeCanvas = React.forwardRef(\n function QRCodeCanvas2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n marginSize,\n imageSettings\n } = _a, extraProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const _b = extraProps, { style } = _b, otherProps = __objRest(_b, [\"style\"]);\n const imgSrc = imageSettings == null ? void 0 : imageSettings.src;\n const _canvas = React.useRef(null);\n const _image = React.useRef(null);\n const setCanvasRef = React.useCallback(\n (node) => {\n _canvas.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef]\n );\n const [isImgLoaded, setIsImageLoaded] = React.useState(false);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n React.useEffect(() => {\n if (_canvas.current != null) {\n const canvas = _canvas.current;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n let cellsToDraw = cells;\n const image = _image.current;\n const haveImageToRender = calculatedImageSettings != null && image !== null && image.complete && image.naturalHeight !== 0 && image.naturalWidth !== 0;\n if (haveImageToRender) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n }\n const pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n const scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n if (SUPPORTS_PATH2D) {\n ctx.fill(new Path2D(generatePath(cellsToDraw, margin)));\n } else {\n cells.forEach(function(row, rdx) {\n row.forEach(function(cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n if (calculatedImageSettings) {\n ctx.globalAlpha = calculatedImageSettings.opacity;\n }\n if (haveImageToRender) {\n ctx.drawImage(\n image,\n calculatedImageSettings.x + margin,\n calculatedImageSettings.y + margin,\n calculatedImageSettings.w,\n calculatedImageSettings.h\n );\n }\n }\n });\n React.useEffect(() => {\n setIsImageLoaded(false);\n }, [imgSrc]);\n const canvasStyle = __spreadValues({ height: size, width: size }, style);\n let img = null;\n if (imgSrc != null) {\n img = /* @__PURE__ */ React.createElement(\n \"img\",\n {\n src: imgSrc,\n key: imgSrc,\n style: { display: \"none\" },\n onLoad: () => {\n setIsImageLoaded(true);\n },\n ref: _image,\n crossOrigin: calculatedImageSettings == null ? void 0 : calculatedImageSettings.crossOrigin\n }\n );\n }\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\n \"canvas\",\n __spreadValues({\n style: canvasStyle,\n height: size,\n width: size,\n ref: setCanvasRef,\n role: \"img\"\n }, otherProps)\n ), img);\n }\n);\nQRCodeCanvas.displayName = \"QRCodeCanvas\";\nvar QRCodeSVG = React.forwardRef(\n function QRCodeSVG2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n title,\n marginSize,\n imageSettings\n } = _a, otherProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"title\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n let cellsToDraw = cells;\n let image = null;\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n image = /* @__PURE__ */ React.createElement(\n \"image\",\n {\n href: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\",\n opacity: calculatedImageSettings.opacity,\n crossOrigin: calculatedImageSettings.crossOrigin\n }\n );\n }\n const fgPath = generatePath(cellsToDraw, margin);\n return /* @__PURE__ */ React.createElement(\n \"svg\",\n __spreadValues({\n height: size,\n width: size,\n viewBox: `0 0 ${numCells} ${numCells}`,\n ref: forwardedRef,\n role: \"img\"\n }, otherProps),\n !!title && /* @__PURE__ */ React.createElement(\"title\", null, title),\n /* @__PURE__ */ React.createElement(\n \"path\",\n {\n fill: bgColor,\n d: `M0,0 h${numCells}v${numCells}H0z`,\n shapeRendering: \"crispEdges\"\n }\n ),\n /* @__PURE__ */ React.createElement(\"path\", { fill: fgColor, d: fgPath, shapeRendering: \"crispEdges\" }),\n image\n );\n }\n);\nQRCodeSVG.displayName = \"QRCodeSVG\";\nexport {\n QRCodeCanvas,\n QRCodeSVG\n};\n","import { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { Mail } from \"lucide-react\";\nimport { Input } from \"@/components/utility/input\";\nimport { Button } from \"@/components/utility/button\";\nimport { FormGroup } from \"../utility/form\";\nimport { OTPInput } from \"../utility/otp-input\";\nimport { useScreenContext } from \"./context\";\n\nconst PopoverContainer = styled.div`\n position: fixed;\n background: var(--color-background);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n border: 1px solid var(--color-border);\n padding: 16px;\n width: 380px;\n max-width: calc(100vw - 48px);\n z-index: 1001;\n\n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 16px;\n`;\n\nconst Title = styled.div`\n font-size: 14px;\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: 12px;\n`;\n\nconst InputWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nconst IconWrapper = styled.div`\n width: 40px;\n height: 38px;\n border-radius: var(--radius-sm);\n background: var(--color-surface, var(--color-background));\n border: 1px solid var(--color-border);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-muted);\n flex-shrink: 0;\n`;\n\ninterface EmailAddPopoverProps {\n existingEmail?: string;\n triggerRef?: React.RefObject<HTMLElement | null>;\n onClose: () => void;\n onAddEmail: (email: string) => Promise<void>;\n onPrepareVerification: () => Promise<void>;\n onAttemptVerification: (otp: string) => Promise<void>;\n}\n\nexport const EmailAddPopover = ({\n onClose,\n onAddEmail,\n onAttemptVerification,\n onPrepareVerification,\n existingEmail,\n triggerRef,\n}: EmailAddPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const { toast } = useScreenContext();\n\n useEffect(() => {\n setMounted(true);\n\n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current || !triggerRef?.current) return;\n\n const triggerButton = triggerRef.current;\n\n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 380;\n const popoverHeight = 300; // Approximate height\n const spacing = 8;\n\n let top = 0;\n let left = 0;\n\n // Check available space\n const spaceBottom = window.innerHeight - rect.bottom;\n const spaceTop = rect.top;\n\n // Prefer to open below if there's space\n if (spaceBottom >= popoverHeight + spacing) {\n top = rect.bottom + spacing;\n // Align to right edge of button (bottom-right)\n left = rect.right - popoverWidth;\n\n // If it goes off left edge, align to left edge of button instead (bottom-left)\n if (left < spacing) {\n left = rect.left;\n\n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // Otherwise open above\n else if (spaceTop >= popoverHeight + spacing) {\n top = rect.top - popoverHeight - spacing;\n // Align to right edge of button (top-right)\n left = rect.right - popoverWidth;\n\n // If it goes off left edge, align to left edge of button instead (top-left)\n if (left < spacing) {\n left = rect.left;\n\n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // If no space above or below, position it at the best available spot\n else {\n // Position at bottom with scrolling if needed\n top = rect.bottom + spacing;\n left = rect.right - popoverWidth;\n\n if (left < spacing) {\n left = rect.left;\n }\n }\n\n setPosition({ top, left });\n }\n }, 10);\n\n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(event.target as Node)\n ) {\n onClose();\n }\n };\n\n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [onClose, triggerRef]);\n const [step, setStep] = useState<\"email\" | \"otp\">(\n existingEmail ? \"otp\" : \"email\",\n );\n const [email, setEmail] = useState(existingEmail || \"\");\n const [otp, setOtp] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const handleEmailSubmit = async () => {\n if (!email || loading) return;\n setLoading(true);\n try {\n await onAddEmail(email);\n setStep(\"otp\");\n } catch (error: any) {\n const errorMessage =\n error.message || \"Failed to add email address. Please try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n const handleOTPSubmit = async () => {\n setLoading(true);\n try {\n await onAttemptVerification(otp);\n onClose();\n } catch (error: any) {\n const errorMessage =\n error.message ||\n \"Failed to verify email. Please check the code and try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer\n ref={popoverRef}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? \"visible\" : \"hidden\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {step === \"email\" ? (\n <>\n <Title>Add email address</Title>\n <FormGroup>\n <InputWrapper>\n <IconWrapper>\n <Mail size={16} />\n </IconWrapper>\n <Input\n id=\"email-input\"\n type=\"email\"\n placeholder=\"Email address\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n style={{ flex: 1 }}\n />\n </InputWrapper>\n </FormGroup>\n <ButtonGroup>\n <Button\n $outline\n onClick={onClose}\n style={{ width: 'auto', padding: '0 var(--space-md)' }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleEmailSubmit}\n disabled={!email || loading}\n style={{ width: 'auto', padding: '0 var(--space-md)' }}\n >\n {loading ? \"Adding...\" : \"Continue\"}\n </Button>\n </ButtonGroup>\n </>\n ) : (\n <>\n <Title>Verify your email</Title>\n <div\n style={{\n fontSize: \"14px\",\n color: \"var(--color-muted)\",\n marginBottom: \"16px\",\n }}\n >\n Enter the 6-digit code sent to {email}\n </div>\n <OTPInput\n onComplete={async (code) => setOtp(code)}\n onResend={onPrepareVerification}\n isSubmitting={loading}\n />\n\n <ButtonGroup>\n <Button\n $outline\n onClick={() => setStep(\"email\")}\n style={{ width: 'auto', padding: '0 var(--space-md)' }}\n >\n Back\n </Button>\n <Button\n onClick={handleOTPSubmit}\n disabled={otp.length < 6 || loading}\n style={{ width: 'auto', padding: '0 var(--space-md)' }}\n >\n {loading ? \"Verifying...\" : \"Verify\"}\n </Button>\n </ButtonGroup>\n </>\n )}\n </PopoverContainer>\n );\n};\n","import { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { Button } from \"@/components/utility/button\";\nimport { FormGroup } from \"../utility/form\";\nimport { OTPInput } from \"../utility/otp-input\";\nimport { PhoneNumberInput } from \"../utility/phone\";\nimport { useScreenContext } from \"./context\";\n\nconst PopoverContainer = styled.div`\n position: fixed;\n background: var(--color-background);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n border: 1px solid var(--color-border);\n padding: 16px;\n width: 380px;\n max-width: calc(100vw - 48px);\n z-index: 1001;\n\n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 16px;\n`;\n\nconst Title = styled.div`\n font-size: 14px;\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: 12px;\n`;\n\ninterface PhoneAddPopoverProps {\n existingPhone?: string;\n triggerRef?: React.RefObject<HTMLElement | null>;\n onClose: () => void;\n onAddPhone: (phone: string, countryCode: string) => Promise<void>;\n onPrepareVerification: () => Promise<void>;\n onAttemptVerification: (otp: string) => Promise<void>;\n}\n\nexport const PhoneAddPopover = ({\n onClose,\n onAddPhone,\n onAttemptVerification,\n existingPhone,\n onPrepareVerification,\n triggerRef,\n}: PhoneAddPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const { toast } = useScreenContext();\n\n useEffect(() => {\n setMounted(true);\n\n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current || !triggerRef?.current) return;\n\n const triggerButton = triggerRef.current;\n\n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 380;\n const popoverHeight = 300; // Approximate height\n const spacing = 8;\n\n let top = 0;\n let left = 0;\n\n // Check available space\n const spaceBottom = window.innerHeight - rect.bottom;\n const spaceTop = rect.top;\n\n // Prefer to open below if there's space\n if (spaceBottom >= popoverHeight + spacing) {\n top = rect.bottom + spacing;\n // Align to right edge of button (bottom-right)\n left = rect.right - popoverWidth;\n\n // If it goes off left edge, align to left edge of button instead (bottom-left)\n if (left < spacing) {\n left = rect.left;\n\n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // Otherwise open above\n else if (spaceTop >= popoverHeight + spacing) {\n top = rect.top - popoverHeight - spacing;\n // Align to right edge of button (top-right)\n left = rect.right - popoverWidth;\n\n // If it goes off left edge, align to left edge of button instead (top-left)\n if (left < spacing) {\n left = rect.left;\n\n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // If no space above or below, position it at the best available spot\n else {\n // Position at bottom with scrolling if needed\n top = rect.bottom + spacing;\n left = rect.right - popoverWidth;\n\n if (left < spacing) {\n left = rect.left;\n }\n }\n\n setPosition({ top, left });\n }\n }, 10);\n\n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(event.target as Node)\n ) {\n onClose();\n }\n };\n\n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [onClose, triggerRef]);\n\n const [step, setStep] = useState<\"phone\" | \"otp\">(\n existingPhone ? \"otp\" : \"phone\",\n );\n const [phoneNumber, setPhoneNumber] = useState(\n existingPhone?.replace(/^\\+\\d+/, \"\") || \"\",\n );\n const [countryCode, setCountryCode] = useState(\n Intl.DateTimeFormat().resolvedOptions().locale.split(\"-\")?.pop(),\n );\n const [otp, setOtp] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const handlePhoneSubmit = async () => {\n if (!phoneNumber || loading) return;\n setLoading(true);\n try {\n await onAddPhone(phoneNumber, countryCode || \"\");\n setStep(\"otp\");\n } catch (error: any) {\n const errorMessage =\n error.message || \"Failed to add phone number. Please try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n const handleOTPSubmit = async () => {\n setLoading(true);\n try {\n await onAttemptVerification(otp);\n onClose();\n } catch (error: any) {\n const errorMessage =\n error.message ||\n \"Failed to verify phone. Please check the code and try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer\n ref={popoverRef}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? \"visible\" : \"hidden\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {step === \"phone\" ? (\n <>\n <Title>Add phone number</Title>\n <FormGroup>\n <PhoneNumberInput\n value={phoneNumber}\n onChange={(e) => setPhoneNumber(e.target.value)}\n error={\"\"}\n countryCode={countryCode}\n setCountryCode={setCountryCode}\n />\n </FormGroup>\n <ButtonGroup>\n <Button\n $outline\n onClick={onClose}\n style={{ width: \"auto\", padding: \"0 var(--space-md)\" }}\n >\n Cancel\n </Button>\n <Button\n onClick={handlePhoneSubmit}\n disabled={!phoneNumber || loading}\n style={{ width: \"auto\", padding: \"0 var(--space-md)\" }}\n >\n Continue\n </Button>\n </ButtonGroup>\n </>\n ) : (\n <>\n <Title>Verify phone number</Title>\n <FormGroup>\n <OTPInput\n onComplete={(code) => setOtp(code)}\n onResend={async () => onPrepareVerification()}\n />\n </FormGroup>\n <ButtonGroup>\n <Button\n $outline\n onClick={onClose}\n style={{ width: \"auto\", padding: \"0 var(--space-md)\" }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleOTPSubmit}\n disabled={otp.length !== 6 || loading}\n style={{ width: \"auto\", padding: \"0 var(--space-md)\" }}\n >\n Verify\n </Button>\n </ButtonGroup>\n </>\n )}\n </PopoverContainer>\n );\n};\n","import { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { QRCodeSVG } from \"qrcode.react\";\nimport { Input } from \"@/components/utility/input\";\nimport { useScreenContext } from \"./context\";\n\nconst PopoverContainer = styled.div`\n position: fixed;\n background: var(--color-background);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n border: 1px solid var(--color-border);\n padding: 16px;\n width: 380px;\n max-width: calc(100vw - 48px);\n z-index: 1001;\n\n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst Button = styled.button<{ $primary?: boolean }>`\n padding: 8px 16px;\n background: ${(props) =>\n props.$primary ? \"var(--color-primary)\" : \"var(--color-background)\"};\n color: ${(props) =>\n props.$primary ? \"white\" : \"var(--color-secondary-text)\"};\n border: 1px solid\n ${(props) =>\n props.$primary ? \"var(--color-primary)\" : \"var(--color-border)\"};\n border-radius: var(--radius-md);\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background: ${(props) =>\n props.$primary\n ? \"var(--color-primary-hover)\"\n : \"var(--color-input-background)\"};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 16px;\n`;\n\nconst Title = styled.div`\n font-size: 14px;\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: 8px;\n`;\n\ninterface SetupTOTPPopoverProps {\n triggerRef?: React.RefObject<HTMLElement | null>;\n onClose: () => void;\n onSetupTOTP: () => Promise<{\n otp_url?: string;\n totp_secret?: string;\n id: string;\n }>;\n onVerifyTOTP: (codes: string[]) => Promise<void>;\n}\n\nexport const SetupTOTPPopover = ({\n onClose,\n onSetupTOTP,\n onVerifyTOTP,\n triggerRef,\n}: SetupTOTPPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [step, setStep] = useState<\"qr\" | \"verify\">(\"qr\");\n const [qrUrl, setQrUrl] = useState(\"\");\n const [secret, setSecret] = useState(\"\");\n const [codes, setCodes] = useState([\"\", \"\"]);\n const [loading, setLoading] = useState(false);\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const { toast } = useScreenContext();\n\n useEffect(() => {\n setMounted(true);\n\n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current || !triggerRef?.current) return;\n\n const triggerButton = triggerRef.current;\n\n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 380;\n const popoverHeight = 400; // Approximate height for TOTP popover\n const spacing = 8;\n\n let top = 0;\n let left = 0;\n\n // Check available space\n const spaceBottom = window.innerHeight - rect.bottom;\n const spaceTop = rect.top;\n\n // Prefer to open below if there's space\n if (spaceBottom >= popoverHeight + spacing) {\n top = rect.bottom + spacing;\n // Align to right edge of button (bottom-right)\n left = rect.right - popoverWidth;\n\n // If it goes off left edge, align to left edge of button instead (bottom-left)\n if (left < spacing) {\n left = rect.left;\n\n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // Otherwise open above\n else if (spaceTop >= popoverHeight + spacing) {\n top = rect.top - popoverHeight - spacing;\n // Align to right edge of button (top-right)\n left = rect.right - popoverWidth;\n\n // If it goes off left edge, align to left edge of button instead (top-left)\n if (left < spacing) {\n left = rect.left;\n\n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // If no space above or below, position it at the best available spot\n else {\n // Position at bottom with scrolling if needed\n top = rect.bottom + spacing;\n left = rect.right - popoverWidth;\n\n if (left < spacing) {\n left = rect.left;\n }\n }\n\n setPosition({ top, left });\n }\n }, 10);\n\n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(event.target as Node)\n ) {\n onClose();\n }\n };\n\n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [onClose, triggerRef]);\n\n useEffect(() => {\n const setupTOTP = async () => {\n setLoading(true);\n try {\n const result = await onSetupTOTP();\n setQrUrl(result.otp_url || \"\");\n setSecret(result.totp_secret || \"\");\n } catch (error: any) {\n const errorMessage =\n error.message ||\n \"Failed to setup two-factor authentication. Please try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n setupTOTP();\n }, []);\n\n const handleVerify = async () => {\n if (codes.some((code) => code.length !== 6)) return;\n\n setLoading(true);\n try {\n await onVerifyTOTP(codes);\n onClose();\n } catch (error: any) {\n const errorMessage =\n error.message ||\n \"Failed to verify codes. Please check your authenticator app and try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer\n ref={popoverRef}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? \"visible\" : \"hidden\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {step === \"qr\" ? (\n <>\n <Title>Setup Two-Factor Authentication</Title>\n <div\n style={{\n fontSize: \"14px\",\n color: \"var(--color-muted)\",\n marginBottom: \"16px\",\n }}\n >\n Scan this QR code with your authenticator app (Google Authenticator,\n Authy, etc.)\n </div>\n\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: \"16px\",\n }}\n >\n {loading ? (\n <div\n style={{\n width: \"150px\",\n height: \"150px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"var(--radius-md)\",\n background: \"var(--color-input-background)\",\n }}\n >\n Loading...\n </div>\n ) : qrUrl ? (\n <div\n style={{\n border: \"1px solid var(--color-border)\",\n borderRadius: \"var(--radius-md)\",\n padding: \"8px\",\n background: \"white\",\n }}\n >\n <QRCodeSVG\n value={qrUrl}\n size={150}\n title=\"QR Code for Two-Factor Authentication Setup\"\n aria-label=\"Scan this QR code with your authenticator app to set up two-factor authentication\"\n />\n </div>\n ) : (\n <div\n style={{\n width: \"150px\",\n height: \"150px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"var(--radius-md)\",\n background: \"var(--color-input-background)\",\n color: \"var(--color-error)\",\n }}\n >\n QR Code Not Available\n </div>\n )}\n </div>\n\n {secret && (\n <div\n style={{\n background: \"var(--color-input-background)\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"var(--radius-md)\",\n padding: \"8px\",\n marginBottom: \"16px\",\n fontSize: \"12px\",\n }}\n >\n <div\n style={{\n color: \"var(--color-secondary-text)\",\n marginBottom: \"4px\",\n }}\n >\n Or enter manually:\n </div>\n <code\n style={{\n fontFamily: \"monospace\",\n wordBreak: \"break-all\",\n color: \"var(--color-secondary-text)\",\n }}\n >\n {secret}\n </code>\n </div>\n )}\n\n <ButtonGroup>\n <Button\n $primary\n onClick={() => setStep(\"verify\")}\n disabled={loading || !qrUrl}\n >\n I've Scanned the Code\n </Button>\n </ButtonGroup>\n </>\n ) : (\n <>\n <Title>Verify Your Authenticator</Title>\n <div\n style={{\n fontSize: \"14px\",\n color: \"var(--color-muted)\",\n marginBottom: \"16px\",\n }}\n >\n Enter two consecutive codes from your authenticator app\n </div>\n\n <div style={{ display: \"flex\", gap: \"8px\", marginBottom: \"16px\" }}>\n <Input\n id=\"totp-code-1\"\n type=\"text\"\n placeholder=\"000000\"\n value={codes[0]}\n onChange={(e) => {\n const value = e.target.value\n .replace(/[^0-9]/g, \"\")\n .substring(0, 6);\n setCodes([value, codes[1]]);\n }}\n maxLength={6}\n style={{ textAlign: \"center\", fontFamily: \"monospace\" }}\n aria-label=\"First verification code from authenticator app\"\n />\n <Input\n id=\"totp-code-2\"\n type=\"text\"\n placeholder=\"000000\"\n value={codes[1]}\n onChange={(e) => {\n const value = e.target.value\n .replace(/[^0-9]/g, \"\")\n .substring(0, 6);\n setCodes([codes[0], value]);\n }}\n maxLength={6}\n style={{ textAlign: \"center\", fontFamily: \"monospace\" }}\n aria-label=\"Second verification code from authenticator app\"\n />\n </div>\n\n <ButtonGroup>\n <Button onClick={() => setStep(\"qr\")}>Back</Button>\n <Button\n $primary\n onClick={handleVerify}\n disabled={loading || codes.some((code) => code.length !== 6)}\n >\n {loading ? \"Verifying...\" : \"Verify\"}\n </Button>\n </ButtonGroup>\n </>\n )}\n </PopoverContainer>\n );\n};\n","import { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { Input } from \"@/components/utility/input\";\nimport { Label } from \"../utility/form\";\nimport { Eye, EyeOff } from \"lucide-react\";\n\nconst PopoverContainer = styled.div`\n position: fixed;\n background: var(--color-background);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n border: 1px solid var(--color-border);\n padding: 16px;\n width: 380px;\n max-width: calc(100vw - 48px);\n z-index: 1001;\n \n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst Button = styled.button<{ $primary?: boolean }>`\n padding: 8px 16px;\n background: ${(props) =>\n props.$primary ? \"var(--color-primary)\" : \"var(--color-background)\"};\n color: ${(props) =>\n props.$primary ? \"white\" : \"var(--color-secondary-text)\"};\n border: 1px solid\n ${(props) =>\n props.$primary ? \"var(--color-primary)\" : \"var(--color-border)\"};\n border-radius: var(--radius-md);\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background: ${(props) =>\n props.$primary\n ? \"var(--color-primary-hover)\"\n : \"var(--color-input-background)\"};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 16px;\n`;\n\nconst Title = styled.div`\n font-size: 14px;\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: 8px;\n`;\n\nconst StyledFormGroup = styled.div`\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-bottom: 12px;\n`;\n\nconst PasswordInput = styled.div`\n position: relative;\n \n button {\n position: absolute;\n right: 12px;\n top: 50%;\n transform: translateY(-50%);\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n color: var(--color-secondary-text);\n \n &:hover {\n color: var(--color-foreground);\n }\n }\n`;\n\nconst ErrorMessage = styled.div`\n color: var(--color-error);\n font-size: 12px;\n margin-top: 4px;\n`;\n\ninterface ChangePasswordPopoverProps {\n triggerRef?: React.RefObject<HTMLElement | null>;\n onClose: () => void;\n onChangePassword: (currentPassword: string, newPassword: string) => Promise<void>;\n isSetup?: boolean;\n}\n\nexport const ChangePasswordPopover = ({\n onClose,\n onChangePassword,\n triggerRef,\n isSetup = false,\n}: ChangePasswordPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const [currentPassword, setCurrentPassword] = useState(\"\");\n const [newPassword, setNewPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const [showCurrentPassword, setShowCurrentPassword] = useState(false);\n const [showNewPassword, setShowNewPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [loading, setLoading] = useState(false);\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n useEffect(() => {\n setMounted(true);\n \n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current || !triggerRef?.current) return;\n \n const triggerButton = triggerRef.current;\n \n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 380;\n const popoverHeight = 350; // Approximate height for password popover\n const spacing = 8;\n \n let top = 0;\n let left = 0;\n \n // Check available space\n const spaceBottom = window.innerHeight - rect.bottom;\n const spaceTop = rect.top;\n \n // Prefer to open below if there's space\n if (spaceBottom >= popoverHeight + spacing) {\n top = rect.bottom + spacing;\n // Align to right edge of button (bottom-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (bottom-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // Otherwise open above\n else if (spaceTop >= popoverHeight + spacing) {\n top = rect.top - popoverHeight - spacing;\n // Align to right edge of button (top-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (top-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // If no space above or below, position it at the best available spot\n else {\n // Position at bottom with scrolling if needed\n top = rect.bottom + spacing;\n left = rect.right - popoverWidth;\n \n if (left < spacing) {\n left = rect.left;\n }\n }\n \n setPosition({ top, left });\n }\n }, 10);\n \n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n onClose();\n }\n };\n \n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n \n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n \n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [onClose, triggerRef]);\n\n const handleSubmit = async () => {\n if (loading) return;\n\n const newErrors: Record<string, string> = {};\n\n if (!isSetup && !currentPassword) {\n newErrors.currentPassword = \"Current password is required\";\n }\n\n if (!newPassword) {\n newErrors.newPassword = \"New password is required\";\n } else if (newPassword.length < 8) {\n newErrors.newPassword = \"Password must be at least 8 characters\";\n }\n\n if (newPassword !== confirmPassword) {\n newErrors.confirmPassword = \"Passwords do not match\";\n }\n\n if (Object.keys(newErrors).length > 0) {\n setErrors(newErrors);\n return;\n }\n\n setLoading(true);\n try {\n await onChangePassword(isSetup ? \"\" : currentPassword, newPassword);\n onClose();\n } catch (error: any) {\n setErrors({ form: error.message || \"Failed to update password\" });\n } finally {\n setLoading(false);\n }\n };\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer \n ref={popoverRef}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? 'visible' : 'hidden'\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <Title>{isSetup ? \"Set Password\" : \"Change Password\"}</Title>\n <div\n style={{\n fontSize: \"14px\",\n color: \"var(--color-muted)\",\n marginBottom: \"16px\",\n }}\n >\n {isSetup ? \"Set a password for your account to enable password authentication.\" : \"Update your account password to keep it secure.\"}\n </div>\n\n {!isSetup && (\n <StyledFormGroup>\n <Label>Current Password</Label>\n <PasswordInput>\n <Input\n type={showCurrentPassword ? \"text\" : \"password\"}\n placeholder=\"Enter your current password\"\n value={currentPassword}\n onChange={(e) => setCurrentPassword(e.target.value)}\n style={{ paddingRight: \"40px\" }}\n />\n <button\n type=\"button\"\n onClick={() => setShowCurrentPassword(!showCurrentPassword)}\n aria-label={showCurrentPassword ? \"Hide current password\" : \"Show current password\"}\n >\n {showCurrentPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </PasswordInput>\n {errors.currentPassword && (\n <ErrorMessage>{errors.currentPassword}</ErrorMessage>\n )}\n </StyledFormGroup>\n )}\n\n <StyledFormGroup>\n <Label>{isSetup ? \"Password\" : \"New Password\"}</Label>\n <PasswordInput>\n <Input\n type={showNewPassword ? \"text\" : \"password\"}\n placeholder={isSetup ? \"Enter your password\" : \"Enter your new password\"}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n style={{ paddingRight: \"40px\" }}\n />\n <button\n type=\"button\"\n onClick={() => setShowNewPassword(!showNewPassword)}\n aria-label={showNewPassword ? \"Hide new password\" : \"Show new password\"}\n >\n {showNewPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </PasswordInput>\n {errors.newPassword && (\n <ErrorMessage>{errors.newPassword}</ErrorMessage>\n )}\n </StyledFormGroup>\n\n <StyledFormGroup>\n <Label>Confirm New Password</Label>\n <PasswordInput>\n <Input\n type={showConfirmPassword ? \"text\" : \"password\"}\n placeholder=\"Confirm your new password\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n style={{ paddingRight: \"40px\" }}\n />\n <button\n type=\"button\"\n onClick={() => setShowConfirmPassword(!showConfirmPassword)}\n aria-label={showConfirmPassword ? \"Hide confirm password\" : \"Show confirm password\"}\n >\n {showConfirmPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </PasswordInput>\n {errors.confirmPassword && (\n <ErrorMessage>{errors.confirmPassword}</ErrorMessage>\n )}\n </StyledFormGroup>\n\n {errors.form && <ErrorMessage>{errors.form}</ErrorMessage>}\n\n <ButtonGroup>\n <Button onClick={onClose}>Cancel</Button>\n <Button\n $primary\n onClick={handleSubmit}\n disabled={loading}\n >\n {loading ? (isSetup ? \"Setting...\" : \"Updating...\") : (isSetup ? \"Set Password\" : \"Update Password\")}\n </Button>\n </ButtonGroup>\n </PopoverContainer>\n );\n};","import { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { AlertTriangle } from \"lucide-react\";\nimport { Input } from \"@/components/utility/input\";\nimport { Button } from \"@/components/utility/button\";\nimport { FormGroup, Label } from \"../utility/form\";\nimport { useScreenContext } from \"./context\";\n\nconst PopoverContainer = styled.div`\n position: fixed;\n background: var(--color-background);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n border: 1px solid var(--color-border);\n padding: 16px;\n width: 400px;\n max-width: calc(100vw - 48px);\n z-index: 1001;\n\n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 16px;\n`;\n\nconst Title = styled.div`\n font-size: 16px;\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nconst WarningBox = styled.div`\n background: var(--color-warning-bg, rgba(251, 191, 36, 0.1));\n border: 1px solid var(--color-warning-border, rgba(251, 191, 36, 0.3));\n border-radius: var(--radius-sm);\n padding: 12px;\n margin-bottom: 16px;\n`;\n\nconst WarningText = styled.p`\n font-size: 13px;\n color: var(--color-warning-text, var(--color-foreground));\n margin: 0;\n line-height: 1.5;\n`;\n\ninterface RemovePasswordPopoverProps {\n triggerRef?: React.RefObject<HTMLElement | null>;\n onClose: () => void;\n onRemovePassword: (currentPassword: string) => Promise<void>;\n}\n\nexport const RemovePasswordPopover = ({\n onClose,\n onRemovePassword,\n triggerRef,\n}: RemovePasswordPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const [currentPassword, setCurrentPassword] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const { toast } = useScreenContext();\n\n useEffect(() => {\n setMounted(true);\n\n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current || !triggerRef?.current) return;\n\n const triggerButton = triggerRef.current;\n\n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 400;\n const popoverHeight = 300; // Approximate height\n const spacing = 8;\n\n let top = 0;\n let left = 0;\n\n // Check available space\n const spaceBottom = window.innerHeight - rect.bottom;\n const spaceTop = rect.top;\n\n // Prefer to open below if there's space\n if (spaceBottom >= popoverHeight + spacing) {\n top = rect.bottom + spacing;\n // Align to right edge of button (bottom-right)\n left = rect.right - popoverWidth;\n\n // If it goes off left edge, align to left edge of button instead (bottom-left)\n if (left < spacing) {\n left = rect.left;\n\n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // Otherwise open above\n else if (spaceTop >= popoverHeight + spacing) {\n top = rect.top - popoverHeight - spacing;\n // Align to right edge of button (top-right)\n left = rect.right - popoverWidth;\n\n // If it goes off left edge, align to left edge of button instead (top-left)\n if (left < spacing) {\n left = rect.left;\n\n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // If no space above or below, position it at the best available spot\n else {\n // Position at bottom with scrolling if needed\n top = rect.bottom + spacing;\n left = rect.right - popoverWidth;\n\n if (left < spacing) {\n left = rect.left;\n }\n }\n\n setPosition({ top, left });\n }\n }, 10);\n\n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(event.target as Node)\n ) {\n onClose();\n }\n };\n\n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [onClose, triggerRef]);\n\n const handleSubmit = async () => {\n if (!currentPassword || loading) return;\n \n setLoading(true);\n try {\n await onRemovePassword(currentPassword);\n onClose();\n } catch (error: any) {\n const errorMessage = error.message || \"Failed to remove password. Please try again.\";\n toast(errorMessage, \"error\");\n } finally {\n setLoading(false);\n }\n };\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer\n ref={popoverRef}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? \"visible\" : \"hidden\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <Title>\n <AlertTriangle size={18} color=\"var(--color-warning, #fbbf24)\" />\n Remove Password\n </Title>\n \n <WarningBox>\n <WarningText>\n You're about to remove password authentication from your account. \n Make sure you have another way to sign in (email, phone, social login, or passkey) \n before continuing.\n </WarningText>\n </WarningBox>\n\n <FormGroup>\n <Label htmlFor=\"current-password\">Confirm your current password</Label>\n <Input\n id=\"current-password\"\n type=\"password\"\n placeholder=\"Enter current password\"\n value={currentPassword}\n onChange={(e) => setCurrentPassword(e.target.value)}\n autoFocus\n />\n </FormGroup>\n\n <ButtonGroup>\n <Button\n $outline\n onClick={onClose}\n style={{ width: 'auto', padding: '0 var(--space-md)' }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSubmit}\n disabled={!currentPassword || loading}\n style={{ \n width: 'auto', \n padding: '0 var(--space-md)',\n background: 'var(--color-error)',\n borderColor: 'var(--color-error)'\n }}\n >\n {loading ? \"Removing...\" : \"Remove Password\"}\n </Button>\n </ButtonGroup>\n </PopoverContainer>\n );\n};","import { useRef, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Copy, Download } from \"lucide-react\";\n\nconst PopoverContainer = styled.div`\n position: fixed;\n background: var(--color-background);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 12px var(--color-shadow);\n border: 1px solid var(--color-border);\n padding: 16px;\n width: 380px;\n max-width: calc(100vw - 48px);\n z-index: 1001;\n \n @media (max-width: 600px) {\n width: calc(100vw - 48px);\n }\n`;\n\nconst Button = styled.button<{ $primary?: boolean }>`\n padding: 8px 16px;\n background: ${(props) =>\n props.$primary ? \"var(--color-primary)\" : \"var(--color-background)\"};\n color: ${(props) =>\n props.$primary ? \"white\" : \"var(--color-secondary-text)\"};\n border: 1px solid\n ${(props) =>\n props.$primary ? \"var(--color-primary)\" : \"var(--color-border)\"};\n border-radius: var(--radius-md);\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background: ${(props) =>\n props.$primary\n ? \"var(--color-primary-hover)\"\n : \"var(--color-input-background)\"};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n`;\n\nconst Title = styled.div`\n font-size: 14px;\n font-weight: 400;\n color: var(--color-foreground);\n`;\n\nconst TopButtons = styled.div`\n display: flex;\n gap: 8px;\n`;\n\nconst CodesGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 6px;\n margin: 12px 0;\n`;\n\nconst CodeItem = styled.div`\n background: var(--color-input-background);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-sm);\n padding: 6px 10px;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', monospace;\n font-size: 12px;\n text-align: center;\n color: var(--color-foreground);\n cursor: pointer;\n transition: all 0.2s ease;\n \n &:hover {\n background: var(--color-input-background-hover);\n border-color: var(--color-primary);\n }\n`;\n\ninterface BackupCodesPopoverProps {\n codes: string[];\n triggerRef?: React.RefObject<HTMLElement | null>;\n onClose: () => void;\n onCopy: () => void;\n onDownload: () => void;\n}\n\nexport const BackupCodesPopover = ({\n codes,\n onClose,\n onCopy,\n onDownload,\n triggerRef,\n}: BackupCodesPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n useEffect(() => {\n setMounted(true);\n \n // Calculate position after a short delay\n const timer = setTimeout(() => {\n if (!popoverRef.current || !triggerRef?.current) return;\n \n const triggerButton = triggerRef.current;\n \n if (triggerButton) {\n const rect = triggerButton.getBoundingClientRect();\n const popoverWidth = 380;\n const popoverHeight = 300; // Approximate height for backup codes popover\n const spacing = 8;\n \n let top = 0;\n let left = 0;\n \n // Check available space\n const spaceBottom = window.innerHeight - rect.bottom;\n const spaceTop = rect.top;\n \n // Prefer to open below if there's space\n if (spaceBottom >= popoverHeight + spacing) {\n top = rect.bottom + spacing;\n // Align to right edge of button (bottom-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (bottom-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // Otherwise open above\n else if (spaceTop >= popoverHeight + spacing) {\n top = rect.top - popoverHeight - spacing;\n // Align to right edge of button (top-right)\n left = rect.right - popoverWidth;\n \n // If it goes off left edge, align to left edge of button instead (top-left)\n if (left < spacing) {\n left = rect.left;\n \n // If that also goes off right edge, center it on screen\n if (left + popoverWidth > window.innerWidth - spacing) {\n left = (window.innerWidth - popoverWidth) / 2;\n }\n }\n }\n // If no space above or below, position it at the best available spot\n else {\n // Position at bottom with scrolling if needed\n top = rect.bottom + spacing;\n left = rect.right - popoverWidth;\n \n if (left < spacing) {\n left = rect.left;\n }\n }\n \n setPosition({ top, left });\n }\n }, 10);\n \n // Add click outside listener\n const handleClickOutside = (event: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n onClose();\n }\n };\n \n // Add escape key listener\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n \n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n \n return () => {\n clearTimeout(timer);\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [onClose, triggerRef]);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <PopoverContainer \n ref={popoverRef}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top > 0 ? 'visible' : 'hidden'\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <Header>\n <Title>Backup Codes</Title>\n <TopButtons>\n <Button onClick={onCopy} style={{ padding: '6px 10px', display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Copy size={14} />\n Copy\n </Button>\n <Button onClick={onDownload} style={{ padding: '6px 10px', display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Download size={14} />\n Download\n </Button>\n </TopButtons>\n </Header>\n <div\n style={{\n fontSize: \"13px\",\n color: \"var(--color-muted)\",\n marginBottom: \"8px\",\n }}\n >\n Save these backup codes in a secure location. Each code can only be used once.\n </div>\n\n <CodesGrid>\n {codes.map((code, index) => (\n <CodeItem \n key={index}\n onClick={() => {\n navigator.clipboard.writeText(code);\n // Optional: Add a toast notification here\n }}\n title=\"Click to copy\"\n >\n {code}\n </CodeItem>\n ))}\n </CodesGrid>\n\n <div style={{ \n fontSize: \"12px\", \n color: \"var(--color-warning)\", \n padding: \"6px 10px\",\n background: \"var(--color-warning-background)\",\n border: \"1px solid var(--color-warning-border)\",\n borderRadius: \"var(--radius-sm)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\"\n }}>\n <span style={{ fontSize: \"14px\" }}>⚠️</span>\n <span>Keep these codes safe! They won't be shown again.</span>\n </div>\n </PopoverContainer>\n );\n};","import { SVGProps } from \"react\"\n\nexport const ChromeIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={48} height={48} {...props}>\n <defs>\n <linearGradient\n id=\"a\"\n x1={3.217}\n x2={44.781}\n y1={15}\n y2={15}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset={0} stopColor=\"#d93025\" />\n <stop offset={1} stopColor=\"#ea4335\" />\n </linearGradient>\n <linearGradient\n id=\"b\"\n x1={20.722}\n x2={41.504}\n y1={47.679}\n y2={11.684}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset={0} stopColor=\"#fcc934\" />\n <stop offset={1} stopColor=\"#fbbc04\" />\n </linearGradient>\n <linearGradient\n id=\"c\"\n x1={26.598}\n x2={5.816}\n y1={46.502}\n y2={10.506}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset={0} stopColor=\"#1e8e3e\" />\n <stop offset={1} stopColor=\"#34a853\" />\n </linearGradient>\n </defs>\n <circle\n cx={24}\n cy={23.995}\n r={12}\n style={{\n fill: \"#fff\",\n }}\n />\n <path\n d=\"M3.215 36A24 24 0 1 0 12 3.215 24 24 0 0 0 3.215 36Zm31.177-18A12 12 0 1 1 18 13.608 12 12 0 0 1 34.392 18Z\"\n style={{\n fill: \"none\",\n }}\n />\n <path\n d=\"M24 12h20.781a23.994 23.994 0 0 0-41.564.003L13.607 30l.01-.002A11.985 11.985 0 0 1 24 12Z\"\n style={{\n fill: \"url(#a)\",\n }}\n />\n <circle\n cx={24}\n cy={24}\n r={9.5}\n style={{\n fill: \"#1a73e8\",\n }}\n />\n <path\n d=\"M34.391 30.003 24.001 48A23.994 23.994 0 0 0 44.78 12.003H23.999l-.003.01a11.985 11.985 0 0 1 10.395 17.99Z\"\n style={{\n fill: \"url(#b)\",\n }}\n />\n <path\n d=\"M13.609 30.003 3.218 12.006A23.994 23.994 0 0 0 24.003 48l10.39-17.997-.007-.007a11.985 11.985 0 0 1-20.777.007Z\"\n style={{\n fill: \"url(#c)\",\n }}\n />\n </svg>\n)\n","import { SVGProps } from \"react\"\n\nexport const FirefoxIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={512} height={512} viewBox=\"0 0 512 512\" {...props}>\n <defs>\n <radialGradient id=\"g\" cx=\"210%\" cy=\"-100%\" r=\"290%\">\n <stop offset={0.1} stopColor=\"#ffe226\" />\n <stop offset={0.79} stopColor=\"#ff7139\" />\n </radialGradient>\n <radialGradient\n id=\"c\"\n cx=\"49%\"\n cy=\"40%\"\n r=\"128%\"\n gradientTransform=\"matrix(.82 0 0 1 .088 0)\"\n >\n <stop offset={0.3} stopColor=\"#960e18\" />\n <stop offset={0.35} stopColor=\"#b11927\" stopOpacity={0.74} />\n <stop offset={0.43} stopColor=\"#db293d\" stopOpacity={0.34} />\n <stop offset={0.5} stopColor=\"#f5334b\" stopOpacity={0.09} />\n <stop offset={0.53} stopColor=\"#ff3750\" stopOpacity={0} />\n </radialGradient>\n <radialGradient id=\"d\" cx=\"48%\" cy=\"-12%\" r=\"140%\">\n <stop offset={0.13} stopColor=\"#fff44f\" />\n <stop offset={0.53} stopColor=\"#ff980e\" />\n </radialGradient>\n <radialGradient id=\"e\" cx=\"22.76%\" cy=\"110.11%\" r=\"100%\">\n <stop offset={0.35} stopColor=\"#3a8ee6\" />\n <stop offset={0.67} stopColor=\"#9059ff\" />\n <stop offset={1} stopColor=\"#c139e6\" />\n </radialGradient>\n <radialGradient\n id=\"f\"\n cx=\"52%\"\n cy=\"33%\"\n r=\"59%\"\n gradientTransform=\"scale(.9 1)\"\n >\n <stop offset={0.21} stopColor=\"#9059ff\" stopOpacity={0} />\n <stop offset={0.97} stopColor=\"#6e008b\" stopOpacity={0.6} />\n </radialGradient>\n <radialGradient\n id=\"b\"\n cx=\"87.4%\"\n cy=\"-12.9%\"\n r=\"128%\"\n gradientTransform=\"matrix(.8 0 0 1 .178 .129)\"\n >\n <stop offset={0.13} stopColor=\"#ffbd4f\" />\n <stop offset={0.28} stopColor=\"#ff980e\" />\n <stop offset={0.47} stopColor=\"#ff3750\" />\n <stop offset={0.78} stopColor=\"#eb0878\" />\n <stop offset={0.86} stopColor=\"#e50080\" />\n </radialGradient>\n <radialGradient id=\"h\" cx=\"84%\" cy=\"-41%\" r=\"180%\">\n <stop offset={0.11} stopColor=\"#fff44f\" />\n <stop offset={0.46} stopColor=\"#ff980e\" />\n <stop offset={0.72} stopColor=\"#ff3647\" />\n <stop offset={0.9} stopColor=\"#e31587\" />\n </radialGradient>\n <radialGradient\n id=\"i\"\n cx=\"16.1%\"\n cy=\"-18.6%\"\n r=\"348.8%\"\n gradientTransform=\"scale(1 .47) rotate(84 .279 -.297)\"\n >\n <stop offset={0} stopColor=\"#fff44f\" />\n <stop offset={0.3} stopColor=\"#ff980e\" />\n <stop offset={0.57} stopColor=\"#ff3647\" />\n <stop offset={0.74} stopColor=\"#e31587\" />\n </radialGradient>\n <radialGradient id=\"j\" cx=\"18.9%\" cy=\"-42.5%\" r=\"238.4%\">\n <stop offset={0.14} stopColor=\"#fff44f\" />\n <stop offset={0.48} stopColor=\"#ff980e\" />\n <stop offset={0.66} stopColor=\"#ff3647\" />\n <stop offset={0.9} stopColor=\"#e31587\" />\n </radialGradient>\n <radialGradient id=\"k\" cx=\"159.3%\" cy=\"-44.72%\" r=\"313.1%\">\n <stop offset={0.09} stopColor=\"#fff44f\" />\n <stop offset={0.63} stopColor=\"#ff980e\" />\n </radialGradient>\n <linearGradient id=\"a\" x1=\"87.25%\" x2=\"9.4%\" y1=\"15.5%\" y2=\"93.1%\">\n <stop offset={0.05} stopColor=\"#fff44f\" />\n <stop offset={0.37} stopColor=\"#ff980e\" />\n <stop offset={0.53} stopColor=\"#ff3647\" />\n <stop offset={0.7} stopColor=\"#e31587\" />\n </linearGradient>\n <linearGradient id=\"l\" x1=\"80%\" x2=\"18%\" y1=\"14%\" y2=\"84%\">\n <stop offset={0.17} stopColor=\"#fff44f\" stopOpacity={0.8} />\n <stop offset={0.6} stopColor=\"#fff44f\" stopOpacity={0} />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#a)\"\n d=\"M478.711 166.353c-10.445-25.124-31.6-52.248-48.212-60.821 13.52 26.505 21.345 53.093 24.335 72.936 0 .039.015.136.047.4C427.706 111.135 381.627 83.823 344 24.355c-1.9-3.007-3.805-6.022-5.661-9.2a73.716 73.716 0 0 1-2.646-4.972A43.7 43.7 0 0 1 332.1.677a.626.626 0 0 0-.546-.644.818.818 0 0 0-.451 0c-.034.012-.084.051-.12.065-.053.021-.12.069-.176.1.027-.036.083-.117.1-.136-60.37 35.356-80.85 100.761-82.732 133.484a120.249 120.249 0 0 0-66.142 25.488 71.355 71.355 0 0 0-6.225-4.7 111.338 111.338 0 0 1-.674-58.732c-24.688 11.241-43.89 29.01-57.85 44.7h-.111c-9.527-12.067-8.855-51.873-8.312-60.184-.114-.515-7.107 3.63-8.023 4.255a175.073 175.073 0 0 0-23.486 20.12 210.478 210.478 0 0 0-22.442 26.913c0 .012-.007.026-.011.038 0-.013.007-.026.011-.038a202.838 202.838 0 0 0-32.247 72.805c-.115.521-.212 1.061-.324 1.586-.452 2.116-2.08 12.7-2.365 15-.022.177-.032.347-.053.524a229.066 229.066 0 0 0-3.9 33.157c0 .41-.025.816-.025 1.227C16 388.418 123.6 496 256.324 496c118.865 0 217.56-86.288 236.882-199.63.407-3.076.733-6.168 1.092-9.271 4.777-41.21-.53-84.525-15.587-120.746zM201.716 354.447c1.124.537 2.18 1.124 3.334 1.639.048.033.114.07.163.1a126.191 126.191 0 0 1-3.497-1.739zm55.053-144.93zm198.131-30.59-.032-.233c.012.085.027.174.04.259z\"\n />\n <path\n fill=\"url(#b)\"\n d=\"M478.711 166.353c-10.445-25.124-31.6-52.248-48.212-60.821 13.52 26.505 21.345 53.093 24.335 72.936 0-.058.011.048.036.226.012.085.027.174.04.259 22.675 61.47 10.322 123.978-7.479 162.175-27.539 59.1-94.215 119.67-198.576 116.716C136.1 454.651 36.766 370.988 18.223 261.41c-3.379-17.28 0-26.054 1.7-40.084-2.071 10.816-2.86 13.94-3.9 33.157 0 .41-.025.816-.025 1.227C16 388.418 123.6 496 256.324 496c118.865 0 217.56-86.288 236.882-199.63.407-3.076.733-6.168 1.092-9.271 4.777-41.21-.53-84.525-15.587-120.746z\"\n />\n <path\n fill=\"url(#c)\"\n d=\"M478.711 166.353c-10.445-25.124-31.6-52.248-48.212-60.821 13.52 26.505 21.345 53.093 24.335 72.936 0-.058.011.048.036.226.012.085.027.174.04.259 22.675 61.47 10.322 123.978-7.479 162.175-27.539 59.1-94.215 119.67-198.576 116.716C136.1 454.651 36.766 370.988 18.223 261.41c-3.379-17.28 0-26.054 1.7-40.084-2.071 10.816-2.86 13.94-3.9 33.157 0 .41-.025.816-.025 1.227C16 388.418 123.6 496 256.324 496c118.865 0 217.56-86.288 236.882-199.63.407-3.076.733-6.168 1.092-9.271 4.777-41.21-.53-84.525-15.587-120.746z\"\n />\n <path\n fill=\"url(#d)\"\n d=\"M361.922 194.6c.524.368 1 .734 1.493 1.1a130.706 130.706 0 0 0-22.31-29.112C266.4 91.892 321.516 4.626 330.811.194c.027-.036.083-.117.1-.136-60.37 35.356-80.85 100.761-82.732 133.484 2.8-.194 5.592-.429 8.442-.429 45.051 0 84.289 24.77 105.301 61.487z\"\n />\n <path\n fill=\"url(#e)\"\n d=\"M256.772 209.514c-.393 5.978-21.514 26.593-28.9 26.593-68.339 0-79.432 41.335-79.432 41.335 3.027 34.81 27.261 63.475 56.611 78.643 1.339.692 2.694 1.317 4.05 1.935a132.768 132.768 0 0 0 7.059 2.886 106.743 106.743 0 0 0 31.271 6.031c119.78 5.618 142.986-143.194 56.545-186.408 22.137-3.85 45.115 5.053 57.947 14.067-21.012-36.714-60.25-61.484-105.3-61.484-2.85 0-5.641.235-8.442.429a120.249 120.249 0 0 0-66.142 25.488c3.664 3.1 7.8 7.244 16.514 15.828 16.302 16.067 58.13 32.705 58.219 34.657z\"\n />\n <path\n fill=\"url(#f)\"\n d=\"M256.772 209.514c-.393 5.978-21.514 26.593-28.9 26.593-68.339 0-79.432 41.335-79.432 41.335 3.027 34.81 27.261 63.475 56.611 78.643 1.339.692 2.694 1.317 4.05 1.935a132.768 132.768 0 0 0 7.059 2.886 106.743 106.743 0 0 0 31.271 6.031c119.78 5.618 142.986-143.194 56.545-186.408 22.137-3.85 45.115 5.053 57.947 14.067-21.012-36.714-60.25-61.484-105.3-61.484-2.85 0-5.641.235-8.442.429a120.249 120.249 0 0 0-66.142 25.488c3.664 3.1 7.8 7.244 16.514 15.828 16.302 16.067 58.13 32.705 58.219 34.657z\"\n />\n <path\n fill=\"url(#g)\"\n d=\"M170.829 151.036a244.042 244.042 0 0 1 4.981 3.3 111.338 111.338 0 0 1-.674-58.732c-24.688 11.241-43.89 29.01-57.85 44.7 1.155-.033 36.014-.66 53.543 10.732z\"\n />\n <path\n fill=\"url(#h)\"\n d=\"M18.223 261.41C36.766 370.988 136.1 454.651 248.855 457.844c104.361 2.954 171.037-57.62 198.576-116.716 17.8-38.2 30.154-100.7 7.479-162.175l-.008-.026-.032-.233c-.025-.178-.04-.284-.036-.226 0 .039.015.136.047.4 8.524 55.661-19.79 109.584-64.051 146.044l-.133.313c-86.245 70.223-168.774 42.368-185.484 30.966a144.108 144.108 0 0 1-3.5-1.743c-50.282-24.029-71.054-69.838-66.6-109.124-42.457 0-56.934-35.809-56.934-35.809s38.119-27.179 88.358-3.541c46.53 21.893 90.228 3.543 90.233 3.541-.089-1.952-41.917-18.59-58.223-34.656-8.713-8.584-12.85-12.723-16.514-15.828a71.355 71.355 0 0 0-6.225-4.7 282.929 282.929 0 0 0-4.981-3.3c-17.528-11.392-52.388-10.765-53.543-10.735h-.111c-9.527-12.067-8.855-51.873-8.312-60.184-.114-.515-7.107 3.63-8.023 4.255a175.073 175.073 0 0 0-23.486 20.12 210.478 210.478 0 0 0-22.442 26.919c0 .012-.007.026-.011.038 0-.013.007-.026.011-.038a202.838 202.838 0 0 0-32.247 72.805c-.115.521-8.65 37.842-4.44 57.199z\"\n />\n <path\n fill=\"url(#i)\"\n d=\"M341.105 166.587a130.706 130.706 0 0 1 22.31 29.112c1.323.994 2.559 1.985 3.608 2.952 54.482 50.2 25.936 121.2 23.807 126.26 44.261-36.46 72.575-90.383 64.051-146.044C427.706 111.135 381.627 83.823 344 24.355c-1.9-3.007-3.805-6.022-5.661-9.2a73.716 73.716 0 0 1-2.646-4.972A43.7 43.7 0 0 1 332.1.677a.626.626 0 0 0-.546-.644.818.818 0 0 0-.451 0c-.034.012-.084.051-.12.065-.053.021-.12.069-.176.1-9.291 4.428-64.407 91.694 10.298 166.389z\"\n />\n <path\n fill=\"url(#j)\"\n d=\"M367.023 198.651c-1.049-.967-2.285-1.958-3.608-2.952-.489-.368-.969-.734-1.493-1.1-12.832-9.014-35.81-17.917-57.947-14.067 86.441 43.214 63.235 192.026-56.545 186.408a106.743 106.743 0 0 1-31.271-6.031 134.51 134.51 0 0 1-7.059-2.886c-1.356-.618-2.711-1.243-4.05-1.935.048.033.114.07.163.1 16.71 11.4 99.239 39.257 185.484-30.966l.133-.313c2.129-5.054 30.675-76.057-23.807-126.258z\"\n />\n <path\n fill=\"url(#k)\"\n d=\"M148.439 277.443s11.093-41.335 79.432-41.335c7.388 0 28.509-20.615 28.9-26.593s-43.7 18.352-90.233-3.541c-50.239-23.638-88.358 3.541-88.358 3.541s14.477 35.809 56.934 35.809c-4.453 39.286 16.319 85.1 66.6 109.124 1.124.537 2.18 1.124 3.334 1.639-29.348-15.169-53.582-43.834-56.609-78.644z\"\n />\n <path\n fill=\"url(#l)\"\n d=\"M478.711 166.353c-10.445-25.124-31.6-52.248-48.212-60.821 13.52 26.505 21.345 53.093 24.335 72.936 0 .039.015.136.047.4C427.706 111.135 381.627 83.823 344 24.355c-1.9-3.007-3.805-6.022-5.661-9.2a73.716 73.716 0 0 1-2.646-4.972A43.7 43.7 0 0 1 332.1.677a.626.626 0 0 0-.546-.644.818.818 0 0 0-.451 0c-.034.012-.084.051-.12.065-.053.021-.12.069-.176.1.027-.036.083-.117.1-.136-60.37 35.356-80.85 100.761-82.732 133.484 2.8-.194 5.592-.429 8.442-.429 45.053 0 84.291 24.77 105.3 61.484-12.832-9.014-35.81-17.917-57.947-14.067 86.441 43.214 63.235 192.026-56.545 186.408a106.743 106.743 0 0 1-31.271-6.031 134.51 134.51 0 0 1-7.059-2.886c-1.356-.618-2.711-1.243-4.05-1.935.048.033.114.07.163.1a144.108 144.108 0 0 1-3.5-1.743c1.124.537 2.18 1.124 3.334 1.639-29.35-15.168-53.584-43.833-56.611-78.643 0 0 11.093-41.335 79.432-41.335 7.388 0 28.509-20.615 28.9-26.593-.089-1.952-41.917-18.59-58.223-34.656-8.713-8.584-12.85-12.723-16.514-15.828a71.355 71.355 0 0 0-6.225-4.7 111.338 111.338 0 0 1-.674-58.732c-24.688 11.241-43.89 29.01-57.85 44.7h-.111c-9.527-12.067-8.855-51.873-8.312-60.184-.114-.515-7.107 3.63-8.023 4.255a175.073 175.073 0 0 0-23.486 20.12 210.478 210.478 0 0 0-22.435 26.916c0 .012-.007.026-.011.038 0-.013.007-.026.011-.038a202.838 202.838 0 0 0-32.247 72.805c-.115.521-.212 1.061-.324 1.586-.452 2.116-2.486 12.853-2.77 15.156-.022.177.021-.176 0 0a279.565 279.565 0 0 0-3.544 33.53c0 .41-.025.816-.025 1.227C16 388.418 123.6 496 256.324 496c118.865 0 217.56-86.288 236.882-199.63.407-3.076.733-6.168 1.092-9.271 4.777-41.21-.53-84.525-15.587-120.746zm-23.841 12.341c.012.085.027.174.04.259l-.008-.026-.032-.233z\"\n />\n </svg>\n)\n","import { SVGProps } from \"react\"\n\nexport const SafariIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n width={250.076}\n height={248.707}\n viewBox=\"0 0 66.166 65.804\"\n {...props}\n >\n <defs>\n <linearGradient id=\"b\">\n <stop offset={0} stopColor=\"#06c2e7\" />\n <stop offset={0.25} stopColor=\"#0db8ec\" />\n <stop offset={0.5} stopColor=\"#12aef1\" />\n <stop offset={0.75} stopColor=\"#1f86f9\" />\n <stop offset={1} stopColor=\"#107ddd\" />\n </linearGradient>\n <linearGradient id=\"a\">\n <stop offset={0} stopColor=\"#bdbdbd\" />\n <stop offset={1} stopColor=\"#fff\" />\n </linearGradient>\n <linearGradient\n xlinkHref=\"#a\"\n id=\"d\"\n x1={412.975}\n x2={412.975}\n y1={237.608}\n y2={59.392}\n gradientTransform=\"translate(206.79 159.773) scale(.35154)\"\n gradientUnits=\"userSpaceOnUse\"\n />\n <filter\n id=\"f\"\n width={1.042}\n height={1.045}\n x={-0.021}\n y={-0.022}\n colorInterpolationFilters=\"sRGB\"\n >\n <feGaussianBlur stdDeviation={0.958} />\n </filter>\n <filter\n id=\"c\"\n width={1.096}\n height={1.096}\n x={-0.048}\n y={-0.048}\n colorInterpolationFilters=\"sRGB\"\n >\n <feGaussianBlur stdDeviation={3.564} />\n </filter>\n <radialGradient\n xlinkHref=\"#b\"\n id=\"e\"\n cx={413.061}\n cy={136.818}\n r={82.125}\n fx={413.061}\n fy={136.818}\n gradientTransform=\"translate(194.545 155.58) scale(.38143)\"\n gradientUnits=\"userSpaceOnUse\"\n />\n </defs>\n <path\n d=\"M502.083 148.5a89.108 89.108 0 0 1-89.108 89.108 89.108 89.108 0 0 1-89.108-89.108 89.108 89.108 0 0 1 89.108-89.108 89.108 89.108 0 0 1 89.108 89.108Z\"\n filter=\"url(#c)\"\n opacity={0.53}\n paintOrder=\"markers stroke fill\"\n transform=\"matrix(.33865 0 0 .3261 -106.77 -14.478)\"\n />\n <path\n fill=\"url(#d)\"\n stroke=\"#cdcdcd\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={0.093}\n d=\"M383.294 211.977a31.325 31.325 0 0 1-31.325 31.325 31.325 31.325 0 0 1-31.326-31.325 31.325 31.325 0 0 1 31.326-31.325 31.325 31.325 0 0 1 31.325 31.325z\"\n paintOrder=\"markers stroke fill\"\n transform=\"translate(-318.886 -180.595)\"\n />\n <path\n fill=\"url(#e)\"\n d=\"M380.84 211.977a28.87 28.87 0 0 1-28.871 28.87 28.87 28.87 0 0 1-28.871-28.87 28.87 28.87 0 0 1 28.87-28.87 28.87 28.87 0 0 1 28.871 28.87z\"\n paintOrder=\"markers stroke fill\"\n transform=\"translate(-318.886 -180.595)\"\n />\n <path\n fill=\"#f4f2f3\"\n d=\"M33.083 4.017a.42.42 0 0 0-.421.42v4.856a.42.42 0 1 0 .842 0V4.438a.42.42 0 0 0-.421-.421zm-2.754.174a.42.42 0 0 0-.46.463l.212 2.03a.42.42 0 1 0 .837-.087l-.212-2.03a.42.42 0 0 0-.377-.376zm5.527.002a.42.42 0 0 0-.377.375l-.214 2.03a.42.42 0 1 0 .837.089l.214-2.031a.42.42 0 0 0-.46-.463zM27.5 4.6a.42.42 0 0 0-.41.508l1.005 4.75a.42.42 0 1 0 .824-.174l-1.005-4.75A.42.42 0 0 0 27.5 4.6zm11.183.004a.42.42 0 0 0-.414.333l-1.009 4.75a.42.42 0 1 0 .824.175l1.009-4.75a.42.42 0 0 0-.41-.508zm-13.883.757a.42.42 0 0 0-.437.55l.632 1.942a.42.42 0 1 0 .8-.26l-.63-1.942a.42.42 0 0 0-.365-.29zm16.568.001a.42.42 0 0 0-.364.29l-.632 1.942a.42.42 0 1 0 .8.26l.632-1.942a.42.42 0 0 0-.436-.55zM22.13 6.34a.42.42 0 0 0-.377.592l1.972 4.437a.42.42 0 1 0 .77-.342l-1.972-4.437a.42.42 0 0 0-.393-.25zm21.937.015a.42.42 0 0 0-.392.25l-1.978 4.434a.42.42 0 1 0 .769.343l1.978-4.434a.42.42 0 0 0-.377-.593zM19.654 7.65a.42.42 0 0 0-.394.63l1.02 1.77a.42.42 0 1 0 .73-.421L19.989 7.86a.42.42 0 0 0-.335-.21zm26.858 0a.419.419 0 0 0-.335.21l-1.021 1.769a.42.42 0 1 0 .73.42l1.02-1.768a.42.42 0 0 0-.394-.63zm-29.265 1.5a.422.422 0 0 0-.326.669l2.85 3.93a.42.42 0 1 0 .682-.494l-2.85-3.93a.42.42 0 0 0-.356-.174zm31.702.022a.42.42 0 0 0-.356.174l-2.856 3.926a.42.42 0 1 0 .681.495l2.856-3.926a.42.42 0 0 0-.325-.669zm-33.852 1.783a.42.42 0 0 0-.335.702l1.366 1.518a.42.42 0 1 0 .626-.563l-1.366-1.518a.42.42 0 0 0-.291-.14zm35.975.003a.421.421 0 0 0-.29.139l-1.367 1.517a.42.42 0 1 0 .625.564l1.367-1.518a.42.42 0 0 0-.335-.702zm-38.037 1.977a.42.42 0 0 0-.26.733l3.61 3.249a.42.42 0 1 0 .563-.626l-3.609-3.248a.42.42 0 0 0-.304-.108zm40.109.014a.419.419 0 0 0-.304.108l-3.61 3.245a.42.42 0 1 0 .562.626l3.61-3.245a.42.42 0 0 0-.258-.734zm-41.823 2.19a.42.42 0 0 0-.262.762l1.652 1.2a.42.42 0 1 0 .495-.681l-1.652-1.2a.42.42 0 0 0-.233-.081zm43.535.015a.421.421 0 0 0-.233.08l-1.653 1.2a.42.42 0 1 0 .495.681l1.653-1.2a.42.42 0 0 0-.262-.76zM9.72 17.49a.42.42 0 0 0-.18.785l4.204 2.427a.42.42 0 1 0 .42-.729L9.96 17.546a.42.42 0 0 0-.24-.056zm46.728 0a.417.417 0 0 0-.24.056l-4.205 2.427a.42.42 0 1 0 .42.73l4.206-2.428a.42.42 0 0 0-.181-.785zM8.508 19.996a.42.42 0 0 0-.18.806l1.866.832a.42.42 0 1 0 .343-.77l-1.866-.831a.42.42 0 0 0-.163-.037zm49.158.017a.42.42 0 0 0-.164.037l-1.865.83a.42.42 0 1 0 .342.77l1.866-.831a.42.42 0 0 0-.179-.806zM7.429 22.615a.42.42 0 0 0-.094.82l4.615 1.504a.42.42 0 1 0 .261-.8l-4.616-1.504a.421.421 0 0 0-.166-.02zm51.314.018a.408.408 0 0 0-.166.02l-4.617 1.5a.42.42 0 1 0 .26.801l4.617-1.5a.42.42 0 0 0-.094-.82zM6.756 25.365a.42.42 0 0 0-.09.833l1.998.424a.42.42 0 1 0 .175-.823l-1.998-.425a.413.413 0 0 0-.085-.009zm52.655.004a.518.518 0 0 0-.085.009l-1.998.424a.42.42 0 1 0 .175.823l1.998-.424a.42.42 0 0 0-.09-.833zM6.247 28.13a.42.42 0 0 0-.003.838l4.828.51a.42.42 0 1 0 .089-.837l-4.829-.51a.432.432 0 0 0-.085 0zm53.676.037a.386.386 0 0 0-.085 0l-4.83.504a.42.42 0 1 0 .088.837l4.83-.504a.42.42 0 0 0-.003-.837zM6.165 30.96a.42.42 0 1 0 0 .842h2.043a.42.42 0 1 0 0-.842zm51.793 0a.42.42 0 1 0 0 .842h2.043a.42.42 0 1 0 0-.842zm-46.803 2.295a.384.384 0 0 0-.085 0l-4.83.504a.42.42 0 1 0 .088.838l4.83-.504a.42.42 0 0 0-.003-.838zm43.853.03a.42.42 0 0 0-.003.838l4.828.51a.42.42 0 1 0 .089-.837l-4.828-.51a.434.434 0 0 0-.086-.001zM8.748 36.13a.43.43 0 0 0-.085.009l-1.998.424a.42.42 0 1 0 .175.823l1.998-.424a.42.42 0 0 0-.09-.833zm48.67.004a.42.42 0 0 0-.09.833l1.997.424a.42.42 0 1 0 .175-.824l-1.998-.424a.413.413 0 0 0-.085-.01zM12.111 37.79a.408.408 0 0 0-.166.02l-4.617 1.5a.42.42 0 1 0 .26.801l4.617-1.5a.42.42 0 0 0-.094-.82zm41.937.015a.42.42 0 0 0-.094.82l4.616 1.504a.42.42 0 1 0 .26-.8l-4.615-1.504a.421.421 0 0 0-.167-.02zM10.35 41.08a.42.42 0 0 0-.163.036l-1.866.831a.42.42 0 1 0 .342.769l1.866-.83a.42.42 0 0 0-.179-.806zm45.459.016a.42.42 0 0 0-.18.805l1.865.832a.42.42 0 1 0 .343-.769l-1.865-.832a.42.42 0 0 0-.163-.036zm-41.826.912a.417.417 0 0 0-.24.056L9.538 44.49a.42.42 0 1 0 .421.73l4.205-2.428a.42.42 0 0 0-.181-.785zm38.2 0a.42.42 0 0 0-.181.785l4.205 2.427a.42.42 0 1 0 .42-.729l-4.204-2.427a.42.42 0 0 0-.24-.056zm-39.249 3.562a.421.421 0 0 0-.233.08l-1.653 1.2a.42.42 0 1 0 .495.682l1.653-1.2a.42.42 0 0 0-.262-.762zm40.288.015a.42.42 0 0 0-.262.762l1.652 1.2a.42.42 0 1 0 .495-.681l-1.652-1.2a.42.42 0 0 0-.233-.081zm-36.544.145a.418.418 0 0 0-.304.108l-3.61 3.245a.42.42 0 1 0 .562.626l3.61-3.245a.42.42 0 0 0-.258-.734zm32.8.011a.421.421 0 0 0-.26.734l3.609 3.248a.42.42 0 1 0 .563-.625l-3.608-3.249a.42.42 0 0 0-.304-.107zm-29.375 3.084a.42.42 0 0 0-.355.173l-2.856 3.927a.42.42 0 1 0 .68.495l2.857-3.926a.42.42 0 0 0-.326-.669zm25.936.018a.421.421 0 0 0-.326.668l2.85 3.93a.42.42 0 1 0 .682-.494l-2.851-3.93a.42.42 0 0 0-.355-.174zm-29.623.606a.421.421 0 0 0-.29.14l-1.367 1.517a.42.42 0 1 0 .625.563l1.367-1.517a.42.42 0 0 0-.335-.703zm33.331.002a.42.42 0 0 0-.335.702l1.366 1.518a.42.42 0 1 0 .626-.563l-1.366-1.518a.42.42 0 0 0-.291-.139zm-25.655 1.684a.419.419 0 0 0-.393.25l-1.978 4.433a.42.42 0 1 0 .77.343l1.977-4.434a.42.42 0 0 0-.376-.592zm17.955.012a.42.42 0 0 0-.377.592l1.972 4.437a.42.42 0 1 0 .77-.342l-1.972-4.437a.42.42 0 0 0-.393-.25zm-21.431 1.359a.419.419 0 0 0-.335.21l-1.021 1.768a.42.42 0 1 0 .729.421l1.02-1.769a.42.42 0 0 0-.393-.63zm24.934 0a.42.42 0 0 0-.394.63l1.021 1.77a.42.42 0 1 0 .73-.422l-1.022-1.769a.42.42 0 0 0-.335-.21zm-17.054.063a.42.42 0 0 0-.415.334l-1.009 4.749a.42.42 0 1 0 .824.175l1.009-4.75a.42.42 0 0 0-.41-.508zm9.16.003a.42.42 0 0 0-.41.508l1.006 4.75a.42.42 0 1 0 .823-.175l-1.006-4.75a.42.42 0 0 0-.414-.333zm-4.573.48a.42.42 0 0 0-.421.42v4.855a.42.42 0 1 0 .842 0v-4.855a.42.42 0 0 0-.421-.42zm-7.727 1.568a.42.42 0 0 0-.364.29l-.631 1.942a.42.42 0 1 0 .8.26l.632-1.942a.42.42 0 0 0-.437-.55zm15.45 0a.42.42 0 0 0-.437.55l.632 1.943a.42.42 0 1 0 .8-.26l-.63-1.942a.42.42 0 0 0-.365-.29zm-10.365 1.083a.42.42 0 0 0-.378.375l-.213 2.03a.42.42 0 1 0 .837.088l.214-2.03a.42.42 0 0 0-.46-.463zm5.267.002a.42.42 0 0 0-.46.463l.212 2.03a.42.42 0 1 0 .837-.088l-.212-2.03a.42.42 0 0 0-.377-.375z\"\n paintOrder=\"markers stroke fill\"\n />\n <path\n d=\"m469.096 100.607-65.51 38.061-41.42 65.207 60.595-44.882z\"\n filter=\"url(#f)\"\n opacity={0.409}\n paintOrder=\"markers stroke fill\"\n transform=\"translate(-112.095 -20.822) scale(.35154)\"\n />\n <path\n fill=\"#ff5150\"\n d=\"m36.383 34.838-6.6-6.913 23.416-15.752z\"\n paintOrder=\"markers stroke fill\"\n />\n <path\n fill=\"#f1f1f1\"\n d=\"m36.383 34.838-6.6-6.913L12.966 50.59z\"\n paintOrder=\"markers stroke fill\"\n />\n <path d=\"m12.967 50.59 23.416-15.752L53.2 12.173z\" opacity={0.243} />\n </svg>\n)\n","import { SVGProps } from \"react\"\n\nexport const EdgeIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" {...props}>\n <defs>\n <radialGradient\n id=\"b\"\n cx={161.8}\n cy={68.9}\n r={95.4}\n gradientTransform=\"matrix(1 0 0 -.95 0 248.8)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset={0.7} stopOpacity={0} />\n <stop offset={0.9} stopOpacity={0.5} />\n <stop offset={1} />\n </radialGradient>\n <radialGradient\n id=\"d\"\n cx={-340.3}\n cy={63}\n r={143.2}\n gradientTransform=\"matrix(.15 -.99 -.8 -.12 176.6 -125.4)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset={0.8} stopOpacity={0} />\n <stop offset={0.9} stopOpacity={0.5} />\n <stop offset={1} />\n </radialGradient>\n <radialGradient\n id=\"e\"\n cx={113.4}\n cy={570.2}\n r={202.4}\n gradientTransform=\"matrix(-.04 1 2.13 .08 -1179.5 -106.7)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset={0} stopColor=\"#35c1f1\" />\n <stop offset={0.1} stopColor=\"#34c1ed\" />\n <stop offset={0.2} stopColor=\"#2fc2df\" />\n <stop offset={0.3} stopColor=\"#2bc3d2\" />\n <stop offset={0.7} stopColor=\"#36c752\" />\n </radialGradient>\n <radialGradient\n id=\"f\"\n cx={376.5}\n cy={568}\n r={97.3}\n gradientTransform=\"matrix(.28 .96 .78 -.23 -303.8 -148.5)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset={0} stopColor=\"#66eb6e\" />\n <stop offset={1} stopColor=\"#66eb6e\" stopOpacity={0} />\n </radialGradient>\n <linearGradient\n id=\"a\"\n x1={63.3}\n x2={241.7}\n y1={84}\n y2={84}\n gradientTransform=\"matrix(1 0 0 -1 0 266)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset={0} stopColor=\"#0c59a4\" />\n <stop offset={1} stopColor=\"#114a8b\" />\n </linearGradient>\n <linearGradient\n id=\"c\"\n x1={157.3}\n x2={46}\n y1={161.4}\n y2={40.1}\n gradientTransform=\"matrix(1 0 0 -1 0 266)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset={0} stopColor=\"#1b9de2\" />\n <stop offset={0.2} stopColor=\"#1595df\" />\n <stop offset={0.7} stopColor=\"#0680d7\" />\n <stop offset={1} stopColor=\"#0078d4\" />\n </linearGradient>\n </defs>\n <path\n d=\"M235.7 195.5a93.7 93.7 0 0 1-10.6 4.7 101.9 101.9 0 0 1-35.9 6.4c-47.3 0-88.5-32.5-88.5-74.3a31.5 31.5 0 0 1 16.4-27.3c-42.8 1.8-53.8 46.4-53.8 72.5 0 74 68.1 81.4 82.8 81.4 7.9 0 19.8-2.3 27-4.6l1.3-.4a128.3 128.3 0 0 0 66.6-52.8 4 4 0 0 0-5.3-5.6Z\"\n style={{\n fill: \"url(#a)\",\n }}\n transform=\"translate(-4.6 -5)\"\n />\n <path\n d=\"M235.7 195.5a93.7 93.7 0 0 1-10.6 4.7 101.9 101.9 0 0 1-35.9 6.4c-47.3 0-88.5-32.5-88.5-74.3a31.5 31.5 0 0 1 16.4-27.3c-42.8 1.8-53.8 46.4-53.8 72.5 0 74 68.1 81.4 82.8 81.4 7.9 0 19.8-2.3 27-4.6l1.3-.4a128.3 128.3 0 0 0 66.6-52.8 4 4 0 0 0-5.3-5.6Z\"\n style={{\n isolation: \"isolate\",\n opacity: 0.35,\n fill: \"url(#b)\",\n }}\n transform=\"translate(-4.6 -5)\"\n />\n <path\n d=\"M110.3 246.3A79.2 79.2 0 0 1 87.6 225a80.7 80.7 0 0 1 29.5-120c3.2-1.5 8.5-4.1 15.6-4a32.4 32.4 0 0 1 25.7 13 31.9 31.9 0 0 1 6.3 18.7c0-.2 24.5-79.6-80-79.6-43.9 0-80 41.6-80 78.2a130.2 130.2 0 0 0 12.1 56 128 128 0 0 0 156.4 67 75.5 75.5 0 0 1-62.8-8Z\"\n style={{\n fill: \"url(#c)\",\n }}\n transform=\"translate(-4.6 -5)\"\n />\n <path\n d=\"M110.3 246.3A79.2 79.2 0 0 1 87.6 225a80.7 80.7 0 0 1 29.5-120c3.2-1.5 8.5-4.1 15.6-4a32.4 32.4 0 0 1 25.7 13 31.9 31.9 0 0 1 6.3 18.7c0-.2 24.5-79.6-80-79.6-43.9 0-80 41.6-80 78.2a130.2 130.2 0 0 0 12.1 56 128 128 0 0 0 156.4 67 75.5 75.5 0 0 1-62.8-8Z\"\n style={{\n opacity: 0.41,\n fill: \"url(#d)\",\n isolation: \"isolate\",\n }}\n transform=\"translate(-4.6 -5)\"\n />\n <path\n d=\"M157 153.8c-.9 1-3.4 2.5-3.4 5.6 0 2.6 1.7 5.2 4.8 7.3 14.3 10 41.4 8.6 41.5 8.6a59.6 59.6 0 0 0 30.3-8.3 61.4 61.4 0 0 0 30.4-52.9c.3-22.4-8-37.3-11.3-43.9C228 28.8 182.3 5 132.6 5a128 128 0 0 0-128 126.2c.5-36.5 36.8-66 80-66 3.5 0 23.5.3 42 10a72.6 72.6 0 0 1 30.9 29.3c6.1 10.6 7.2 24.1 7.2 29.5s-2.7 13.3-7.8 19.9Z\"\n style={{\n fill: \"url(#e)\",\n }}\n transform=\"translate(-4.6 -5)\"\n />\n <path\n d=\"M157 153.8c-.9 1-3.4 2.5-3.4 5.6 0 2.6 1.7 5.2 4.8 7.3 14.3 10 41.4 8.6 41.5 8.6a59.6 59.6 0 0 0 30.3-8.3 61.4 61.4 0 0 0 30.4-52.9c.3-22.4-8-37.3-11.3-43.9C228 28.8 182.3 5 132.6 5a128 128 0 0 0-128 126.2c.5-36.5 36.8-66 80-66 3.5 0 23.5.3 42 10a72.6 72.6 0 0 1 30.9 29.3c6.1 10.6 7.2 24.1 7.2 29.5s-2.7 13.3-7.8 19.9Z\"\n style={{\n fill: \"url(#f)\",\n }}\n transform=\"translate(-4.6 -5)\"\n />\n </svg>\n)\n","export const OperaIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth=\"20\"\n\t\theight=\"20\"\n\t\tviewBox=\"0 0 24 24\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t{...props}\n\t\trole=\"img\"\n\t\taria-label=\"Opera\"\n\t>\n\t\t<defs>\n\t\t\t<linearGradient id=\"opera-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n\t\t\t\t<stop offset=\"0%\" stopColor=\"#FF1B2D\" />\n\t\t\t\t<stop offset=\"50%\" stopColor=\"#CC0000\" />\n\t\t\t\t<stop offset=\"100%\" stopColor=\"#A02128\" />\n\t\t\t</linearGradient>\n\t\t</defs>\n\t\t<circle cx=\"12\" cy=\"12\" r=\"11\" fill=\"url(#opera-gradient)\" />\n\t\t<ellipse cx=\"12\" cy=\"12\" rx=\"6.5\" ry=\"8.5\" fill=\"none\" stroke=\"#fff\" strokeWidth=\"1.2\" opacity=\"0.9\" />\n\t\t<ellipse cx=\"12\" cy=\"12\" rx=\"3.5\" ry=\"5.5\" fill=\"#fff\" />\n\t\t<path d=\"M12 8.5c-1.4 0-2.5 1.6-2.5 3.5s1.1 3.5 2.5 3.5 2.5-1.6 2.5-3.5-1.1-3.5-2.5-3.5z\" fill=\"url(#opera-gradient)\" />\n\t</svg>\n);","export const BraveIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth=\"20\"\n\t\theight=\"20\"\n\t\tviewBox=\"0 0 24 24\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t{...props}\n\t\trole=\"img\"\n\t\taria-label=\"Brave\"\n\t>\n\t\t<defs>\n\t\t\t<linearGradient id=\"brave-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n\t\t\t\t<stop offset=\"0%\" stopColor=\"#FB542B\" />\n\t\t\t\t<stop offset=\"50%\" stopColor=\"#FF6B35\" />\n\t\t\t\t<stop offset=\"100%\" stopColor=\"#FF4500\" />\n\t\t\t</linearGradient>\n\t\t</defs>\n\t\t<circle cx=\"12\" cy=\"12\" r=\"11\" fill=\"url(#brave-gradient)\" />\n\t\t<path d=\"M12 3.5l1.5 2h2.5l-.8 3 1.3 2.5-2.5.8v2.7l-2-.7-2 .7v-2.7l-2.5-.8L8.8 8.5 8 5.5h2.5L12 3.5z\" fill=\"#fff\" />\n\t\t<path d=\"M12 6.5c-.8 0-1.5.7-1.5 1.5v3c0 .8.7 1.5 1.5 1.5s1.5-.7 1.5-1.5V8c0-.8-.7-1.5-1.5-1.5z\" fill=\"url(#brave-gradient)\" />\n\t\t<circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"url(#brave-gradient)\" />\n\t</svg>\n);","import { useCallback, useState, useRef } from \"react\";\nimport styled, { keyframes } from \"styled-components\";\nimport { QRCodeSVG } from \"qrcode.react\";\n\nconst spin = keyframes`\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n`;\n\nimport {\n User,\n LogOut,\n Download,\n AlertTriangle,\n Check,\n Mail,\n Phone,\n Link2,\n Shield,\n Activity,\n X,\n} from \"lucide-react\";\n\n// Local interface to match the actual API response\ninterface UserSignIn {\n id: string;\n session_id: string;\n user_id: string;\n active_organization_membership_id?: string;\n active_workspace_membership_id?: string;\n expires_at: string;\n last_active_at: string;\n ip_address: string;\n browser: string;\n device: string;\n city: string;\n region: string;\n region_code: string;\n country: string;\n country_code: string;\n}\nimport { EmailAddPopover } from \"@/components/user/add-email-popover\";\nimport { PhoneAddPopover } from \"@/components/user/add-phone-popover\";\nimport { SetupTOTPPopover } from \"@/components/user/setup-totp-popover\";\nimport { ChangePasswordPopover } from \"@/components/user/change-password-popover\";\nimport { RemovePasswordPopover } from \"@/components/user/remove-password-popover\";\nimport { BackupCodesPopover } from \"@/components/user/backup-codes-popover\";\nimport {\n Dropdown,\n DropdownItem,\n DropdownItems,\n DropdownTrigger,\n} from \"@/components/utility/dropdown\";\nimport { useUser, useUserSignins } from \"@/hooks/use-user\";\nimport { useSession } from \"@/hooks/use-session\";\nimport { GoogleIcon } from \"../icons/google\";\nimport { MicrosoftIcon } from \"../icons/microsoft\";\nimport { GithubIcon } from \"../icons/github\";\nimport { XIcon } from \"../icons/x\";\nimport { GitLabIcon } from \"../icons/gitlab\";\nimport { LinkedInIcon } from \"../icons/linkedin\";\nimport { DiscordIcon } from \"../icons/discord\";\nimport { ChromeIcon } from \"../icons/chrome\";\nimport { FirefoxIcon } from \"../icons/firefox\";\nimport { SafariIcon } from \"../icons/safari\";\nimport { EdgeIcon } from \"../icons/edge\";\nimport { OperaIcon } from \"../icons/opera\";\nimport { BraveIcon } from \"../icons/brave\";\nimport { useDeployment } from \"@/hooks/use-deployment\";\nimport { countries } from \"@/constants/geo\";\nimport { FormGroup, Label } from \"../utility/form\";\nimport { Input } from \"../utility/input\";\nimport {\n Spinner,\n Button,\n SearchInput,\n DefaultStylesProvider,\n} from \"../utility\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n ActionsCell,\n} from \"@/components/utility/table\";\nimport { EmptyState } from \"@/components/utility/empty-state\";\n\nimport React from \"react\";\nimport { ScreenContext, useScreenContext } from \"./context\";\n\nconst TypographyProvider = styled.div`\n * {\n box-sizing: border-box;\n font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n max-height: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n max-height: 1000px;\n transform: translateY(0);\n }\n }\n`;\n\nconst Container = styled.div`\n width: 100%;\n height: 600px;\n background: var(--color-background);\n border-radius: 20px;\n box-shadow: 0 8px 30px var(--color-shadow);\n transition: all 0.3s ease;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n padding-bottom: 24px;\n position: relative;\n\n @media (max-width: 768px) {\n border-radius: 16px;\n padding-bottom: 20px;\n }\n\n /* Blur effect at the bottom */\n &::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 40px;\n background: linear-gradient(\n to bottom,\n transparent 0%,\n var(--color-background) 70%\n );\n pointer-events: none;\n z-index: 1;\n }\n`;\n\nconst TabsContainer = styled.div`\n padding: 0 24px;\n border-bottom: 1px solid var(--color-border);\n\n @media (max-width: 768px) {\n padding: 0 20px;\n }\n`;\n\nconst TabsList = styled.div`\n display: flex;\n align-items: center;\n gap: 20px;\n overflow-x: auto;\n overflow-y: hidden;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst Tab = styled.button<{ $isActive: boolean }>`\n padding: 12px 12px;\n border: none;\n background: none;\n font-size: 14px;\n font-weight: 500;\n color: ${(props) =>\n props.$isActive ? \"var(--color-foreground)\" : \"var(--color-muted)\"};\n cursor: pointer;\n position: relative;\n transition: color 0.15s ease;\n white-space: nowrap;\n min-width: fit-content;\n\n &:hover {\n color: var(--color-foreground);\n }\n\n &::after {\n content: \"\";\n position: absolute;\n bottom: -1px;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--color-primary);\n opacity: ${(props) => (props.$isActive ? 1 : 0)};\n transition: opacity 0.15s ease;\n }\n`;\n\nconst TabIcon = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n`;\n\nconst TabContent = styled.div`\n flex: 1;\n padding: 24px 24px 0 24px;\n overflow-y: auto;\n position: relative;\n\n @media (max-width: 768px) {\n padding: 20px 20px 0 20px;\n }\n`;\n\nconst IconButton = styled.button`\n background: none;\n border: none;\n padding: 4px;\n cursor: pointer;\n color: var(--color-secondary-text);\n border-radius: var(--radius-xs);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n\n &:hover {\n background: var(--color-input-background);\n color: var(--color-foreground);\n }\n`;\n\nconst HeaderCTAContainer = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n margin-bottom: 0;\n`;\n\nconst UnknownBrowserIcon = () => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ color: \"var(--color-secondary-text)\" }}\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"11\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"0.5\"\n opacity=\"0.6\"\n />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"8\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"0.5\"\n opacity=\"0.3\"\n />\n <path\n d=\"M12 8c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm0 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"\n fill=\"currentColor\"\n opacity=\"0.5\"\n />\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <text\n x=\"12\"\n y=\"16.5\"\n textAnchor=\"middle\"\n fill=\"currentColor\"\n fontSize=\"6\"\n opacity=\"0.7\"\n >\n ?\n </text>\n </svg>\n);\n\nconst BrowserIcon = ({ browser }: { browser: string }) => {\n const browserName = browser?.toLowerCase() || \"\";\n const iconProps = { width: 20, height: 20 };\n\n if (browserName.includes(\"chrome\")) {\n return <ChromeIcon {...iconProps} />;\n }\n\n if (browserName.includes(\"firefox\")) {\n return <FirefoxIcon {...iconProps} />;\n }\n\n if (browserName.includes(\"safari\")) {\n return <SafariIcon {...iconProps} />;\n }\n\n if (browserName.includes(\"edge\")) {\n return <EdgeIcon {...iconProps} />;\n }\n\n if (browserName.includes(\"opera\")) {\n return <OperaIcon {...iconProps} />;\n }\n\n if (browserName.includes(\"brave\")) {\n return <BraveIcon {...iconProps} />;\n }\n\n return <UnknownBrowserIcon />;\n};\n\nconst ActiveSessionsSection = () => {\n const [activeSession, setActiveSession] = useState<string | null>(null);\n const { signins, removeSignin, refetch, loading } = useUserSignins();\n const { refetch: refetchSession } = useSession();\n const { toast } = useScreenContext();\n\n // Type the signins data properly\n const typedSignins = signins as UserSignIn[] | undefined;\n\n const logoutSession = async (sessionId: string) => {\n try {\n await removeSignin(sessionId);\n // Refetch both the signins list and the current session\n await Promise.all([refetch(), refetchSession()]);\n setActiveSession(null);\n toast(\"Session ended successfully\", \"info\");\n } catch (error: any) {\n toast(\n error.message || \"Failed to end session. Please try again.\",\n \"error\",\n );\n }\n };\n\n const formatLastActive = (lastActiveAt: string) => {\n if (!lastActiveAt || lastActiveAt.trim() === \"\") return \"Unknown\";\n\n const date = new Date(lastActiveAt);\n if (isNaN(date.getTime())) return \"Unknown\";\n\n const now = new Date();\n const diffInMinutes = Math.floor(\n (now.getTime() - date.getTime()) / (1000 * 60),\n );\n\n if (diffInMinutes < 1) return \"Just now\";\n if (diffInMinutes < 60) return `${diffInMinutes}m ago`;\n if (diffInMinutes < 1440) return `${Math.floor(diffInMinutes / 60)}h ago`;\n return date.toLocaleDateString();\n };\n\n if (loading) {\n return (\n <div\n style={{ display: \"flex\", justifyContent: \"center\", padding: \"20px\" }}\n >\n <Spinner />\n </div>\n );\n }\n\n return (\n <>\n <div style={{ marginBottom: \"16px\" }}>\n <h3\n style={{\n fontSize: \"16px\",\n color: \"var(--color-foreground)\",\n margin: 0,\n }}\n >\n Active Sessions\n </h3>\n <p\n style={{\n fontSize: \"14px\",\n color: \"var(--color-muted)\",\n margin: 0,\n }}\n >\n Manage your active browser sessions and sign-ins\n </p>\n </div>\n <div>\n {typedSignins && typedSignins.length > 0 ? (\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Browser & Device</TableHeader>\n <TableHeader>Location</TableHeader>\n <TableHeader>Last Active</TableHeader>\n <TableHeader></TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {typedSignins.map((signin) => (\n <TableRow key={signin.id}>\n <TableCell>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <IconWrapper>\n <BrowserIcon browser={signin.browser || \"Unknown\"} />\n </IconWrapper>\n <div>\n <div>{signin.browser || \"Unknown Browser\"}</div>\n {signin.device && (\n <div\n style={{\n fontSize: \"12px\",\n color: \"var(--color-muted)\",\n }}\n >\n {signin.device}\n </div>\n )}\n </div>\n </div>\n </TableCell>\n <TableCell>\n <div>\n <div>\n {signin.city && signin.country\n ? `${signin.city}, ${signin.country}`\n : \"Unknown location\"}\n </div>\n {signin.ip_address && (\n <div\n style={{\n fontSize: \"12px\",\n color: \"var(--color-muted)\",\n }}\n >\n {signin.ip_address}\n </div>\n )}\n </div>\n </TableCell>\n <TableCell>\n {formatLastActive(signin.last_active_at)}\n </TableCell>\n <ActionsCell>\n <Dropdown\n open={activeSession === signin.id}\n openChange={(isOpen) =>\n setActiveSession(isOpen ? signin.id : null)\n }\n >\n <DropdownTrigger>\n <IconButton>•••</IconButton>\n </DropdownTrigger>\n <DropdownItems>\n <DropdownItem onClick={() => logoutSession(signin.id)}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <LogOut size={14} />\n End Session\n </div>\n </DropdownItem>\n </DropdownItems>\n </Dropdown>\n </ActionsCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n ) : (\n <EmptyState\n title=\"No active sessions\"\n description=\"You don't have any active sessions at the moment.\"\n />\n )}\n </div>\n </>\n );\n};\n\nconst EmailManagementSection = () => {\n const { deployment } = useDeployment();\n const { toast } = useScreenContext();\n const [activeDropdown, setActiveDropdown] = useState<string | null>(null);\n const [newEmail, setNewEmail] = useState(\"\");\n const [isAddingEmail, setIsAddingEmail] = useState(false);\n const [verifyingEmailId, setVerifyingEmailId] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const emailButtonRef = useRef<HTMLButtonElement>(null);\n const verifyButtonRefs = useRef<{ [key: string]: HTMLButtonElement | null }>(\n {},\n );\n const {\n user,\n createEmailAddress,\n deleteEmailAddress,\n prepareEmailVerification,\n attemptEmailVerification,\n makeEmailPrimary,\n } = useUser();\n\n // Don't render if email is disabled\n if (!deployment?.auth_settings?.email_address?.enabled) {\n return null;\n }\n\n const handleDeleteEmail = async (emailId: string) => {\n try {\n // Check if this is the primary email\n if (emailId === user?.primary_email_address_id) {\n toast(\n \"Cannot delete primary email address. Please set another email as primary first.\",\n \"error\",\n );\n return;\n }\n\n await deleteEmailAddress(emailId);\n user.refetch();\n toast(\"Email address deleted successfully\", \"info\");\n } catch (error: any) {\n toast(\n error.message || \"Failed to delete email address. Please try again.\",\n \"error\",\n );\n }\n };\n\n // Filter emails based on search query\n const filteredEmails = React.useMemo(() => {\n if (!user?.user_email_addresses) return [];\n if (!searchQuery.trim()) return user.user_email_addresses;\n\n return user.user_email_addresses.filter((email) =>\n email.email.toLowerCase().includes(searchQuery.toLowerCase()),\n );\n }, [user?.user_email_addresses, searchQuery]);\n\n return (\n <>\n <HeaderCTAContainer style={{ marginBottom: \"20px\" }}>\n <SearchInput\n value={searchQuery}\n onChange={setSearchQuery}\n placeholder=\"Search Email\"\n />\n <div style={{ position: \"relative\" }}>\n <Button\n ref={emailButtonRef}\n onClick={() => setIsAddingEmail(true)}\n style={{\n padding: \"8px 16px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n fontWeight: 500,\n height: \"36px\",\n }}\n >\n Add Email\n </Button>\n {isAddingEmail && (\n <EmailAddPopover\n triggerRef={emailButtonRef}\n onClose={() => setIsAddingEmail(false)}\n onAddEmail={async (email) => {\n const newEmailData = await createEmailAddress(email);\n setNewEmail(newEmailData.data.id);\n await prepareEmailVerification(newEmailData.data.id);\n user.refetch();\n // Don't close the popover - let it transition to OTP step\n }}\n onPrepareVerification={async () => {\n await prepareEmailVerification(newEmail);\n user.refetch();\n }}\n onAttemptVerification={async (otp) => {\n await attemptEmailVerification(newEmail, otp);\n user.refetch();\n setIsAddingEmail(false);\n setNewEmail(\"\");\n toast(\"Email added and verified successfully!\", \"info\");\n }}\n />\n )}\n </div>\n </HeaderCTAContainer>\n\n {!filteredEmails?.length ? (\n <EmptyState\n title={\n searchQuery ? \"No emails match your search\" : \"No email addresses\"\n }\n description=\"Add an email address to get started.\"\n />\n ) : (\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Email Address</TableHeader>\n <TableHeader>Status</TableHeader>\n <TableHeader></TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredEmails.map((email) => (\n <TableRow key={email.id}>\n <TableCell>{email.email}</TableCell>\n <TableCell>\n {email.id === user?.primary_email_address_id\n ? \"Primary\"\n : email.verified\n ? \"Verified\"\n : \"Not Verified\"}\n </TableCell>\n <ActionsCell>\n {/* Only show dropdown if there are actions available (not primary or not verified) */}\n {email.id !== user?.primary_email_address_id ||\n !email.verified ? (\n <Dropdown\n open={activeDropdown === email.id}\n openChange={(isOpen) =>\n setActiveDropdown(isOpen ? email.id : null)\n }\n >\n <DropdownTrigger>\n <IconButton\n ref={(ref: HTMLButtonElement | null) => {\n if (ref) verifyButtonRefs.current[email.id] = ref;\n }}\n >\n •••\n </IconButton>\n </DropdownTrigger>\n <DropdownItems>\n {email.id !== user?.primary_email_address_id &&\n email.verified && (\n <DropdownItem\n onClick={async () => {\n try {\n await makeEmailPrimary(email.id);\n user.refetch();\n setActiveDropdown(null);\n toast(\n \"Primary email updated successfully\",\n \"info\",\n );\n } catch (error: any) {\n toast(\n error.message ||\n \"Failed to update primary email\",\n \"error\",\n );\n }\n }}\n >\n Make primary\n </DropdownItem>\n )}\n {!email.verified && (\n <DropdownItem\n onClick={async () => {\n setActiveDropdown(null);\n await prepareEmailVerification(email.id);\n setVerifyingEmailId(email.id);\n }}\n >\n Verify email\n </DropdownItem>\n )}\n {email.id !== user?.primary_email_address_id && (\n <DropdownItem\n $destructive\n onClick={() => {\n handleDeleteEmail(email.id);\n setActiveDropdown(null);\n }}\n >\n Remove\n </DropdownItem>\n )}\n </DropdownItems>\n </Dropdown>\n ) : null}\n </ActionsCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n {verifyingEmailId && (\n <EmailAddPopover\n existingEmail={\n user?.user_email_addresses?.find((e) => e.id === verifyingEmailId)\n ?.email\n }\n triggerRef={{ current: verifyButtonRefs.current[verifyingEmailId] }}\n onClose={() => setVerifyingEmailId(null)}\n onAddEmail={async () => {\n // This won't be called since we're starting at OTP step\n }}\n onPrepareVerification={async () => {\n await prepareEmailVerification(verifyingEmailId);\n user.refetch();\n }}\n onAttemptVerification={async (otp) => {\n await attemptEmailVerification(verifyingEmailId, otp);\n user.refetch();\n setVerifyingEmailId(null);\n toast(\"Email verified successfully!\", \"info\");\n }}\n />\n )}\n </>\n );\n};\n\nconst PhoneManagementSection = () => {\n const { deployment } = useDeployment();\n const [activeDropdown, setActiveDropdown] = useState<string | null>(null);\n const [newPhone, setNewPhone] = useState(\"\");\n const [isAddingPhone, setIsAddingPhone] = useState(false);\n const [verifyingPhoneId, setVerifyingPhoneId] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const phoneButtonRef = useRef<HTMLButtonElement>(null);\n const phoneVerifyButtonRefs = useRef<Record<string, HTMLButtonElement>>({});\n const {\n user,\n createPhoneNumber,\n deletePhoneNumber,\n preparePhoneVerification,\n attemptPhoneVerification,\n makePhonePrimary,\n } = useUser();\n\n // Don't render if phone is disabled\n if (!deployment?.auth_settings?.phone_number?.enabled) {\n return null;\n }\n\n // Helper function to get country flag from dial code\n const getCountryFlag = (countryCode: string) => {\n const country = countries.find((c) => c.dialCode === countryCode);\n return country?.flag || \"🌍\";\n };\n\n // Filter phones based on search query\n const filteredPhones = React.useMemo(() => {\n if (!user?.user_phone_numbers) return [];\n if (!searchQuery.trim()) return user.user_phone_numbers;\n\n return user.user_phone_numbers.filter((phone) =>\n phone.phone_number.toLowerCase().includes(searchQuery.toLowerCase()),\n );\n }, [user?.user_phone_numbers, searchQuery]);\n\n return (\n <>\n <HeaderCTAContainer style={{ marginBottom: \"20px\" }}>\n <SearchInput\n value={searchQuery}\n onChange={setSearchQuery}\n placeholder=\"Search Phone\"\n />\n <div style={{ position: \"relative\" }}>\n <Button\n ref={phoneButtonRef}\n onClick={() => setIsAddingPhone(true)}\n style={{\n padding: \"8px 16px\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n fontWeight: 500,\n height: \"36px\",\n }}\n >\n Add Phone\n </Button>\n {isAddingPhone && (\n <PhoneAddPopover\n triggerRef={phoneButtonRef}\n onClose={() => setIsAddingPhone(false)}\n onAddPhone={async (phone, countryCode) => {\n const newPhoneData = await createPhoneNumber(\n phone,\n countryCode,\n );\n setNewPhone(newPhoneData.data.id);\n await preparePhoneVerification(newPhoneData.data.id);\n // Don't close the popover - let it transition to OTP step\n }}\n onPrepareVerification={async () => {\n await preparePhoneVerification(newPhone);\n user.refetch();\n }}\n onAttemptVerification={async (otp) => {\n await attemptPhoneVerification(newPhone, otp);\n user.refetch();\n setIsAddingPhone(false);\n }}\n />\n )}\n {verifyingPhoneId && (\n <PhoneAddPopover\n existingPhone={\n user?.user_phone_numbers?.find((p) => p.id === verifyingPhoneId)\n ?.phone_number\n }\n triggerRef={{\n current: phoneVerifyButtonRefs.current[verifyingPhoneId],\n }}\n onClose={() => setVerifyingPhoneId(null)}\n onAddPhone={async () => {\n // This won't be called since we're starting at OTP step\n }}\n onPrepareVerification={async () => {\n await preparePhoneVerification(verifyingPhoneId);\n user.refetch();\n }}\n onAttemptVerification={async (otp) => {\n await attemptPhoneVerification(verifyingPhoneId, otp);\n user.refetch();\n setVerifyingPhoneId(null);\n }}\n />\n )}\n </div>\n </HeaderCTAContainer>\n\n {!filteredPhones?.length ? (\n <EmptyState\n title={\n searchQuery ? \"No phones match your search\" : \"No phone numbers\"\n }\n description=\"Add a phone number to get started.\"\n />\n ) : (\n <Table>\n <TableHead>\n <TableRow>\n <TableHeader>Phone Number</TableHeader>\n <TableHeader>Status</TableHeader>\n <TableHeader></TableHeader>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredPhones.map((phone) => (\n <TableRow key={phone.id}>\n <TableCell>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <span style={{ fontSize: \"18px\" }}>\n {getCountryFlag(phone.country_code)}\n </span>\n <span>{phone.country_code}</span>\n <span>{phone.phone_number}</span>\n </div>\n </TableCell>\n <TableCell>\n {phone.id === user?.primary_phone_number_id\n ? \"Primary\"\n : phone.verified\n ? \"Verified\"\n : \"Not Verified\"}\n </TableCell>\n <ActionsCell>\n <Dropdown\n open={activeDropdown === phone.id}\n openChange={(isOpen) =>\n setActiveDropdown(isOpen ? phone.id : null)\n }\n >\n <DropdownTrigger>\n <IconButton\n ref={(ref: HTMLButtonElement | null) => {\n if (ref)\n phoneVerifyButtonRefs.current[phone.id] = ref;\n }}\n >\n •••\n </IconButton>\n </DropdownTrigger>\n <DropdownItems>\n {phone.id !== user?.primary_phone_number_id &&\n phone.verified && (\n <DropdownItem\n onClick={async () => {\n await makePhonePrimary(phone.id);\n setActiveDropdown(null);\n user.refetch();\n }}\n >\n Make primary\n </DropdownItem>\n )}\n {!phone.verified && (\n <DropdownItem\n onClick={async () => {\n await preparePhoneVerification(phone.id);\n setVerifyingPhoneId(phone.id);\n setActiveDropdown(null);\n }}\n >\n Verify phone\n </DropdownItem>\n )}\n <DropdownItem\n $destructive\n onClick={async () => {\n await deletePhoneNumber(phone.id);\n setActiveDropdown(null);\n user.refetch();\n }}\n >\n Remove\n </DropdownItem>\n </DropdownItems>\n </Dropdown>\n </ActionsCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </>\n );\n};\n\nconst IconWrapper = styled.div`\n svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n display: block;\n }\n`;\n\nconst SocialManagementSection = () => {\n const { user, disconnectSocialConnection, connectSocialAccount } = useUser();\n const { deployment } = useDeployment();\n\n const socialAuthProviders = {\n google_oauth: {\n icon: <GoogleIcon />,\n label: \"Google\",\n },\n microsoft_oauth: {\n icon: <MicrosoftIcon />,\n label: \"Microsoft\",\n },\n github_oauth: {\n icon: <GithubIcon />,\n label: \"GitHub\",\n },\n gitlab_oauth: {\n icon: <GitLabIcon />,\n label: \"GitLab\",\n },\n linkedin_oauth: {\n icon: <LinkedInIcon />,\n label: \"LinkedIn\",\n },\n discord_oauth: {\n icon: <DiscordIcon />,\n label: \"Discord\",\n },\n x_oauth: {\n icon: <XIcon />,\n label: \"X\",\n },\n };\n\n const enabledProviders =\n deployment?.social_connections.filter((conn) => conn.enabled) || [];\n\n return (\n <>\n <div style={{ marginBottom: \"24px\" }}>\n <h3\n style={{\n fontSize: \"16px\",\n margin: \"0 0 6px 0\",\n letterSpacing: \"-0.01em\",\n color: \"var(--color-foreground)\",\n }}\n >\n Connected Accounts\n </h3>\n <p\n style={{\n fontSize: \"13px\",\n margin: 0,\n lineHeight: \"1.5\",\n color: \"var(--color-muted)\",\n }}\n >\n Connect social accounts for easy sign-in and profile sync\n </p>\n </div>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {enabledProviders.map((provider, index) => {\n const connectedAccounts =\n user?.social_connections?.filter(\n (conn) => conn.provider === provider.provider,\n ) || [];\n const providerInfo =\n socialAuthProviders[\n provider.provider as keyof typeof socialAuthProviders\n ];\n\n if (!providerInfo) return null;\n\n return (\n <div key={provider.provider}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"12px 0\",\n minHeight: \"58px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n color: \"var(--color-foreground)\",\n }}\n >\n <IconWrapper>{providerInfo.icon}</IconWrapper>\n <div\n style={{\n fontSize: \"14px\",\n fontWeight: 500,\n }}\n >\n {providerInfo.label}\n </div>\n </div>\n\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: \"8px\",\n }}\n >\n {connectedAccounts.map((account) => (\n <div\n key={account.id}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n background: \"var(--color-input-background)\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"6px\",\n padding: \"4px 8px\",\n fontSize: \"13px\",\n color: \"var(--color-muted)\",\n }}\n >\n <span>{account.email_address}</span>\n <IconButton\n onClick={async () => {\n await disconnectSocialConnection(\n account.id.toString(),\n );\n user.refetch();\n }}\n style={{ padding: \"2px\" }}\n >\n <X size={14} />\n </IconButton>\n </div>\n ))}\n\n {connectedAccounts.length > 0 ? (\n <Button\n onClick={() => {\n connectSocialAccount({\n provider: provider.provider,\n redirectUri: window.location.href,\n });\n }}\n style={{\n padding: \"6px 24px\",\n fontSize: \"13px\",\n }}\n >\n Add\n </Button>\n ) : (\n <Button\n onClick={() => {\n connectSocialAccount({\n provider: provider.provider,\n redirectUri: window.location.href,\n });\n }}\n style={{\n padding: \"6px 14px\",\n fontSize: \"13px\",\n }}\n >\n Connect\n </Button>\n )}\n </div>\n </div>\n\n {index < enabledProviders.length - 1 && (\n <div\n style={{\n height: \"1px\",\n background: \"var(--color-border)\",\n }}\n />\n )}\n </div>\n );\n })}\n </div>\n </>\n );\n};\n\ntype TabType =\n | \"profile\"\n | \"email\"\n | \"phone\"\n | \"social\"\n | \"security\"\n | \"sessions\";\n\nexport const ManageAccount = () => {\n const { loading } = useUser();\n const { deployment } = useDeployment();\n const [activeTab, setActiveTab] = useState<TabType>(\"profile\");\n const [toastMessage, setToastMessage] = useState<string | null>(null);\n const [toastLevel, setToastLevel] = useState<\"info\" | \"error\">(\"info\");\n\n const toast = useCallback(\n (message: string, level: \"info\" | \"error\" = \"info\") => {\n setToastMessage(message);\n setToastLevel(level);\n setTimeout(() => setToastMessage(null), 3000);\n },\n [setToastMessage],\n );\n\n if (loading)\n return (\n <DefaultStylesProvider>\n <Container\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <Spinner />\n </Container>\n </DefaultStylesProvider>\n );\n\n const authSettings = deployment?.auth_settings;\n const showEmailTab = authSettings?.email_address?.enabled;\n const showPhoneTab = authSettings?.phone_number?.enabled;\n const showSecurityTab =\n authSettings?.password?.enabled ||\n authSettings?.auth_factors_enabled?.authenticator ||\n authSettings?.auth_factors_enabled?.phone_otp ||\n authSettings?.auth_factors_enabled?.backup_code;\n\n return (\n <DefaultStylesProvider>\n <TypographyProvider>\n <ScreenContext.Provider\n value={{ screen: null, setScreen: () => {}, toast }}\n >\n <Container>\n <TabsContainer>\n <TabsList>\n <Tab\n $isActive={activeTab === \"profile\"}\n onClick={() => setActiveTab(\"profile\")}\n >\n <TabIcon>\n <User size={16} />\n Profile\n </TabIcon>\n </Tab>\n\n {showEmailTab && (\n <Tab\n $isActive={activeTab === \"email\"}\n onClick={() => setActiveTab(\"email\")}\n >\n <TabIcon>\n <Mail size={16} />\n Email\n </TabIcon>\n </Tab>\n )}\n\n {showPhoneTab && (\n <Tab\n $isActive={activeTab === \"phone\"}\n onClick={() => setActiveTab(\"phone\")}\n >\n <TabIcon>\n <Phone size={16} />\n Phone\n </TabIcon>\n </Tab>\n )}\n\n <Tab\n $isActive={activeTab === \"social\"}\n onClick={() => setActiveTab(\"social\")}\n >\n <TabIcon>\n <Link2 size={16} />\n Connections\n </TabIcon>\n </Tab>\n\n {showSecurityTab && (\n <Tab\n $isActive={activeTab === \"security\"}\n onClick={() => setActiveTab(\"security\")}\n >\n <TabIcon>\n <Shield size={16} />\n Security\n </TabIcon>\n </Tab>\n )}\n\n <Tab\n $isActive={activeTab === \"sessions\"}\n onClick={() => setActiveTab(\"sessions\")}\n >\n <TabIcon>\n <Activity size={16} />\n Sessions\n </TabIcon>\n </Tab>\n </TabsList>\n </TabsContainer>\n\n <TabContent>\n {activeTab === \"profile\" && <ProfileDetailsManagementSection />}\n {activeTab === \"email\" && showEmailTab && (\n <EmailManagementSection />\n )}\n {activeTab === \"phone\" && showPhoneTab && (\n <PhoneManagementSection />\n )}\n {activeTab === \"social\" && <SocialManagementSection />}\n {activeTab === \"security\" && showSecurityTab && (\n <SecurityManagementSection />\n )}\n {activeTab === \"sessions\" && <ActiveSessionsSection />}\n </TabContent>\n\n {toastMessage && (\n <div\n style={{\n position: \"absolute\",\n bottom: \"20px\",\n right: \"20px\",\n background: \"var(--color-input-background)\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"8px\",\n padding: \"12px 16px\",\n boxShadow: \"0 4px 12px var(--color-shadow)\",\n animation: \"slideUp 0.3s ease-out\",\n }}\n >\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}\n >\n {toastLevel === \"error\" ? (\n <AlertTriangle size={16} color=\"var(--color-error)\" />\n ) : (\n <Check size={16} color=\"var(--color-success)\" />\n )}\n <span\n style={{\n fontSize: \"14px\",\n color: \"var(--color-foreground)\",\n }}\n >\n {toastMessage}\n </span>\n </div>\n </div>\n )}\n </Container>\n </ScreenContext.Provider>\n </TypographyProvider>\n </DefaultStylesProvider>\n );\n};\n\nimport { Switch } from \"../utility/switch\";\n\nconst SecurityManagementSection = () => {\n const { deployment } = useDeployment();\n const {\n user,\n updatePassword,\n removePassword,\n setupAuthenticator,\n verifyAuthenticator,\n deleteAuthenticator,\n generateBackupCodes,\n regenerateBackupCodes,\n updateProfile,\n } = useUser();\n const { toast } = useScreenContext();\n\n const [secondFactorPolicy, setSecondFactorPolicy] = useState(\n user?.second_factor_policy || \"none\",\n );\n\n const handleSecondFactorPolicyChange = async (\n policy: \"none\" | \"enforced\",\n ) => {\n try {\n await updateProfile({ second_factor_policy: policy });\n setSecondFactorPolicy(policy);\n toast(\"Second factor policy updated successfully\", \"info\");\n } catch (error: any) {\n toast(error.message || \"Failed to update second factor policy\", \"error\");\n }\n };\n\n const [showTOTPPopover, setShowTOTPPopover] = useState(false);\n const [showPasswordPopover, setShowPasswordPopover] = useState(false);\n const [showRemovePasswordPopover, setShowRemovePasswordPopover] =\n useState(false);\n const [showBackupCodesPopover, setShowBackupCodesPopover] = useState(false);\n const totpButtonRef = useRef<HTMLButtonElement>(null);\n const passwordButtonRef = useRef<HTMLButtonElement>(null);\n const removePasswordButtonRef = useRef<HTMLButtonElement>(null);\n const backupCodesButtonRef = useRef<HTMLButtonElement>(null);\n const [setupStep, setSetupStep] = useState<\n \"table\" | \"qr\" | \"verify\" | \"backup\" | \"success\"\n >(\"table\");\n const [qrCodeUrl, setQrCodeUrl] = useState<string>(\"\");\n const [secretKey, setSecretKey] = useState<string>(\"\");\n const [authenticatorId, setAuthenticatorId] = useState<string>(\"\");\n const [verificationCodes, setVerificationCodes] = useState<string[]>([\n \"\",\n \"\",\n ]);\n const [backupCodes, setBackupCodes] = useState<string[]>([]);\n const [isGeneratingCodes, setIsGeneratingCodes] = useState(false);\n const [isVerifying, setIsVerifying] = useState(false);\n const [isLoadingQR] = useState(false);\n const [isRemovingAuth, setIsRemovingAuth] = useState(false);\n\n const authFactorsEnabled = deployment?.auth_settings?.auth_factors_enabled;\n const passwordEnabled = deployment?.auth_settings?.password?.enabled;\n\n // Don't render if nothing is enabled\n if (\n !authFactorsEnabled?.authenticator &&\n !authFactorsEnabled?.backup_code &&\n !passwordEnabled\n ) {\n return null;\n }\n\n const handleChangePassword = async (\n currentPassword: string,\n newPassword: string,\n ) => {\n await updatePassword(currentPassword, newPassword);\n await user.refetch();\n toast(\"Password updated successfully\", \"info\");\n };\n\n const handleRemovePassword = async (currentPassword: string) => {\n await removePassword(currentPassword);\n await user.refetch();\n toast(\"Password removed successfully\", \"info\");\n };\n\n const canRemovePassword = () => {\n if (!user) return false;\n\n const hasVerifiedEmail = user.user_email_addresses?.some(\n (email) => email.verified,\n );\n\n const hasVerifiedPhone = user.user_phone_numbers?.some(\n (phone) => phone.verified,\n );\n\n const hasSocialConnection =\n user.social_connections && user.social_connections.length > 0;\n\n const authSettings = deployment?.auth_settings;\n\n const hasAlternativeAuth =\n (authSettings?.first_factor === \"email_otp\" && hasVerifiedEmail) ||\n (authSettings?.magic_link?.enabled && hasVerifiedEmail) ||\n authSettings?.passkey?.enabled ||\n (authSettings?.auth_factors_enabled?.phone_otp && hasVerifiedPhone) ||\n (hasSocialConnection &&\n deployment?.social_connections?.some((sc) => sc.enabled));\n\n return hasAlternativeAuth;\n };\n\n const handleVerifyAuthenticator = async () => {\n if (verificationCodes.some((code) => code.length !== 6)) {\n toast(\"Please enter both 6-digit verification codes\", \"error\");\n return;\n }\n\n try {\n setIsVerifying(true);\n await verifyAuthenticator(authenticatorId, verificationCodes);\n await user.refetch();\n\n if (authFactorsEnabled?.backup_code) {\n const codes = await generateBackupCodes();\n setBackupCodes(codes);\n await user.refetch();\n setSetupStep(\"backup\");\n } else {\n setSetupStep(\"success\");\n }\n } catch (error: any) {\n toast(error.message || \"Invalid verification codes\", \"error\");\n } finally {\n setIsVerifying(false);\n }\n };\n\n const handleCompleteSetup = () => {\n setSetupStep(\"table\");\n setQrCodeUrl(\"\");\n setSecretKey(\"\");\n setAuthenticatorId(\"\");\n setVerificationCodes([\"\", \"\"]);\n setBackupCodes([]);\n toast(\"Two-factor authentication setup completed successfully!\", \"info\");\n };\n\n const handleRemoveAuthenticator = async () => {\n if (!user?.user_authenticator?.id) return;\n\n try {\n setIsRemovingAuth(true);\n await deleteAuthenticator(user.user_authenticator.id);\n await user.refetch();\n toast(\"Authenticator removed successfully\", \"info\");\n } catch (error: any) {\n toast(error.message || \"Failed to remove authenticator\", \"error\");\n } finally {\n setIsRemovingAuth(false);\n }\n };\n\n const handleGenerateNewBackupCodes = async () => {\n if (isGeneratingCodes) return;\n\n try {\n setIsGeneratingCodes(true);\n const codes = await regenerateBackupCodes();\n setBackupCodes(codes);\n await user.refetch();\n setShowBackupCodesPopover(true);\n toast(\"New backup codes generated\", \"info\");\n } catch (error: any) {\n toast(error.message || \"Failed to generate backup codes\", \"error\");\n } finally {\n setIsGeneratingCodes(false);\n }\n };\n\n const copyBackupCodes = () => {\n const codesText = backupCodes.join(\"\\n\");\n navigator.clipboard\n .writeText(codesText)\n .then(() => {\n toast(\"Backup codes copied to clipboard\", \"info\");\n })\n .catch(() => {\n toast(\"Failed to copy backup codes\", \"error\");\n });\n };\n\n const downloadBackupCodes = () => {\n const codesText = backupCodes.join(\"\\n\");\n const blob = new Blob([codesText], { type: \"text/plain\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"wacht-backup-codes.txt\";\n a.click();\n URL.revokeObjectURL(url);\n toast(\"Backup codes downloaded\", \"info\");\n };\n\n // Create security items for table display\n const securityItems = [];\n\n if (passwordEnabled) {\n securityItems.push({\n id: \"password\",\n name: \"Password\",\n description: \"Secure your account with a strong password\",\n status: user?.has_password ? \"Enabled\" : \"Disabled\",\n actions: user?.has_password ? [\"change\"] : [\"setup\"],\n });\n }\n\n if (authFactorsEnabled?.authenticator) {\n securityItems.push({\n id: \"authenticator\",\n name: \"Two-Factor Authentication\",\n description: \"Use an authenticator app for extra security\",\n status: user?.user_authenticator ? \"Enabled\" : \"Disabled\",\n actions: user?.user_authenticator ? [\"remove\"] : [\"setup\"],\n });\n }\n\n if (user?.user_authenticator) {\n securityItems.push({\n id: \"backup_codes\",\n name: \"Backup Codes\",\n description: \"Recovery codes if you lose your authenticator\",\n status: user?.backup_codes_generated ? \"Generated\" : \"Not Generated\",\n actions: [\"generate\"],\n });\n }\n\n if (\n user?.user_authenticator ||\n user?.backup_codes_generated ||\n user.second_factor_policy === \"enforced\" ||\n user.primary_phone_number_id\n ) {\n securityItems.push({\n id: \"second_factor_policy\",\n name: \"Second Factor Policy\",\n description: \"Require a second factor for all sign-ins\",\n status: secondFactorPolicy === \"enforced\" ? \"Enforced\" : \"Optional\",\n actions: [\"toggle\"],\n });\n }\n\n if (setupStep !== \"table\") {\n return (\n <>\n <HeaderCTAContainer>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <Shield size={16} />\n <span\n style={{\n fontSize: \"14px\",\n fontWeight: 500,\n color: \"var(--color-foreground)\",\n }}\n >\n {setupStep === \"qr\" && \"Setup Two-Factor Authentication\"}\n {setupStep === \"verify\" && \"Verify Your Authenticator\"}\n {setupStep === \"backup\" && \"Save Your Backup Codes\"}\n {setupStep === \"success\" && \"Setup Complete!\"}\n </span>\n </div>\n <Button\n onClick={() => setSetupStep(\"table\")}\n style={{\n padding: \"8px 16px\",\n fontSize: \"14px\",\n background: \"var(--color-background)\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"var(--radius-md)\",\n color: \"var(--color-foreground)\",\n fontWeight: \"500\",\n cursor: \"pointer\",\n transition: \"all 0.2s ease\",\n }}\n >\n ← Back\n </Button>\n </HeaderCTAContainer>\n\n <div\n style={{\n maxWidth: \"500px\",\n margin: \"0 auto\",\n textAlign: \"center\",\n padding: \"24px\",\n }}\n >\n {setupStep === \"qr\" && (\n <>\n <p\n style={{\n color: \"var(--color-secondary-text)\",\n marginBottom: \"24px\",\n }}\n >\n Scan this QR code with your authenticator app (Google\n Authenticator, Authy, etc.)\n </p>\n\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n marginBottom: \"24px\",\n }}\n >\n {isLoadingQR ? (\n <div\n style={{\n width: \"200px\",\n height: \"200px\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"var(--radius-md)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"var(--color-input-background)\",\n }}\n >\n <div style={{ textAlign: \"center\" }}>\n <div\n style={{\n width: \"24px\",\n height: \"24px\",\n border: \"2px solid var(--color-border)\",\n borderTop: \"2px solid var(--color-primary)\",\n borderRadius: \"50%\",\n animation: `${spin} 1s linear infinite`,\n margin: \"0 auto 8px\",\n }}\n ></div>\n <div\n style={{\n fontSize: \"12px\",\n color: \"var(--color-secondary-text)\",\n }}\n >\n Loading QR Code...\n </div>\n </div>\n </div>\n ) : qrCodeUrl ? (\n <div\n style={{\n border: \"1px solid var(--color-border)\",\n borderRadius: \"var(--radius-md)\",\n padding: \"16px\",\n background: \"white\",\n }}\n >\n <QRCodeSVG\n value={qrCodeUrl}\n size={200}\n level=\"M\"\n marginSize={0}\n />\n </div>\n ) : (\n <div\n style={{\n width: \"200px\",\n height: \"200px\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"var(--radius-md)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"var(--color-input-background)\",\n color: \"var(--color-error)\",\n fontSize: \"14px\",\n textAlign: \"center\",\n }}\n >\n QR Code Not Available\n </div>\n )}\n </div>\n\n <div\n style={{\n background: \"var(--color-input-background)\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"var(--radius-md)\",\n padding: \"12px\",\n marginBottom: \"24px\",\n }}\n >\n <p\n style={{\n fontSize: \"14px\",\n color: \"var(--color-secondary-text)\",\n margin: \"0 0 8px 0\",\n }}\n >\n Or enter this code manually:\n </p>\n <code\n style={{\n fontFamily: \"monospace\",\n fontSize: \"14px\",\n wordBreak: \"break-all\",\n }}\n >\n {secretKey || \"Loading...\"}\n </code>\n </div>\n\n <Button\n onClick={() => setSetupStep(\"verify\")}\n disabled={!qrCodeUrl || !secretKey}\n style={{\n padding: \"10px 20px\",\n background:\n !qrCodeUrl || !secretKey\n ? \"var(--color-border)\"\n : \"var(--color-primary)\",\n color:\n !qrCodeUrl || !secretKey\n ? \"var(--color-secondary-text)\"\n : \"white\",\n border: `1px solid ${!qrCodeUrl || !secretKey ? \"var(--color-border)\" : \"var(--color-primary)\"}`,\n cursor: !qrCodeUrl || !secretKey ? \"not-allowed\" : \"pointer\",\n }}\n >\n I've Scanned the Code\n </Button>\n </>\n )}\n\n {setupStep === \"verify\" && (\n <>\n <p\n style={{\n color: \"var(--color-secondary-text)\",\n marginBottom: \"24px\",\n }}\n >\n Enter two consecutive codes from your authenticator app to\n verify setup\n </p>\n\n <div\n style={{\n display: \"flex\",\n gap: \"12px\",\n justifyContent: \"center\",\n marginBottom: \"24px\",\n }}\n >\n <Input\n type=\"text\"\n placeholder=\"000000\"\n value={verificationCodes[0]}\n onChange={(e) => {\n const value = e.target.value\n .replace(/[^0-9]/g, \"\")\n .substring(0, 6);\n setVerificationCodes([value, verificationCodes[1]]);\n }}\n maxLength={6}\n style={{\n width: \"100px\",\n textAlign: \"center\",\n fontFamily: \"monospace\",\n }}\n />\n <Input\n type=\"text\"\n placeholder=\"000000\"\n value={verificationCodes[1]}\n onChange={(e) => {\n const value = e.target.value\n .replace(/[^0-9]/g, \"\")\n .substring(0, 6);\n setVerificationCodes([verificationCodes[0], value]);\n }}\n maxLength={6}\n style={{\n width: \"100px\",\n textAlign: \"center\",\n fontFamily: \"monospace\",\n }}\n />\n </div>\n\n <div\n style={{\n display: \"flex\",\n gap: \"12px\",\n justifyContent: \"center\",\n }}\n >\n <Button\n onClick={() => setSetupStep(\"qr\")}\n style={{\n padding: \"8px 16px\",\n background: \"var(--color-background)\",\n border: \"1px solid var(--color-border)\",\n }}\n >\n Back\n </Button>\n <Button\n onClick={handleVerifyAuthenticator}\n disabled={\n isVerifying ||\n verificationCodes.some((code) => code.length !== 6)\n }\n style={{\n padding: \"8px 16px\",\n background: \"var(--color-primary)\",\n color: \"white\",\n border: \"1px solid var(--color-primary)\",\n }}\n >\n {isVerifying ? \"Verifying...\" : \"Verify & Continue\"}\n </Button>\n </div>\n </>\n )}\n\n {setupStep === \"backup\" && (\n <>\n <div\n style={{\n background: \"var(--color-warning-background)\",\n border: \"1px solid var(--color-warning-border)\",\n borderRadius: \"var(--radius-md)\",\n padding: \"16px\",\n marginBottom: \"24px\",\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"12px\",\n textAlign: \"left\",\n }}\n >\n <AlertTriangle\n size={16}\n style={{ color: \"var(--color-warning)\", marginTop: \"2px\" }}\n />\n <div>\n <div style={{ fontWeight: 500, marginBottom: \"4px\" }}>\n Important!\n </div>\n <div\n style={{\n fontSize: \"14px\",\n color: \"var(--color-secondary-text)\",\n }}\n >\n Store these codes safely. Each code can only be used once if\n you lose access to your authenticator device.\n </div>\n </div>\n </div>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(2, 1fr)\",\n gap: \"8px\",\n marginBottom: \"24px\",\n maxWidth: \"300px\",\n margin: \"0 auto 24px auto\",\n }}\n >\n {backupCodes.map((code, index) => (\n <div\n key={index}\n style={{\n background: \"var(--color-input-background)\",\n border: \"1px solid var(--color-border)\",\n borderRadius: \"var(--radius-md)\",\n padding: \"8px\",\n fontFamily: \"monospace\",\n fontSize: \"12px\",\n textAlign: \"center\",\n cursor: \"pointer\",\n }}\n onClick={() => navigator.clipboard.writeText(code)}\n >\n {code}\n </div>\n ))}\n </div>\n\n <div\n style={{\n display: \"flex\",\n gap: \"12px\",\n justifyContent: \"center\",\n marginBottom: \"24px\",\n }}\n >\n <Button\n onClick={copyBackupCodes}\n style={{\n padding: \"8px 16px\",\n fontSize: \"14px\",\n background: \"var(--color-background)\",\n border: \"1px solid var(--color-border)\",\n }}\n >\n Copy All\n </Button>\n <Button\n onClick={downloadBackupCodes}\n style={{\n padding: \"8px 16px\",\n fontSize: \"14px\",\n background: \"var(--color-background)\",\n border: \"1px solid var(--color-border)\",\n }}\n >\n <Download size={16} style={{ marginRight: \"4px\" }} />\n Download\n </Button>\n </div>\n\n <Button\n onClick={handleCompleteSetup}\n style={{\n padding: \"10px 20px\",\n background: \"var(--color-primary)\",\n color: \"white\",\n border: \"1px solid var(--color-primary)\",\n }}\n >\n Complete Setup\n </Button>\n </>\n )}\n\n {setupStep === \"success\" && (\n <>\n <div style={{ marginBottom: \"24px\" }}>\n <Check\n size={48}\n style={{\n color: \"var(--color-success)\",\n marginBottom: \"16px\",\n }}\n />\n <h3\n style={{\n fontSize: \"18px\",\n fontWeight: 600,\n margin: \"0 0 8px 0\",\n }}\n >\n All Set!\n </h3>\n <p\n style={{\n fontSize: \"14px\",\n color: \"var(--color-secondary-text)\",\n margin: 0,\n }}\n >\n Your account is now protected with two-factor authentication.\n </p>\n </div>\n\n <Button\n onClick={handleCompleteSetup}\n style={{\n padding: \"10px 20px\",\n background: \"var(--color-primary)\",\n color: \"white\",\n border: \"1px solid var(--color-primary)\",\n }}\n >\n Continue to Security\n </Button>\n </>\n )}\n </div>\n </>\n );\n }\n\n return (\n <>\n <HeaderCTAContainer>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <span\n style={{\n fontSize: \"14px\",\n fontWeight: 400,\n color: \"var(--color-foreground)\",\n }}\n >\n Security Settings\n </span>\n </div>\n </HeaderCTAContainer>\n\n {!securityItems.length ? (\n <EmptyState\n title=\"No security features available\"\n description=\"Contact your administrator to enable security features.\"\n />\n ) : (\n <div>\n {securityItems.map((item, index) => (\n <div key={item.id}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"16px 0\",\n }}\n >\n <div style={{ flex: 1 }}>\n <div\n style={{\n fontWeight: 400,\n color: \"var(--color-foreground)\",\n }}\n >\n {item.name}\n </div>\n <div\n style={{\n fontSize: \"13px\",\n color: \"var(--color-secondary-text)\",\n }}\n >\n {item.description}\n </div>\n </div>\n\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: \"12px\" }}\n >\n <span\n style={{\n padding: \"4px 12px\",\n borderRadius: \"16px\",\n fontSize: \"12px\",\n fontWeight: 400,\n background:\n item.status === \"Enabled\" || item.status === \"Generated\"\n ? \"var(--color-success-background)\"\n : \"var(--color-background-hover)\",\n color:\n item.status === \"Enabled\" || item.status === \"Generated\"\n ? \"var(--color-success)\"\n : \"var(--color-secondary-text)\",\n }}\n >\n {item.status}\n </span>\n\n <div style={{ position: \"relative\" }}>\n {item.id === \"password\" && (\n <>\n {user?.has_password ? (\n <div style={{ display: \"flex\", gap: \"8px\" }}>\n <div style={{ position: \"relative\" }}>\n <Button\n ref={passwordButtonRef}\n onClick={() => setShowPasswordPopover(true)}\n style={{\n padding: \"6px 12px\",\n fontSize: \"12px\",\n background: \"var(--color-primary)\",\n color: \"white\",\n border: \"1px solid var(--color-primary)\",\n borderRadius: \"var(--radius-md)\",\n fontWeight: \"400\",\n }}\n >\n Change\n </Button>\n\n {showPasswordPopover && (\n <ChangePasswordPopover\n triggerRef={passwordButtonRef}\n onClose={() => setShowPasswordPopover(false)}\n onChangePassword={handleChangePassword}\n />\n )}\n </div>\n\n {canRemovePassword() && (\n <div style={{ position: \"relative\" }}>\n <Button\n ref={removePasswordButtonRef}\n onClick={() =>\n setShowRemovePasswordPopover(true)\n }\n style={{\n padding: \"6px 12px\",\n fontSize: \"12px\",\n background: \"transparent\",\n color: \"var(--color-error)\",\n border: \"1px solid var(--color-error)\",\n borderRadius: \"var(--radius-md)\",\n fontWeight: \"400\",\n }}\n >\n Remove\n </Button>\n\n {showRemovePasswordPopover && (\n <RemovePasswordPopover\n triggerRef={removePasswordButtonRef}\n onClose={() =>\n setShowRemovePasswordPopover(false)\n }\n onRemovePassword={handleRemovePassword}\n />\n )}\n </div>\n )}\n </div>\n ) : (\n <div style={{ position: \"relative\" }}>\n <Button\n ref={passwordButtonRef}\n onClick={() => setShowPasswordPopover(true)}\n style={{\n padding: \"6px 12px\",\n fontSize: \"12px\",\n background: \"var(--color-primary)\",\n color: \"white\",\n border: \"1px solid var(--color-primary)\",\n borderRadius: \"var(--radius-md)\",\n fontWeight: \"400\",\n }}\n >\n Setup\n </Button>\n\n {showPasswordPopover && (\n <ChangePasswordPopover\n triggerRef={passwordButtonRef}\n onClose={() => setShowPasswordPopover(false)}\n onChangePassword={handleChangePassword}\n isSetup={true}\n />\n )}\n </div>\n )}\n </>\n )}\n\n {item.id === \"authenticator\" &&\n !user?.user_authenticator && (\n <>\n <div style={{ position: \"relative\" }}>\n <Button\n ref={totpButtonRef}\n onClick={() => setShowTOTPPopover(true)}\n disabled={isLoadingQR}\n style={{\n padding: \"6px 12px\",\n fontSize: \"12px\",\n background: \"var(--color-primary)\",\n color: \"white\",\n border: \"1px solid var(--color-primary)\",\n borderRadius: \"var(--radius-md)\",\n fontWeight: \"400\",\n }}\n >\n {isLoadingQR ? \"Setting up...\" : \"Setup\"}\n </Button>\n\n {showTOTPPopover && (\n <SetupTOTPPopover\n triggerRef={totpButtonRef}\n onClose={() => setShowTOTPPopover(false)}\n onSetupTOTP={async () => {\n const result = await setupAuthenticator();\n setAuthenticatorId(result.id);\n return result;\n }}\n onVerifyTOTP={async (codes) => {\n await verifyAuthenticator(\n authenticatorId,\n codes,\n );\n await user.refetch();\n toast(\n \"Two-factor authentication enabled successfully!\",\n \"info\",\n );\n }}\n />\n )}\n </div>\n </>\n )}\n\n {item.id === \"authenticator\" &&\n user?.user_authenticator && (\n <Button\n onClick={handleRemoveAuthenticator}\n disabled={isRemovingAuth}\n style={{\n padding: \"6px 12px\",\n fontSize: \"12px\",\n background: \"var(--color-error)\",\n color: \"white\",\n border: \"1px solid var(--color-error)\",\n borderRadius: \"var(--radius-md)\",\n fontWeight: \"400\",\n }}\n >\n {isRemovingAuth ? \"Removing...\" : \"Remove\"}\n </Button>\n )}\n\n {item.id === \"backup_codes\" && (\n <>\n <div style={{ position: \"relative\" }}>\n <Button\n ref={backupCodesButtonRef}\n onClick={handleGenerateNewBackupCodes}\n disabled={isGeneratingCodes}\n style={{\n padding: \"6px 12px\",\n fontSize: \"12px\",\n background: \"var(--color-primary)\",\n color: \"white\",\n border: \"1px solid var(--color-primary)\",\n borderRadius: \"var(--radius-md)\",\n fontWeight: \"400\",\n }}\n >\n {isGeneratingCodes\n ? \"Generating...\"\n : user?.backup_codes_generated\n ? \"Regenerate\"\n : \"Generate\"}\n </Button>\n\n {showBackupCodesPopover && (\n <BackupCodesPopover\n triggerRef={backupCodesButtonRef}\n codes={backupCodes}\n onClose={() => setShowBackupCodesPopover(false)}\n onCopy={copyBackupCodes}\n onDownload={downloadBackupCodes}\n />\n )}\n </div>\n </>\n )}\n\n {item.id === \"second_factor_policy\" && (\n <Switch\n checked={secondFactorPolicy === \"enforced\"}\n onChange={(checked) => {\n handleSecondFactorPolicyChange(\n checked ? \"enforced\" : \"none\",\n );\n }}\n />\n )}\n </div>\n </div>\n </div>\n\n {index < securityItems.length - 1 && (\n <div\n style={{\n height: \"1px\",\n background: \"var(--color-border)\",\n margin: \"0\",\n }}\n />\n )}\n </div>\n ))}\n </div>\n )}\n </>\n );\n};\n\nconst ProfileDetailsManagementSection = () => {\n const { deployment } = useDeployment();\n const { user, updateProfile, updateProfilePicture, deleteAccount } =\n useUser();\n const { toast } = useScreenContext();\n\n // State for profile management\n const [firstName, setFirstName] = useState(\"\");\n const [lastName, setLastName] = useState(\"\");\n const [username, setUsername] = useState(\"\");\n const [hasInitialized, setHasInitialized] = useState(false);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [confirmName, setConfirmName] = useState(\"\");\n const [previewUrl, setPreviewUrl] = useState<string | null>(\n user?.profile_picture_url || null,\n );\n\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n\n // Initialize form values only once when user data is available\n React.useEffect(() => {\n if (user && !hasInitialized) {\n setFirstName(user.first_name || \"\");\n setLastName(user.last_name || \"\");\n setUsername(user.username || \"\");\n setPreviewUrl(user.profile_picture_url || null);\n setHasInitialized(true);\n }\n }, [user, hasInitialized]);\n\n const autoSave = React.useCallback(async () => {\n if (!user) return;\n\n try {\n const data: any = {};\n\n if (firstName !== user.first_name) {\n data.first_name = firstName;\n }\n if (lastName !== user.last_name) {\n data.last_name = lastName;\n }\n if (username !== user.username) {\n data.username = username;\n }\n\n // Only save if there are actual changes\n if (Object.keys(data).length > 0) {\n await updateProfile(data);\n }\n } catch (error: any) {\n toast(error.message || \"Failed to save profile changes\", \"error\");\n }\n }, [user, updateProfile, firstName, lastName, username, toast]);\n\n const handleFirstNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setFirstName(e.target.value);\n };\n\n const handleLastNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setLastName(e.target.value);\n };\n\n const handleUsernameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setUsername(e.target.value);\n };\n\n const handleFirstNameBlur = () => {\n autoSave();\n };\n\n const handleLastNameBlur = () => {\n autoSave();\n };\n\n const handleUsernameBlur = () => {\n autoSave();\n };\n\n const handleImageChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files?.[0]) {\n const file = event.target.files[0];\n setPreviewUrl(URL.createObjectURL(file));\n // Auto-save image immediately\n setTimeout(async () => {\n try {\n await updateProfilePicture(file);\n user.refetch();\n toast(\"Profile picture updated successfully\", \"info\");\n } catch (error: any) {\n toast(error.message || \"Failed to update profile picture\", \"error\");\n // Reset preview on error\n setPreviewUrl(user?.profile_picture_url || null);\n }\n }, 100);\n }\n };\n\n const triggerFileInput = () => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n\n if (!user) {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"40px 0\",\n }}\n >\n <Spinner />\n </div>\n );\n }\n\n const handleDeleteAccount = async () => {\n if (!user || confirmName !== user.username) return;\n\n setIsDeleting(true);\n try {\n await deleteAccount(\"\");\n toast(\"Account deleted successfully\", \"info\");\n } catch (error: any) {\n toast(error.message || \"Failed to delete account\", \"error\");\n } finally {\n setIsDeleting(false);\n setConfirmName(\"\");\n setShowDeleteConfirm(false);\n }\n };\n\n return (\n <>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"var(--space-2xl)\",\n }}\n >\n {/* Profile Picture Section - Two Column Layout */}\n <div\n style={{\n display: \"flex\",\n gap: \"var(--space-2xl)\",\n alignItems: \"center\",\n }}\n >\n {/* Left Column - Profile Picture Preview */}\n <div style={{ flexShrink: 0 }}>\n <div\n style={{\n width: \"120px\",\n height: \"120px\",\n borderRadius: \"50%\",\n border: \"2px dashed var(--color-border)\",\n background: previewUrl\n ? \"transparent\"\n : \"var(--color-input-background)\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n transition: \"all 0.2s ease\",\n }}\n onClick={triggerFileInput}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = \"var(--color-primary)\";\n e.currentTarget.style.transform = \"scale(1.02)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = \"var(--color-border)\";\n e.currentTarget.style.transform = \"scale(1)\";\n }}\n >\n {previewUrl ? (\n <img\n src={previewUrl}\n alt=\"Profile Picture\"\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n borderRadius: \"50%\",\n }}\n />\n ) : (\n <User size={32} color=\"var(--color-muted)\" />\n )}\n <input\n type=\"file\"\n ref={fileInputRef}\n style={{ display: \"none\" }}\n accept=\"image/*\"\n onChange={handleImageChange}\n />\n </div>\n </div>\n\n {/* Right Column - Content and Controls */}\n <div style={{ flex: 1 }}>\n <div style={{ marginBottom: \"var(--space-lg)\" }}>\n <h3\n style={{\n fontSize: \"var(--font-sm)\",\n color: \"var(--color-foreground)\",\n margin: \"0 0 var(--space-2xs) 0\",\n }}\n >\n Profile Picture\n </h3>\n <p\n style={{\n fontSize: \"var(--font-xs)\",\n color: \"var(--color-secondary-text)\",\n margin: 0,\n }}\n >\n Upload an image to represent your profile\n </p>\n </div>\n\n <div\n style={{\n display: \"flex\",\n gap: \"var(--space-sm)\",\n marginBottom: \"var(--space-sm)\",\n }}\n >\n <Button\n onClick={() => fileInputRef.current?.click()}\n style={{\n padding: \"var(--space-xs) var(--space-md)\",\n fontSize: \"var(--font-xs)\",\n height: \"32px\",\n width: \"100px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n }}\n >\n <Download size={14} />\n {previewUrl ? \"Change\" : \"Upload\"}\n </Button>\n <Button\n onClick={async () => {\n setPreviewUrl(null);\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n // Save the removal to backend\n try {\n await updateProfile({\n remove_profile_picture: true,\n });\n await user.refetch();\n toast(\"Profile picture removed successfully\", \"info\");\n } catch (error: any) {\n toast(\n error.message || \"Failed to remove profile picture\",\n \"error\",\n );\n // Reset preview on error\n setPreviewUrl(user?.profile_picture_url || null);\n }\n }}\n style={{\n background: \"transparent\",\n color: \"var(--color-muted)\",\n border: \"1px solid var(--color-border)\",\n padding: \"var(--space-xs) var(--space-md)\",\n fontSize: \"var(--font-xs)\",\n height: \"32px\",\n width: \"100px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n }}\n >\n <AlertTriangle size={14} />\n Remove\n </Button>\n </div>\n </div>\n </div>\n\n {/* Divider */}\n <div\n style={{\n position: \"relative\",\n height: \"1px\",\n background: \"var(--color-divider)\",\n margin: \"0\",\n }}\n />\n\n {/* Profile Details */}\n <div>\n <div style={{ marginBottom: \"var(--space-md)\" }}>\n <h3\n style={{\n fontSize: \"var(--font-sm)\",\n color: \"var(--color-foreground)\",\n margin: \"0 0 var(--space-2xs) 0\",\n }}\n >\n Profile Details\n </h3>\n <p\n style={{\n fontSize: \"var(--font-xs)\",\n color: \"var(--color-secondary-text)\",\n margin: 0,\n }}\n >\n Basic information about your profile\n </p>\n </div>\n\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"var(--space-lg)\",\n }}\n >\n {/* First Name and Last Name in same row */}\n <div style={{ display: \"flex\", gap: \"var(--space-md)\" }}>\n <FormGroup style={{ flex: 1 }}>\n <Label htmlFor=\"firstName\">First Name</Label>\n <Input\n id=\"firstName\"\n type=\"text\"\n value={firstName}\n onChange={handleFirstNameChange}\n onBlur={handleFirstNameBlur}\n placeholder=\"Enter your first name\"\n required\n />\n </FormGroup>\n\n <FormGroup style={{ flex: 1 }}>\n <Label htmlFor=\"lastName\">Last Name</Label>\n <Input\n id=\"lastName\"\n type=\"text\"\n value={lastName}\n onChange={handleLastNameChange}\n onBlur={handleLastNameBlur}\n placeholder=\"Enter your last name\"\n required\n />\n </FormGroup>\n </div>\n\n {deployment?.auth_settings?.username?.enabled && (\n <FormGroup>\n <Label htmlFor=\"username\">Username</Label>\n <Input\n id=\"username\"\n type=\"text\"\n value={username}\n onChange={handleUsernameChange}\n onBlur={handleUsernameBlur}\n placeholder=\"Enter your username\"\n required\n />\n </FormGroup>\n )}\n </div>\n\n {/* Auto-save indicator */}\n </div>\n\n {/* Divider */}\n <div\n style={{\n position: \"relative\",\n height: \"1px\",\n background: \"var(--color-divider)\",\n margin: \"0\",\n }}\n />\n\n {/* Danger Zone */}\n <div>\n <div style={{ marginBottom: \"16px\" }}>\n <h3\n style={{\n fontSize: \"16px\",\n color: \"var(--color-foreground)\",\n margin: \"0 0 4px 0\",\n }}\n >\n Danger Zone\n </h3>\n <p\n style={{\n fontSize: \"14px\",\n color: \"var(--color-muted)\",\n margin: 0,\n }}\n >\n Irreversible and destructive actions\n </p>\n </div>\n\n <div\n style={{\n padding: \"20px\",\n border: \"1px solid var(--color-error)\",\n borderRadius: \"8px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: showDeleteConfirm ? \"20px\" : \"0\",\n }}\n >\n <div>\n <div\n style={{\n fontSize: \"14px\",\n color: \"var(--color-foreground)\",\n marginBottom: \"4px\",\n fontWeight: \"500\",\n }}\n >\n Delete Account\n </div>\n <div\n style={{\n fontSize: \"13px\",\n color: \"var(--color-muted)\",\n }}\n >\n Once you delete your account, there is no going back. Please\n be certain.\n </div>\n </div>\n <Button\n onClick={() => {\n if (!showDeleteConfirm) {\n setShowDeleteConfirm(true);\n } else {\n setShowDeleteConfirm(false);\n setConfirmName(\"\");\n }\n }}\n style={{\n background: \"var(--color-error)\",\n color: \"white\",\n border: \"none\",\n padding: \"6px 12px\",\n fontSize: \"13px\",\n height: \"32px\",\n width: \"auto\",\n }}\n >\n {showDeleteConfirm ? \"Cancel\" : \"Delete\"}\n </Button>\n </div>\n\n {showDeleteConfirm && (\n <div style={{ maxWidth: \"400px\" }}>\n <FormGroup>\n <Label htmlFor=\"confirm_username\">\n Confirm by typing your username\n </Label>\n <Input\n id=\"confirm_username\"\n type=\"text\"\n value={confirmName}\n onChange={(e) => setConfirmName(e.target.value)}\n placeholder={`Type \"${user?.username}\" to confirm`}\n />\n </FormGroup>\n <Button\n onClick={handleDeleteAccount}\n disabled={confirmName !== user?.username || isDeleting}\n style={{\n background:\n confirmName === user?.username\n ? \"var(--color-error)\"\n : \"transparent\",\n color:\n confirmName === user?.username\n ? \"white\"\n : \"var(--color-muted)\",\n border: \"1px solid var(--color-border)\",\n padding: \"8px 16px\",\n fontSize: \"14px\",\n height: \"36px\",\n cursor:\n confirmName === user?.username\n ? \"pointer\"\n : \"not-allowed\",\n opacity: confirmName === user?.username ? 1 : 0.6,\n marginTop: \"12px\",\n }}\n >\n {isDeleting ? <Spinner size={12} /> : \"Delete Forever\"}\n </Button>\n </div>\n )}\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default ManageAccount;\n","import type { FC, ReactNode } from \"react\";\nimport { Dialog } from \"../utility/dialog\";\nimport { ManageAccount } from \"./manage-account\";\n\ninterface ManageAccountDialogProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n showHeader?: boolean;\n headerContent?: ReactNode;\n footerContent?: ReactNode;\n customContent?: ReactNode;\n children?: ReactNode;\n showCloseButton?: boolean;\n}\n\nexport const ManageAccountDialog: FC<ManageAccountDialogProps> = ({\n isOpen,\n onClose,\n title,\n showHeader,\n headerContent,\n footerContent,\n customContent,\n children,\n showCloseButton,\n}) => {\n return (\n <Dialog isOpen={isOpen} onClose={onClose}>\n <Dialog.Overlay>\n <Dialog.Content style={{ width: \"900px\", maxWidth: \"100%\" }}>\n {showHeader && (\n <Dialog.Header showCloseButton={showCloseButton}>\n {headerContent || title}\n </Dialog.Header>\n )}\n {customContent || children || <ManageAccount />}\n {footerContent && <Dialog.Footer>{footerContent}</Dialog.Footer>}\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog>\n );\n};\n","import React, { useState, useRef, useEffect } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport styled from \"styled-components\";\nimport { LogOut, Settings, Plus } from \"lucide-react\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { useSession, useDeployment } from \"@/hooks\";\nimport { ManageAccountDialog } from \"./manage-account-dialog\";\nimport { useDialog } from \"../utility/use-dialog\";\n\nconst Container = styled.div`\n position: relative;\n`;\n\nconst AccountButton = styled.button`\n display: flex;\n align-items: center;\n gap: 12px;\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 0px 12px;\n border-radius: 30px;\n transition: background-color 0.2s ease;\n`;\n\nconst AvatarContainer = styled.div`\n position: relative;\n`;\n\nconst Avatar = styled.div`\n width: 36px;\n height: 36px;\n border-radius: 50%;\n overflow: hidden;\n background: var(--color-background-hover);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n font-weight: 500;\n color: var(--color-secondary-text);\n border: 1px solid var(--color-border);\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n`;\n\nconst UserName = styled.div`\n font-size: 14px;\n font-weight: 500;\n color: var(--color-foreground);\n`;\n\nconst AccountName = styled.span`\n font-size: 14px;\n font-weight: 500;\n color: var(--color-foreground);\n`;\n\nconst AccountEmail = styled.span`\n font-size: 12px;\n color: var(--color-secondary-text);\n`;\n\n// Dropdown styled components\nconst DropdownContainer = styled.div<{\n $position?: { top?: number; bottom?: number; left?: number; right?: number };\n $isOpen: boolean;\n $maxHeight?: number;\n}>`\n position: fixed;\n ${(props) =>\n props.$position?.top !== undefined ? `top: ${props.$position.top}px;` : \"\"}\n ${(props) =>\n props.$position?.bottom !== undefined\n ? `bottom: ${props.$position.bottom}px;`\n : \"\"}\n ${(props) =>\n props.$position?.left !== undefined\n ? `left: ${props.$position.left}px;`\n : \"\"}\n ${(props) =>\n props.$position?.right !== undefined\n ? `right: ${props.$position.right}px;`\n : \"\"}\n visibility: ${(props) =>\n props.$position && props.$isOpen ? \"visible\" : \"hidden\"};\n opacity: ${(props) => (props.$isOpen && props.$position ? 1 : 0)};\n transition:\n opacity 0.15s ease,\n visibility 0s linear ${(props) => (props.$isOpen ? \"0s\" : \"0.15s\")};\n border-radius: var(--radius-md);\n border: 1px solid var(--color-border);\n background: var(--color-background);\n box-shadow: 0 4px 12px var(--color-shadow);\n z-index: 99999;\n overflow: hidden;\n min-width: 380px;\n max-width: calc(100vw - 24px);\n max-height: ${(props) =>\n props.$maxHeight ? `${props.$maxHeight}px` : \"calc(100vh - 48px)\"};\n overflow-y: auto;\n`;\n\nconst AccountSection = styled.div<{\n $isClickable?: boolean;\n}>`\n padding: 12px;\n cursor: ${(props) => (props.$isClickable ? \"pointer\" : \"default\")};\n transition: background-color 0.2s ease;\n\n &:hover {\n background: ${(props) =>\n props.$isClickable ? \"var(--color-background-hover)\" : \"transparent\"};\n }\n`;\n\nconst AccountHeader = styled.div`\n display: flex;\n align-items: center;\n gap: 12px;\n`;\n\nconst AccountDetails = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n`;\n\nconst NameRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst LargerAvatar = styled(Avatar)`\n width: 40px;\n height: 40px;\n`;\n\nconst ActionRow = styled.div`\n display: flex;\n margin-top: 12px;\n gap: 8px;\n`;\n\nconst ActionLink = styled.button<{ $destructive?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n background: var(--color-background-hover);\n border: none;\n border-radius: var(--radius-sm);\n padding: 6px;\n font-size: 12px;\n color: ${(props) =>\n props.$destructive ? \"var(--color-error)\" : \"var(--color-secondary-text)\"};\n cursor: pointer;\n text-align: center;\n flex: 1;\n\n &:hover {\n background: ${(props) =>\n props.$destructive\n ? \"var(--color-error-background)\"\n : \"var(--color-input-background)\"};\n color: ${(props) =>\n props.$destructive ? \"var(--color-error)\" : \"var(--color-foreground)\"};\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n`;\n\nconst FooterSection = styled.div`\n background: var(--color-background-hover);\n padding: 8px 12px;\n`;\n\nconst FooterButton = styled.button`\n display: flex;\n width: 100%;\n align-items: center;\n gap: 8px;\n background: transparent;\n border: none;\n padding: 6px 8px;\n font-size: 13px;\n color: var(--color-secondary-text);\n cursor: pointer;\n text-align: left;\n\n &:hover {\n color: var(--color-foreground);\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n`;\n\ninterface UserButtonProps {\n showName?: boolean;\n}\n\nexport const UserButton: React.FC<UserButtonProps> = ({ showName = true }) => {\n const [isOpen, setIsOpen] = useState(false);\n const [dropdownPosition, setDropdownPosition] = useState<\n | {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n maxHeight?: number;\n }\n | undefined\n >();\n const manageAccountDialog = useDialog(false);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const { session, signOut, switchSignIn, addNewAccount, refetch } =\n useSession();\n const { deployment } = useDeployment();\n\n const selectedAccount = session?.active_signin?.user;\n const isMultiSessionEnabled =\n deployment?.auth_settings?.multi_session_support?.enabled ?? false;\n const hasMultipleAccounts = (session?.signins?.length ?? 0) > 1;\n\n useEffect(() => {\n if (!isOpen) return;\n\n const timer = setTimeout(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n\n if (buttonRef.current?.contains(target)) {\n return;\n }\n\n if (dropdownRef.current?.contains(target)) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, 50);\n\n return () => {\n clearTimeout(timer);\n };\n }, [isOpen]);\n\n // Update dropdown position when open\n useEffect(() => {\n if (isOpen && buttonRef.current) {\n const rect = buttonRef.current.getBoundingClientRect();\n const dropdownWidth = 380; // min-width of dropdown\n // const dropdownHeight = 250; // More reasonable estimated height for user dropdown\n\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n // Calculate available space in all directions\n const spaceRight = windowWidth - rect.left;\n const spaceLeft = rect.right;\n const spaceBelow = windowHeight - rect.bottom;\n const spaceAbove = rect.top;\n\n // UserButton positioning debug\n\n // Determine best horizontal position\n let left: number | undefined;\n let right: number | undefined;\n\n // Check if button is closer to right edge or left edge\n const distanceFromLeft = rect.left;\n const distanceFromRight = windowWidth - rect.right;\n\n if (distanceFromRight < distanceFromLeft && spaceLeft >= dropdownWidth) {\n // Button is on the right side and there's space on the left\n // Use RIGHT positioning to keep dropdown anchored to button\n right = windowWidth - rect.right; // Align right edges\n } else if (spaceRight >= dropdownWidth) {\n // Normal case - enough space on right\n left = rect.left; // Align left edges\n } else if (spaceLeft >= dropdownWidth) {\n // Not enough space on right, but enough on left\n left = rect.right - dropdownWidth; // Align dropdown's right edge with button's right edge\n } else {\n // Not enough space on either side - use left and center as best as possible\n left = Math.max(\n 8,\n Math.min(\n windowWidth - dropdownWidth - 8,\n rect.left - (dropdownWidth - rect.width) / 2,\n ),\n );\n }\n\n // Determine best vertical position and max height\n let top: number | undefined;\n let bottom: number | undefined;\n let maxHeight: number | undefined;\n\n if (spaceBelow >= 100) {\n // Position below if there's at least 100px of space\n top = rect.bottom + 8;\n maxHeight = spaceBelow - 16; // Leave some padding from bottom\n } else if (spaceAbove >= 100) {\n // Position above - use BOTTOM positioning to keep it anchored above button\n const spaceFromBottom = windowHeight - rect.top;\n bottom = spaceFromBottom + 8; // Position 8px above the button\n maxHeight = Math.min(400, spaceAbove - 16); // Cap at 400px or available space\n } else {\n // Very little space - just position below and let it scroll\n top = rect.bottom + 8;\n maxHeight = Math.max(100, spaceBelow - 16);\n }\n\n // Calculated position debug\n\n setDropdownPosition({ top, bottom, left, right, maxHeight });\n } else {\n setDropdownPosition(undefined);\n }\n }, [isOpen]);\n\n const toggleDropdown = () => {\n setIsOpen(!isOpen);\n };\n\n const getInitials = (name: string) => {\n return name\n .split(\" \")\n .map((part) => part[0])\n .join(\"\")\n .toUpperCase();\n };\n\n const handleSignOut = async (signInId: string) => {\n try {\n await signOut(signInId);\n await refetch();\n setIsOpen(false);\n } catch (error) {}\n };\n\n const handleSignOutAll = async () => {\n try {\n await signOut();\n await refetch();\n setIsOpen(false);\n } catch (error) {}\n };\n\n const handleSwitchUser = async (signInId: string) => {\n try {\n await switchSignIn(signInId);\n await refetch();\n setIsOpen(false);\n } catch (error) {}\n };\n\n const handleOpenManageAccount = () => {\n manageAccountDialog.open();\n setIsOpen(false);\n };\n\n return (\n <DefaultStylesProvider>\n <Container>\n <AccountButton ref={buttonRef} onClick={toggleDropdown}>\n <AvatarContainer>\n <Avatar>\n {selectedAccount?.has_profile_picture ? (\n <img\n src={selectedAccount.profile_picture_url}\n alt={selectedAccount.first_name}\n />\n ) : (\n getInitials(\n `${selectedAccount?.first_name || \"\"} ${\n selectedAccount?.last_name || \"\"\n }`,\n )\n )}\n </Avatar>\n </AvatarContainer>\n {showName && (\n <UserName>\n {`${selectedAccount?.first_name || \"\"} ${\n selectedAccount?.last_name || \"\"\n }`}\n </UserName>\n )}\n </AccountButton>\n\n {typeof window !== \"undefined\" &&\n isOpen &&\n ReactDOM.createPortal(\n <DefaultStylesProvider>\n <DropdownContainer\n ref={dropdownRef}\n $position={dropdownPosition}\n $isOpen={isOpen}\n $maxHeight={dropdownPosition?.maxHeight}\n >\n <div>\n {isMultiSessionEnabled\n ? (() => {\n // Sort signins to put active account first\n const sortedSignins = [\n ...(session?.signins || []),\n ].sort((a, b) => {\n const aIsActive = a.user.id === selectedAccount?.id;\n const bIsActive = b.user.id === selectedAccount?.id;\n if (aIsActive && !bIsActive) return -1;\n if (!aIsActive && bIsActive) return 1;\n return 0;\n });\n\n return sortedSignins.map(\n ({ user: account, id: signInId }, index) => {\n const isActive = account.id === selectedAccount?.id;\n const isClickable = !isActive;\n\n return (\n <React.Fragment key={account.id}>\n <AccountSection\n $isClickable={isClickable}\n onClick={\n isClickable\n ? () => handleSwitchUser(signInId)\n : undefined\n }\n >\n <AccountHeader>\n <AvatarContainer>\n <LargerAvatar>\n {account.has_profile_picture ? (\n <img\n src={account.profile_picture_url}\n alt={account.first_name}\n />\n ) : (\n getInitials(\n `${account?.first_name || \"\"} ${\n account?.last_name || \"\"\n }`,\n )\n )}\n </LargerAvatar>\n </AvatarContainer>\n <AccountDetails>\n <NameRow>\n <AccountName>\n {`${account?.first_name || \"\"} ${\n account?.last_name || \"\"\n }`}\n </AccountName>\n </NameRow>\n <AccountEmail>\n {account.primary_email_address.email}\n </AccountEmail>\n </AccountDetails>\n </AccountHeader>\n\n {isActive && (\n <ActionRow>\n <ActionLink\n onClick={handleOpenManageAccount}\n >\n <Settings />\n Manage account\n </ActionLink>\n <ActionLink\n $destructive\n onClick={() => handleSignOut(signInId)}\n >\n <LogOut />\n Sign out\n </ActionLink>\n </ActionRow>\n )}\n </AccountSection>\n {index === 0 && sortedSignins.length > 1 && (\n <div\n style={{\n borderBottom:\n \"1px solid var(--color-border)\",\n margin: \"0\",\n }}\n />\n )}\n </React.Fragment>\n );\n },\n );\n })()\n : selectedAccount && (\n <AccountSection $isClickable={false}>\n <AccountHeader>\n <AvatarContainer>\n <LargerAvatar>\n {selectedAccount.has_profile_picture ? (\n <img\n src={selectedAccount.profile_picture_url}\n alt={selectedAccount.first_name}\n />\n ) : (\n getInitials(\n `${selectedAccount?.first_name || \"\"} ${\n selectedAccount?.last_name || \"\"\n }`,\n )\n )}\n </LargerAvatar>\n </AvatarContainer>\n <AccountDetails>\n <NameRow>\n <AccountName>\n {`${selectedAccount?.first_name || \"\"} ${\n selectedAccount?.last_name || \"\"\n }`}\n </AccountName>\n </NameRow>\n <AccountEmail>\n {selectedAccount.primary_email_address.email}\n </AccountEmail>\n </AccountDetails>\n </AccountHeader>\n\n <ActionRow>\n <ActionLink onClick={handleOpenManageAccount}>\n <Settings />\n Manage account\n </ActionLink>\n <ActionLink\n $destructive\n onClick={() =>\n handleSignOut(session?.active_signin?.id || \"\")\n }\n >\n <LogOut />\n Sign out\n </ActionLink>\n </ActionRow>\n </AccountSection>\n )}\n\n {isMultiSessionEnabled && (\n <>\n <FooterSection\n style={{\n borderBottom: \"1px solid var(--color-border)\",\n }}\n >\n <FooterButton onClick={addNewAccount}>\n <Plus />\n Add new account\n </FooterButton>\n </FooterSection>\n\n {hasMultipleAccounts && (\n <FooterSection>\n <FooterButton onClick={handleSignOutAll}>\n <LogOut />\n Sign out of all accounts\n </FooterButton>\n </FooterSection>\n )}\n </>\n )}\n </div>\n </DropdownContainer>\n </DefaultStylesProvider>,\n document.body,\n )}\n\n <ManageAccountDialog\n isOpen={manageAccountDialog.isOpen}\n onClose={manageAccountDialog.close}\n />\n </Container>\n </DefaultStylesProvider>\n );\n};\n","import styled from \"styled-components\";\nimport { X, ExternalLink } from \"lucide-react\";\nimport type { Notification } from \"@/types/notification\";\n\nconst Item = styled.div<{ $unread: boolean }>`\n padding: var(--space-md) var(--space-lg);\n background: ${props => props.$unread ? \"var(--color-background-hover)\" : \"transparent\"};\n transition: all 0.2s ease;\n position: relative;\n cursor: pointer;\n border-left: ${props => props.$unread ? \"3px solid var(--color-primary)\" : \"3px solid transparent\"};\n\n &:hover {\n background: var(--color-background-hover);\n }\n\n &:not(:last-child) {\n border-bottom: 1px solid var(--color-border);\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--space-sm);\n margin-bottom: var(--space-xs);\n`;\n\nconst TitleContainer = styled.div`\n display: flex;\n align-items: center;\n flex: 1;\n gap: var(--space-xs);\n`;\n\nconst Title = styled.h4`\n font-size: var(--font-xs);\n font-weight: 500;\n color: var(--color-foreground);\n margin: 0;\n flex: 1;\n line-height: 1.4;\n`;\n\nconst Severity = styled.span<{ $severity: string }>`\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: var(--radius-full);\n background: ${props => {\n switch (props.$severity) {\n case \"success\": return \"var(--color-success)\";\n case \"warning\": return \"var(--color-warning)\";\n case \"error\": return \"var(--color-error)\";\n default: return \"var(--color-primary)\";\n }\n }};\n flex-shrink: 0;\n`;\n\nconst Body = styled.p`\n font-size: var(--font-2xs);\n color: var(--color-secondary-text);\n margin: 0 0 var(--space-sm) 0;\n line-height: 1.5;\n`;\n\nconst Footer = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-sm);\n`;\n\nconst Time = styled.span`\n font-size: var(--font-2xs);\n color: var(--color-muted);\n`;\n\nconst Actions = styled.div`\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n`;\n\nconst ActionButton = styled.button`\n background: transparent;\n border: none;\n padding: var(--space-2xs);\n cursor: pointer;\n color: var(--color-secondary-text);\n border-radius: var(--radius-md);\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n background: var(--color-background-hover);\n color: var(--color-foreground);\n }\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px var(--color-primary);\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n`;\n\nconst ActionLink = styled.a`\n display: inline-flex;\n align-items: center;\n gap: var(--space-2xs);\n font-size: var(--font-2xs);\n font-weight: 500;\n color: var(--color-primary);\n text-decoration: none;\n padding: var(--space-2xs) var(--space-xs);\n border-radius: var(--radius-md);\n transition: all 0.2s ease;\n \n &:hover {\n background: var(--color-background-hover);\n color: var(--color-primary-hover);\n }\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px var(--color-primary);\n }\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\ninterface NotificationItemProps {\n notification: Notification;\n onMarkAsRead: (id: string) => void;\n onDelete: (id: string) => void;\n}\n\nexport function NotificationItem({ \n notification, \n onMarkAsRead, \n onDelete \n}: NotificationItemProps) {\n const handleClick = () => {\n if (!notification.is_read) {\n onMarkAsRead(notification.id);\n }\n };\n\n const formatTime = (dateString: string) => {\n const date = new Date(dateString);\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const seconds = Math.floor(diff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (days > 7) {\n return date.toLocaleDateString();\n } else if (days > 0) {\n return `${days}d ago`;\n } else if (hours > 0) {\n return `${hours}h ago`;\n } else if (minutes > 0) {\n return `${minutes}m ago`;\n } else {\n return \"Just now\";\n }\n };\n\n return (\n <Item $unread={!notification.is_read} onClick={handleClick}>\n <Header>\n <TitleContainer>\n <Severity $severity={notification.severity} />\n <Title>{notification.title}</Title>\n </TitleContainer>\n <ActionButton\n onClick={(e) => {\n e.stopPropagation();\n onDelete(notification.id);\n }}\n aria-label=\"Delete notification\"\n >\n <X />\n </ActionButton>\n </Header>\n \n <Body>{notification.body}</Body>\n \n <Footer>\n <Time>{formatTime(notification.created_at)}</Time>\n {notification.action_url && (\n <Actions>\n <ActionLink \n href={notification.action_url} \n target=\"_blank\" \n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n >\n {notification.action_label || \"View\"}\n <ExternalLink />\n </ActionLink>\n </Actions>\n )}\n </Footer>\n </Item>\n );\n}","import { forwardRef } from \"react\";\nimport styled from \"styled-components\";\nimport { BellOff } from \"lucide-react\";\nimport { NotificationItem } from \"./notification-item\";\nimport { Spinner } from \"../utility/spinner\";\nimport type { Notification } from \"@/types/notification\";\n\nconst Popover = styled.div<{\n $position?: { top?: number; bottom?: number; left?: number; right?: number };\n}>`\n position: fixed;\n ${(props) =>\n props.$position?.top !== undefined ? `top: ${props.$position.top}px;` : \"\"}\n ${(props) =>\n props.$position?.bottom !== undefined\n ? `bottom: ${props.$position.bottom}px;`\n : \"\"}\n ${(props) =>\n props.$position?.left !== undefined\n ? `left: ${props.$position.left}px;`\n : \"\"}\n ${(props) =>\n props.$position?.right !== undefined\n ? `right: ${props.$position.right}px;`\n : \"\"}\n width: 400px;\n max-height: 600px;\n background: var(--color-background);\n border: 1px solid var(--color-border);\n border-radius: 12px;\n box-shadow: 0 4px 12px var(--color-shadow);\n overflow: hidden;\n z-index: 99999;\n display: flex;\n flex-direction: column;\n\n @media (max-width: 480px) {\n width: 320px;\n max-height: 500px;\n }\n`;\n\nconst Header = styled.div`\n padding: 10px 16px;\n border-bottom: 1px solid var(--color-border);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--color-background);\n`;\n\nconst Title = styled.h3`\n font-size: 14px;\n font-weight: 500;\n color: var(--color-foreground);\n margin: 0;\n`;\n\nconst MarkAllButton = styled.button`\n background: transparent;\n border: none;\n color: var(--color-primary);\n font-size: var(--font-xs);\n font-weight: 500;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n transition: all 0.2s ease;\n\n &:hover {\n background: var(--color-input-background);\n color: var(--color-primary-hover);\n }\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px var(--color-primary);\n }\n`;\n\nconst Content = styled.div`\n flex: 1;\n overflow-y: auto;\n max-height: 450px;\n`;\n\nconst LoadingContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 32px;\n`;\n\nconst EmptyStateContainer = styled.div`\n padding: 40px 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n`;\n\nconst EmptyIcon = styled.div`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: var(--color-background-hover);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 12px;\n\n svg {\n width: 18px;\n height: 18px;\n color: var(--color-secondary-text);\n opacity: 0.6;\n }\n`;\n\nconst EmptyTitle = styled.h3`\n font-size: 14px;\n font-weight: 500;\n color: var(--color-foreground);\n margin: 0 0 4px 0;\n`;\n\nconst EmptyDescription = styled.p`\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n margin: 0;\n line-height: 1.4;\n`;\n\nconst Footer = styled.div`\n padding: 8px 16px;\n border-top: 1px solid var(--color-border);\n background: var(--color-background);\n text-align: center;\n`;\n\nconst ViewAllLink = styled.a`\n color: var(--color-primary);\n font-size: var(--font-xs);\n font-weight: 500;\n text-decoration: none;\n transition: color 0.2s ease;\n\n &:hover {\n color: var(--color-primary-hover);\n text-decoration: underline;\n }\n`;\n\ninterface NotificationPopoverProps {\n position?: { top?: number; bottom?: number; left?: number; right?: number };\n notifications: Notification[];\n loading: boolean;\n onMarkAsRead: (id: string) => void;\n onMarkAllAsRead: () => void;\n onDelete: (id: string) => void;\n}\n\nexport const NotificationPopover = forwardRef<\n HTMLDivElement,\n NotificationPopoverProps\n>(\n (\n {\n position,\n notifications,\n loading,\n onMarkAsRead,\n onMarkAllAsRead,\n onDelete,\n },\n ref,\n ) => {\n const hasUnread = !loading && notifications.some((n) => !n.is_read);\n console.log(\"loadings\", loading);\n\n return (\n <Popover ref={ref} $position={position}>\n <Header>\n <Title>Notifications</Title>\n {hasUnread && (\n <MarkAllButton onClick={onMarkAllAsRead}>\n Mark all as read\n </MarkAllButton>\n )}\n </Header>\n\n <Content>\n {loading ? (\n <LoadingContainer>\n <Spinner />\n </LoadingContainer>\n ) : notifications.length === 0 ? (\n <EmptyStateContainer>\n <EmptyIcon>\n <BellOff />\n </EmptyIcon>\n <EmptyTitle>No notifications</EmptyTitle>\n <EmptyDescription>You're all caught up!</EmptyDescription>\n </EmptyStateContainer>\n ) : (\n notifications.map((notification) => (\n <NotificationItem\n key={notification.id}\n notification={notification}\n onMarkAsRead={onMarkAsRead}\n onDelete={onDelete}\n />\n ))\n )}\n </Content>\n\n {!loading && notifications.length > 0 && (\n <Footer>\n <ViewAllLink href=\"/notifications\">\n View all notifications\n </ViewAllLink>\n </Footer>\n )}\n </Popover>\n );\n },\n);\n","import { useState, useRef, useEffect } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport styled from \"styled-components\";\nimport { BellRing } from \"lucide-react\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { useNotifications } from \"@/hooks/use-notifications\";\nimport { NotificationPopover } from \"./notification-popover\";\n\nconst Container = styled.div`\n position: relative;\n`;\n\nconst CircularContainer = styled.div`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: var(--color-background);\n border: 1px solid var(--color-border);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n\n &:hover {\n background: var(--color-background-hover);\n border-color: var(--color-primary);\n }\n`;\n\nconst NotificationButton = styled.button`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 0;\n border-radius: 50%;\n transition: all 0.2s ease;\n width: 100%;\n height: 100%;\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px var(--color-primary);\n }\n\n svg {\n width: 16px;\n height: 16px;\n color: var(--color-secondary-text);\n transition: color 0.2s ease;\n }\n\n &:hover svg {\n color: var(--color-primary);\n }\n`;\n\nconst Badge = styled.span`\n position: absolute;\n top: -2px;\n right: -2px;\n background: var(--color-error);\n color: white;\n border-radius: 50%;\n padding: 0 4px;\n font-size: var(--font-2xs);\n font-weight: 500;\n min-width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--color-background);\n box-shadow: 0 1px 3px var(--color-shadow);\n`;\n\ninterface NotificationBellProps {\n className?: string;\n showBadge?: boolean;\n channels?: string[];\n organizationIds?: number[];\n workspaceIds?: number[];\n}\n\nexport function NotificationBell({\n className,\n showBadge = true,\n channels = [\"user\"],\n organizationIds,\n workspaceIds,\n}: NotificationBellProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [popoverPosition, setPopoverPosition] = useState<\n { top?: number; bottom?: number; left?: number; right?: number } | undefined\n >();\n const containerRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const notificationParams = {\n channels,\n organization_ids: organizationIds,\n workspace_ids: workspaceIds,\n limit: 20,\n };\n\n const {\n unreadCount,\n notifications,\n loading,\n markAsRead,\n markAllAsRead,\n deleteNotification,\n } = useNotifications(notificationParams);\n\n useEffect(() => {\n if (!isOpen) return;\n\n const timer = setTimeout(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n\n if (containerRef.current?.contains(target)) {\n return;\n }\n\n if (popoverRef.current?.contains(target)) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, 50);\n\n return () => {\n clearTimeout(timer);\n };\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen && containerRef.current) {\n const rect = containerRef.current.getBoundingClientRect();\n const popoverWidth = 400;\n const popoverHeight = 600;\n\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n const spaceRight = windowWidth - rect.left;\n const spaceBelow = windowHeight - rect.bottom;\n const spaceAbove = rect.top;\n\n // Determine horizontal position\n let left: number | undefined;\n let right: number | undefined;\n\n if (spaceRight >= popoverWidth) {\n left = rect.left;\n } else {\n right = windowWidth - rect.right;\n }\n\n let top: number | undefined;\n let bottom: number | undefined;\n\n if (spaceBelow >= popoverHeight + 8) {\n top = rect.bottom + 8;\n } else if (spaceAbove >= popoverHeight + 8) {\n bottom = windowHeight - rect.top + 8;\n } else {\n top = rect.bottom + 8;\n }\n\n setPopoverPosition({ top, bottom, left, right });\n } else {\n setPopoverPosition(undefined);\n }\n }, [isOpen]);\n\n return (\n <DefaultStylesProvider>\n <Container ref={containerRef} className={className}>\n <CircularContainer>\n <NotificationButton onClick={() => setIsOpen(!isOpen)}>\n <BellRing size={16} />\n {showBadge && unreadCount > 0 && (\n <Badge>{unreadCount > 9 ? \"9+\" : unreadCount}</Badge>\n )}\n </NotificationButton>\n </CircularContainer>\n\n {typeof window !== \"undefined\" &&\n isOpen &&\n ReactDOM.createPortal(\n <DefaultStylesProvider>\n <NotificationPopover\n ref={popoverRef}\n position={popoverPosition}\n notifications={notifications}\n loading={loading}\n onMarkAsRead={markAsRead}\n onMarkAllAsRead={markAllAsRead}\n onDelete={deleteNotification}\n />\n </DefaultStylesProvider>,\n document.body,\n )}\n </Container>\n </DefaultStylesProvider>\n );\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { UserButton } from \"./user-button\";\nimport { NotificationBell } from \"../notifications/notification-bell\";\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\ninterface UserControlsProps {\n showName?: boolean;\n showNotifications?: boolean;\n}\n\nexport const UserControls: React.FC<UserControlsProps> = ({ \n showName = true, \n showNotifications = true \n}) => {\n return (\n <Container>\n {showNotifications && <NotificationBell />}\n <UserButton showName={showName} />\n </Container>\n );\n};","import { useEffect } from \"react\";\nimport { useSession, useDeployment, useNavigation } from \"@/hooks\";\n\ninterface SignedInProps {\n children: React.ReactNode;\n}\n\nexport const SignedIn = ({ children }: SignedInProps) => {\n const { session, loading } = useSession();\n const { deployment } = useDeployment();\n const { navigate } = useNavigation();\n\n useEffect(() => {\n if (loading) return;\n\n if (session?.signins?.length && !session.active_signin) {\n let currentHref = window.location.href;\n let redirectUrl = new URL(currentHref);\n redirectUrl.searchParams.set(\"redirect_uri\", currentHref);\n\n navigate(redirectUrl.toString());\n }\n }, [loading, session, deployment, navigate]);\n\n if (loading) return null;\n if (!session.signins?.length || !session.active_signin) return null;\n\n return <>{children}</>;\n};\n","import { useSession } from \"@/hooks\";\n\ninterface SignedOutProps {\n children: React.ReactNode;\n}\n\nexport const SignedOut = ({ children }: SignedOutProps) => {\n const { loading, session } = useSession();\n\n if (loading) return null;\n if (session.signins?.length) return null;\n\n return <>\n {children}\n </>\n}","import { useEffect, useState } from \"react\";\nimport styled, { keyframes } from \"styled-components\";\nimport { Plus, LogOut, Loader2 } from \"lucide-react\";\nimport { useSession, useDeployment, useNavigation } from \"@/hooks\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { AuthFormImage } from \"../auth/auth-image\";\nimport { NavigationLink } from \"../utility/navigation\";\n\nconst shimmer = keyframes`\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n`;\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst Container = styled.div`\n width: 400px;\n max-width: 100vw;\n padding: var(--space-3xl) var(--space-sm);\n background: var(--color-background);\n border-radius: var(--radius-lg);\n box-shadow: 0 4px 12px var(--color-shadow);\n`;\n\nconst AccountsWrapper = styled.div`\n margin: var(--space-lg) 0;\n border-top: 1px solid var(--color-border);\n border-bottom: 1px solid var(--color-border);\n overflow: hidden;\n`;\n\nconst Header = styled.div`\n text-align: center;\n margin-bottom: var(--space-xl);\n`;\n\nconst Title = styled.h1`\n font-size: var(--font-lg);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-xs);\n margin-top: 0;\n`;\n\nconst Subtitle = styled.p`\n color: var(--color-secondary-text);\n font-size: var(--font-xs);\n`;\n\nconst AccountItem = styled.div<{ $isActive?: boolean; $isSwitching?: boolean }>`\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-md);\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n border-bottom: 1px solid var(--color-border);\n\n &:last-of-type {\n border-bottom: none;\n }\n\n &:hover {\n background: var(--color-background-hover);\n }\n\n ${(props) =>\n props.$isActive &&\n `\n background: var(--color-background-hover);\n cursor: default;\n\n &:hover {\n background: var(--color-background-hover);\n }\n `}\n\n ${(props) =>\n props.$isSwitching &&\n `\n cursor: wait;\n background: var(--color-background-hover);\n pointer-events: none;\n overflow: hidden;\n\n &:hover {\n background: var(--color-background-hover);\n }\n\n &::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 3px;\n background: var(--color-primary);\n animation: pulse 1.5s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n `}\n`;\n\nconst Avatar = styled.div`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n overflow: hidden;\n background: var(--color-input-background);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--font-sm);\n font-weight: 500;\n color: var(--color-secondary-text);\n flex-shrink: 0;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n`;\n\nconst AccountDetails = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nconst AccountName = styled.div`\n font-size: var(--font-sm);\n font-weight: 500;\n color: var(--color-foreground);\n margin-bottom: var(--space-2xs);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst AccountEmail = styled.div`\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst SignOutButton = styled.button<{ $isLoading?: boolean }>`\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-sm);\n background: transparent;\n border: 1px solid var(--color-border);\n border-radius: var(--radius-sm);\n color: var(--color-secondary-text);\n font-size: var(--font-2xs);\n cursor: ${(props) => (props.$isLoading ? \"not-allowed\" : \"pointer\")};\n transition: all 0.2s ease;\n opacity: ${(props) => (props.$isLoading ? 0.7 : 1)};\n\n &:hover:not(:disabled) {\n background: var(--color-background-hover);\n border-color: var(--color-border-hover);\n }\n\n svg {\n animation: ${(props) => (props.$isLoading ? spin : \"none\")} 1s linear\n infinite;\n }\n`;\n\nconst AddAccountButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-sm);\n margin-top: var(--space-lg);\n width: 100%;\n padding: var(--space-lg);\n background: transparent;\n border: none;\n border-top: 1px solid var(--color-border);\n color: var(--color-primary);\n font-size: var(--font-xs);\n font-weight: 400;\n cursor: pointer;\n transition: background-color 0.2s ease;\n\n &:hover {\n background: var(--color-background-hover);\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nconst SkeletonItem = styled.div`\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-md);\n border-bottom: 1px solid var(--color-border);\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nconst SkeletonAvatar = styled.div`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: linear-gradient(\n 90deg,\n var(--color-background-hover) 0%,\n var(--color-input-background) 50%,\n var(--color-background-hover) 100%\n );\n background-size: 1000px 100%;\n animation: ${shimmer} 2s infinite linear;\n`;\n\nconst SkeletonTextWrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n`;\n\nconst SkeletonText = styled.div<{ $width?: string }>`\n height: ${(props) => (props.$width === \"small\" ? \"12px\" : \"14px\")};\n width: ${(props) => (props.$width === \"small\" ? \"60%\" : \"40%\")};\n border-radius: var(--radius-xs);\n background: linear-gradient(\n 90deg,\n var(--color-background-hover) 0%,\n var(--color-input-background) 50%,\n var(--color-background-hover) 100%\n );\n background-size: 1000px 100%;\n animation: ${shimmer} 2s infinite linear;\n`;\n\nconst Footer = styled.p`\n margin-top: var(--space-lg);\n text-align: center;\n font-size: var(--font-xs);\n color: var(--color-secondary-text);\n`;\n\nconst Link = styled.span`\n color: var(--color-primary);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s;\n cursor: pointer;\n\n &:hover {\n color: var(--color-primary-hover);\n }\n`;\n\ninterface SignedInAccountsProps {\n onAccountSelect?: (signInId: string) => void;\n showAddAccount?: boolean;\n}\n\nexport const SignedInAccounts: React.FC<SignedInAccountsProps> = ({\n onAccountSelect,\n showAddAccount = true,\n}) => {\n const { session, loading, switchSignIn, addNewAccount, signOut } =\n useSession();\n const { deployment } = useDeployment();\n const { navigate } = useNavigation();\n const [loadingSignOut, setLoadingSignOut] = useState<string | null>(null);\n const [switchingToAccount, setSwitchingToAccount] = useState<string | null>(\n null,\n );\n\n const activeSignIn = session?.active_signin;\n const signins = session?.signins || [];\n\n useEffect(() => {\n if (loading) return;\n\n if (!signins.length) {\n const signInUrl = deployment?.ui_settings?.sign_in_page_url;\n if (signInUrl) navigate(`${signInUrl}${window.location.search}`);\n }\n }, [loading, signins, deployment, navigate]);\n\n const getInitials = (name: string) => {\n return name\n .split(\" \")\n .map((part) => part[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n };\n\n const handleAccountClick = async (signInId: string) => {\n if (signInId === activeSignIn?.id || switchingToAccount) return;\n\n setSwitchingToAccount(signInId);\n try {\n await switchSignIn(signInId);\n if (onAccountSelect) {\n onAccountSelect(signInId);\n setSwitchingToAccount(null);\n } else {\n // Keep loading state during redirect\n let redirectUri = new URLSearchParams(window.location.search).get(\n \"redirect_uri\",\n );\n\n if (!redirectUri) {\n redirectUri = deployment!.ui_settings?.after_signin_redirect_url;\n }\n\n if (redirectUri) {\n const uri = new URL(redirectUri);\n if (deployment?.mode === \"staging\") {\n uri.searchParams.set(\n \"dev_session\",\n localStorage.getItem(\"__dev_session__\") ?? \"\",\n );\n }\n navigate(uri.toString());\n } else {\n setSwitchingToAccount(null);\n }\n }\n } catch (error) {\n console.error(\"Failed to switch account:\", error);\n setSwitchingToAccount(null);\n }\n };\n\n const handleSignOut = async (e: React.MouseEvent, signInId: string) => {\n e.stopPropagation(); // Prevent account click\n setLoadingSignOut(signInId);\n try {\n await signOut(signInId);\n } catch (error) {\n console.error(\"Failed to sign out:\", error);\n } finally {\n setLoadingSignOut(null);\n }\n };\n\n const handleAddAccount = () => {\n if (addNewAccount) {\n addNewAccount();\n } else {\n const signInUrl = deployment?.ui_settings?.sign_in_page_url;\n if (signInUrl) navigate(`${signInUrl}${window.location.search}`);\n }\n };\n\n if (loading) {\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n <Header>\n <Title>Choose an account</Title>\n <Subtitle>\n to continue to {deployment?.ui_settings?.app_name || \"App\"}\n </Subtitle>\n </Header>\n\n <AccountsWrapper>\n {/* Show 2-3 skeleton items */}\n {[1, 2].map((item) => (\n <SkeletonItem key={item}>\n <SkeletonAvatar />\n <SkeletonTextWrapper>\n <SkeletonText />\n <SkeletonText $width=\"small\" />\n </SkeletonTextWrapper>\n </SkeletonItem>\n ))}\n </AccountsWrapper>\n </Container>\n </DefaultStylesProvider>\n );\n }\n\n if (!signins.length) {\n return null;\n }\n\n return (\n <DefaultStylesProvider>\n <Container>\n <AuthFormImage />\n <Header>\n <Title>Choose an account</Title>\n <Subtitle>\n to continue to {deployment?.ui_settings?.app_name}\n </Subtitle>\n </Header>\n\n <AccountsWrapper>\n {signins.map(({ user: account, id: signInId }) => {\n if (!account) return null;\n const isActive = signInId === activeSignIn?.id;\n const isSwitching = switchingToAccount === signInId;\n const fullName =\n `${account.first_name || \"\"} ${account.last_name || \"\"}`.trim();\n\n return (\n <AccountItem\n key={signInId}\n $isActive={isActive}\n $isSwitching={isSwitching}\n onClick={() => handleAccountClick(signInId)}\n >\n <Avatar>\n {account.has_profile_picture ? (\n <img src={account.profile_picture_url} alt={fullName} />\n ) : (\n getInitials(\n fullName ||\n account.primary_email_address?.email ||\n account.primary_phone_number?.phone_number ||\n account.username ||\n \"U\",\n )\n )}\n </Avatar>\n\n <AccountDetails>\n <AccountName>\n {fullName ||\n account.primary_email_address?.email ||\n account.primary_phone_number?.phone_number ||\n account.username ||\n \"User\"}\n </AccountName>\n <AccountEmail>\n {account.primary_email_address?.email || account.username}\n </AccountEmail>\n </AccountDetails>\n\n {!isSwitching && (\n <SignOutButton\n onClick={(e) => handleSignOut(e, signInId)}\n $isLoading={loadingSignOut === signInId}\n disabled={loadingSignOut === signInId}\n >\n {loadingSignOut === signInId ? (\n <Loader2 size={12} />\n ) : (\n <LogOut size={12} />\n )}\n {loadingSignOut === signInId\n ? \"Signing out...\"\n : \"Sign out\"}\n </SignOutButton>\n )}\n </AccountItem>\n );\n })}\n\n {showAddAccount && (\n <AddAccountButton onClick={handleAddAccount}>\n <Plus />\n Add another account\n </AddAccountButton>\n )}\n </AccountsWrapper>\n\n <Footer>\n Don't have an account?{\" \"}\n <Link>\n <NavigationLink\n to={`${deployment!.ui_settings?.sign_up_page_url}${window.location.search}`}\n >\n Sign up\n </NavigationLink>\n </Link>\n </Footer>\n </Container>\n </DefaultStylesProvider>\n );\n};\n","\"use client\";\n\nimport { useNavigation } from \"@/hooks\";\nimport { useEffect } from \"react\";\n\nexport const NavigateToSignIn = () => {\n const { navigateToSignIn } = useNavigation();\n\n useEffect(() => {\n navigateToSignIn();\n }, [navigateToSignIn]);\n\n return null;\n};\n\nexport const NavigateToSignUp = () => {\n const { navigateToSignUp } = useNavigation();\n\n useEffect(() => {\n navigateToSignUp();\n }, [navigateToSignUp]);\n\n return null;\n};\n","import styled from \"styled-components\";\nimport { ChannelCounts } from \"@/types/notification\";\n\nconst Container = styled.div`\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 12px;\n`;\n\nconst ChannelButton = styled.button<{ $active: boolean }>`\n padding: 4px 8px;\n border-radius: 12px;\n border: 1px solid var(--color-border);\n background: ${props => props.$active ? 'var(--color-primary)' : 'var(--color-background)'};\n color: ${props => props.$active ? 'var(--color-primary-foreground)' : 'var(--color-text)'};\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 4px;\n\n &:hover {\n background: ${props => props.$active ? 'var(--color-primary)' : 'var(--color-background-hover)'};\n }\n`;\n\nconst CountBadge = styled.span`\n background: var(--color-background);\n color: var(--color-text);\n padding: 1px 4px;\n border-radius: 8px;\n font-size: 10px;\n font-weight: 500;\n`;\n\ninterface ChannelSelectorProps {\n selectedChannels: string[];\n channelCounts?: ChannelCounts;\n onChannelsChange: (channels: string[]) => void;\n}\n\nconst CHANNEL_LABELS = {\n user: \"Personal\",\n organization: \"Organization\", \n workspace: \"Workspace\",\n current: \"Current Context\"\n};\n\nexport function ChannelSelector({ selectedChannels, channelCounts, onChannelsChange }: ChannelSelectorProps) {\n const toggleChannel = (channel: string) => {\n const isSelected = selectedChannels.includes(channel);\n \n if (isSelected) {\n // Remove channel\n const newChannels = selectedChannels.filter(c => c !== channel);\n if (newChannels.length === 0) {\n // Don't allow removing all channels, default to user\n onChannelsChange([\"user\"]);\n } else {\n onChannelsChange(newChannels);\n }\n } else {\n // Add channel\n onChannelsChange([...selectedChannels, channel]);\n }\n };\n\n return (\n <Container>\n {Object.entries(CHANNEL_LABELS).map(([channel, label]) => {\n const count = channelCounts?.[channel as keyof ChannelCounts] || 0;\n const isSelected = selectedChannels.includes(channel);\n \n return (\n <ChannelButton\n key={channel}\n $active={isSelected}\n onClick={() => toggleChannel(channel)}\n >\n {label}\n {count > 0 && <CountBadge>{count}</CountBadge>}\n </ChannelButton>\n );\n })}\n </Container>\n );\n}","import React, { useState, useRef, useEffect } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport styled from \"styled-components\";\nimport { Send, Bot, Loader2, Paperclip, X, Expand, Download, ZoomIn, ZoomOut, Maximize2, ChevronLeft } from \"lucide-react\";\nimport { useAgentConversation } from \"../../hooks/use-agent-conversation\";\nimport {\n UserInputRequest,\n ImageData,\n} from \"../../hooks/use-agent-conversation\";\nimport { CONNECTION_STATES } from \"../../constants/ai-agent\";\nimport { FRONTEND_STATUS } from \"../../constants/execution-status\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { useAgentConversationContext } from \"../../context/agent-conversation-provider\";\n\nconst ChatContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: var(--color-background);\n overflow: hidden;\n`;\n\nconst ChatHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: var(--color-background);\n border-bottom: 1px solid var(--color-border-subtle);\n flex-shrink: 0;\n`;\n\nconst HeaderLeft = styled.div`\n display: flex;\n align-items: center;\n gap: 12px;\n`;\n\nconst BackButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--color-foreground);\n cursor: pointer;\n border-radius: var(--radius-md);\n transition: background 0.2s;\n\n &:hover {\n background: var(--color-background-hover);\n }\n`;\n\nconst AgentInfo = styled.div`\n display: flex;\n align-items: center;\n gap: 10px;\n`;\n\nconst AgentAvatar = styled.div`\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--color-primary-gradient);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n`;\n\nconst AgentDetails = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst StatusIndicator = styled.div<{ $status: string }>`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n margin-right: 6px;\n flex-shrink: 0;\n background-color: ${(props) => {\n if (props.$status === \"Connecting...\") return \"var(--color-warning)\";\n if (\n props.$status === \"Connection error\" ||\n props.$status === \"Disconnected\"\n )\n return \"var(--color-error)\";\n if (props.$status === \"Waiting for your input...\")\n return \"var(--color-info)\";\n if (props.$status === \"Working...\") return \"var(--color-primary)\";\n if (props.$status === \"Ready\") return \"var(--color-success)\";\n return \"var(--color-secondary-text)\";\n }};\n ${(props) =>\n props.$status === \"Working...\" &&\n `\n animation: pulse 1.5s ease-in-out infinite;\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n `}\n`;\n\nconst AgentName = styled.h3`\n margin: 0;\n font-size: 14px;\n font-weight: 400;\n color: var(--color-foreground);\n letter-spacing: -0.01em;\n`;\n\nconst StatusText = styled.p<{ $status?: string }>`\n margin: 0;\n font-size: 11px;\n color: ${(props) => {\n if (props.$status === \"Connecting...\") return \"var(--color-warning)\";\n if (\n props.$status === \"Connection error\" ||\n props.$status === \"Disconnected\"\n )\n return \"var(--color-error)\";\n if (props.$status === \"Waiting for your input...\")\n return \"var(--color-info)\";\n if (props.$status === \"Working...\") return \"var(--color-primary)\";\n if (props.$status === \"Ready\") return \"var(--color-success)\";\n return \"var(--color-secondary-text)\";\n }};\n font-weight: 400;\n`;\n\nconst StatusBadge = styled.div<{ $status: string }>`\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 9999px;\n font-weight: 400;\n\n ${(props) => {\n switch (props.$status) {\n case \"waiting_for_input\":\n return `\n background-color: var(--color-warning-background);\n color: var(--color-warning-text);\n `;\n case \"running\":\n return `\n background-color: var(--color-info-background);\n color: var(--color-info-text);\n `;\n case \"completed\":\n return `\n background-color: var(--color-success-background);\n color: var(--color-success-text);\n `;\n case \"failed\":\n return `\n background-color: var(--color-error-background);\n color: var(--color-error-text);\n `;\n default:\n return \"display: none;\";\n }\n }}\n`;\n\nconst MessagesContainer = styled.div`\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 20px 16px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--color-border);\n border-radius: 3px;\n\n &:hover {\n background: var(--color-border-hover);\n }\n }\n`;\n\nconst MessageWrapper = styled.div<{ $isUser: boolean }>`\n display: flex;\n justify-content: ${(props) => (props.$isUser ? \"flex-end\" : \"flex-start\")};\n`;\n\nconst Message = styled.div<{ $isUser: boolean }>`\n max-width: 85%;\n padding: 10px 14px;\n border-radius: 12px;\n font-size: 13px;\n line-height: 1.5;\n white-space: pre-wrap;\n word-wrap: break-word;\n word-break: break-word;\n overflow-wrap: break-word;\n hyphens: auto;\n\n ${(props) =>\n props.$isUser\n ? `\n background: var(--color-primary);\n color: white;\n margin-left: auto;\n font-weight: 400;\n `\n : `\n background: var(--color-background-subtle);\n color: var(--color-foreground);\n margin-right: auto;\n font-weight: 400;\n `}\n`;\n\nconst StreamingIndicator = styled.span`\n display: inline-flex;\n gap: 2px;\n margin-left: 8px;\n align-items: center;\n\n &::after {\n content: \"\";\n width: 2px;\n height: 2px;\n border-radius: 50%;\n background: currentColor;\n animation: pulse 1.5s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 0.2;\n }\n 50% {\n opacity: 1;\n }\n }\n`;\n\nconst PendingMessage = styled(Message)`\n opacity: 0.7;\n position: relative;\n display: inline-block;\n padding-right: 36px; /* Make room for spinner */\n\n &::after {\n content: \"\";\n position: absolute;\n bottom: 50%;\n right: 12px;\n transform: translateY(50%);\n width: 16px;\n height: 16px;\n border: 2px solid var(--color-primary-muted);\n border-top-color: var(--color-primary);\n border-radius: 50%;\n animation: spin 1s linear infinite;\n }\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n`;\n\nconst LogMessage = styled.div<{\n $isGrouped?: boolean;\n $isFirstInGroup?: boolean;\n $isLastInGroup?: boolean;\n}>`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n margin: ${(props) => (props.$isGrouped ? \"0\" : \"12px 0\")};\n padding-left: 0;\n position: relative;\n\n &::before {\n content: \"\";\n position: absolute;\n left: 8px;\n top: 50%;\n width: 6px;\n height: 6px;\n background: var(--color-border);\n border-radius: 50%;\n transform: translateY(-50%);\n }\n\n ${(props) =>\n props.$isGrouped &&\n !props.$isFirstInGroup &&\n `\n &::after {\n content: '';\n position: absolute;\n left: 10.5px;\n top: -14px;\n width: 1px;\n height: 18px;\n background: var(--color-border);\n }\n `}\n\n .log-content {\n font-size: 11px;\n color: var(--color-secondary-text);\n background: transparent;\n padding: 2px 0 2px 24px;\n line-height: 1.4;\n text-align: left;\n word-wrap: break-word;\n word-break: break-word;\n overflow-wrap: break-word;\n max-width: calc(100% - 24px);\n }\n`;\n\nconst EmptyState = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n color: var(--color-secondary-text);\n gap: 12px;\n\n p {\n margin: 0;\n font-size: 13px;\n }\n`;\n\nconst UserInputRequestContainer = styled.div`\n background: var(--color-primary-background);\n border: 1px solid var(--color-primary-border);\n border-radius: 8px;\n padding: 16px 20px;\n margin: 8px 0;\n width: 100%;\n word-wrap: break-word;\n word-break: break-word;\n overflow-wrap: break-word;\n\n .question {\n font-size: 13px;\n font-weight: 400;\n color: var(--color-foreground);\n margin-bottom: 6px;\n line-height: 1.4;\n }\n\n .context {\n font-size: 12px;\n color: var(--color-secondary-text);\n margin-bottom: 10px;\n line-height: 1.4;\n }\n\n .instruction {\n font-size: 11px;\n color: var(--color-primary);\n margin-top: 10px;\n }\n\n .controls {\n margin: 12px 0;\n }\n\n select,\n input[type=\"date\"] {\n width: 100%;\n padding: 6px 10px;\n border-radius: 6px;\n border: 1px solid var(--color-border);\n background: var(--color-background);\n font-size: 12px;\n font-family: inherit;\n transition: border-color 0.15s;\n\n &:focus:not(:disabled) {\n outline: none;\n border-color: var(--color-primary);\n }\n\n &:disabled {\n background: var(--color-background-disabled);\n color: var(--color-text-disabled);\n cursor: not-allowed;\n }\n }\n\n .checkbox-group,\n .radio-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .checkbox-label,\n .radio-label {\n display: flex;\n align-items: center;\n cursor: pointer;\n font-size: 12px;\n color: var(--color-foreground);\n\n input {\n margin-right: 8px;\n cursor: pointer;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n }\n\n &:hover:not(:has(input:disabled)) {\n color: var(--color-foreground);\n }\n\n &:has(input:disabled) {\n cursor: not-allowed;\n color: var(--color-text-disabled);\n }\n }\n\n .radio-group {\n flex-direction: row;\n gap: 20px;\n }\n`;\n\nconst InputForm = styled.form`\n padding: 20px;\n background: var(--color-background);\n border-top: 1px solid var(--color-border);\n flex-shrink: 0;\n`;\n\nconst InputContainer = styled.div`\n position: relative;\n display: flex;\n align-items: flex-end;\n background: var(--color-background-subtle);\n border: 1px solid var(--color-border);\n border-radius: 12px;\n padding: 8px 8px 8px 20px;\n min-height: 56px;\n`;\n\nconst InputWrapper = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding-right: 12px;\n`;\n\nconst MessageInput = styled.textarea`\n width: 100%;\n padding: 0;\n border: none;\n background: transparent;\n font-size: 13px;\n line-height: 1.5;\n color: var(--color-foreground);\n outline: none;\n resize: none;\n font-family: inherit;\n min-height: 24px;\n max-height: 200px;\n\n &::placeholder {\n color: var(--color-placeholder);\n }\n\n &:disabled {\n color: var(--color-text-disabled);\n cursor: not-allowed;\n }\n`;\n\nconst ActionButtons = styled.div`\n display: flex;\n gap: 8px;\n margin-top: 4px;\n`;\n\nconst ImagePreviewContainer = styled.div`\n display: flex;\n gap: 8px;\n padding: 8px 20px;\n border-top: 1px solid var(--color-border-subtle);\n background: var(--color-background);\n overflow-x: auto;\n max-height: 120px;\n`;\n\nconst ImagePreview = styled.div`\n position: relative;\n width: 80px;\n height: 80px;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--color-border);\n flex-shrink: 0;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n`;\n\nconst RemoveImageButton = styled.button`\n position: absolute;\n top: 4px;\n right: 4px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: rgba(0, 0, 0, 0.7);\n color: white;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n background: rgba(0, 0, 0, 0.9);\n }\n`;\n\nconst HiddenFileInput = styled.input`\n display: none;\n`;\n\nconst ActionButton = styled.button`\n padding: 4px 10px;\n border: 1px solid var(--color-border);\n border-radius: 8px;\n background: transparent;\n color: var(--color-foreground);\n font-size: 12px;\n font-weight: 400;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s ease;\n white-space: nowrap;\n\n &:hover {\n background: var(--color-background-hover);\n border-color: var(--color-border-hover);\n }\n\n &:disabled {\n color: var(--color-text-disabled);\n border-color: var(--color-border);\n cursor: not-allowed;\n }\n`;\n\nconst SendButton = styled.button`\n align-self: flex-end;\n padding: 6px;\n border: none;\n border-radius: 6px;\n background: var(--color-secondary);\n color: white;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background: var(--color-secondary-hover);\n }\n\n &:disabled {\n background: var(--color-background-disabled);\n color: var(--color-text-disabled);\n cursor: not-allowed;\n }\n`;\n\nconst ImageModal = styled.div<{ $isOpen: boolean }>`\n display: ${props => props.$isOpen ? 'flex' : 'none'};\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--color-overlay, rgba(0, 0, 0, 0.75));\n backdrop-filter: blur(10px);\n z-index: 1000;\n align-items: center;\n justify-content: center;\n padding: 20px;\n animation: ${props => props.$isOpen ? 'fadeIn 0.3s ease' : 'none'};\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n backdrop-filter: blur(0px);\n }\n to {\n opacity: 1;\n backdrop-filter: blur(10px);\n }\n }\n`;\n\nconst ModalContent = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n max-width: calc(100vw - 40px);\n max-height: calc(100vh - 40px);\n background: var(--color-modal-background, rgba(0, 0, 0, 0.3));\n border-radius: 16px;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n`;\n\nconst ModalButton = styled.button<{ $variant?: 'primary' | 'ghost' }>`\n height: 32px;\n padding: 0 12px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 400;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s ease;\n border: none;\n\n ${props => props.$variant === 'primary' ? `\n background: var(--color-primary);\n color: white;\n\n &:hover:not(:disabled) {\n background: var(--color-primary-hover);\n transform: translateY(-1px);\n }\n ` : `\n background: var(--color-background-subtle);\n color: var(--color-foreground);\n border: 1px solid var(--color-border);\n\n &:hover:not(:disabled) {\n background: var(--color-background-hover);\n }\n `}\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n &:active:not(:disabled) {\n transform: scale(0.98);\n }\n`;\n\nconst IconButton = styled(ModalButton)`\n width: 32px;\n padding: 0;\n`;\n\nconst ZoomedImage = styled.img<{ $zoom: number; $x: number; $y: number; $isDragging: boolean }>`\n max-width: calc(100% - 20px);\n max-height: calc(100% - 20px);\n width: auto;\n height: auto;\n object-fit: contain;\n transform: scale(${props => props.$zoom}) translate(${props => props.$x / props.$zoom}px, ${props => props.$y / props.$zoom}px);\n cursor: ${props => props.$zoom > 1 ? (props.$isDragging ? 'grabbing' : 'grab') : 'default'};\n transition: ${props => props.$isDragging ? 'none' : 'transform 0.2s ease'};\n user-select: none;\n -webkit-user-drag: none;\n`;\n\nconst BottomControls = styled.div`\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n gap: 8px;\n align-items: center;\n`;\n\nconst ZoomControls = styled.div`\n display: flex;\n gap: 4px;\n align-items: center;\n background: var(--color-background);\n backdrop-filter: blur(20px);\n border: 1px solid var(--color-border);\n border-radius: 12px;\n padding: 4px;\n box-shadow: 0 10px 25px -5px var(--color-shadow);\n`;\n\nconst ZoomLevel = styled.span`\n min-width: 60px;\n text-align: center;\n font-size: 12px;\n font-weight: 400;\n color: var(--color-foreground);\n padding: 0 8px;\n`;\n\nconst MessageImage = styled.div`\n height: 125px;\n width: auto;\n min-width: 125px;\n max-width: 250px;\n border-radius: 8px;\n border: 1px solid var(--color-border);\n overflow: hidden;\n background-color: var(--color-background-subtle);\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n transform: scale(1.02);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n\n img {\n height: 100%;\n width: auto;\n max-width: 100%;\n object-fit: cover;\n }\n\n .expand-icon {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 24px;\n height: 24px;\n background: rgba(0, 0, 0, 0.6);\n backdrop-filter: blur(4px);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n\n &:hover .expand-icon {\n opacity: 1;\n }\n`;\n\ninterface ImagePreviewPortalProps {\n isOpen: boolean;\n imageUrl: string | null;\n zoomLevel: number;\n dragPosition: { x: number; y: number };\n isDragging: boolean;\n onClose: () => void;\n onDownload: () => void;\n onZoom: (delta: number) => void;\n onReset: () => void;\n onWheel: (e: React.WheelEvent) => void;\n onMouseDown: (e: React.MouseEvent) => void;\n onMouseMove: (e: React.MouseEvent) => void;\n onMouseUp: () => void;\n}\n\nconst ImagePreviewPortal: React.FC<ImagePreviewPortalProps> = ({\n isOpen,\n imageUrl,\n zoomLevel,\n dragPosition,\n isDragging,\n onClose,\n onDownload,\n onZoom,\n onReset,\n onWheel,\n onMouseDown,\n onMouseMove,\n onMouseUp,\n}) => {\n const [mounted, setMounted] = useState(false);\n const modalRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n const originalStyle = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const handleWheel = (e: WheelEvent) => {\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault();\n }\n };\n\n const handleGestureStart = (e: Event) => {\n e.preventDefault();\n };\n\n const handleGestureChange = (e: Event) => {\n e.preventDefault();\n };\n\n document.addEventListener('wheel', handleWheel, { passive: false });\n document.addEventListener('gesturestart', handleGestureStart, { passive: false });\n document.addEventListener('gesturechange', handleGestureChange, { passive: false });\n\n return () => {\n document.body.style.overflow = originalStyle;\n document.removeEventListener('wheel', handleWheel);\n document.removeEventListener('gesturestart', handleGestureStart);\n document.removeEventListener('gesturechange', handleGestureChange);\n };\n }\n }, [isOpen]);\n\n if (!mounted || !isOpen || !imageUrl) return null;\n\n return ReactDOM.createPortal(\n <DefaultStylesProvider>\n <ImageModal\n ref={modalRef}\n $isOpen={true}\n onClick={(e) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n }}\n >\n <ModalContent\n onClick={(e) => e.stopPropagation()}\n onWheel={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onWheel(e);\n }}\n onMouseMove={onMouseMove}\n onMouseUp={onMouseUp}\n onMouseLeave={onMouseUp}\n >\n <ZoomedImage\n src={imageUrl}\n alt=\"Preview\"\n $zoom={zoomLevel}\n $x={dragPosition.x}\n $y={dragPosition.y}\n $isDragging={isDragging}\n onMouseDown={onMouseDown}\n draggable={false}\n />\n <IconButton\n $variant=\"ghost\"\n onClick={onClose}\n title=\"Close\"\n style={{\n position: 'absolute',\n top: '16px',\n right: '16px',\n background: 'var(--color-background)',\n border: '1px solid var(--color-border)',\n }}\n >\n <X size={14} />\n </IconButton>\n <BottomControls>\n <ZoomControls>\n <IconButton\n $variant=\"ghost\"\n onClick={() => onZoom(-0.25)}\n title=\"Zoom out\"\n disabled={zoomLevel <= 0.5}\n >\n <ZoomOut size={14} />\n </IconButton>\n <ZoomLevel>\n {Math.round(zoomLevel * 100)}%\n </ZoomLevel>\n <IconButton\n $variant=\"ghost\"\n onClick={() => onZoom(0.25)}\n title=\"Zoom in\"\n disabled={zoomLevel >= 3}\n >\n <ZoomIn size={14} />\n </IconButton>\n <IconButton\n $variant=\"ghost\"\n onClick={onReset}\n title=\"Reset zoom\"\n >\n <Maximize2 size={14} />\n </IconButton>\n </ZoomControls>\n <ModalButton\n $variant=\"primary\"\n onClick={onDownload}\n title=\"Download image\"\n >\n <Download size={14} />\n Download\n </ModalButton>\n </BottomControls>\n </ModalContent>\n </ImageModal>\n </DefaultStylesProvider>,\n document.body\n );\n};\n\nexport interface AgentConversationProps {\n showBackButton?: boolean;\n onBack?: () => void;\n}\n\nexport function AgentConversation({\n showBackButton = false,\n onBack,\n}: AgentConversationProps) {\n const {\n agentName,\n token,\n platformAdapter,\n selectedSession,\n selectSession,\n } = useAgentConversationContext();\n\n const contextId = selectedSession?.id;\n\n if (!contextId) {\n return (\n <DefaultStylesProvider style={{ height: \"100%\", width: \"100%\" }}>\n <ChatContainer>\n <EmptyState>\n <Bot size={48} strokeWidth={1.5} />\n <p>No conversation selected</p>\n </EmptyState>\n </ChatContainer>\n </DefaultStylesProvider>\n );\n }\n\n const autoConnect = true;\n const showEmptyState = true;\n const emptyStateMessage = \"Start a conversation by typing a message below\";\n const [input, setInput] = useState(\"\");\n const [isHoveringCancel, setIsHoveringCancel] = useState(false);\n const [activeInputRequest, setActiveInputRequest] =\n useState<UserInputRequest | null>(null);\n const [selectedOptions, setSelectedOptions] = useState<string[]>([]);\n const [uploadedImages, setUploadedImages] = useState<ImageData[]>([]);\n const [previewImage, setPreviewImage] = useState<string | null>(null);\n const [zoomLevel, setZoomLevel] = useState(1);\n const [isDragging, setIsDragging] = useState(false);\n const [dragPosition, setDragPosition] = useState({ x: 0, y: 0 });\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const {\n messages,\n pendingMessage,\n pendingImages,\n connectionState,\n isConnected,\n isExecuting,\n executionStatus,\n isWaitingForInput,\n sendMessage,\n submitUserInput,\n cancelExecution,\n } = useAgentConversation({\n contextId,\n agentName,\n token,\n platformAdapter,\n autoConnect,\n });\n\n // Auto-scroll to bottom\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\n }, [messages]);\n\n // Track active input request\n useEffect(() => {\n if (isWaitingForInput) {\n // Find the most recent user input request\n const inputRequest = messages\n .slice()\n .reverse()\n .find((msg) => msg.metadata?.type === \"user_input_request\");\n\n if (inputRequest?.metadata?.userInputRequest) {\n setActiveInputRequest(inputRequest.metadata.userInputRequest);\n }\n } else {\n setActiveInputRequest(null);\n setSelectedOptions([]);\n }\n }, [isWaitingForInput, messages]);\n\n const handleSend = (e: React.FormEvent) => {\n e.preventDefault();\n if (!isConnected) return;\n\n // If waiting for input, submit based on input type\n if (isWaitingForInput && activeInputRequest) {\n let value = input.trim();\n\n // For multiselect, use selectedOptions\n if (activeInputRequest.input_type === \"multiselect\") {\n value = selectedOptions.join(\",\");\n }\n\n // Only proceed if we have a value\n if (value) {\n submitUserInput(value);\n setInput(\"\");\n setSelectedOptions([]);\n }\n } else if (!isExecuting && input.trim()) {\n sendMessage(\n input,\n uploadedImages.length > 0 ? uploadedImages : undefined,\n );\n setInput(\"\");\n setUploadedImages([]); // Clear immediately after sending\n }\n };\n\n const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (!files) return;\n\n Array.from(files).forEach((file) => {\n if (file.type.startsWith(\"image/\")) {\n const reader = new FileReader();\n reader.onload = (event) => {\n if (event.target?.result) {\n const base64 = event.target.result as string;\n const base64Data = base64.split(\",\")[1]; // Remove data:image/jpeg;base64, prefix\n setUploadedImages((prev) => [\n ...prev,\n {\n mime_type: file.type,\n data: base64Data,\n },\n ]);\n }\n };\n reader.readAsDataURL(file);\n }\n });\n\n // Reset file input\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n\n const removeImage = (index: number) => {\n setUploadedImages((prev) => prev.filter((_, i) => i !== index));\n };\n\n const openImagePreview = (imageUrl: string) => {\n setPreviewImage(imageUrl);\n setZoomLevel(1);\n setDragPosition({ x: 0, y: 0 });\n };\n\n const closeImagePreview = () => {\n setPreviewImage(null);\n setZoomLevel(1);\n setDragPosition({ x: 0, y: 0 });\n setIsDragging(false);\n };\n\n const downloadImage = (imageUrl: string) => {\n const link = document.createElement('a');\n link.href = imageUrl;\n link.download = `image-${Date.now()}.png`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n\n const handleZoom = (delta: number) => {\n setZoomLevel(prev => {\n const newZoom = prev + delta;\n return Math.min(Math.max(newZoom, 0.5), 3); // Min 50%, Max 300%\n });\n };\n\n const handleWheel = (e: React.WheelEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const delta = e.deltaY > 0 ? -0.1 : 0.1;\n handleZoom(delta);\n };\n\n const handleMouseDown = (e: React.MouseEvent) => {\n if (zoomLevel > 1) {\n setIsDragging(true);\n setDragStart({\n x: e.clientX - dragPosition.x,\n y: e.clientY - dragPosition.y\n });\n }\n };\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (isDragging && zoomLevel > 1) {\n setDragPosition({\n x: e.clientX - dragStart.x,\n y: e.clientY - dragStart.y\n });\n }\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n };\n\n const getStatusText = () => {\n if (connectionState.status === CONNECTION_STATES.CONNECTING)\n return \"Connecting...\";\n if (connectionState.status === CONNECTION_STATES.ERROR)\n return \"Connection error\";\n if (connectionState.status === CONNECTION_STATES.DISCONNECTED)\n return \"Disconnected\";\n if (!isConnected) return \"Disconnected\";\n if (isWaitingForInput) return \"Waiting for your input...\";\n if (isExecuting) return \"Working...\";\n return \"Ready\";\n };\n\n const getInputPlaceholder = () => {\n if (!isWaitingForInput || !activeInputRequest) return \"Ask anything\";\n\n switch (activeInputRequest.input_type) {\n case \"select\":\n case \"boolean\":\n case \"date\":\n return \"Use controls above to make selection\";\n case \"multiselect\":\n return \"Select options above\";\n default:\n return \"Enter your response...\";\n }\n };\n\n const shouldDisableTextInput = () => {\n if (!isWaitingForInput || !activeInputRequest) return false;\n\n const nonTextTypes = [\"select\", \"multiselect\", \"boolean\", \"date\"];\n return nonTextTypes.includes(activeInputRequest.input_type || \"\");\n };\n\n return (\n <DefaultStylesProvider\n style={{ height: \"100%\", width: \"100%\" }}\n >\n <ChatContainer>\n <ChatHeader>\n <HeaderLeft>\n {showBackButton && (\n <BackButton onClick={() => {\n if (onBack) {\n onBack();\n } else {\n selectSession(null);\n }\n }}>\n <ChevronLeft size={20} />\n </BackButton>\n )}\n <AgentInfo>\n <AgentAvatar>\n <Bot size={20} />\n </AgentAvatar>\n <AgentDetails>\n <AgentName>{agentName}</AgentName>\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <StatusIndicator $status={getStatusText()} />\n <StatusText $status={getStatusText()}>\n {getStatusText()}\n </StatusText>\n </div>\n </AgentDetails>\n </AgentInfo>\n </HeaderLeft>\n {executionStatus !== FRONTEND_STATUS.IDLE && (\n <StatusBadge $status={executionStatus}>\n {executionStatus.replace(\"_\", \" \")}\n </StatusBadge>\n )}\n </ChatHeader>\n\n <MessagesContainer>\n {messages.length === 0 && showEmptyState ? (\n <EmptyState>\n <Bot size={48} strokeWidth={1.5} />\n <p>{emptyStateMessage}</p>\n </EmptyState>\n ) : (\n <>\n {messages.map((message, index) => {\n // Render user input request as a special message\n if (\n message.metadata?.type === \"user_input_request\" &&\n message.metadata.userInputRequest\n ) {\n const request = message.metadata.userInputRequest;\n const isTextInput =\n !request.input_type ||\n request.input_type === \"text\" ||\n request.input_type === \"number\";\n const isActiveRequest =\n isWaitingForInput &&\n activeInputRequest?.input_type === request.input_type;\n\n return (\n <MessageWrapper key={message.id} $isUser={false}>\n <UserInputRequestContainer>\n <div className=\"question\">{request.question}</div>\n {request.context && request.context.trim() && (\n <div className=\"context\">{request.context}</div>\n )}\n\n {/* Show inline controls for non-text inputs */}\n {!isTextInput && (\n <div className=\"controls\">\n {request.input_type === \"select\" &&\n request.options && (\n <select\n value={isActiveRequest ? input : \"\"}\n onChange={(e) => setInput(e.target.value)}\n disabled={!isActiveRequest}\n >\n <option value=\"\">Choose an option...</option>\n {request.options.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n )}\n\n {request.input_type === \"multiselect\" &&\n request.options && (\n <div className=\"checkbox-group\">\n {request.options.map((opt) => (\n <label key={opt} className=\"checkbox-label\">\n <input\n type=\"checkbox\"\n checked={\n isActiveRequest &&\n selectedOptions.includes(opt)\n }\n onChange={(e) => {\n if (e.target.checked) {\n setSelectedOptions([\n ...selectedOptions,\n opt,\n ]);\n } else {\n setSelectedOptions(\n selectedOptions.filter(\n (o) => o !== opt,\n ),\n );\n }\n }}\n disabled={!isActiveRequest}\n />\n <span>{opt}</span>\n </label>\n ))}\n </div>\n )}\n\n {request.input_type === \"boolean\" && (\n <div className=\"radio-group\">\n <label className=\"radio-label\">\n <input\n type=\"radio\"\n name=\"boolean\"\n value=\"true\"\n checked={\n isActiveRequest && input === \"true\"\n }\n onChange={(e) => setInput(e.target.value)}\n disabled={!isActiveRequest}\n />\n <span>Yes</span>\n </label>\n <label className=\"radio-label\">\n <input\n type=\"radio\"\n name=\"boolean\"\n value=\"false\"\n checked={\n isActiveRequest && input === \"false\"\n }\n onChange={(e) => setInput(e.target.value)}\n disabled={!isActiveRequest}\n />\n <span>No</span>\n </label>\n </div>\n )}\n\n {request.input_type === \"date\" && (\n <input\n type=\"date\"\n value={isActiveRequest ? input : \"\"}\n onChange={(e) => setInput(e.target.value)}\n disabled={!isActiveRequest}\n />\n )}\n </div>\n )}\n\n {/* Show instruction based on input type */}\n <div className=\"instruction\">\n {!isActiveRequest\n ? \"\"\n : isTextInput\n ? \"Type your response below\"\n : request.input_type === \"multiselect\"\n ? \"Select options above and click send\"\n : \"Make your selection above and click send\"}\n </div>\n </UserInputRequestContainer>\n </MessageWrapper>\n );\n }\n\n // Render log messages\n if (message.metadata?.type === \"log\") {\n // Check if previous and next messages are also logs\n const prevMessage = messages[index - 1];\n const nextMessage = messages[index + 1];\n const isPrevLog = prevMessage?.metadata?.type === \"log\";\n const isNextLog = nextMessage?.metadata?.type === \"log\";\n\n const isGrouped = isPrevLog || isNextLog;\n const isFirstInGroup = !isPrevLog && isNextLog;\n const isLastInGroup = isPrevLog && !isNextLog;\n\n return (\n <LogMessage\n key={message.id}\n $isGrouped={isGrouped}\n $isFirstInGroup={isFirstInGroup}\n $isLastInGroup={isLastInGroup}\n >\n <div className=\"log-content\">{message.content}</div>\n </LogMessage>\n );\n }\n\n // Render regular messages - only if they have content or images\n if (!message.content && (!message.images || message.images.length === 0)) {\n return null;\n }\n\n return (\n <MessageWrapper\n key={message.id}\n $isUser={message.role === \"user\"}\n >\n <Message $isUser={message.role === \"user\"}>\n <div>{message.content}</div>\n {message.images && message.images.length > 0 && (\n <div\n style={{\n display: \"flex\",\n gap: \"8px\",\n marginTop: \"8px\",\n flexWrap: \"wrap\",\n }}\n >\n {message.images.map((img, imgIndex) => {\n const imageUrl = img.url || `data:${img.mime_type};base64,${img.data}`;\n return (\n <MessageImage\n key={imgIndex}\n onClick={() => openImagePreview(imageUrl)}\n title=\"Click to preview\"\n >\n <img\n src={imageUrl}\n alt={`Image ${imgIndex + 1}`}\n loading=\"lazy\"\n />\n <div className=\"expand-icon\">\n <Expand size={14} />\n </div>\n </MessageImage>\n );\n })}\n </div>\n )}\n {message.isStreaming && <StreamingIndicator />}\n </Message>\n </MessageWrapper>\n );\n })}\n\n {/* Show pending message at the bottom */}\n {pendingMessage && (\n <MessageWrapper $isUser={true}>\n <PendingMessage $isUser={true}>\n <div>{pendingMessage}</div>\n {pendingImages && pendingImages.length > 0 && (\n <div\n style={{\n display: \"flex\",\n gap: \"8px\",\n marginTop: \"8px\",\n flexWrap: \"wrap\",\n }}\n >\n {pendingImages.map((img, imgIndex) => (\n <div\n key={imgIndex}\n style={{\n width: \"200px\",\n height: \"200px\",\n borderRadius: \"8px\",\n border: \"1px solid var(--color-border)\",\n overflow: \"hidden\",\n backgroundColor: \"var(--color-background-subtle)\",\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <img\n src={\n img.data\n ? `data:${img.mime_type};base64,${img.data}`\n : \"#\"\n }\n alt={`Image ${imgIndex + 1}`}\n style={{\n maxWidth: \"100%\",\n maxHeight: \"100%\",\n width: \"auto\",\n height: \"auto\",\n objectFit: \"contain\",\n }}\n loading=\"lazy\"\n />\n </div>\n ))}\n </div>\n )}\n </PendingMessage>\n </MessageWrapper>\n )}\n\n <div ref={messagesEndRef} />\n </>\n )}\n </MessagesContainer>\n\n {uploadedImages.length > 0 && (\n <ImagePreviewContainer>\n {uploadedImages.map((img, index) => (\n <ImagePreview key={index}>\n <img\n src={\n img.data ? `data:${img.mime_type};base64,${img.data}` : \"#\"\n }\n alt={`Upload ${index + 1}`}\n />\n <RemoveImageButton\n type=\"button\"\n onClick={() => removeImage(index)}\n >\n <X size={12} />\n </RemoveImageButton>\n </ImagePreview>\n ))}\n </ImagePreviewContainer>\n )}\n\n <InputForm onSubmit={handleSend}>\n <InputContainer>\n <InputWrapper>\n <MessageInput\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSend(e);\n }\n }}\n placeholder={getInputPlaceholder()}\n disabled={\n !isConnected ||\n (isExecuting && !isWaitingForInput) ||\n shouldDisableTextInput()\n }\n rows={1}\n />\n <ActionButtons>\n <ActionButton\n type=\"button\"\n disabled={!isConnected || isExecuting}\n onClick={() => fileInputRef.current?.click()}\n >\n <Paperclip size={16} />\n Attach\n </ActionButton>\n {/* Audio recording - commented out for now\n <ActionButton\n type=\"button\"\n disabled={!isConnected || isExecuting}\n >\n <Mic size={16} />\n Record\n </ActionButton>\n */}\n </ActionButtons>\n <HiddenFileInput\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n multiple\n onChange={handleFileSelect}\n />\n </InputWrapper>\n <SendButton\n type={isExecuting ? \"button\" : \"submit\"}\n disabled={\n !isConnected ||\n (!isWaitingForInput && !isExecuting && !input.trim())\n }\n onClick={isExecuting ? cancelExecution : undefined}\n onMouseEnter={() => setIsHoveringCancel(true)}\n onMouseLeave={() => setIsHoveringCancel(false)}\n style={{\n background:\n isExecuting && isHoveringCancel\n ? \"var(--color-error)\"\n : undefined,\n }}\n >\n {isExecuting ? (\n isHoveringCancel ? (\n <X size={14} />\n ) : (\n <Loader2 size={14} className=\"animate-spin\" />\n )\n ) : (\n <Send size={14} />\n )}\n </SendButton>\n </InputContainer>\n </InputForm>\n </ChatContainer>\n\n <ImagePreviewPortal\n isOpen={!!previewImage}\n imageUrl={previewImage}\n zoomLevel={zoomLevel}\n dragPosition={dragPosition}\n isDragging={isDragging}\n onClose={closeImagePreview}\n onDownload={() => previewImage && downloadImage(previewImage)}\n onZoom={handleZoom}\n onReset={() => {\n setZoomLevel(1);\n setDragPosition({ x: 0, y: 0 });\n }}\n onWheel={handleWheel}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n />\n </DefaultStylesProvider>\n );\n}\n","import { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { ChevronLeft, MessageCircle, Trash2 } from \"lucide-react\";\nimport { useAgentConversationContext } from \"../../context/agent-conversation-provider\";\nimport { ConversationSession } from \"../../hooks/use-conversation-sessions\";\nimport { DefaultStylesProvider } from \"../utility/root\";\n\ninterface AgentConversationHistoryProps {\n showBackButton?: boolean;\n}\n\nconst Container = styled.div`\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--color-background);\n`;\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-lg);\n border-bottom: 1px solid var(--color-border);\n`;\n\nconst BackButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--color-foreground);\n cursor: pointer;\n border-radius: var(--radius-md);\n transition: background 0.2s;\n\n &:hover {\n background: var(--color-background-hover);\n }\n`;\n\nconst Title = styled.h1`\n flex: 1;\n margin: 0;\n font-size: var(--font-lg);\n font-weight: 400;\n color: var(--color-foreground);\n`;\n\nconst SearchContainer = styled.div`\n padding: var(--space-lg);\n border-bottom: 1px solid var(--color-border);\n`;\n\nconst SearchInput = styled.input`\n width: 100%;\n padding: var(--space-sm) var(--space-md);\n background: var(--color-background-subtle);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n font-size: var(--font-sm);\n color: var(--color-foreground);\n transition: all 0.2s;\n\n &::placeholder {\n color: var(--color-secondary-text);\n }\n\n &:focus {\n outline: none;\n border-color: var(--color-primary);\n background: var(--color-background);\n }\n`;\n\nconst SessionsList = styled.div`\n flex: 1;\n overflow-y: auto;\n padding: var(--space-lg);\n`;\n\nconst SessionGroup = styled.div`\n margin-bottom: var(--space-xl);\n`;\n\nconst GroupTitle = styled.h3`\n font-size: var(--font-xs);\n font-weight: 400;\n color: var(--color-muted);\n margin: 0 0 var(--space-sm) 0;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n`;\n\nconst SessionItem = styled.div`\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-md);\n margin-bottom: var(--space-xs);\n background: var(--color-surface, var(--color-background));\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all 0.15s;\n\n &:hover {\n background: var(--color-surface-hover, var(--color-background-hover));\n border-color: var(--color-border-hover, var(--color-border));\n }\n`;\n\nconst SessionIcon = styled.div`\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-background-subtle);\n border-radius: var(--radius-md);\n color: var(--color-secondary-text);\n`;\n\nconst SessionContent = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nconst SessionTitle = styled.div`\n font-size: var(--font-sm);\n font-weight: 400;\n color: var(--color-foreground);\n margin-bottom: var(--space-2xs);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst SessionMeta = styled.div`\n font-size: var(--font-2xs);\n color: var(--color-secondary-text);\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n`;\n\nconst StatusBadge = styled.span<{ $status: string }>`\n display: inline-block;\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 400;\n background: ${props => {\n switch(props.$status) {\n case 'running': return 'var(--color-success-bg)';\n case 'waiting_for_input': return 'var(--color-warning-bg)';\n case 'failed': return 'var(--color-error-bg)';\n default: return 'var(--color-background-subtle)';\n }\n }};\n color: ${props => {\n switch(props.$status) {\n case 'running': return 'var(--color-success)';\n case 'waiting_for_input': return 'var(--color-warning)';\n case 'failed': return 'var(--color-error)';\n default: return 'var(--color-secondary-text)';\n }\n }};\n`;\n\nconst DeleteButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--color-secondary-text);\n cursor: pointer;\n border-radius: var(--radius-sm);\n transition: all 0.2s;\n\n &:hover {\n background: var(--color-error-bg);\n color: var(--color-error);\n }\n`;\n\nconst EmptyState = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: var(--space-2xl);\n color: var(--color-secondary-text);\n text-align: center;\n\n svg {\n width: 48px;\n height: 48px;\n margin-bottom: var(--space-md);\n opacity: 0.5;\n }\n`;\n\nconst LoadingState = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n`;\n\nconst SkeletonCard = styled.div`\n display: flex;\n align-items: center;\n gap: var(--space-md);\n padding: var(--space-md);\n margin-bottom: var(--space-xs);\n background: var(--color-surface, var(--color-background));\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n animation: pulse 1.5s ease-in-out infinite;\n\n @keyframes pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n }\n`;\n\nconst SkeletonIcon = styled.div`\n width: 36px;\n height: 36px;\n background: var(--color-border);\n border-radius: var(--radius-md);\n`;\n\nconst SkeletonContent = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n`;\n\nconst SkeletonTitle = styled.div`\n height: 14px;\n width: 60%;\n background: var(--color-border);\n border-radius: var(--radius-sm);\n`;\n\nconst SkeletonMeta = styled.div`\n height: 12px;\n width: 30%;\n background: var(--color-border);\n border-radius: var(--radius-sm);\n opacity: 0.6;\n`;\n\nexport function AgentConversationHistory({\n showBackButton = false,\n}: AgentConversationHistoryProps) {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const {\n sessions,\n loadingSessions: loading,\n selectSession,\n deleteSession,\n setShowHistory,\n } = useAgentConversationContext();\n\n const filteredSessions = sessions.filter(session =>\n session.title.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n const groupSessionsByDate = (sessions: ConversationSession[]) => {\n const groups: { [key: string]: ConversationSession[] } = {};\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n const lastWeek = new Date(today);\n lastWeek.setDate(lastWeek.getDate() - 7);\n\n sessions.forEach(session => {\n const sessionDate = new Date(session.last_activity_at);\n let groupKey: string;\n\n if (sessionDate >= today) {\n groupKey = \"Today\";\n } else if (sessionDate >= yesterday) {\n groupKey = \"Yesterday\";\n } else if (sessionDate >= lastWeek) {\n groupKey = \"This Week\";\n } else {\n groupKey = \"Older\";\n }\n\n if (!groups[groupKey]) {\n groups[groupKey] = [];\n }\n groups[groupKey].push(session);\n });\n\n return groups;\n };\n\n const handleDeleteSession = async (e: React.MouseEvent, sessionId: string) => {\n e.stopPropagation();\n if (confirm(\"Are you sure you want to delete this conversation?\")) {\n try {\n await deleteSession(sessionId);\n } catch (error) {\n console.error(\"Failed to delete session:\", error);\n }\n }\n };\n\n const formatTime = (dateString: string) => {\n const date = new Date(dateString);\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n };\n\n const sessionGroups = groupSessionsByDate(filteredSessions);\n\n return (\n <DefaultStylesProvider style={{ height: \"100%\", width: \"100%\" }}>\n <Container>\n <Header>\n {showBackButton && (\n <BackButton onClick={() => setShowHistory(false)}>\n <ChevronLeft size={20} />\n </BackButton>\n )}\n <Title>Conversation History</Title>\n </Header>\n\n <SearchContainer>\n <SearchInput\n type=\"text\"\n placeholder=\"Search conversations...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </SearchContainer>\n\n <SessionsList>\n {loading ? (\n <LoadingState>\n {[1, 2, 3, 4, 5].map((i) => (\n <SkeletonCard key={i}>\n <SkeletonIcon />\n <SkeletonContent>\n <SkeletonTitle />\n <SkeletonMeta />\n </SkeletonContent>\n </SkeletonCard>\n ))}\n </LoadingState>\n ) : filteredSessions.length === 0 ? (\n <EmptyState>\n <MessageCircle />\n <div>No conversations found</div>\n {searchQuery && (\n <div style={{ fontSize: 'var(--font-xs)', marginTop: 'var(--space-sm)' }}>\n Try a different search term\n </div>\n )}\n </EmptyState>\n ) : (\n Object.entries(sessionGroups).map(([group, groupSessions]) => (\n <SessionGroup key={group}>\n <GroupTitle>{group}</GroupTitle>\n {groupSessions.map(session => (\n <SessionItem\n key={session.id}\n onClick={() => selectSession(session)}\n >\n <SessionIcon>\n <MessageCircle size={18} />\n </SessionIcon>\n <SessionContent>\n <SessionTitle>{session.title}</SessionTitle>\n <SessionMeta>\n <span>{formatTime(session.last_activity_at)}</span>\n {session.status !== 'idle' && (\n <StatusBadge $status={session.status}>\n {session.status.replace('_', ' ')}\n </StatusBadge>\n )}\n </SessionMeta>\n </SessionContent>\n <DeleteButton\n onClick={(e) => handleDeleteSession(e, session.id)}\n >\n <Trash2 size={16} />\n </DeleteButton>\n </SessionItem>\n ))}\n </SessionGroup>\n ))\n )}\n </SessionsList>\n </Container>\n </DefaultStylesProvider>\n );\n}","import { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { DefaultStylesProvider } from \"../utility/root\";\nimport { AgentConversation } from \"./agent-conversation\";\nimport { AgentConversationHistory } from \"./agent-conversation-history\";\nimport { useAgentConversationContext } from \"../../context/agent-conversation-provider\";\n\nconst Container = styled.div`\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--color-background);\n`;\n\nconst HomeScreen = styled.div`\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: var(--space-2xl);\n overflow: auto;\n`;\n\nconst WelcomeIcon = styled.div`\n width: 56px;\n height: 56px;\n margin-bottom: var(--space-lg);\n\n svg {\n width: 100%;\n height: 100%;\n color: var(--color-secondary-text);\n opacity: 0.6;\n }\n`;\n\nconst WelcomeTitle = styled.h2`\n font-size: var(--font-lg);\n font-weight: 400;\n color: var(--color-foreground);\n margin: 0 0 var(--space-sm) 0;\n text-align: center;\n`;\n\nconst WelcomeSubtitle = styled.p`\n font-size: var(--font-sm);\n color: var(--color-secondary-text);\n margin: 0 0 var(--space-xl) 0;\n text-align: center;\n`;\n\nconst StartButton = styled.button`\n background: var(--color-primary);\n color: white;\n border: none;\n border-radius: var(--radius-lg);\n padding: var(--space-md) var(--space-xl);\n font-size: var(--font-sm);\n font-weight: 400;\n cursor: pointer;\n transition: all 0.2s;\n position: relative;\n overflow: hidden;\n\n &:hover:not(:disabled) {\n background: var(--color-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n &:active {\n transform: translateY(0);\n }\n\n &:disabled {\n opacity: 0.8;\n cursor: not-allowed;\n animation: pulse 1.5s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 0.8;\n }\n 50% {\n opacity: 0.6;\n }\n }\n`;\n\nconst LoadingDots = styled.span`\n &::after {\n content: \".\";\n animation: dots 1.5s steps(3, end) infinite;\n }\n\n @keyframes dots {\n 0%,\n 20% {\n content: \".\";\n }\n 40% {\n content: \"..\";\n }\n 60%,\n 100% {\n content: \"...\";\n }\n }\n`;\n\nconst SessionCard = styled.div`\n width: 100%;\n padding: var(--space-md);\n background: var(--color-surface, var(--color-background));\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all 0.15s;\n display: flex;\n flex-direction: column;\n\n &:hover {\n background: var(--color-surface-hover, var(--color-background-hover));\n border-color: var(--color-border-hover, var(--color-border));\n }\n`;\n\nconst SessionCardTitle = styled.div`\n font-size: var(--font-sm);\n font-weight: 400;\n color: var(--color-foreground);\n margin-bottom: var(--space-2xs);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst SessionCardMeta = styled.div`\n font-size: var(--font-2xs);\n color: var(--color-secondary-text);\n display: flex;\n align-items: center;\n gap: var(--space-xs);\n`;\n\nconst SessionCardContent = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nconst RecentSessions = styled.div`\n width: 100%;\n max-width: 320px;\n margin-top: var(--space-2xl);\n padding-top: var(--space-2xl);\n border-top: 1px solid var(--color-border);\n`;\n\nconst RecentHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: var(--space-md);\n`;\n\nconst RecentTitle = styled.h3`\n font-size: var(--font-xs);\n font-weight: 400;\n color: var(--color-muted);\n margin: 0;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n`;\n\nconst HistoryLink = styled.button`\n background: transparent;\n border: none;\n color: var(--color-primary);\n font-size: var(--font-xs);\n cursor: pointer;\n padding: 0;\n transition: opacity 0.2s;\n\n &:hover {\n opacity: 0.8;\n }\n`;\n\nconst SessionList = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n`;\n\nexport function AgentConversationHub() {\n const [createLoading, setCreateLoading] = useState(false);\n\n const {\n sessions,\n selectedSession,\n showHistory,\n selectSession,\n createSession,\n setShowHistory,\n } = useAgentConversationContext();\n\n const handleStartNewConversation = async () => {\n try {\n setCreateLoading(true);\n await createSession();\n } finally {\n setCreateLoading(false);\n }\n };\n\n const formatTimeAgo = (dateString: string) => {\n try {\n const date = new Date(dateString);\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (days > 0) return `${days}d ago`;\n if (hours > 0) return `${hours}h ago`;\n if (minutes > 0) return `${minutes}m ago`;\n return \"Just now\";\n } catch {\n return \"\";\n }\n };\n\n if (showHistory) {\n return <AgentConversationHistory showBackButton={true} />;\n }\n\n if (selectedSession) {\n return <AgentConversation showBackButton={true} />;\n }\n\n return (\n <DefaultStylesProvider style={{ height: \"100%\", width: \"100%\" }}>\n <Container>\n <HomeScreen>\n <WelcomeIcon>\n <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\"\n />\n </svg>\n </WelcomeIcon>\n\n <WelcomeTitle>Hi there! 👋</WelcomeTitle>\n <WelcomeSubtitle>How can I help you today?</WelcomeSubtitle>\n\n <StartButton\n onClick={handleStartNewConversation}\n disabled={createLoading}\n >\n {createLoading ? (\n <>\n Starting\n <LoadingDots />\n </>\n ) : (\n \"Start a conversation\"\n )}\n </StartButton>\n\n {sessions.length > 0 && (\n <RecentSessions>\n <RecentHeader>\n <RecentTitle>Recent Chats</RecentTitle>\n <HistoryLink onClick={() => setShowHistory(true)}>\n View All →\n </HistoryLink>\n </RecentHeader>\n\n <SessionList>\n {sessions.slice(0, 2).map((session) => (\n <SessionCard\n key={session.id}\n onClick={() => selectSession(session)}\n >\n <SessionCardContent>\n <SessionCardTitle>{session.title}</SessionCardTitle>\n <SessionCardMeta>\n <span>{formatTimeAgo(session.last_activity_at)}</span>\n {session.status === \"running\" && <span>• Active</span>}\n </SessionCardMeta>\n </SessionCardContent>\n </SessionCard>\n ))}\n </SessionList>\n </RecentSessions>\n )}\n </HomeScreen>\n </Container>\n </DefaultStylesProvider>\n );\n}\n","export const isExternalUrl = (url: string): boolean => {\n // Normalize URL for case-insensitive comparison\n const normalizedUrl = url.toLowerCase().trim();\n\n // Check for dangerous protocols first\n const dangerousProtocols = [\"javascript:\", \"data:\", \"vbscript:\"];\n if (\n dangerousProtocols.some((protocol) => normalizedUrl.startsWith(protocol))\n ) {\n // Blocked navigation to dangerous URL\n return true; // Treat as external to prevent router handling\n }\n\n const externalProtocols = [\n \"http://\",\n \"https://\",\n \"//\",\n \"ftp://\",\n \"ftps://\",\n \"mailto:\",\n \"tel:\",\n \"sms:\",\n \"file:\",\n \"blob:\",\n ];\n\n return externalProtocols.some((protocol) =>\n normalizedUrl.startsWith(protocol),\n );\n};\n\nexport const isSafeUrl = (url: string): boolean => {\n const normalizedUrl = url.toLowerCase().trim();\n const dangerousProtocols = [\"javascript:\", \"data:\", \"vbscript:\"];\n return !dangerousProtocols.some((protocol) =>\n normalizedUrl.startsWith(protocol),\n );\n};\n"],"names":["DeploymentContext","createContext","DeploymentProvider","children","publicKey","adapter","loading","setLoading","useState","deployment","setDeployment","singletonLock","useRef","useEffect","initializeDeployment","_","mode","baseUrlBase64","baseUrl","staging","devSession","newUrl","opts","params","deploymentConfig","value","useMemo","jsx","useDeployment","context","useContext","useClient","sessionLoading","url","options","defaultOptions","getDefaultOptions","headers","key","backendUrl","response","React","require$$0","is","x","y","objectIs","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","_useState","inst","forceUpdate","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","didWarnOld18Alpha","didWarnUncachedGetSnapshot","cachedValue","useSyncExternalStoreShim_development","shimModule","require$$1","FOCUS_EVENT","RECONNECT_EVENT","MUTATE_EVENT","ERROR_REVALIDATE_EVENT","has","dequal","foo","bar","ctor","len","SWRGlobalState","noop","UNDEFINED","OBJECT","isUndefined","v","isFunction","mergeObjects","a","b","isPromiseLike","EMPTY_CACHE","INITIAL_CACHE","STR_UNDEFINED","isWindowDefined","isDocumentDefined","isLegacyDeno","hasRequestAnimationFrame","createCacheHelper","cache","state","info","prev","online","isOnline","onWindowEvent","offWindowEvent","isVisible","visibilityState","initFocus","callback","initReconnect","onOnline","onOffline","preset","defaultConfigOptions","IS_REACT_LEGACY","IS_SERVER","rAF","f","useIsomorphicLayoutEffect","navigatorConnection","slowConnection","table","getTypeName","isObjectTypeName","typeName","type","counter","stableHash","arg","isDate","isRegex","isPlainObject","result","index","keys","serialize","args","__timestamp","getTimestamp","internalMutate","_key","_data","_opts","populateCache","rollbackOnErrorOption","optimisticData","rollbackOnError","error","throwOnError","keyFilter","matchedKeys","it","mutateByKey","_k","get","set","EVENT_REVALIDATORS","MUTATION","FETCH","PRELOAD","startRevalidate","revalidators","revalidateEvents.MUTATE_EVENT","data","isError","beforeMutationTs","hasOptimisticData","displayedData","currentData","committedData","err","populateCachedData","revalidateAllKeys","initCache","provider","mutate","unmount","subscriptions","subs","setter","fn","initProvider","releaseFocus","revalidateEvents.FOCUS_EVENT","releaseReconnect","revalidateEvents.RECONNECT_EVENT","onErrorRetry","__","config","revalidate","maxRetryCount","currentRetryCount","timeout","compare","defaultConfig","mergeConfigs","u1","f1","u2","f2","SWRConfigContext","INFINITE_PREFIX","enableDevtools","use","setupDevTools","normalize","useSWRConfig","middleware","useSWRNext","key_","fetcher_","req","BUILT_IN_MIDDLEWARE","withArgs","hook","fallbackConfig","_config","next","i","subscribeCallback","callbacks","keyedRevalidators","thenable","e","WITH_DEDUPE","useSWRHandler","fetcher","suspense","fallbackData","revalidateOnMount","revalidateIfStale","refreshInterval","refreshWhenHidden","refreshWhenOffline","keepPreviousData","fnArg","serialize$1","initialMountedRef","unmountedRef","keyRef","fetcherRef","configRef","getConfig","isActive","getCache","setCache","subscribeCache","getInitialCache","stateDependencies","fallback","isUndefined$1","UNDEFINED$1","isEqual","current","t","returnedData","shouldStartRequest","getSelectedCache","snapshot","cachedData","initialData","clientSnapshot","serverSnapshot","memorizedSnapshot","newSnapshot","cached","useSyncExternalStore","useCallback","isInitialMount","hasRevalidator","laggyDataRef","shouldDoInitialRevalidation","defaultValidatingState","isValidating","isLoading","revalidateOpts","currentFetcher","newData","startAt","shouldStartNewRequest","callbackSafeguard","finalState","finishRequestAndUpdateState","cleanupState","requestInfo","initialState","mutationInfo","cacheData","currentConfig","shouldRetryOnError","isFunction$1","revalidateEvents.ERROR_REVALIDATE_EVENT","boundMutate","softRevalidate","nextFocusRevalidatedAt","unsubEvents","now","timer","interval","execute","promise","useSWR","responseMapper","errorMessage","json","useConversationSessions","token","client","createSession","request","formData","parsed","deleteSession","id","session","AgentConversationContext","useAgentConversationContext","AgentConversationProvider","agentName","platformAdapter","defaultSessionId","onSessionCreated","onSessionDeleted","onError","selectedSession","setSelectedSession","showHistory","setShowHistory","sessions","loadingSessions","sessionError","createSessionApi","deleteSessionApi","refreshSessions","actualSession","s","selectSession","title","sessionTitle","newSession","sessionId","OAuthProvider","SignInStrategy","builder","setSignInAttempt","setError","functionMap","builderUsername","builderEmail","builderPhone","builderEmailOTP","builderMagicLink","builderOauth","builderGeneric","strategy","username","password","form","_b","_a","email","phone","redirectUri","useSignIn","signinAttempt","verificationCode","latestAttempt","_d","_c","useSignInWithStrategy","signIn","discardSignInAttempt","strategyFunction","signupAttempt","setSignUpAttempt","setErrors","useSignUp","setSignupAttempt","errors","useNavigation","platformNavigate","navigate","to","currentHost","fetchSession","switchSignIn","signInId","signOut","switchOrganization","organizationId","switchWorkspace","workspaceId","tokenSingletonMap","fetchSingleton","getSessionToken","template","useSession","refetch","getToken","existingToken","addNewAccount","signinLink","fetchUser","fetchUserSignins","useUser","user","updateProfile","getEmailAddresses","getEmailAddress","createEmailAddress","deleteEmailAddress","prepareEmailVerification","attemptEmailVerification","otp","createPhoneNumber","phone_number","country_code","deletePhoneNumber","preparePhoneVerification","attemptPhoneVerification","makePhonePrimary","makeEmailPrimary","setupAuthenticator","verifyAuthenticator","codes","code","deleteAuthenticator","generateBackupCodes","updateProfilePicture","file","regenerateBackupCodes","updatePassword","currentPassword","newPassword","removePassword","deleteAccount","disconnectSocialConnection","connectSocialAccount","useUserSignins","signins","ErrorCode","useWaitlist","clientLoading","joinWaitlist","errorResult","useOrganizationList","organizationMemberships","useOrganizationMemberships","refetchSession","getOrganizationRoles","organization","getOrganizationMembers","getOrganizationInvitations","getOrganizationDomains","removeOrganizationMember","member","createOrganization","updateOrganization","update","removeOrganizationRoles","role","addOrganizationDomain","domain","verifyOrganizationDomain","removeOrganizationDomain","addRole","newRole","permission","leaveOrganization","deleteOrganization","addRoleToOrganizationMember","removeRoleFromOrganizationMember","inviteOrganizationMember","invitation","discardOrganizationInvitation","resendOrganizationInvitation","membership","useActiveOrganization","organizationLoadingError","refetchOrganizations","sessionLoadingError","activeOrganization","updateActiveOrganization","getCurrentOrganizationMembers","getCurrentOrganizationRoles","removeCurrentOrganizationMember","removeActiveOrganizationRole","getCurrentOrganizationDomains","addDomainToActiveOrganization","verifyActiveOrganizationDomain","removeActiveOrganizationDomain","addRoleToCurrentOrganizationMember","removeRoleFromCurrentOrganizationMember","inviteMemberToOrganization","invitationPayload","discardInvitationToOrganization","resendInvitationToOrganization","leaveCurrentOrganization","getCurrentOrganizationInvitations","fetchOrganizationMemberships","fetchWorkspaceMemberships","leaveWorkspace","userId","useWorkspaceMemberships","swrLoading","useWorkspaceList","workspaceMemberships","workspaces","createWorkspace","name","image","description","leaveWorkspaceCallback","updateWorkspace","workspace","deleteWorkspace","getWorkspaceMembers","getWorkspaceRoles","createWorkspaceRole","permissions","deleteWorkspaceRole","inviteWorkspaceMember","roleId","removeWorkspaceMember","memberId","addWorkspaceMemberRole","membershipId","removeWorkspaceMemberRole","useActiveWorkspace","listError","leaveWorkspaceFromList","activeWorkspace","leaveCurrentWorkspace","updateCurrentWorkspace","deleteCurrentWorkspace","getCurrentWorkspaceMembers","getCurrentWorkspaceRoles","createCurrentWorkspaceRole","deleteCurrentWorkspaceRole","inviteCurrentWorkspaceMember","removeCurrentWorkspaceMember","addRoleToCurrentWorkspaceMember","removeRoleFromCurrentWorkspaceMember","currentLoading","currentError","useSSOCallback","setSession","setRedirectUri","processed","setProcessed","setSigninAttempt","urlParams","oauthError","errorDescription","handleCallback","endpoint","method","stateParts","base64Data","padding","stateAction","sessionData","redirectUriData","attempt","useMagicLinkVerification","verificationLoading","setVerificationLoading","verificationError","setVerificationError","verificationSuccess","setVerificationSuccess","errorObj","useMagicLinkParams","setParams","useForgotPassword","forgotPasswordLoading","setForgotPasswordLoading","forgotPasswordError","setForgotPasswordError","useResetPassword","resetPasswordLoading","setResetPasswordLoading","resetPasswordError","setResetPasswordError","useNotificationStream","enabled","channels","organizationIds","workspaceIds","onNotification","reconnectDelay","maxReconnectAttempts","deploymentLoading","isConnected","setIsConnected","connectionError","setConnectionError","wsRef","reconnectTimeoutRef","reconnectAttemptsRef","pingIntervalRef","onNotificationRef","onErrorRef","channelsRef","organizationIdsRef","workspaceIdsRef","reconnectDelayRef","maxReconnectAttemptsRef","cleanup","connect","wsProtocol","wsUrl","channel","ws","event","message","delay","disconnect","reconnect","fetchNotifications","queryString","fetchChannelCounts","markNotificationAsRead","notificationId","markAllNotificationsAsRead","deleteNotification","useNotifications","notificationLading","notification","n","markAsRead","markAllAsRead","deleteNotificationCallback","refetchWrapper","useChannelCounts","_WebSocketManager","__publicField","baseDelay","jitter","jsonMessage","handler","sessionKey","WebSocketManager","wsManager","CONNECTION_STATES","FRONTEND_STATUS","BACKEND_STATUS","mapBackendToFrontendStatus","backendStatus","isExecutionActive","status","useAgentConversation","contextId","autoConnect","messages","setMessages","pendingMessage","setPendingMessage","pendingImages","setPendingImages","isExecuting","setIsExecuting","executionStatus","setExecutionStatus","connectionState","setConnectionState","hasMoreMessages","setHasMoreMessages","isLoadingMore","setIsLoadingMore","oldestMessageIdRef","streamingMessageRef","handleWebSocketMessage","frontendStatus","handleConversationMessage","handleUserInputRequest","handlePlatformEvent","handlePlatformFunction","message_type","content","messageExists","messageId","msg","logContent","step","reasoning","confidence","_f","_e","query","resultCount","messageContent","_g","_h","inputRequest","requestId","event_label","event_data","function_name","function_data","parameters","execution_id","sendMessage","images","clearMessages","submitUserInput","fetchMessages","beforeId","messageData","pastMessages","parsedContent","metadata","aId","bId","loadMoreMessages","cancelExecution","useInvitation","invitationData","setInvitationData","acceptInvitation","errorData","reset","DeploymentInitialized","DeploymentInitializing","Fragment","__assign","p","__spreadArray","from","pack","l","ar","memoize","reactPropsRegex","isPropValid","prop","MS","MOZ","WEBKIT","COMMENT","RULESET","DECLARATION","IMPORT","KEYFRAMES","LAYER","abs","assign","hash","length","charat","trim","match","pattern","replace","replacement","indexof","search","position","substr","begin","end","strlen","sizeof","append","array","combine","filter","line","column","character","characters","node","root","parent","props","siblings","copy","lift","char","peek","caret","slice","alloc","dealloc","delimit","delimiter","whitespace","escaping","count","commenter","identifier","compile","parse","rule","rules","rulesets","pseudo","points","declarations","offset","atrule","property","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","size","j","k","z","prefix","element","c","d","output","stringify","collection","rulesheet","prefixer","unitlessKeys","m","g","S","w","E","N","P","o","r","C","I","A","O","D","R","T","V","F","M","$","B","L","G","Y","W","q","H","U","J","X","Z","K","Q","ee","te","ne","oe","re","se","ie","ae","ce","le","ue","pe","de","he","fe","me","ye","ve","ge","Se","we","be","Ee","Ne","Pe","u","Ce","Ie","Ae","Oe","De","Re","Te","ke","je","xe","Ve","Fe","d.RULESET","d.prefixer","d.stringify","d.compile","d.serialize","d.middleware","d.rulesheet","Me","ze","$e","Ge","We","qe","He","Ue","Je","h","Xe","Ze","Ke","Qe","et","rt","st","at","ct","lt","ut","pt","dt","mt","St","DefaultStylesProvider","styled","Container","InputGroup","InputBox","ErrorMessage","ResendButton","Timer","OTPInput","onComplete","onResend","isSubmitting","setOtp","resendTimer","setResendTimer","canResend","setCanResend","inputRefs","startTimer","handleResend","handleChange","newOtp","combinedOtp","handleKeyDown","handlePaste","pastedDigits","nextEmptyIndex","val","idx","lastFilledIndex","digit","ref","GithubIcon","jsxs","MicrosoftIcon","GoogleIcon","XIcon","FacebookIcon","LinkedInIcon","GitLabIcon","AppleIcon","DiscordIcon","socialAuthProviders","SocialAuthButtonsContainer","ButtonRow","SocialAuthButton","css","SocialAuthButtons","connections","organizeButtons","totalProviders","buttonRows","row","rowIndex","connection","connectionIndex","NavigationLink","handleNavigation","breakpoints","Input","countries","PhoneInputGroup","CountryCodeSelect","CountryCodeButton","CountryCodeDropdown","CountrySearch","CountryList","CountryOption","PhoneInput","PhoneNumberInput","onChange","countryCode","setCountryCode","isCountryDropdownOpen","setIsCountryDropdownOpen","selectedCountry","setSelectedCountry","countryDropdownRef","countrySearch","setCountrySearch","phoneNumberInputRef","handleClickOutside","filteredCountries","country","ImageContainer","LogoImage","AuthFormImage","logoUrl","Header","Title","Subtitle","Divider","DividerText","Form","NameFields","FormGroup","Label","PasswordGroup","SubmitButton","Footer","Link","RestrictedMessage","RestrictedText","RestrictedFooter","RestrictedFooterText","RestrictedLink","RequiredAsterisk","SignUpForm","signUp","discardSignupAttempt","signUpErrors","oauthSignIn","setFormData","setIsSubmitting","inviteData","setInviteData","inviteToken","setInviteToken","isSignupRestricted","isWaitlistMode","waitlistUrl","otpSent","setOtpSent","otpCode","setOtpCode","handleInputChange","resetFormData","handleSubmit","authSettings","newErrors","namePattern","usernamePattern","emailPattern","phonePattern","passwordPattern","submitData","handleSocialSignIn","enabledSocialProviders","conn","isBothNamesEnabled","completeVerification","uri","_i","_j","_l","_m","_n","_o","toKebabCase","string","mergeClasses","classes","className","defaultAttributes","Icon","forwardRef","color","strokeWidth","absoluteStrokeWidth","iconNode","rest","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","Activity","BellOff","BellRing","Bot","Building","Check","ChevronDown","ChevronLeft","ChevronRight","ChevronUp","ChevronsUpDown","Copy","Download","Expand","ExternalLink","EyeOff","Eye","Globe","Link2","LoaderCircle","LogOut","Mail","Maximize2","MessageCircle","Paperclip","Phone","Plus","Search","Send","Settings","Shield","Trash2","Trash","TriangleAlert","User","Users","ZoomIn","ZoomOut","DialogContext","useDialogContext","StyledOverlay","StyledContent","StyledHeader","StyledTitle","StyledCloseButton","StyledBody","StyledFooter","DialogRoot","isOpen","onClose","isMounted","setIsMounted","handleEscape","ReactDOM","DialogOverlay","contentRef","DialogContent","style","DialogHeader","showCloseButton","DialogBody","DialogFooter","Dialog","SimpleDialog","DialogTrigger","trigger","renderDialog","setIsOpen","handleOpen","handleClose","DropdownItemsContainer","DropdownContainer","DropdownContext","useDropdownContext","Dropdown","open","openChange","dropdownRef","_open","_setOpen","DropdownItems","setPosition","isPositioned","setIsPositioned","containerRef","triggerEl","triggerRect","dropdownRect","viewportWidth","viewportHeight","top","left","DropdownTrigger","toggleDropdown","DropdownItem","DropdownDivider","spin","keyframes","SpinnerWrapper","SpinnerCircle","Spinner","SwitchContainer","SwitchInput","SwitchSlider","Switch","checked","useDialog","close","toggle","prevState","SearchInput","placeholder","Button","ComboBoxContainer","ComboBoxTrigger","DropdownMenu","Option","Placeholder","NoOptions","GroupHeading","ComboBox","disabled","searchable","width","groupsEnabled","searchQuery","setSearchQuery","searchInputRef","isGrouped","selectedOption","group","option","filteredOptions","handleOptionClick","optionValue","handleToggle","groupIndex","ComboBoxMulti","selectedOptions","opt","SignInContext","useSignInContext","SignInProvider","firstFactor","setFirstFactor","setEmail","showOtherOptions","setShowOtherOptions","showForgotPassword","setShowForgotPassword","enabledSocialsProviders","EmailButton","OtherAuthOptions","initSocialAuthSignIn","handleBack","Message","ResetButton","FooterText","ForgotPassword","onBack","setStep","setPassword","confirmPassword","setConfirmPassword","forgotPassword","resetPassword","handleEmailSubmit","handleOtpSubmit","handleResetSubmit","OtherSignInOptions","MethodList","MethodButton","MethodIcon","MethodInfo","MethodName","MethodDescription","ContinueButton","TwoFactorMethodSelector","methods","onSelectMethod","selectedMethod","setSelectedMethod","handleContinue","LastDigitsInput","PhoneVerification","onVerify","lastFourDigits","setLastFourDigits","ShieldIcon","SmartphoneIcon","KeyIcon","LoadingContainer","CodeInput","TwoFactorVerification","prepareVerification","setVerificationCode","showMethodSelector","setShowMethodSelector","showPhoneVerification","setShowPhoneVerification","maskedPhone","setMaskedPhone","isRedirecting","setIsRedirecting","available2FAMethods","availableMethods","handleMethodSelect","methodId","handlePhoneVerification","Loader2","ProfileCompletion","completeProfile","showVerification","setShowVerification","displayError","handleComplete","handleVerificationComplete","missingFields","isVerifying","validateForm","field","fieldValue","isFieldEnabled","fieldName","handlePhoneChange","verificationTitle","verificationMessage","resendStrategy","SignInForm","SignInFormContent","signInErrors","createSignIn","attemptId","showOtpForm","SuccessContainer","SuccessIcon","SuccessTitle","SuccessMessage","WaitlistForm","isSubmitted","setIsSubmitted","getErrorMessage","fieldError","StatusContainer","ErrorIcon","LoadingSpinner","SubMessage","SSOCallback","handleRetry","handleReturnToSignIn","signInUrl","signinUrl","redirectUrl","loginUrl","isNoCallbackData","MagicLinkVerification","onSuccess","setStatus","subMessage","setSubMessage","verifyMagicLink","success","hasVerified","finalRedirectUri","hasIncompleteProfile","redirectToProfileCompletion","returnUrl","InfoIcon","EmailHighlight","AcceptInvite","propToken","hasAttempted","getUrlParams","handleGoToAuth","signUpUrl","isSignup","ScreenContext","_message","_level","useScreenContext","LeftPanel","RightPanel","AvatarContainer","AvatarImage","AvatarPlaceholder","Description","FormHeader","FormTitle","FormDescription","FormContent","TextArea","ButtonGroup","BackButton","HiddenInput","UploadOverlay","UploadText","CreateOrganizationForm","onCancel","setName","setDescription","setImage","previewUrl","setPreviewUrl","fileInputRef","toast","handleNameChange","handleImageChange","handleFileSelect","getInitials","text","word","sanitizeText","validateOrganizationName","sanitizedName","sanitizedDescription","CreateOrganizationDialog","onCreated","handleSuccess","PopoverContainer","Content","CloseButton","AddDomainPopover","triggerRef","popoverRef","currentDomain","setCurrentDomain","newFqdn","setNewFqdn","mounted","setMounted","addDomain","verifyDomain","validateDomain","sanitizeDomain","handleDomainCreation","sanitizedDomain","res","handleDomainVerification","triggerButton","rect","popoverWidth","popoverHeight","spacing","spaceBottom","spaceTop","InviteMemberPopover","roles","selectedRole","setSelectedRole","inviteMember","roleOptions","validateEmail","handleInvite","trimmedEmail","AddRolePopover","setPermissions","isEditing","permissionOptions","perm","buttons","btn","listenerTimer","sanitizeRoleName","validateRoleName","handleSave","roleData","Table","TableHead","TableBody","TableRow","TableHeader","TableCell","TableCellFlex","ActionsCell","EmptyStateContainer","EmptyState","action","ConfirmationPopover","onConfirm","TypographyProvider","TabsContainer","TabsList","Tab","TabIcon","TabContent","HeaderCTAContainer","GeneralSettingsSection","selectedOrganization","workspaceList","deleteOrgFromList","isSaving","setIsSaving","security","setSecurity","confirmName","setConfirmName","isDeleting","setIsDeleting","showDeleteConfirm","setShowDeleteConfirm","autoSave","handleDeleteOrganization","Badge","IconButton","DomainsSection","removeDomain","tableRef","domainForDeletion","setDomainForDeletion","domainsFromAPI","domains","isAddingDomain","setIsAddingDomain","domainInVerification","setDomainInVerification","selectedDomainInAction","setSelectedDomainAction","addDomainButtonRef","filteredDomains","tempDomains","lowercasedQuery","handleDeleteDomain","handleVerifyDomain","domainId","AlertTriangle","MembersSection","getMembers","getRoles","addMemberRole","removeMemberRole","removeMember","isInviting","setIsInviting","inviteMemberButtonRef","members","membersLoading","reloadMembers","rolesData","rolesLoading","filteredMembers","userData","firstName","lastName","toggleRole","hasRole","memberHasRole","handleInvitationSuccess","memberRoles","isCurrentUser","fullName","InvitationsSection","getInvitations","discardInvitation","resendInvitation","invitations","invitationsLoading","reloadInvitations","filteredInvitations","handleCancelInvitation","handleResendInvitation","RolesSection","removeRole","rolePopover","setRolePopover","setMessage","roleForOptionPopover","setRoleForOptionPopover","roleForDeletion","setRoleForDeletion","addRoleButtonRef","reloadRoles","filteredRoles","handleRoleSaved","resolve","handleDeleteRole","ManageOrganization","activeTab","setActiveTab","toastMessage","setToastMessage","toastLevel","setToastLevel","level","OrganizationSwitcher","ManageOrganizationDialog","showHeader","headerContent","footerContent","customContent","DropdownButton","DropdownContent","OrgAvatar","OrgAvatarImage","CreateOrgItem","PlusIcon","CreateWorkspaceForm","initialOrgId","onCreateOrganization","dropdownOpen","setDropdownOpen","selectedOrgId","setSelectedOrgId","selectedOrg","validateWorkspaceName","CreateWorkspaceDialog","showCreateOrg","setShowCreateOrg","handleCreateOrganization","handleOrganizationCreated","newestOrg","createInvitation","AddWorkspaceRolePopover","MemberListItem","MemberListItemContent","MemberInfo","MemberName","MemberEmail","MemberListItemActions","workspaceWithOrg","setRolesLoading","setInvitationsLoading","inviteSuccess","setInviteSuccess","setInvitations","setRoles","showInvitePopover","setShowInvitePopover","inviteButtonRef","inv","orgRoles","defaultOrgRole","invitationId","invitationsData","updatedInvitations","handleInviteSuccess","handleRemoveMember","handleToggleRole","showSaveNotification","setShowSaveNotification","isAutoSaving","setIsAutoSaving","autoSaveTimeoutRef","triggerFileInput","scheduleAutoSave","handleDescriptionChange","handleNameBlur","handleDescriptionBlur","handleDeleteWorkspace","createRole","deleteRole","dropdownButtonRefs","el","triggerBtn","ManageWorkspace","ManageWorkspaceDialog","SwitcherButton","Avatar","ButtonContent","OrgName","MenuItem","HoverArrow","Separator","MenuItemContent","MenuItemAvatar","MenuItemAvatarImage","MenuItemInfo","MenuItemName","MenuItemRole","ManageButton","LogoutButton","CreateOrgButton","ActiveIndicator","PersonalIcon","PersonalAvatar","WorkspaceItem","WorkspaceAvatar","StatusMessage","ShimmerWrapper","ShimmerItem","ShimmerAvatar","ShimmerContent","ShimmerLine","ShimmerSmallLine","SkeletonButton","SkeletonAvatar","SkeletonText","SkeletonIcon","setOpen","isSwitching","setIsSwitching","expandedOrgs","setExpandedOrgs","dropdownPosition","setDropdownPosition","buttonRef","createOrgDialog","manageOrgDialog","createWorkspaceDialog","manageWorkspaceDialog","selectedOrgForWorkspace","setSelectedOrgForWorkspace","leavingOrg","setLeavingOrg","leaveError","setLeaveError","organizationLoading","workspacesLoading","organizationsEnabled","workspacesEnabled","allowUsersToCreateOrgs","isPersonalActive","currentDisplay","displayName","cleanupFn","target","handleSwitchOrganization","orgId","handleSwitchWorkspace","toggleOrgExpanded","newExpanded","isWorkspaceActive","filteredArray","org","orgWorkspaces","isExpanded","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","__spreadValues","__objRest","source","exclude","qrcodegen","qrcodegen2","_QrCode","version","errorCorrectionLevel","dataCodewords","msk","allCodewords","minPenalty","penalty","assert","ecl","segs","seg","minVersion","maxVersion","mask","boostEcl","dataUsedBits","dataCapacityBits2","usedBits","QrSegment","newEcl","bb","appendBits","dataCapacityBits","padByte","alignPatPos","numAlign","rem","bits","getBit","dy","dx","dist","xx","yy","isDark","ver","numBlocks","blockEccLen","rawCodewords","numShortBlocks","shortBlockLen","blocks","rsDiv","dat","ecc","block","right","vert","invert","runColor","runX","runHistory","runY","dark","sum","total","pos","degree","divisor","factor","coef","core","currentRunColor","currentRunLength","cond","_QrSegment","numChars","bitData","digits","temp","assignVal","ccbits","str","QrCode2","_Ecc","ordinal","formatBits","QrSegment2","_Mode","modeBits","numBitsCharCount","qrcodegen_default","ERROR_LEVEL_MAP","DEFAULT_SIZE","DEFAULT_LEVEL","DEFAULT_BGCOLOR","DEFAULT_FGCOLOR","DEFAULT_INCLUDEMARGIN","DEFAULT_MINVERSION","SPEC_MARGIN_SIZE","DEFAULT_MARGIN_SIZE","DEFAULT_IMG_SCALE","generatePath","modules","margin","ops","start","cell","excavateModules","excavation","getImageSettings","cells","imageSettings","numCells","defaultSize","scale","opacity","floorX","floorY","ceilW","ceilH","crossOrigin","getMarginSize","includeMargin","marginSize","useQRCode","boostLevel","qrcode","segments","accum","calculatedImageSettings","cells2","margin2","numCells2","calculatedImageSettings2","SUPPORTS_PATH2D","QRCodeCanvas","forwardedRef","bgColor","fgColor","otherProps","imgSrc","_canvas","_image","setCanvasRef","isImgLoaded","setIsImageLoaded","canvas","ctx","cellsToDraw","haveImageToRender","pixelRatio","rdx","cdx","canvasStyle","img","QRCodeSVG","fgPath","InputWrapper","IconWrapper","EmailAddPopover","onAddEmail","onAttemptVerification","onPrepareVerification","existingEmail","handleOTPSubmit","PhoneAddPopover","onAddPhone","existingPhone","phoneNumber","setPhoneNumber","handlePhoneSubmit","SetupTOTPPopover","onSetupTOTP","onVerifyTOTP","qrUrl","setQrUrl","secret","setSecret","setCodes","handleVerify","StyledFormGroup","PasswordInput","ChangePasswordPopover","onChangePassword","isSetup","setCurrentPassword","setNewPassword","showCurrentPassword","setShowCurrentPassword","showNewPassword","setShowNewPassword","showConfirmPassword","setShowConfirmPassword","WarningBox","WarningText","RemovePasswordPopover","onRemovePassword","TopButtons","CodesGrid","CodeItem","BackupCodesPopover","onCopy","onDownload","ChromeIcon","FirefoxIcon","SafariIcon","EdgeIcon","OperaIcon","BraveIcon","UnknownBrowserIcon","BrowserIcon","browser","browserName","iconProps","ActiveSessionsSection","activeSession","setActiveSession","removeSignin","typedSignins","logoutSession","formatLastActive","lastActiveAt","date","diffInMinutes","signin","EmailManagementSection","activeDropdown","setActiveDropdown","newEmail","setNewEmail","isAddingEmail","setIsAddingEmail","verifyingEmailId","setVerifyingEmailId","emailButtonRef","verifyButtonRefs","handleDeleteEmail","emailId","filteredEmails","newEmailData","PhoneManagementSection","newPhone","setNewPhone","isAddingPhone","setIsAddingPhone","verifyingPhoneId","setVerifyingPhoneId","phoneButtonRef","phoneVerifyButtonRefs","getCountryFlag","filteredPhones","newPhoneData","SocialManagementSection","enabledProviders","connectedAccounts","providerInfo","account","ManageAccount","showEmailTab","showPhoneTab","showSecurityTab","ProfileDetailsManagementSection","SecurityManagementSection","secondFactorPolicy","setSecondFactorPolicy","handleSecondFactorPolicyChange","policy","showTOTPPopover","setShowTOTPPopover","showPasswordPopover","setShowPasswordPopover","showRemovePasswordPopover","setShowRemovePasswordPopover","showBackupCodesPopover","setShowBackupCodesPopover","totpButtonRef","passwordButtonRef","removePasswordButtonRef","backupCodesButtonRef","setupStep","setSetupStep","qrCodeUrl","setQrCodeUrl","secretKey","setSecretKey","authenticatorId","setAuthenticatorId","verificationCodes","setVerificationCodes","backupCodes","setBackupCodes","isGeneratingCodes","setIsGeneratingCodes","setIsVerifying","isLoadingQR","isRemovingAuth","setIsRemovingAuth","authFactorsEnabled","passwordEnabled","handleChangePassword","handleRemovePassword","canRemovePassword","hasVerifiedEmail","hasVerifiedPhone","hasSocialConnection","sc","handleVerifyAuthenticator","handleCompleteSetup","handleRemoveAuthenticator","handleGenerateNewBackupCodes","copyBackupCodes","codesText","downloadBackupCodes","blob","securityItems","item","setFirstName","setLastName","setUsername","hasInitialized","setHasInitialized","handleFirstNameChange","handleLastNameChange","handleUsernameChange","handleFirstNameBlur","handleLastNameBlur","handleUsernameBlur","handleDeleteAccount","ManageAccountDialog","AccountButton","UserName","AccountName","AccountEmail","AccountSection","AccountHeader","AccountDetails","NameRow","LargerAvatar","ActionRow","ActionLink","FooterSection","FooterButton","UserButton","showName","manageAccountDialog","selectedAccount","isMultiSessionEnabled","hasMultipleAccounts","dropdownWidth","windowWidth","windowHeight","spaceRight","spaceLeft","spaceBelow","spaceAbove","distanceFromLeft","bottom","maxHeight","part","handleSignOut","handleSignOutAll","handleSwitchUser","handleOpenManageAccount","sortedSignins","aIsActive","bIsActive","isClickable","Item","TitleContainer","Severity","Body","Time","Actions","ActionButton","NotificationItem","onMarkAsRead","onDelete","handleClick","formatTime","dateString","diff","seconds","minutes","hours","days","Popover","MarkAllButton","EmptyIcon","EmptyTitle","EmptyDescription","ViewAllLink","NotificationPopover","notifications","onMarkAllAsRead","hasUnread","CircularContainer","NotificationButton","NotificationBell","showBadge","popoverPosition","setPopoverPosition","notificationParams","unreadCount","UserControls","showNotifications","SignedIn","currentHref","SignedOut","shimmer","AccountsWrapper","AccountItem","SignOutButton","AddAccountButton","SkeletonItem","SkeletonTextWrapper","SignedInAccounts","onAccountSelect","showAddAccount","loadingSignOut","setLoadingSignOut","switchingToAccount","setSwitchingToAccount","activeSignIn","handleAccountClick","handleAddAccount","NavigateToSignIn","navigateToSignIn","NavigateToSignUp","navigateToSignUp","ChannelButton","CountBadge","CHANNEL_LABELS","ChannelSelector","selectedChannels","channelCounts","onChannelsChange","toggleChannel","newChannels","label","isSelected","ChatContainer","ChatHeader","HeaderLeft","AgentInfo","AgentAvatar","AgentDetails","StatusIndicator","AgentName","StatusText","StatusBadge","MessagesContainer","MessageWrapper","StreamingIndicator","PendingMessage","LogMessage","UserInputRequestContainer","InputForm","InputContainer","MessageInput","ActionButtons","ImagePreviewContainer","ImagePreview","RemoveImageButton","HiddenFileInput","SendButton","ImageModal","ModalContent","ModalButton","ZoomedImage","BottomControls","ZoomControls","ZoomLevel","MessageImage","ImagePreviewPortal","imageUrl","zoomLevel","dragPosition","isDragging","onZoom","onReset","onWheel","onMouseDown","onMouseMove","onMouseUp","modalRef","originalStyle","handleWheel","handleGestureStart","handleGestureChange","AgentConversation","showBackButton","showEmptyState","emptyStateMessage","input","setInput","isHoveringCancel","setIsHoveringCancel","activeInputRequest","setActiveInputRequest","setSelectedOptions","uploadedImages","setUploadedImages","previewImage","setPreviewImage","setZoomLevel","setIsDragging","setDragPosition","dragStart","setDragStart","messagesEndRef","isWaitingForInput","handleSend","files","reader","removeImage","openImagePreview","closeImagePreview","downloadImage","link","handleZoom","delta","newZoom","handleMouseDown","handleMouseMove","handleMouseUp","getStatusText","getInputPlaceholder","shouldDisableTextInput","isTextInput","isActiveRequest","prevMessage","nextMessage","isPrevLog","isNextLog","imgIndex","SearchContainer","SessionsList","SessionGroup","GroupTitle","SessionItem","SessionIcon","SessionContent","SessionTitle","SessionMeta","DeleteButton","LoadingState","SkeletonCard","SkeletonContent","SkeletonTitle","SkeletonMeta","AgentConversationHistory","filteredSessions","groupSessionsByDate","groups","today","yesterday","lastWeek","sessionDate","groupKey","handleDeleteSession","sessionGroups","groupSessions","HomeScreen","WelcomeIcon","WelcomeTitle","WelcomeSubtitle","StartButton","LoadingDots","SessionCard","SessionCardTitle","SessionCardMeta","SessionCardContent","RecentSessions","RecentHeader","RecentTitle","HistoryLink","SessionList","AgentConversationHub","createLoading","setCreateLoading","handleStartNewConversation","formatTimeAgo","isExternalUrl","normalizedUrl","protocol","isSafeUrl"],"mappings":"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","x_google_ignoreList":[3,4,5,6,7,8,9,10,11,20,36,37,38,39,40,41,42,43,44,45,46,47,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,154]}