@agent-native/core 0.8.1 → 0.9.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 (181) hide show
  1. package/dist/agent/run-manager.d.ts +10 -0
  2. package/dist/agent/run-manager.d.ts.map +1 -1
  3. package/dist/agent/run-manager.js +77 -4
  4. package/dist/agent/run-manager.js.map +1 -1
  5. package/dist/agent/run-store.d.ts +4 -1
  6. package/dist/agent/run-store.d.ts.map +1 -1
  7. package/dist/agent/run-store.js +6 -5
  8. package/dist/agent/run-store.js.map +1 -1
  9. package/dist/cli/create.d.ts +26 -1
  10. package/dist/cli/create.d.ts.map +1 -1
  11. package/dist/cli/create.js +62 -18
  12. package/dist/cli/create.js.map +1 -1
  13. package/dist/cli/index.js +177 -22
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/workspace-dev.js +66 -5
  16. package/dist/cli/workspace-dev.js.map +1 -1
  17. package/dist/client/AgentPanel.d.ts +2 -0
  18. package/dist/client/AgentPanel.d.ts.map +1 -1
  19. package/dist/client/AgentPanel.js +4 -3
  20. package/dist/client/AgentPanel.js.map +1 -1
  21. package/dist/client/AssistantChat.d.ts.map +1 -1
  22. package/dist/client/AssistantChat.js +38 -84
  23. package/dist/client/AssistantChat.js.map +1 -1
  24. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  25. package/dist/client/agent-chat-adapter.js +122 -15
  26. package/dist/client/agent-chat-adapter.js.map +1 -1
  27. package/dist/client/analytics.d.ts +14 -0
  28. package/dist/client/analytics.d.ts.map +1 -1
  29. package/dist/client/analytics.js +34 -0
  30. package/dist/client/analytics.js.map +1 -1
  31. package/dist/client/components/PresenceBar.d.ts.map +1 -1
  32. package/dist/client/components/PresenceBar.js +21 -15
  33. package/dist/client/components/PresenceBar.js.map +1 -1
  34. package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
  35. package/dist/client/composer/ComposerPlusMenu.js +12 -11
  36. package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
  37. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  38. package/dist/client/composer/TiptapComposer.js +5 -4
  39. package/dist/client/composer/TiptapComposer.js.map +1 -1
  40. package/dist/client/composer/VoiceButton.d.ts.map +1 -1
  41. package/dist/client/composer/VoiceButton.js +9 -8
  42. package/dist/client/composer/VoiceButton.js.map +1 -1
  43. package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
  44. package/dist/client/dev-overlay/DevOverlay.js +4 -3
  45. package/dist/client/dev-overlay/DevOverlay.js.map +1 -1
  46. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  47. package/dist/client/extensions/EmbeddedExtension.js +2 -1
  48. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  49. package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
  50. package/dist/client/extensions/ExtensionEditor.js +2 -1
  51. package/dist/client/extensions/ExtensionEditor.js.map +1 -1
  52. package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
  53. package/dist/client/extensions/ExtensionSlot.js +2 -1
  54. package/dist/client/extensions/ExtensionSlot.js.map +1 -1
  55. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  56. package/dist/client/extensions/ExtensionViewer.js +4 -3
  57. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  58. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  59. package/dist/client/extensions/ExtensionsSidebarSection.js +10 -9
  60. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  61. package/dist/client/index.d.ts +3 -1
  62. package/dist/client/index.d.ts.map +1 -1
  63. package/dist/client/index.js +3 -1
  64. package/dist/client/index.js.map +1 -1
  65. package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
  66. package/dist/client/integrations/IntegrationCard.js +2 -1
  67. package/dist/client/integrations/IntegrationCard.js.map +1 -1
  68. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  69. package/dist/client/integrations/IntegrationsPanel.js +3 -2
  70. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  71. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
  72. package/dist/client/onboarding/OnboardingPanel.js +3 -2
  73. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  74. package/dist/client/onboarding/SetupButton.d.ts.map +1 -1
  75. package/dist/client/onboarding/SetupButton.js +14 -13
  76. package/dist/client/onboarding/SetupButton.js.map +1 -1
  77. package/dist/client/org/InvitationBanner.d.ts +8 -2
  78. package/dist/client/org/InvitationBanner.d.ts.map +1 -1
  79. package/dist/client/org/InvitationBanner.js +27 -6
  80. package/dist/client/org/InvitationBanner.js.map +1 -1
  81. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  82. package/dist/client/org/OrgSwitcher.js +29 -5
  83. package/dist/client/org/OrgSwitcher.js.map +1 -1
  84. package/dist/client/org/TeamPage.d.ts.map +1 -1
  85. package/dist/client/org/TeamPage.js +7 -6
  86. package/dist/client/org/TeamPage.js.map +1 -1
  87. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  88. package/dist/client/resources/ResourceEditor.js +2 -1
  89. package/dist/client/resources/ResourceEditor.js.map +1 -1
  90. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  91. package/dist/client/resources/ResourcesPanel.js +9 -9
  92. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  93. package/dist/client/settings/AgentsSection.d.ts.map +1 -1
  94. package/dist/client/settings/AgentsSection.js +8 -7
  95. package/dist/client/settings/AgentsSection.js.map +1 -1
  96. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  97. package/dist/client/settings/AutomationsSection.js +4 -3
  98. package/dist/client/settings/AutomationsSection.js.map +1 -1
  99. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  100. package/dist/client/settings/SecretsSection.js +2 -1
  101. package/dist/client/settings/SecretsSection.js.map +1 -1
  102. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  103. package/dist/client/settings/SettingsPanel.js +3 -2
  104. package/dist/client/settings/SettingsPanel.js.map +1 -1
  105. package/dist/client/settings/index.d.ts +1 -1
  106. package/dist/client/settings/index.d.ts.map +1 -1
  107. package/dist/client/settings/index.js.map +1 -1
  108. package/dist/client/sse-event-processor.d.ts.map +1 -1
  109. package/dist/client/sse-event-processor.js +45 -4
  110. package/dist/client/sse-event-processor.js.map +1 -1
  111. package/dist/client/theme.d.ts +4 -0
  112. package/dist/client/theme.d.ts.map +1 -0
  113. package/dist/client/theme.js +13 -0
  114. package/dist/client/theme.js.map +1 -0
  115. package/dist/client/use-session.d.ts.map +1 -1
  116. package/dist/client/use-session.js +14 -2
  117. package/dist/client/use-session.js.map +1 -1
  118. package/dist/collab/client.d.ts +1 -0
  119. package/dist/collab/client.d.ts.map +1 -1
  120. package/dist/collab/client.js +18 -1
  121. package/dist/collab/client.js.map +1 -1
  122. package/dist/org/auto-join-domain.d.ts +28 -0
  123. package/dist/org/auto-join-domain.d.ts.map +1 -0
  124. package/dist/org/auto-join-domain.js +92 -0
  125. package/dist/org/auto-join-domain.js.map +1 -0
  126. package/dist/org/index.d.ts +2 -0
  127. package/dist/org/index.d.ts.map +1 -1
  128. package/dist/org/index.js +1 -0
  129. package/dist/org/index.js.map +1 -1
  130. package/dist/scripts/db/exec.d.ts.map +1 -1
  131. package/dist/scripts/db/exec.js +27 -1
  132. package/dist/scripts/db/exec.js.map +1 -1
  133. package/dist/scripts/db/index.d.ts.map +1 -1
  134. package/dist/scripts/db/index.js +1 -0
  135. package/dist/scripts/db/index.js.map +1 -1
  136. package/dist/scripts/db/reset-dev-owner.d.ts +27 -0
  137. package/dist/scripts/db/reset-dev-owner.d.ts.map +1 -0
  138. package/dist/scripts/db/reset-dev-owner.js +225 -0
  139. package/dist/scripts/db/reset-dev-owner.js.map +1 -0
  140. package/dist/scripts/db/scoping.d.ts.map +1 -1
  141. package/dist/scripts/db/scoping.js +15 -30
  142. package/dist/scripts/db/scoping.js.map +1 -1
  143. package/dist/scripts/dev-session.d.ts +46 -0
  144. package/dist/scripts/dev-session.d.ts.map +1 -0
  145. package/dist/scripts/dev-session.js +81 -0
  146. package/dist/scripts/dev-session.js.map +1 -0
  147. package/dist/scripts/runner.d.ts.map +1 -1
  148. package/dist/scripts/runner.js +21 -0
  149. package/dist/scripts/runner.js.map +1 -1
  150. package/dist/secrets/register.d.ts +1 -1
  151. package/dist/secrets/register.d.ts.map +1 -1
  152. package/dist/secrets/register.js +4 -2
  153. package/dist/secrets/register.js.map +1 -1
  154. package/dist/secrets/routes.d.ts.map +1 -1
  155. package/dist/secrets/routes.js +32 -0
  156. package/dist/secrets/routes.js.map +1 -1
  157. package/dist/server/better-auth-instance.d.ts.map +1 -1
  158. package/dist/server/better-auth-instance.js +11 -0
  159. package/dist/server/better-auth-instance.js.map +1 -1
  160. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  161. package/dist/server/core-routes-plugin.js +56 -13
  162. package/dist/server/core-routes-plugin.js.map +1 -1
  163. package/dist/server/credential-provider.d.ts +47 -4
  164. package/dist/server/credential-provider.d.ts.map +1 -1
  165. package/dist/server/credential-provider.js +105 -29
  166. package/dist/server/credential-provider.js.map +1 -1
  167. package/dist/server/design-token-utils.d.ts +13 -2
  168. package/dist/server/design-token-utils.d.ts.map +1 -1
  169. package/dist/server/design-token-utils.js +48 -16
  170. package/dist/server/design-token-utils.js.map +1 -1
  171. package/dist/server/onboarding-html.d.ts.map +1 -1
  172. package/dist/server/onboarding-html.js +97 -8
  173. package/dist/server/onboarding-html.js.map +1 -1
  174. package/dist/templates/default/app/root.tsx +4 -0
  175. package/dist/templates/default/app/routes/_index.tsx +3 -2
  176. package/dist/vite/client.d.ts.map +1 -1
  177. package/dist/vite/client.js +76 -34
  178. package/dist/vite/client.js.map +1 -1
  179. package/package.json +1 -1
  180. package/src/templates/default/app/root.tsx +4 -0
  181. package/src/templates/default/app/routes/_index.tsx +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"OnboardingPanel.js","sourceRoot":"","sources":["../../../src/client/onboarding/OnboardingPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD;;;;;;GAMG;AAEH,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EACL,SAAS,EACT,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,OAAO,EACP,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAexE,MAAM,UAAU,eAAe,CAAC,EAC9B,SAAS,EACT,KAAK,GAAG,OAAO,GACM;IACrB,MAAM,WAAW,GAAG,wBAAwB,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAC;IACnC,MAAM,EACJ,KAAK,EAAE,QAAQ,EACf,aAAa,EAAE,gBAAgB,EAC/B,SAAS,EACT,OAAO,EACP,OAAO,EACP,QAAQ,EACR,OAAO,GACR,GAAG,UAAU,CAAC;IACf,uEAAuE;IACvE,sEAAsE;IACtE,8DAA8D;IAC9D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,SAAS;QACrB,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IAChC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC7D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7E,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,gBAAgB,CAAC;QAChE,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE;YACjD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE;YAClC,IAAI,CAAC,CAAC;IACV,6EAA6E;IAC7E,wEAAwE;IACxE,2EAA2E;IAC3E,iCAAiC;IACjC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE/C,IAAI,OAAO,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,wEAAwE;IACxE,kEAAkE;IAClE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,SAAS;YAAE,OAAO,IAAI,CAAC;QAC3B,0EAA0E;QAC1E,yCAAyC;QACzC,IAAI,WAAW;YAAE,OAAO,IAAI,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,YACpD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAChC,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAC9B,KAAK,EAAC,cAAc,gBACT,cAAc,aAEzB,eAAM,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,YAC3D,WAAW,CAAC,CAAC,CAAC,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,GAAI,CAAC,CAAC,CAAC,IAAI,GACxD,EACP,eAAM,KAAK,EAAE,MAAM,CAAC,WAAW,YAAG,KAAK,GAAQ,EAC/C,gBAAM,KAAK,EAAE,MAAM,CAAC,aAAa,aAC9B,aAAa,UAAM,UAAU,IACzB,EACP,eAAM,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAChE,KAAC,eAAe,IAAC,IAAI,EAAE,EAAE,GAAI,GACxB,IACA,GACL,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,aAC3C,eAAK,KAAK,EAAE,MAAM,CAAC,MAAM,aACvB,eAAK,KAAK,EAAE,MAAM,CAAC,UAAU,aAC1B,WAAW,CAAC,CAAC,CAAC,CACb,eAAM,KAAK,EAAE,MAAM,CAAC,SAAS,YAC3B,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,GAAI,GAClC,CACR,CAAC,CAAC,CAAC,CACF,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,wBAAgB,CAClE,EACD,eAAM,KAAK,EAAE,MAAM,CAAC,WAAW,YAAG,KAAK,GAAQ,EAC/C,gBAAM,KAAK,EAAE,MAAM,CAAC,aAAa,aAC9B,aAAa,UAAM,UAAU,IACzB,IACH,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EACjC,KAAK,EAAC,UAAU,gBACL,qBAAqB,EAChC,KAAK,EAAE,MAAM,CAAC,UAAU,YAExB,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,GAAI,GACpB,IACL,EAEN,cAAK,KAAK,EAAE,MAAM,CAAC,IAAI,YACpB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,KAAC,QAAQ,IAEP,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,aAAa,EACnC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EACvC,SAAS,EAAE,OAAO,IAJb,IAAI,CAAC,EAAE,CAKZ,CACH,CAAC,GACE,EAEN,cAAK,KAAK,EAAE,MAAM,CAAC,MAAM,YACvB,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,2BAErD,GACL,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,EAChB,IAAI,EACJ,QAAQ,EAAE,YAAY,EACtB,cAAc,EACd,SAAS,GAMV;IACC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvD,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7B,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpD,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;QACjC,MAAM,SAAS,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO,CACL,eACE,KAAK,EAAE;YACL,GAAG,MAAM,CAAC,IAAI;YACd,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;SACrC,aAED,kBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,mBACtB,QAAQ,aAEvB,gBAAM,KAAK,EAAE,MAAM,CAAC,cAAc,aAChC,eAAM,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,YACtD,MAAM,CAAC,CAAC,CAAC,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,GAAI,CAAC,CAAC,CAAC,IAAI,GACnD,EACP,gBAAM,KAAK,EAAE,MAAM,CAAC,SAAS,aAC1B,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,CAC3B,eAAM,KAAK,EAAE,MAAM,CAAC,YAAY,yBAAiB,CAClD,IACI,IACF,EACP,eAAM,KAAK,EAAE,MAAM,CAAC,OAAO,YACxB,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,eAAe,IAAC,IAAI,EAAE,EAAE,GAAI,CAC9B,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IAAC,IAAI,EAAE,EAAE,GAAI,CAC/B,GACI,IACA,EAER,QAAQ,IAAI,CACX,eAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,aACzB,YAAG,KAAK,EAAE,MAAM,CAAC,QAAQ,YAAG,IAAI,CAAC,WAAW,GAAK,EACjD,KAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,eAAe,EAC5B,oBAAoB,EAAE,cAAc,GACpC,IACE,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,MAAwB;IAExB,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC;AAChC,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,IAAI,EACJ,OAAO,EACP,WAAW,EACX,oBAAoB,GAMrB;IACC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAEjD,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,CACL,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,IAAI,CAAC,EAAE,EACf,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,oBAAoB,GAC1C,CACH,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC;QACrE,OAAO,CACL,cAAK,KAAK,EAAE,MAAM,CAAC,OAAO,YACxB,KAAC,gBAAgB,IACf,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,WAAW,GACxB,GACE,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cAAK,KAAK,EAAE,MAAM,CAAC,OAAO,YACvB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,WAAW,IAEV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,EAAE,EACf,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,oBAAoB,IAJrC,MAAM,CAAC,EAAE,CAKd,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,OAAO,EACP,WAAW,EACX,MAAM,EACN,WAAW,EACX,oBAAoB,GAOrB;IACC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,aAAa,GACjB,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CACjC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,aAAa,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAC9D,CAAC;IAEF,OAAO,CACL,eAAK,KAAK,EAAE,MAAM,CAAC,OAAO,aACvB,aAAa,IAAI,CAChB,KAAC,WAAW,IACV,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,oBAAoB,GAC1C,CACH,EAEA,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,eAAK,KAAK,EAAE,MAAM,CAAC,cAAc,aAC/B,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAChD,KAAK,EAAE,MAAM,CAAC,eAAe,mBACd,WAAW,aAE1B,gBAAM,KAAK,EAAE,MAAM,CAAC,mBAAmB,aACrC,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,wBAAgB,EACjC,uDAAsC,IACjC,EACP,eAAM,KAAK,EAAE,MAAM,CAAC,OAAO,YACxB,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,eAAe,IAAC,IAAI,EAAE,EAAE,GAAI,CAC9B,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IAAC,IAAI,EAAE,EAAE,GAAI,CAC/B,GACI,IACA,EACR,WAAW,IAAI,CACd,KAAC,gBAAgB,IACf,OAAO,EAAE,WAAW,EACpB,KAAK,EAAC,UAAU,EAChB,WAAW,EAAE,WAAW,EACxB,QAAQ,SACR,CACH,IACG,CACP,EAEA,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC5B,KAAC,WAAW,IAEV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,oBAAoB,IAJrC,MAAM,CAAC,EAAE,CAKd,CACH,CAAC,IACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EACxB,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,GAMT;IACC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC;YACxD,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAE1B,MAAM,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAEnE,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO,CACL,eAAK,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,aAChE,iBAAO,KAAK,EAAE,MAAM,CAAC,WAAW,aAC9B,eAAM,KAAK,EAAE,MAAM,CAAC,aAAa,YAAG,KAAK,GAAQ,EACjD,iBACE,KAAK,EAAE,cAAc,CAAC,EAAE,EACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACtD,KAAK,EAAE,MAAM,CAAC,MAAM,YAEnB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,iBAAwB,KAAK,EAAE,MAAM,CAAC,EAAE,YACrC,MAAM,CAAC,KAAK,IADF,MAAM,CAAC,EAAE,CAEb,CACV,CAAC,GACK,IACH,EACP,cAAc,CAAC,WAAW,IAAI,CAC7B,YAAG,KAAK,EAAE,MAAM,CAAC,UAAU,YAAG,cAAc,CAAC,WAAW,GAAK,CAC9D,EACD,KAAC,UAAU,IAET,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,WAAW,IAFnB,cAAc,CAAC,EAAE,CAGtB,IACE,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,SAAS,WAAW,CAAC,EACnB,MAAM,EACN,MAAM,EACN,WAAW,EACX,oBAAoB,GAMrB;IACC,OAAO,CACL,eAAK,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,aAC/D,cAAK,KAAK,EAAE,MAAM,CAAC,YAAY,YAC7B,gBAAM,KAAK,EAAE,MAAM,CAAC,WAAW,aAC5B,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,KAAK,IAAI,CACf,eAAM,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,YAAG,MAAM,CAAC,KAAK,GAAQ,CAC7D,IACI,GACH,EACL,MAAM,CAAC,WAAW,IAAI,CACrB,YAAG,KAAK,EAAE,MAAM,CAAC,UAAU,YAAG,MAAM,CAAC,WAAW,GAAK,CACtD,EACD,KAAC,UAAU,IACT,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,oBAAoB,GAC1C,IACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,MAAM,EACN,MAAM,EACN,WAAW,EACX,oBAAoB,GAMrB;IACC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,CACL,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,oBAAoB,GAAI,CACrE,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAI,CAAC;QAClE,KAAK,kBAAkB;YACrB,OAAO,CACL,KAAC,oBAAoB,IACnB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,CAAC,OAAO,GACvB,CACH,CAAC;QACJ,KAAK,YAAY;YACf,OAAO,KAAC,eAAe,IAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E,SAAS,UAAU,CAAC,EAClB,MAAM,EACN,cAAc,GAIf;IACC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;IACzC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,gEAAgE;QAChE,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EACpC,OAAO,EAAE,cAAc,gCAGhB,CACV,CAAC;IACJ,CAAC;IACD,OAAO,CACL,aACE,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACvC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,EACjD,KAAK,EAAE,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,yBAGlE,QAAQ,IAAI,KAAC,gBAAgB,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,GAAI,IACnE,CACL,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,SAAS,UAAU,CAAC,EAClB,MAAM,EACN,WAAW,GAIZ;IACC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAyB,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAEpD,MAAM,YAAY,GAAG,KAAK,EAAE,CAAkB,EAAE,EAAE;QAChD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM;iBAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;iBACjE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,sBAAsB,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,yBAAyB,CAAC,EAAE;gBAClE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,CAAC;aACjE,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChD,MAAM,IAAI,KAAK,CACZ,IAA2B,CAAC,KAAK,IAAI,gBAAgB,GAAG,CAAC,MAAM,EAAE,CACnE,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,EAAE,CAAC,CAAC;YACd,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACzD,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,gBAAM,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,aAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,iBAAmB,KAAK,EAAE,MAAM,CAAC,SAAS,aACxC,eAAM,KAAK,EAAE,MAAM,CAAC,aAAa,YAAG,CAAC,CAAC,KAAK,GAAQ,EACnD,gBACE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EACpC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAC1B,WAAW,EAAE,CAAC,CAAC,WAAW,EAC1B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACd,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAEvD,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,YAAY,EAAC,KAAK,EAClB,UAAU,EAAE,KAAK,GACjB,KAZQ,CAAC,CAAC,GAAG,CAaT,CACT,CAAC,EACD,GAAG,IAAI,YAAG,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,GAAG,GAAK,EAC3C,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAErE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,GACvB,IACJ,CACR,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,SAAS,oBAAoB,CAAC,EAC5B,WAAW,EACX,OAAO,GAIR;IACC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,qBAAqB,CAAC;QACzD,WAAW,EAAE,WAAW;KACzB,CAAC,CAAC;IAEH,OAAO,CACL,8BACE,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAElE,UAAU,CAAC,CAAC,CAAC,CACZ,8BACE,KAAC,WAAW,IACV,IAAI,EAAE,EAAE,EACR,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EACzB,SAAS,EAAC,cAAc,GACxB,8BAED,CACJ,CAAC,CAAC,CAAC,CACF,iBAAiB,CAClB,GACM,EACR,KAAK,IAAI,YAAG,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,KAAK,GAAK,IAC9C,CACJ,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,SAAS,eAAe,CAAC,EACvB,MAAM,EACN,MAAM,EAAE,OAAO,GAIhB;IACC,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC;IACF,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,8BAG7B,CACV,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,SAAS,aAAa,CAAC,OAA4B;IACjD,OAAO;QACL,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,OAAO;YACb,CAAC,CAAC,uBAAuB;YACzB,CAAC,CAAC,kCAAkC;QACtC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB;QAC1D,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACnC,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,MAAM,EAAE,SAAS;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,IAAqC;IAErC,MAAM,OAAO,GAAG;QACd,WAAW,EAAE,EAAE,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,SAAS,EAAE;QAC3D,IAAI,EAAE,EAAE,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,SAAS,EAAE;QACpD,IAAI,EAAE,EAAE,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,SAAS,EAAE;KACpD,CAAC,IAAI,CAAC,CAAC;IACR,OAAO;QACL,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,OAAO,CAAC,EAAE;QACtB,KAAK,EAAE,OAAO,CAAC,EAAE;QACjB,UAAU,EAAE,GAAG;QACf,aAAa,EAAE,WAAoB;QACnC,aAAa,EAAE,GAAG;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAwC;IAClD,IAAI,EAAE;QACJ,YAAY,EAAE,kCAAkC;QAChD,UAAU,EAAE,wBAAwB;QACpC,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,CAAC;KACb;IACD,aAAa,EAAE;QACb,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,YAAY,EAAE,kCAAkC;QAChD,UAAU,EAAE,sBAAsB;QAClC,QAAQ,EAAE,EAAE;KACb;IACD,gBAAgB,EAAE;QAChB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;QACN,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,CAAC;KACZ;IACD,MAAM,EAAE;QACN,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,OAAO,EAAE,UAAU;KACpB;IACD,UAAU,EAAE;QACV,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;KACP;IACD,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAChC,WAAW,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9C,aAAa,EAAE;QACb,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,CAAC;KACd;IACD,UAAU,EAAE;QACV,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,MAAM;KAChB;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;QACN,OAAO,EAAE,cAAc;QACvB,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,CAAC;QACZ,IAAI,EAAE,UAAU;KACjB;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,gDAAgD;QACxD,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,mCAAmC;KAChD;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,sBAAsB;QACnC,UAAU,EAAE,uBAAuB;KACpC;IACD,UAAU,EAAE;QACV,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,MAAe;KAC3B;IACD,cAAc,EAAE;QACd,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;QACN,QAAQ,EAAE,CAAC;KACZ;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;QACN,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,MAAe;KAC1B;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,sBAAsB;QAClC,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,GAAG;KAChB;IACD,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;IACzB,SAAS,EAAE;QACT,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,iCAAiC;KAC1C;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,kBAAkB;QAC3B,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;KACP;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;KAChB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;KACP;IACD,MAAM,EAAE;QACN,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,kCAAkC;QAC1C,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,wBAAwB;QACpC,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;KACP;IACD,aAAa,EAAE;QACb,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,iCAAiC;QACzC,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,uBAAuB;QACnC,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;KACP;IACD,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IACvD,WAAW,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;IAC9C,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;IACtE,cAAc,EAAE;QACd,UAAU,EAAE,CAAC;KACd;IACD,eAAe,EAAE;QACf,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,GAAG,EAAE,CAAC;QACN,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,kCAAkC;QAC1C,UAAU,EAAE,yBAAyB;QACrC,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,SAAS,EAAE,MAAe;KAC3B;IACD,mBAAmB,EAAE;QACnB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;QACN,QAAQ,EAAE,CAAC;KACZ;IACD,oBAAoB,EAAE;QACpB,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,CAAC;KACP;IACD,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE;IACjE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE;IAC1D,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE;IAC/D,aAAa,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;IAC7C,MAAM,EAAE;QACN,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,iCAAiC;QACzC,UAAU,EAAE,kBAAkB;QAC9B,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,YAAqB;KACjC;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,iCAAiC;QACzC,UAAU,EAAE,kBAAkB;QAC9B,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,YAAqB;KACjC;IACD,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IACtD,MAAM,EAAE;QACN,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,MAAM;QACf,cAAc,EAAE,UAAU;KAC3B;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,SAAS;KACnB;CACF,CAAC","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\n/**\n * <OnboardingPanel /> — the setup checklist that sits above the agent chat.\n *\n * The active step is expanded; completed steps collapse with a green check;\n * remaining steps sit dimmed below. Each method renders differently based on\n * its `kind` (link / form / builder-cli-auth / agent-task).\n */\n\nimport React, { useState, useEffect } from \"react\";\nimport {\n IconCheck,\n IconChecklist,\n IconChevronDown,\n IconChevronRight,\n IconChevronUp,\n IconExternalLink,\n IconKey,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { useOnboarding } from \"./use-onboarding.js\";\nimport { useOnboardingPreviewMode } from \"./use-preview-mode.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { useDevMode } from \"../use-dev-mode.js\";\nimport { useBuilderConnectFlow } from \"../settings/useBuilderStatus.js\";\nimport type {\n OnboardingMethod,\n OnboardingStepStatus,\n} from \"../../onboarding/types.js\";\n\ntype FormOnboardingMethod = Extract<OnboardingMethod, { kind: \"form\" }>;\n\ninterface OnboardingPanelProps {\n /** Optional extra styles / classes for the wrapper. */\n className?: string;\n /** Override the built-in title. */\n title?: string;\n}\n\nexport function OnboardingPanel({\n className,\n title = \"Setup\",\n}: OnboardingPanelProps) {\n const previewMode = useOnboardingPreviewMode();\n const onboarding = useOnboarding({ preview: previewMode });\n const { isDevMode } = useDevMode();\n const {\n steps: rawSteps,\n currentStepId: rawCurrentStepId,\n dismissed,\n loading,\n refresh,\n complete,\n dismiss,\n } = onboarding;\n // `database` and `auth` steps only apply to local dev (SQLite default,\n // local-mode auth bypass). In production those are configured via env\n // vars / deployment config, so don't nag the user about them.\n const DEV_ONLY_STEP_IDS = new Set([\"database\", \"auth\"]);\n const steps = isDevMode\n ? rawSteps\n : rawSteps.filter((s) => !DEV_ONLY_STEP_IDS.has(s.id));\n const totalCount = steps.length;\n const completeCount = steps.filter((s) => s.complete).length;\n const allComplete = steps.filter((s) => s.required).every((s) => s.complete);\n const currentStepId = steps.some((s) => s.id === rawCurrentStepId)\n ? rawCurrentStepId\n : (steps.find((s) => s.required && !s.complete)?.id ??\n steps.find((s) => !s.complete)?.id ??\n null);\n // Default expanded. (Older code used `useState(!allComplete)`, but the first\n // render fires with `steps === []` — `[].every()` is vacuously true, so\n // `allComplete` was true and `expanded` got locked to false even after the\n // real incomplete steps loaded.)\n const [expanded, setExpanded] = useState(true);\n\n if (loading || totalCount === 0) return null;\n // Preview mode (dev overlay) bypasses the auto-hide so template authors\n // can render the new-user flow even when their own setup is done.\n if (!previewMode) {\n if (dismissed) return null;\n // Auto-hide once every required step is done — no need to take up sidebar\n // space when there's nothing left to do.\n if (allComplete) return null;\n }\n\n if (!expanded) {\n return (\n <div className={className} style={styles.compactBanner}>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n style={styles.compactBannerBtn}\n title=\"Expand setup\"\n aria-label=\"Expand setup\"\n >\n <span style={allComplete ? styles.checkDone : styles.checkTodo}>\n {allComplete ? <IconCheck size={12} strokeWidth={3} /> : null}\n </span>\n <span style={styles.headerTitle}>{title}</span>\n <span style={styles.headerCounter}>\n {completeCount} of {totalCount}\n </span>\n <span style={{ marginLeft: \"auto\", opacity: 0.5, display: \"flex\" }}>\n <IconChevronDown size={14} />\n </span>\n </button>\n </div>\n );\n }\n\n return (\n <div className={className} style={styles.root}>\n <div style={styles.header}>\n <div style={styles.headerLeft}>\n {allComplete ? (\n <span style={styles.checkDone}>\n <IconCheck size={12} strokeWidth={3} />\n </span>\n ) : (\n <IconChecklist size={14} style={styles.headerIcon} aria-hidden />\n )}\n <span style={styles.headerTitle}>{title}</span>\n <span style={styles.headerCounter}>\n {completeCount} of {totalCount}\n </span>\n </div>\n <button\n type=\"button\"\n onClick={() => setExpanded(false)}\n title=\"Collapse\"\n aria-label=\"Collapse onboarding\"\n style={styles.dismissBtn}\n >\n <IconChevronUp size={14} />\n </button>\n </div>\n\n <div style={styles.list}>\n {steps.map((step) => (\n <StepCard\n key={step.id}\n step={step}\n expanded={step.id === currentStepId}\n onMarkComplete={() => complete(step.id)}\n onRefresh={refresh}\n />\n ))}\n </div>\n\n <div style={styles.footer}>\n <button type=\"button\" onClick={dismiss} style={styles.hideLink}>\n Hide setup\n </button>\n </div>\n </div>\n );\n}\n\n// ─── StepCard ──────────────────────────────────────────────────────────────\n\nfunction StepCard({\n step,\n expanded: expandedProp,\n onMarkComplete,\n onRefresh,\n}: {\n step: OnboardingStepStatus;\n expanded: boolean;\n onMarkComplete: () => void;\n onRefresh: () => Promise<void>;\n}) {\n const [expanded, setExpanded] = useState(expandedProp);\n useEffect(() => setExpanded(expandedProp), [expandedProp]);\n\n const isDone = step.complete;\n const sortedMethods = [...step.methods].sort((a, b) => {\n if (!!a.primary === !!b.primary) return 0;\n return a.primary ? -1 : 1;\n });\n\n const handleCompleted = async () => {\n await onRefresh();\n };\n\n return (\n <div\n style={{\n ...styles.card,\n ...(isDone ? styles.cardDone : null),\n }}\n >\n <button\n type=\"button\"\n style={styles.cardHeader}\n onClick={() => setExpanded((e) => !e)}\n aria-expanded={expanded}\n >\n <span style={styles.cardHeaderLeft}>\n <span style={isDone ? styles.checkDone : styles.checkTodo}>\n {isDone ? <IconCheck size={12} strokeWidth={3} /> : null}\n </span>\n <span style={styles.cardTitle}>\n {step.title}\n {step.required && !isDone && (\n <span style={styles.requiredPill}>required</span>\n )}\n </span>\n </span>\n <span style={styles.chevron}>\n {expanded ? (\n <IconChevronDown size={14} />\n ) : (\n <IconChevronRight size={14} />\n )}\n </span>\n </button>\n\n {expanded && (\n <div style={styles.cardBody}>\n <p style={styles.cardDesc}>{step.description}</p>\n <StepMethods\n step={step}\n methods={sortedMethods}\n onCompleted={handleCompleted}\n onMarkManualComplete={onMarkComplete}\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction isFormMethod(\n method: OnboardingMethod,\n): method is FormOnboardingMethod {\n return method.kind === \"form\";\n}\n\nfunction StepMethods({\n step,\n methods,\n onCompleted,\n onMarkManualComplete,\n}: {\n step: OnboardingStepStatus;\n methods: OnboardingMethod[];\n onCompleted: () => Promise<void>;\n onMarkManualComplete: () => void;\n}) {\n const formMethods = methods.filter(isFormMethod);\n\n if (step.id === \"llm\") {\n return (\n <LlmMethodGroup\n methods={methods}\n formMethods={formMethods}\n stepId={step.id}\n onCompleted={onCompleted}\n onMarkManualComplete={onMarkManualComplete}\n />\n );\n }\n\n if (methods.length > 1 && formMethods.length === methods.length) {\n const pickerLabel = step.id === \"auth\" ? \"Sign-in path\" : \"Provider\";\n return (\n <div style={styles.methods}>\n <FormMethodPicker\n methods={formMethods}\n label={pickerLabel}\n onCompleted={onCompleted}\n />\n </div>\n );\n }\n\n return (\n <div style={styles.methods}>\n {methods.map((method) => (\n <MethodBlock\n key={method.id}\n method={method}\n stepId={step.id}\n onCompleted={onCompleted}\n onMarkManualComplete={onMarkManualComplete}\n />\n ))}\n </div>\n );\n}\n\nfunction LlmMethodGroup({\n methods,\n formMethods,\n stepId,\n onCompleted,\n onMarkManualComplete,\n}: {\n methods: OnboardingMethod[];\n formMethods: FormOnboardingMethod[];\n stepId: string;\n onCompleted: () => Promise<void>;\n onMarkManualComplete: () => void;\n}) {\n const [showKeyForm, setShowKeyForm] = useState(false);\n const primaryMethod =\n methods.find((method) => method.kind === \"builder-cli-auth\") ??\n methods.find((method) => method.primary);\n const otherMethods = methods.filter(\n (method) => method !== primaryMethod && !isFormMethod(method),\n );\n\n return (\n <div style={styles.methods}>\n {primaryMethod && (\n <MethodBlock\n method={primaryMethod}\n stepId={stepId}\n onCompleted={onCompleted}\n onMarkManualComplete={onMarkManualComplete}\n />\n )}\n\n {formMethods.length > 0 && (\n <div style={styles.secondaryPanel}>\n <button\n type=\"button\"\n onClick={() => setShowKeyForm((value) => !value)}\n style={styles.secondaryToggle}\n aria-expanded={showKeyForm}\n >\n <span style={styles.secondaryToggleLeft}>\n <IconKey size={13} aria-hidden />\n <span>Add your own provider key</span>\n </span>\n <span style={styles.chevron}>\n {showKeyForm ? (\n <IconChevronDown size={14} />\n ) : (\n <IconChevronRight size={14} />\n )}\n </span>\n </button>\n {showKeyForm && (\n <FormMethodPicker\n methods={formMethods}\n label=\"Provider\"\n onCompleted={onCompleted}\n embedded\n />\n )}\n </div>\n )}\n\n {otherMethods.map((method) => (\n <MethodBlock\n key={method.id}\n method={method}\n stepId={stepId}\n onCompleted={onCompleted}\n onMarkManualComplete={onMarkManualComplete}\n />\n ))}\n </div>\n );\n}\n\nfunction FormMethodPicker({\n methods,\n label,\n onCompleted,\n embedded,\n}: {\n methods: FormOnboardingMethod[];\n label: string;\n onCompleted: () => Promise<void>;\n embedded?: boolean;\n}) {\n const [selectedId, setSelectedId] = useState(methods[0]?.id ?? \"\");\n\n useEffect(() => {\n if (!methods.some((method) => method.id === selectedId)) {\n setSelectedId(methods[0]?.id ?? \"\");\n }\n }, [methods, selectedId]);\n\n const selectedMethod =\n methods.find((method) => method.id === selectedId) ?? methods[0];\n\n if (!selectedMethod) return null;\n\n return (\n <div style={embedded ? styles.methodPickerEmbedded : styles.method}>\n <label style={styles.pickerLabel}>\n <span style={styles.formLabelText}>{label}</span>\n <select\n value={selectedMethod.id}\n onChange={(event) => setSelectedId(event.target.value)}\n style={styles.select}\n >\n {methods.map((method) => (\n <option key={method.id} value={method.id}>\n {method.label}\n </option>\n ))}\n </select>\n </label>\n {selectedMethod.description && (\n <p style={styles.methodDesc}>{selectedMethod.description}</p>\n )}\n <FormMethod\n key={selectedMethod.id}\n method={selectedMethod}\n onCompleted={onCompleted}\n />\n </div>\n );\n}\n\n// ─── MethodBlock ───────────────────────────────────────────────────────────\n\nfunction MethodBlock({\n method,\n stepId,\n onCompleted,\n onMarkManualComplete,\n}: {\n method: OnboardingMethod;\n stepId: string;\n onCompleted: () => Promise<void>;\n onMarkManualComplete: () => void;\n}) {\n return (\n <div style={method.primary ? styles.methodPrimary : styles.method}>\n <div style={styles.methodHeader}>\n <span style={styles.methodLabel}>\n {method.label}\n {method.badge && (\n <span style={badgeStyle(method.badge)}>{method.badge}</span>\n )}\n </span>\n </div>\n {method.description && (\n <p style={styles.methodDesc}>{method.description}</p>\n )}\n <MethodBody\n method={method}\n stepId={stepId}\n onCompleted={onCompleted}\n onMarkManualComplete={onMarkManualComplete}\n />\n </div>\n );\n}\n\nfunction MethodBody({\n method,\n stepId,\n onCompleted,\n onMarkManualComplete,\n}: {\n method: OnboardingMethod;\n stepId: string;\n onCompleted: () => Promise<void>;\n onMarkManualComplete: () => void;\n}) {\n switch (method.kind) {\n case \"link\":\n return (\n <LinkMethod method={method} onMarkComplete={onMarkManualComplete} />\n );\n case \"form\":\n return <FormMethod method={method} onCompleted={onCompleted} />;\n case \"builder-cli-auth\":\n return (\n <BuilderCliAuthMethod\n onCompleted={onCompleted}\n primary={method.primary}\n />\n );\n case \"agent-task\":\n return <AgentTaskMethod method={method} stepId={stepId} />;\n }\n}\n\n// ─── link ──────────────────────────────────────────────────────────────────\n\nfunction LinkMethod({\n method,\n onMarkComplete,\n}: {\n method: Extract<OnboardingMethod, { kind: \"link\" }>;\n onMarkComplete: () => void;\n}) {\n const { url, external } = method.payload;\n const isNoop = !url || url === \"#\";\n if (isNoop) {\n // Sentinel URL — treat as \"mark this method as the chosen one\".\n return (\n <button\n type=\"button\"\n style={buttonPrimary(method.primary)}\n onClick={onMarkComplete}\n >\n Use this option\n </button>\n );\n }\n return (\n <a\n href={url}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n style={{ ...buttonPrimary(method.primary), textDecoration: \"none\" }}\n >\n Continue\n {external && <IconExternalLink size={12} style={{ marginLeft: 4 }} />}\n </a>\n );\n}\n\n// ─── form ──────────────────────────────────────────────────────────────────\n\nfunction FormMethod({\n method,\n onCompleted,\n}: {\n method: Extract<OnboardingMethod, { kind: \"form\" }>;\n onCompleted: () => Promise<void>;\n}) {\n const { fields, writeScope } = method.payload;\n const [values, setValues] = useState<Record<string, string>>({});\n const [saving, setSaving] = useState(false);\n const [err, setErr] = useState<string | null>(null);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setSaving(true);\n setErr(null);\n try {\n const vars = fields\n .map((f) => ({ key: f.key, value: (values[f.key] ?? \"\").trim() }))\n .filter((v) => v.value !== \"\");\n if (vars.length === 0) {\n setErr(\"Enter a value first.\");\n return;\n }\n const res = await fetch(agentNativePath(\"/_agent-native/env-vars\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ vars, scope: writeScope ?? \"workspace\" }),\n });\n if (!res.ok) {\n const data = await res.json().catch(() => ({}));\n throw new Error(\n (data as { error?: string }).error ?? `Save failed: ${res.status}`,\n );\n }\n setValues({});\n await onCompleted();\n } catch (e) {\n setErr(e instanceof Error ? e.message : \"Save failed\");\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <form onSubmit={handleSubmit} style={styles.form}>\n {fields.map((f) => (\n <label key={f.key} style={styles.formLabel}>\n <span style={styles.formLabelText}>{f.label}</span>\n <input\n type={f.secret ? \"password\" : \"text\"}\n value={values[f.key] ?? \"\"}\n placeholder={f.placeholder}\n onChange={(e) =>\n setValues((v) => ({ ...v, [f.key]: e.target.value }))\n }\n style={styles.input}\n autoComplete=\"off\"\n spellCheck={false}\n />\n </label>\n ))}\n {err && <p style={styles.errText}>{err}</p>}\n <button\n type=\"submit\"\n disabled={saving}\n style={{ ...buttonPrimary(method.primary), opacity: saving ? 0.6 : 1 }}\n >\n {saving ? \"Saving...\" : \"Save\"}\n </button>\n </form>\n );\n}\n\n// ─── builder-cli-auth ──────────────────────────────────────────────────────\n\nfunction BuilderCliAuthMethod({\n onCompleted,\n primary,\n}: {\n onCompleted: () => Promise<void>;\n primary?: boolean;\n}) {\n const { connecting, error, start } = useBuilderConnectFlow({\n onConnected: onCompleted,\n });\n\n return (\n <>\n <button\n type=\"button\"\n onClick={start}\n disabled={connecting}\n style={{ ...buttonPrimary(primary), opacity: connecting ? 0.7 : 1 }}\n >\n {connecting ? (\n <>\n <IconLoader2\n size={12}\n style={{ marginRight: 4 }}\n className=\"animate-spin\"\n />\n Waiting for Builder...\n </>\n ) : (\n \"Connect Builder\"\n )}\n </button>\n {error && <p style={styles.errText}>{error}</p>}\n </>\n );\n}\n\n// ─── agent-task ────────────────────────────────────────────────────────────\n\nfunction AgentTaskMethod({\n method,\n stepId: _stepId,\n}: {\n method: Extract<OnboardingMethod, { kind: \"agent-task\" }>;\n stepId: string;\n}) {\n const handleClick = () => {\n sendToAgentChat({ message: method.payload.prompt, submit: true });\n };\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n style={buttonPrimary(method.primary)}\n >\n Ask the agent\n </button>\n );\n}\n\n// ─── styles ────────────────────────────────────────────────────────────────\n\nfunction buttonPrimary(primary: boolean | undefined): React.CSSProperties {\n return {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"6px 12px\",\n borderRadius: 6,\n border: primary\n ? \"1px solid transparent\"\n : \"1px solid rgba(255,255,255,0.15)\",\n background: primary ? \"#3b82f6\" : \"rgba(255,255,255,0.04)\",\n color: primary ? \"#fff\" : \"inherit\",\n fontSize: 12,\n fontWeight: 500,\n cursor: \"pointer\",\n };\n}\n\nfunction badgeStyle(\n kind: \"recommended\" | \"beta\" | \"free\",\n): React.CSSProperties {\n const palette = {\n recommended: { bg: \"rgba(59,130,246,0.15)\", fg: \"#60a5fa\" },\n beta: { bg: \"rgba(168,85,247,0.15)\", fg: \"#c084fc\" },\n free: { bg: \"rgba(34,197,94,0.15)\", fg: \"#4ade80\" },\n }[kind];\n return {\n marginLeft: 6,\n fontSize: 10,\n padding: \"1px 6px\",\n borderRadius: 4,\n background: palette.bg,\n color: palette.fg,\n fontWeight: 500,\n textTransform: \"uppercase\" as const,\n letterSpacing: 0.3,\n };\n}\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n borderBottom: \"1px solid rgba(255,255,255,0.06)\",\n background: \"rgba(255,255,255,0.02)\",\n fontSize: 12,\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: \"60vh\",\n minHeight: 0,\n },\n compactBanner: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n borderBottom: \"1px solid rgba(255,255,255,0.06)\",\n background: \"rgba(34,197,94,0.04)\",\n fontSize: 12,\n },\n compactBannerBtn: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: \"6px 12px\",\n flex: 1,\n minWidth: 0,\n },\n header: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"8px 12px\",\n },\n headerLeft: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n },\n headerIcon: { color: \"#60a5fa\" },\n headerTitle: { fontWeight: 600, fontSize: 12 },\n headerCounter: {\n opacity: 0.5,\n fontSize: 11,\n marginLeft: 4,\n },\n dismissBtn: {\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n opacity: 0.5,\n cursor: \"pointer\",\n padding: 2,\n display: \"flex\",\n },\n list: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n padding: \"4px 8px 10px\",\n overflowY: \"auto\",\n minHeight: 0,\n flex: \"1 1 auto\",\n },\n card: {\n border: \"1px solid hsl(var(--border, 0 0% 100%) / 0.06)\",\n borderRadius: 6,\n background: \"hsl(var(--muted, 0 0% 0%) / 0.12)\",\n },\n cardDone: {\n borderColor: \"rgba(34,197,94,0.12)\",\n background: \"rgba(34,197,94,0.025)\",\n },\n cardHeader: {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n padding: \"7px 9px\",\n cursor: \"pointer\",\n textAlign: \"left\" as const,\n },\n cardHeaderLeft: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n minWidth: 0,\n },\n cardTitle: {\n fontSize: 12,\n fontWeight: 500,\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n minWidth: 0,\n flexWrap: \"wrap\" as const,\n },\n requiredPill: {\n fontSize: 10,\n padding: \"1px 5px\",\n borderRadius: 4,\n background: \"rgba(239,68,68,0.12)\",\n color: \"#f87171\",\n fontWeight: 500,\n },\n chevron: { opacity: 0.5 },\n checkDone: {\n width: 16,\n height: 16,\n borderRadius: \"50%\",\n background: \"#22c55e\",\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n checkTodo: {\n width: 16,\n height: 16,\n borderRadius: \"50%\",\n border: \"1px solid rgba(255,255,255,0.2)\",\n },\n cardBody: {\n padding: \"0 10px 10px 34px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n },\n cardDesc: {\n margin: 0,\n opacity: 0.65,\n fontSize: 12,\n lineHeight: 1.4,\n },\n methods: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n },\n method: {\n padding: \"8px 10px\",\n border: \"1px solid rgba(255,255,255,0.06)\",\n borderRadius: 6,\n background: \"rgba(255,255,255,0.02)\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n },\n methodPrimary: {\n padding: \"10px\",\n border: \"1px solid rgba(59,130,246,0.25)\",\n borderRadius: 6,\n background: \"rgba(59,130,246,0.06)\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n },\n methodHeader: { display: \"flex\", alignItems: \"center\" },\n methodLabel: { fontSize: 12, fontWeight: 500 },\n methodDesc: { margin: 0, opacity: 0.6, fontSize: 11, lineHeight: 1.4 },\n secondaryPanel: {\n paddingTop: 2,\n },\n secondaryToggle: {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n padding: \"7px 8px\",\n borderRadius: 6,\n border: \"1px solid rgba(255,255,255,0.08)\",\n background: \"rgba(255,255,255,0.025)\",\n color: \"inherit\",\n cursor: \"pointer\",\n fontSize: 11,\n fontWeight: 500,\n textAlign: \"left\" as const,\n },\n secondaryToggleLeft: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n minWidth: 0,\n },\n methodPickerEmbedded: {\n paddingTop: 8,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n },\n pickerLabel: { display: \"flex\", flexDirection: \"column\", gap: 3 },\n form: { display: \"flex\", flexDirection: \"column\", gap: 6 },\n formLabel: { display: \"flex\", flexDirection: \"column\", gap: 2 },\n formLabelText: { fontSize: 11, opacity: 0.6 },\n select: {\n width: \"100%\",\n padding: \"6px 8px\",\n fontSize: 12,\n borderRadius: 5,\n border: \"1px solid rgba(255,255,255,0.1)\",\n background: \"rgba(0,0,0,0.25)\",\n color: \"inherit\",\n outline: \"none\",\n boxSizing: \"border-box\" as const,\n },\n input: {\n width: \"100%\",\n padding: \"6px 8px\",\n fontSize: 12,\n borderRadius: 5,\n border: \"1px solid rgba(255,255,255,0.1)\",\n background: \"rgba(0,0,0,0.25)\",\n color: \"inherit\",\n outline: \"none\",\n boxSizing: \"border-box\" as const,\n },\n errText: { margin: 0, fontSize: 11, color: \"#f87171\" },\n footer: {\n padding: \"0 12px 10px\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n },\n hideLink: {\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n opacity: 0.5,\n cursor: \"pointer\",\n fontSize: 11,\n padding: \"2px 4px\",\n },\n};\n"]}
1
+ {"version":3,"file":"OnboardingPanel.js","sourceRoot":"","sources":["../../../src/client/onboarding/OnboardingPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\n/**\n * <OnboardingPanel /> — the setup checklist that sits above the agent chat.\n *\n * The active step is expanded; completed steps collapse with a green check;\n * remaining steps sit dimmed below. Each method renders differently based on\n * its `kind` (link / form / builder-cli-auth / agent-task).\n */\n\nimport React, { useState, useEffect } from \"react\";\nimport {\n IconCheck,\n IconChecklist,\n IconChevronDown,\n IconChevronRight,\n IconChevronUp,\n IconExternalLink,\n IconKey,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { useOnboarding } from \"./use-onboarding.js\";\nimport { useOnboardingPreviewMode } from \"./use-preview-mode.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { useDevMode } from \"../use-dev-mode.js\";\nimport { useBuilderConnectFlow } from \"../settings/useBuilderStatus.js\";\nimport type {\n OnboardingMethod,\n OnboardingStepStatus,\n} from \"../../onboarding/types.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\ntype FormOnboardingMethod = Extract<OnboardingMethod, { kind: \"form\" }>;\n\ninterface OnboardingPanelProps {\n /** Optional extra styles / classes for the wrapper. */\n className?: string;\n /** Override the built-in title. */\n title?: string;\n}\n\nexport function OnboardingPanel({\n className,\n title = \"Setup\",\n}: OnboardingPanelProps) {\n const previewMode = useOnboardingPreviewMode();\n const onboarding = useOnboarding({ preview: previewMode });\n const { isDevMode } = useDevMode();\n const {\n steps: rawSteps,\n currentStepId: rawCurrentStepId,\n dismissed,\n loading,\n refresh,\n complete,\n dismiss,\n } = onboarding;\n // `database` and `auth` steps only apply to local dev (SQLite default,\n // local-mode auth bypass). In production those are configured via env\n // vars / deployment config, so don't nag the user about them.\n const DEV_ONLY_STEP_IDS = new Set([\"database\", \"auth\"]);\n const steps = isDevMode\n ? rawSteps\n : rawSteps.filter((s) => !DEV_ONLY_STEP_IDS.has(s.id));\n const totalCount = steps.length;\n const completeCount = steps.filter((s) => s.complete).length;\n const allComplete = steps.filter((s) => s.required).every((s) => s.complete);\n const currentStepId = steps.some((s) => s.id === rawCurrentStepId)\n ? rawCurrentStepId\n : (steps.find((s) => s.required && !s.complete)?.id ??\n steps.find((s) => !s.complete)?.id ??\n null);\n // Default expanded. (Older code used `useState(!allComplete)`, but the first\n // render fires with `steps === []` — `[].every()` is vacuously true, so\n // `allComplete` was true and `expanded` got locked to false even after the\n // real incomplete steps loaded.)\n const [expanded, setExpanded] = useState(true);\n\n if (loading || totalCount === 0) return null;\n // Preview mode (dev overlay) bypasses the auto-hide so template authors\n // can render the new-user flow even when their own setup is done.\n if (!previewMode) {\n if (dismissed) return null;\n // Auto-hide once every required step is done — no need to take up sidebar\n // space when there's nothing left to do.\n if (allComplete) return null;\n }\n\n if (!expanded) {\n return (\n <div className={className} style={styles.compactBanner}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n style={styles.compactBannerBtn}\n aria-label=\"Expand setup\"\n >\n <span style={allComplete ? styles.checkDone : styles.checkTodo}>\n {allComplete ? <IconCheck size={12} strokeWidth={3} /> : null}\n </span>\n <span style={styles.headerTitle}>{title}</span>\n <span style={styles.headerCounter}>\n {completeCount} of {totalCount}\n </span>\n <span\n style={{ marginLeft: \"auto\", opacity: 0.5, display: \"flex\" }}\n >\n <IconChevronDown size={14} />\n </span>\n </button>\n </TooltipTrigger>\n <TooltipContent>Expand setup</TooltipContent>\n </Tooltip>\n </div>\n );\n }\n\n return (\n <div className={className} style={styles.root}>\n <div style={styles.header}>\n <div style={styles.headerLeft}>\n {allComplete ? (\n <span style={styles.checkDone}>\n <IconCheck size={12} strokeWidth={3} />\n </span>\n ) : (\n <IconChecklist size={14} style={styles.headerIcon} aria-hidden />\n )}\n <span style={styles.headerTitle}>{title}</span>\n <span style={styles.headerCounter}>\n {completeCount} of {totalCount}\n </span>\n </div>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => setExpanded(false)}\n aria-label=\"Collapse onboarding\"\n style={styles.dismissBtn}\n >\n <IconChevronUp size={14} />\n </button>\n </TooltipTrigger>\n <TooltipContent>Collapse</TooltipContent>\n </Tooltip>\n </div>\n\n <div style={styles.list}>\n {steps.map((step) => (\n <StepCard\n key={step.id}\n step={step}\n expanded={step.id === currentStepId}\n onMarkComplete={() => complete(step.id)}\n onRefresh={refresh}\n />\n ))}\n </div>\n\n <div style={styles.footer}>\n <button type=\"button\" onClick={dismiss} style={styles.hideLink}>\n Hide setup\n </button>\n </div>\n </div>\n );\n}\n\n// ─── StepCard ──────────────────────────────────────────────────────────────\n\nfunction StepCard({\n step,\n expanded: expandedProp,\n onMarkComplete,\n onRefresh,\n}: {\n step: OnboardingStepStatus;\n expanded: boolean;\n onMarkComplete: () => void;\n onRefresh: () => Promise<void>;\n}) {\n const [expanded, setExpanded] = useState(expandedProp);\n useEffect(() => setExpanded(expandedProp), [expandedProp]);\n\n const isDone = step.complete;\n const sortedMethods = [...step.methods].sort((a, b) => {\n if (!!a.primary === !!b.primary) return 0;\n return a.primary ? -1 : 1;\n });\n\n const handleCompleted = async () => {\n await onRefresh();\n };\n\n return (\n <div\n style={{\n ...styles.card,\n ...(isDone ? styles.cardDone : null),\n }}\n >\n <button\n type=\"button\"\n style={styles.cardHeader}\n onClick={() => setExpanded((e) => !e)}\n aria-expanded={expanded}\n >\n <span style={styles.cardHeaderLeft}>\n <span style={isDone ? styles.checkDone : styles.checkTodo}>\n {isDone ? <IconCheck size={12} strokeWidth={3} /> : null}\n </span>\n <span style={styles.cardTitle}>\n {step.title}\n {step.required && !isDone && (\n <span style={styles.requiredPill}>required</span>\n )}\n </span>\n </span>\n <span style={styles.chevron}>\n {expanded ? (\n <IconChevronDown size={14} />\n ) : (\n <IconChevronRight size={14} />\n )}\n </span>\n </button>\n\n {expanded && (\n <div style={styles.cardBody}>\n <p style={styles.cardDesc}>{step.description}</p>\n <StepMethods\n step={step}\n methods={sortedMethods}\n onCompleted={handleCompleted}\n onMarkManualComplete={onMarkComplete}\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction isFormMethod(\n method: OnboardingMethod,\n): method is FormOnboardingMethod {\n return method.kind === \"form\";\n}\n\nfunction StepMethods({\n step,\n methods,\n onCompleted,\n onMarkManualComplete,\n}: {\n step: OnboardingStepStatus;\n methods: OnboardingMethod[];\n onCompleted: () => Promise<void>;\n onMarkManualComplete: () => void;\n}) {\n const formMethods = methods.filter(isFormMethod);\n\n if (step.id === \"llm\") {\n return (\n <LlmMethodGroup\n methods={methods}\n formMethods={formMethods}\n stepId={step.id}\n onCompleted={onCompleted}\n onMarkManualComplete={onMarkManualComplete}\n />\n );\n }\n\n if (methods.length > 1 && formMethods.length === methods.length) {\n const pickerLabel = step.id === \"auth\" ? \"Sign-in path\" : \"Provider\";\n return (\n <div style={styles.methods}>\n <FormMethodPicker\n methods={formMethods}\n label={pickerLabel}\n onCompleted={onCompleted}\n />\n </div>\n );\n }\n\n return (\n <div style={styles.methods}>\n {methods.map((method) => (\n <MethodBlock\n key={method.id}\n method={method}\n stepId={step.id}\n onCompleted={onCompleted}\n onMarkManualComplete={onMarkManualComplete}\n />\n ))}\n </div>\n );\n}\n\nfunction LlmMethodGroup({\n methods,\n formMethods,\n stepId,\n onCompleted,\n onMarkManualComplete,\n}: {\n methods: OnboardingMethod[];\n formMethods: FormOnboardingMethod[];\n stepId: string;\n onCompleted: () => Promise<void>;\n onMarkManualComplete: () => void;\n}) {\n const [showKeyForm, setShowKeyForm] = useState(false);\n const primaryMethod =\n methods.find((method) => method.kind === \"builder-cli-auth\") ??\n methods.find((method) => method.primary);\n const otherMethods = methods.filter(\n (method) => method !== primaryMethod && !isFormMethod(method),\n );\n\n return (\n <div style={styles.methods}>\n {primaryMethod && (\n <MethodBlock\n method={primaryMethod}\n stepId={stepId}\n onCompleted={onCompleted}\n onMarkManualComplete={onMarkManualComplete}\n />\n )}\n\n {formMethods.length > 0 && (\n <div style={styles.secondaryPanel}>\n <button\n type=\"button\"\n onClick={() => setShowKeyForm((value) => !value)}\n style={styles.secondaryToggle}\n aria-expanded={showKeyForm}\n >\n <span style={styles.secondaryToggleLeft}>\n <IconKey size={13} aria-hidden />\n <span>Add your own provider key</span>\n </span>\n <span style={styles.chevron}>\n {showKeyForm ? (\n <IconChevronDown size={14} />\n ) : (\n <IconChevronRight size={14} />\n )}\n </span>\n </button>\n {showKeyForm && (\n <FormMethodPicker\n methods={formMethods}\n label=\"Provider\"\n onCompleted={onCompleted}\n embedded\n />\n )}\n </div>\n )}\n\n {otherMethods.map((method) => (\n <MethodBlock\n key={method.id}\n method={method}\n stepId={stepId}\n onCompleted={onCompleted}\n onMarkManualComplete={onMarkManualComplete}\n />\n ))}\n </div>\n );\n}\n\nfunction FormMethodPicker({\n methods,\n label,\n onCompleted,\n embedded,\n}: {\n methods: FormOnboardingMethod[];\n label: string;\n onCompleted: () => Promise<void>;\n embedded?: boolean;\n}) {\n const [selectedId, setSelectedId] = useState(methods[0]?.id ?? \"\");\n\n useEffect(() => {\n if (!methods.some((method) => method.id === selectedId)) {\n setSelectedId(methods[0]?.id ?? \"\");\n }\n }, [methods, selectedId]);\n\n const selectedMethod =\n methods.find((method) => method.id === selectedId) ?? methods[0];\n\n if (!selectedMethod) return null;\n\n return (\n <div style={embedded ? styles.methodPickerEmbedded : styles.method}>\n <label style={styles.pickerLabel}>\n <span style={styles.formLabelText}>{label}</span>\n <select\n value={selectedMethod.id}\n onChange={(event) => setSelectedId(event.target.value)}\n style={styles.select}\n >\n {methods.map((method) => (\n <option key={method.id} value={method.id}>\n {method.label}\n </option>\n ))}\n </select>\n </label>\n {selectedMethod.description && (\n <p style={styles.methodDesc}>{selectedMethod.description}</p>\n )}\n <FormMethod\n key={selectedMethod.id}\n method={selectedMethod}\n onCompleted={onCompleted}\n />\n </div>\n );\n}\n\n// ─── MethodBlock ───────────────────────────────────────────────────────────\n\nfunction MethodBlock({\n method,\n stepId,\n onCompleted,\n onMarkManualComplete,\n}: {\n method: OnboardingMethod;\n stepId: string;\n onCompleted: () => Promise<void>;\n onMarkManualComplete: () => void;\n}) {\n return (\n <div style={method.primary ? styles.methodPrimary : styles.method}>\n <div style={styles.methodHeader}>\n <span style={styles.methodLabel}>\n {method.label}\n {method.badge && (\n <span style={badgeStyle(method.badge)}>{method.badge}</span>\n )}\n </span>\n </div>\n {method.description && (\n <p style={styles.methodDesc}>{method.description}</p>\n )}\n <MethodBody\n method={method}\n stepId={stepId}\n onCompleted={onCompleted}\n onMarkManualComplete={onMarkManualComplete}\n />\n </div>\n );\n}\n\nfunction MethodBody({\n method,\n stepId,\n onCompleted,\n onMarkManualComplete,\n}: {\n method: OnboardingMethod;\n stepId: string;\n onCompleted: () => Promise<void>;\n onMarkManualComplete: () => void;\n}) {\n switch (method.kind) {\n case \"link\":\n return (\n <LinkMethod method={method} onMarkComplete={onMarkManualComplete} />\n );\n case \"form\":\n return <FormMethod method={method} onCompleted={onCompleted} />;\n case \"builder-cli-auth\":\n return (\n <BuilderCliAuthMethod\n onCompleted={onCompleted}\n primary={method.primary}\n />\n );\n case \"agent-task\":\n return <AgentTaskMethod method={method} stepId={stepId} />;\n }\n}\n\n// ─── link ──────────────────────────────────────────────────────────────────\n\nfunction LinkMethod({\n method,\n onMarkComplete,\n}: {\n method: Extract<OnboardingMethod, { kind: \"link\" }>;\n onMarkComplete: () => void;\n}) {\n const { url, external } = method.payload;\n const isNoop = !url || url === \"#\";\n if (isNoop) {\n // Sentinel URL — treat as \"mark this method as the chosen one\".\n return (\n <button\n type=\"button\"\n style={buttonPrimary(method.primary)}\n onClick={onMarkComplete}\n >\n Use this option\n </button>\n );\n }\n return (\n <a\n href={url}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n style={{ ...buttonPrimary(method.primary), textDecoration: \"none\" }}\n >\n Continue\n {external && <IconExternalLink size={12} style={{ marginLeft: 4 }} />}\n </a>\n );\n}\n\n// ─── form ──────────────────────────────────────────────────────────────────\n\nfunction FormMethod({\n method,\n onCompleted,\n}: {\n method: Extract<OnboardingMethod, { kind: \"form\" }>;\n onCompleted: () => Promise<void>;\n}) {\n const { fields, writeScope } = method.payload;\n const [values, setValues] = useState<Record<string, string>>({});\n const [saving, setSaving] = useState(false);\n const [err, setErr] = useState<string | null>(null);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setSaving(true);\n setErr(null);\n try {\n const vars = fields\n .map((f) => ({ key: f.key, value: (values[f.key] ?? \"\").trim() }))\n .filter((v) => v.value !== \"\");\n if (vars.length === 0) {\n setErr(\"Enter a value first.\");\n return;\n }\n const res = await fetch(agentNativePath(\"/_agent-native/env-vars\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ vars, scope: writeScope ?? \"workspace\" }),\n });\n if (!res.ok) {\n const data = await res.json().catch(() => ({}));\n throw new Error(\n (data as { error?: string }).error ?? `Save failed: ${res.status}`,\n );\n }\n setValues({});\n await onCompleted();\n } catch (e) {\n setErr(e instanceof Error ? e.message : \"Save failed\");\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <form onSubmit={handleSubmit} style={styles.form}>\n {fields.map((f) => (\n <label key={f.key} style={styles.formLabel}>\n <span style={styles.formLabelText}>{f.label}</span>\n <input\n type={f.secret ? \"password\" : \"text\"}\n value={values[f.key] ?? \"\"}\n placeholder={f.placeholder}\n onChange={(e) =>\n setValues((v) => ({ ...v, [f.key]: e.target.value }))\n }\n style={styles.input}\n autoComplete=\"off\"\n spellCheck={false}\n />\n </label>\n ))}\n {err && <p style={styles.errText}>{err}</p>}\n <button\n type=\"submit\"\n disabled={saving}\n style={{ ...buttonPrimary(method.primary), opacity: saving ? 0.6 : 1 }}\n >\n {saving ? \"Saving...\" : \"Save\"}\n </button>\n </form>\n );\n}\n\n// ─── builder-cli-auth ──────────────────────────────────────────────────────\n\nfunction BuilderCliAuthMethod({\n onCompleted,\n primary,\n}: {\n onCompleted: () => Promise<void>;\n primary?: boolean;\n}) {\n const { connecting, error, start } = useBuilderConnectFlow({\n onConnected: onCompleted,\n });\n\n return (\n <>\n <button\n type=\"button\"\n onClick={start}\n disabled={connecting}\n style={{ ...buttonPrimary(primary), opacity: connecting ? 0.7 : 1 }}\n >\n {connecting ? (\n <>\n <IconLoader2\n size={12}\n style={{ marginRight: 4 }}\n className=\"animate-spin\"\n />\n Waiting for Builder...\n </>\n ) : (\n \"Connect Builder\"\n )}\n </button>\n {error && <p style={styles.errText}>{error}</p>}\n </>\n );\n}\n\n// ─── agent-task ────────────────────────────────────────────────────────────\n\nfunction AgentTaskMethod({\n method,\n stepId: _stepId,\n}: {\n method: Extract<OnboardingMethod, { kind: \"agent-task\" }>;\n stepId: string;\n}) {\n const handleClick = () => {\n sendToAgentChat({ message: method.payload.prompt, submit: true });\n };\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n style={buttonPrimary(method.primary)}\n >\n Ask the agent\n </button>\n );\n}\n\n// ─── styles ────────────────────────────────────────────────────────────────\n\nfunction buttonPrimary(primary: boolean | undefined): React.CSSProperties {\n return {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"6px 12px\",\n borderRadius: 6,\n border: primary\n ? \"1px solid transparent\"\n : \"1px solid rgba(255,255,255,0.15)\",\n background: primary ? \"#3b82f6\" : \"rgba(255,255,255,0.04)\",\n color: primary ? \"#fff\" : \"inherit\",\n fontSize: 12,\n fontWeight: 500,\n cursor: \"pointer\",\n };\n}\n\nfunction badgeStyle(\n kind: \"recommended\" | \"beta\" | \"free\",\n): React.CSSProperties {\n const palette = {\n recommended: { bg: \"rgba(59,130,246,0.15)\", fg: \"#60a5fa\" },\n beta: { bg: \"rgba(168,85,247,0.15)\", fg: \"#c084fc\" },\n free: { bg: \"rgba(34,197,94,0.15)\", fg: \"#4ade80\" },\n }[kind];\n return {\n marginLeft: 6,\n fontSize: 10,\n padding: \"1px 6px\",\n borderRadius: 4,\n background: palette.bg,\n color: palette.fg,\n fontWeight: 500,\n textTransform: \"uppercase\" as const,\n letterSpacing: 0.3,\n };\n}\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n borderBottom: \"1px solid rgba(255,255,255,0.06)\",\n background: \"rgba(255,255,255,0.02)\",\n fontSize: 12,\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: \"60vh\",\n minHeight: 0,\n },\n compactBanner: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n borderBottom: \"1px solid rgba(255,255,255,0.06)\",\n background: \"rgba(34,197,94,0.04)\",\n fontSize: 12,\n },\n compactBannerBtn: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: \"6px 12px\",\n flex: 1,\n minWidth: 0,\n },\n header: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"8px 12px\",\n },\n headerLeft: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n },\n headerIcon: { color: \"#60a5fa\" },\n headerTitle: { fontWeight: 600, fontSize: 12 },\n headerCounter: {\n opacity: 0.5,\n fontSize: 11,\n marginLeft: 4,\n },\n dismissBtn: {\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n opacity: 0.5,\n cursor: \"pointer\",\n padding: 2,\n display: \"flex\",\n },\n list: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n padding: \"4px 8px 10px\",\n overflowY: \"auto\",\n minHeight: 0,\n flex: \"1 1 auto\",\n },\n card: {\n border: \"1px solid hsl(var(--border, 0 0% 100%) / 0.06)\",\n borderRadius: 6,\n background: \"hsl(var(--muted, 0 0% 0%) / 0.12)\",\n },\n cardDone: {\n borderColor: \"rgba(34,197,94,0.12)\",\n background: \"rgba(34,197,94,0.025)\",\n },\n cardHeader: {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n padding: \"7px 9px\",\n cursor: \"pointer\",\n textAlign: \"left\" as const,\n },\n cardHeaderLeft: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n minWidth: 0,\n },\n cardTitle: {\n fontSize: 12,\n fontWeight: 500,\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n minWidth: 0,\n flexWrap: \"wrap\" as const,\n },\n requiredPill: {\n fontSize: 10,\n padding: \"1px 5px\",\n borderRadius: 4,\n background: \"rgba(239,68,68,0.12)\",\n color: \"#f87171\",\n fontWeight: 500,\n },\n chevron: { opacity: 0.5 },\n checkDone: {\n width: 16,\n height: 16,\n borderRadius: \"50%\",\n background: \"#22c55e\",\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n checkTodo: {\n width: 16,\n height: 16,\n borderRadius: \"50%\",\n border: \"1px solid rgba(255,255,255,0.2)\",\n },\n cardBody: {\n padding: \"0 10px 10px 34px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n },\n cardDesc: {\n margin: 0,\n opacity: 0.65,\n fontSize: 12,\n lineHeight: 1.4,\n },\n methods: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n },\n method: {\n padding: \"8px 10px\",\n border: \"1px solid rgba(255,255,255,0.06)\",\n borderRadius: 6,\n background: \"rgba(255,255,255,0.02)\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n },\n methodPrimary: {\n padding: \"10px\",\n border: \"1px solid rgba(59,130,246,0.25)\",\n borderRadius: 6,\n background: \"rgba(59,130,246,0.06)\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n },\n methodHeader: { display: \"flex\", alignItems: \"center\" },\n methodLabel: { fontSize: 12, fontWeight: 500 },\n methodDesc: { margin: 0, opacity: 0.6, fontSize: 11, lineHeight: 1.4 },\n secondaryPanel: {\n paddingTop: 2,\n },\n secondaryToggle: {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n padding: \"7px 8px\",\n borderRadius: 6,\n border: \"1px solid rgba(255,255,255,0.08)\",\n background: \"rgba(255,255,255,0.025)\",\n color: \"inherit\",\n cursor: \"pointer\",\n fontSize: 11,\n fontWeight: 500,\n textAlign: \"left\" as const,\n },\n secondaryToggleLeft: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n minWidth: 0,\n },\n methodPickerEmbedded: {\n paddingTop: 8,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n },\n pickerLabel: { display: \"flex\", flexDirection: \"column\", gap: 3 },\n form: { display: \"flex\", flexDirection: \"column\", gap: 6 },\n formLabel: { display: \"flex\", flexDirection: \"column\", gap: 2 },\n formLabelText: { fontSize: 11, opacity: 0.6 },\n select: {\n width: \"100%\",\n padding: \"6px 8px\",\n fontSize: 12,\n borderRadius: 5,\n border: \"1px solid rgba(255,255,255,0.1)\",\n background: \"rgba(0,0,0,0.25)\",\n color: \"inherit\",\n outline: \"none\",\n boxSizing: \"border-box\" as const,\n },\n input: {\n width: \"100%\",\n padding: \"6px 8px\",\n fontSize: 12,\n borderRadius: 5,\n border: \"1px solid rgba(255,255,255,0.1)\",\n background: \"rgba(0,0,0,0.25)\",\n color: \"inherit\",\n outline: \"none\",\n boxSizing: \"border-box\" as const,\n },\n errText: { margin: 0, fontSize: 11, color: \"#f87171\" },\n footer: {\n padding: \"0 12px 10px\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n },\n hideLink: {\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n opacity: 0.5,\n cursor: \"pointer\",\n fontSize: 11,\n padding: \"2px 4px\",\n },\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SetupButton.d.ts","sourceRoot":"","sources":["../../../src/client/onboarding/SetupButton.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAwChE"}
1
+ {"version":3,"file":"SetupButton.d.ts","sourceRoot":"","sources":["../../../src/client/onboarding/SetupButton.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CA4ChE"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { IconChecklist } from "@tabler/icons-react";
3
3
  import { useOnboarding } from "./use-onboarding.js";
4
4
  import { useDevMode } from "../use-dev-mode.js";
5
+ import { Tooltip, TooltipContent, TooltipTrigger, } from "../components/ui/tooltip.js";
5
6
  const DEV_ONLY_STEP_IDS = new Set(["database", "auth"]);
6
7
  export function SetupButton({ className }) {
7
8
  const { dismissed, loading, steps, reopen } = useOnboarding();
@@ -19,18 +20,18 @@ export function SetupButton({ className }) {
19
20
  return null;
20
21
  if (allComplete)
21
22
  return null;
22
- return (_jsxs("button", { type: "button", onClick: reopen, title: "Re-open setup", "aria-label": "Re-open setup", className: className, style: {
23
- display: "inline-flex",
24
- alignItems: "center",
25
- gap: 4,
26
- padding: "2px 8px",
27
- borderRadius: 5,
28
- border: "1px solid rgba(96,165,250,0.3)",
29
- background: "rgba(59,130,246,0.08)",
30
- color: "#60a5fa",
31
- fontSize: 11,
32
- fontWeight: 500,
33
- cursor: "pointer",
34
- }, children: [_jsx(IconChecklist, { size: 12 }), "Setup"] }));
23
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("button", { type: "button", onClick: reopen, "aria-label": "Re-open setup", className: className, style: {
24
+ display: "inline-flex",
25
+ alignItems: "center",
26
+ gap: 4,
27
+ padding: "2px 8px",
28
+ borderRadius: 5,
29
+ border: "1px solid rgba(96,165,250,0.3)",
30
+ background: "rgba(59,130,246,0.08)",
31
+ color: "#60a5fa",
32
+ fontSize: 11,
33
+ fontWeight: 500,
34
+ cursor: "pointer",
35
+ }, children: [_jsx(IconChecklist, { size: 12 }), "Setup"] }) }), _jsx(TooltipContent, { children: "Re-open setup" })] }));
35
36
  }
36
37
  //# sourceMappingURL=SetupButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SetupButton.js","sourceRoot":"","sources":["../../../src/client/onboarding/SetupButton.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAExD,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAA0B;IAC/D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9D,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,SAAS;QAC5B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC;IACvC,MAAM,WAAW,GAAG,YAAY;SAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;SACzB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE5B,IAAI,OAAO,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,WAAW;QAAE,OAAO,IAAI,CAAC;IAE7B,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAC,eAAe,gBACV,eAAe,EAC1B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,CAAC;YACN,OAAO,EAAE,SAAS;YAClB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,gCAAgC;YACxC,UAAU,EAAE,uBAAuB;YACnC,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,SAAS;SAClB,aAED,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,GAAI,aAEpB,CACV,CAAC;AACJ,CAAC","sourcesContent":["/**\n * <SetupButton /> — re-opens the onboarding panel after it's been dismissed.\n *\n * Only renders when the user has dismissed the panel but still has incomplete\n * required steps. Clicking clears the dismissal flag so the panel reappears.\n */\n\nimport React from \"react\";\nimport { IconChecklist } from \"@tabler/icons-react\";\nimport { useOnboarding } from \"./use-onboarding.js\";\nimport { useDevMode } from \"../use-dev-mode.js\";\n\nconst DEV_ONLY_STEP_IDS = new Set([\"database\", \"auth\"]);\n\nexport function SetupButton({ className }: { className?: string }) {\n const { dismissed, loading, steps, reopen } = useOnboarding();\n const { isDevMode } = useDevMode();\n const visibleSteps = isDevMode\n ? steps\n : steps.filter((s) => !DEV_ONLY_STEP_IDS.has(s.id));\n const totalCount = visibleSteps.length;\n const allComplete = visibleSteps\n .filter((s) => s.required)\n .every((s) => s.complete);\n\n if (loading || totalCount === 0) return null;\n if (!dismissed) return null;\n if (allComplete) return null;\n\n return (\n <button\n type=\"button\"\n onClick={reopen}\n title=\"Re-open setup\"\n aria-label=\"Re-open setup\"\n className={className}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 4,\n padding: \"2px 8px\",\n borderRadius: 5,\n border: \"1px solid rgba(96,165,250,0.3)\",\n background: \"rgba(59,130,246,0.08)\",\n color: \"#60a5fa\",\n fontSize: 11,\n fontWeight: 500,\n cursor: \"pointer\",\n }}\n >\n <IconChecklist size={12} />\n Setup\n </button>\n );\n}\n"]}
1
+ {"version":3,"file":"SetupButton.js","sourceRoot":"","sources":["../../../src/client/onboarding/SetupButton.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AAErC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAExD,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAA0B;IAC/D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9D,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,SAAS;QAC5B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC;IACvC,MAAM,WAAW,GAAG,YAAY;SAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;SACzB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE5B,IAAI,OAAO,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,WAAW;QAAE,OAAO,IAAI,CAAC;IAE7B,OAAO,CACL,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,gBACJ,eAAe,EAC1B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;wBACL,OAAO,EAAE,aAAa;wBACtB,UAAU,EAAE,QAAQ;wBACpB,GAAG,EAAE,CAAC;wBACN,OAAO,EAAE,SAAS;wBAClB,YAAY,EAAE,CAAC;wBACf,MAAM,EAAE,gCAAgC;wBACxC,UAAU,EAAE,uBAAuB;wBACnC,KAAK,EAAE,SAAS;wBAChB,QAAQ,EAAE,EAAE;wBACZ,UAAU,EAAE,GAAG;wBACf,MAAM,EAAE,SAAS;qBAClB,aAED,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,GAAI,aAEpB,GACM,EACjB,KAAC,cAAc,gCAA+B,IACtC,CACX,CAAC;AACJ,CAAC","sourcesContent":["/**\n * <SetupButton /> — re-opens the onboarding panel after it's been dismissed.\n *\n * Only renders when the user has dismissed the panel but still has incomplete\n * required steps. Clicking clears the dismissal flag so the panel reappears.\n */\n\nimport React from \"react\";\nimport { IconChecklist } from \"@tabler/icons-react\";\nimport { useOnboarding } from \"./use-onboarding.js\";\nimport { useDevMode } from \"../use-dev-mode.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nconst DEV_ONLY_STEP_IDS = new Set([\"database\", \"auth\"]);\n\nexport function SetupButton({ className }: { className?: string }) {\n const { dismissed, loading, steps, reopen } = useOnboarding();\n const { isDevMode } = useDevMode();\n const visibleSteps = isDevMode\n ? steps\n : steps.filter((s) => !DEV_ONLY_STEP_IDS.has(s.id));\n const totalCount = visibleSteps.length;\n const allComplete = visibleSteps\n .filter((s) => s.required)\n .every((s) => s.complete);\n\n if (loading || totalCount === 0) return null;\n if (!dismissed) return null;\n if (allComplete) return null;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={reopen}\n aria-label=\"Re-open setup\"\n className={className}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 4,\n padding: \"2px 8px\",\n borderRadius: 5,\n border: \"1px solid rgba(96,165,250,0.3)\",\n background: \"rgba(59,130,246,0.08)\",\n color: \"#60a5fa\",\n fontSize: 11,\n fontWeight: 500,\n cursor: \"pointer\",\n }}\n >\n <IconChecklist size={12} />\n Setup\n </button>\n </TooltipTrigger>\n <TooltipContent>Re-open setup</TooltipContent>\n </Tooltip>\n );\n}\n"]}
@@ -2,8 +2,14 @@ export interface InvitationBannerProps {
2
2
  className?: string;
3
3
  }
4
4
  /**
5
- * Top-of-app banner that surfaces pending org invitations with an inline
6
- * Accept button. Renders nothing when there are no pending invites.
5
+ * Top-of-app banner that surfaces:
6
+ * - Pending org invitations (one-click Accept).
7
+ * - Domain-match orgs the user can auto-join because their email domain
8
+ * matches `organizations.allowed_domain` (one-click Join). Lets a new
9
+ * signup at e.g. `someone@builder.io` see and join the existing
10
+ * Builder.io org without going through the picker.
11
+ *
12
+ * Renders nothing when there's nothing to surface.
7
13
  */
8
14
  export declare function InvitationBanner({ className }: InvitationBannerProps): import("react/jsx-runtime").JSX.Element;
9
15
  //# sourceMappingURL=InvitationBanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InvitationBanner.d.ts","sourceRoot":"","sources":["../../../src/client/org/InvitationBanner.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE,qBAAqB,2CA0CpE"}
1
+ {"version":3,"file":"InvitationBanner.d.ts","sourceRoot":"","sources":["../../../src/client/org/InvitationBanner.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE,qBAAqB,2CAoFpE"}
@@ -1,17 +1,38 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
2
3
  import { IconLoader2 } from "@tabler/icons-react";
3
- import { useOrg, useAcceptInvitation } from "./hooks.js";
4
+ import { useOrg, useAcceptInvitation, useJoinByDomain } from "./hooks.js";
4
5
  /**
5
- * Top-of-app banner that surfaces pending org invitations with an inline
6
- * Accept button. Renders nothing when there are no pending invites.
6
+ * Top-of-app banner that surfaces:
7
+ * - Pending org invitations (one-click Accept).
8
+ * - Domain-match orgs the user can auto-join because their email domain
9
+ * matches `organizations.allowed_domain` (one-click Join). Lets a new
10
+ * signup at e.g. `someone@builder.io` see and join the existing
11
+ * Builder.io org without going through the picker.
12
+ *
13
+ * Renders nothing when there's nothing to surface.
7
14
  */
8
15
  export function InvitationBanner({ className }) {
9
16
  const { data: org } = useOrg();
10
17
  const acceptInvitation = useAcceptInvitation();
11
- if (!org?.pendingInvitations?.length)
18
+ const joinByDomain = useJoinByDomain();
19
+ const [joiningOrgId, setJoiningOrgId] = useState(null);
20
+ const pendingInvitations = org?.pendingInvitations ?? [];
21
+ const domainMatches = org?.domainMatches ?? [];
22
+ if (pendingInvitations.length === 0 && domainMatches.length === 0) {
12
23
  return null;
13
- return (_jsxs("div", { className: `border-b border-border bg-blue-50 dark:bg-blue-950/30 px-3 py-2.5 sm:px-4 ${className ?? ""}`, children: [org.pendingInvitations.map((inv) => (_jsxs("div", { className: "flex items-center justify-between gap-3 text-sm", children: [_jsxs("span", { className: "text-foreground", children: [_jsx("span", { className: "font-medium", children: inv.invitedBy }), " invited you to join ", _jsx("span", { className: "font-medium", children: inv.orgName })] }), _jsx("button", { type: "button", onClick: () => {
24
+ }
25
+ const error = acceptInvitation.error || joinByDomain.error;
26
+ return (_jsxs("div", { className: `border-b border-border bg-blue-50 dark:bg-blue-950/30 px-3 py-2.5 sm:px-4 ${className ?? ""}`, children: [pendingInvitations.map((inv) => (_jsxs("div", { className: "flex items-center justify-between gap-3 text-sm", children: [_jsxs("span", { className: "text-foreground", children: [_jsx("span", { className: "font-medium", children: inv.invitedBy }), " invited you to join ", _jsx("span", { className: "font-medium", children: inv.orgName })] }), _jsx("button", { type: "button", onClick: () => {
14
27
  acceptInvitation.mutate(inv.id);
15
- }, disabled: acceptInvitation.isPending, className: "rounded-md bg-green-600 px-2.5 py-1 text-xs font-medium text-white hover:bg-green-700 disabled:opacity-50", children: acceptInvitation.isPending ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : ("Join") })] }, inv.id))), acceptInvitation.error && (_jsx("div", { className: "mt-1 text-xs text-red-600", children: acceptInvitation.error.message }))] }));
28
+ }, disabled: acceptInvitation.isPending, className: "rounded-md bg-green-600 px-2.5 py-1 text-xs font-medium text-white hover:bg-green-700 disabled:opacity-50 cursor-pointer", children: acceptInvitation.isPending ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : ("Join") })] }, inv.id))), domainMatches.map((match) => {
29
+ const isJoining = joinByDomain.isPending && joiningOrgId === match.orgId;
30
+ return (_jsxs("div", { className: "flex items-center justify-between gap-3 text-sm", children: [_jsxs("span", { className: "text-foreground", children: ["Your team is already using this app. Join", " ", _jsx("span", { className: "font-medium", children: match.orgName }), " to collaborate."] }), _jsx("button", { type: "button", onClick: () => {
31
+ setJoiningOrgId(match.orgId);
32
+ joinByDomain.mutate(match.orgId, {
33
+ onSettled: () => setJoiningOrgId(null),
34
+ });
35
+ }, disabled: joinByDomain.isPending, className: "rounded-md bg-green-600 px-2.5 py-1 text-xs font-medium text-white hover:bg-green-700 disabled:opacity-50 cursor-pointer", children: isJoining ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : ("Join") })] }, match.orgId));
36
+ }), error && (_jsx("div", { className: "mt-1 text-xs text-red-600", children: error.message }))] }));
16
37
  }
17
38
  //# sourceMappingURL=InvitationBanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InvitationBanner.js","sourceRoot":"","sources":["../../../src/client/org/InvitationBanner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAMzD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAE,SAAS,EAAyB;IACnE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAC/B,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAE/C,IAAI,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IAElD,OAAO,CACL,eACE,SAAS,EAAE,6EAA6E,SAAS,IAAI,EAAE,EAAE,aAExG,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACnC,eAEE,SAAS,EAAC,iDAAiD,aAE3D,gBAAM,SAAS,EAAC,iBAAiB,aAC/B,eAAM,SAAS,EAAC,aAAa,YAAE,GAAG,CAAC,SAAS,GAAQ,2BAC/C,eAAM,SAAS,EAAC,aAAa,YAAE,GAAG,CAAC,OAAO,GAAQ,IAClD,EACP,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;4BACZ,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAClC,CAAC,EACD,QAAQ,EAAE,gBAAgB,CAAC,SAAS,EACpC,SAAS,EAAC,2GAA2G,YAEpH,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAC5B,KAAC,WAAW,IAAC,SAAS,EAAC,sBAAsB,GAAG,CACjD,CAAC,CAAC,CAAC,CACF,MAAM,CACP,GACM,KApBJ,GAAG,CAAC,EAAE,CAqBP,CACP,CAAC,EACD,gBAAgB,CAAC,KAAK,IAAI,CACzB,cAAK,SAAS,EAAC,2BAA2B,YACtC,gBAAgB,CAAC,KAAe,CAAC,OAAO,GACtC,CACP,IACG,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { IconLoader2 } from \"@tabler/icons-react\";\nimport { useOrg, useAcceptInvitation } from \"./hooks.js\";\n\nexport interface InvitationBannerProps {\n className?: string;\n}\n\n/**\n * Top-of-app banner that surfaces pending org invitations with an inline\n * Accept button. Renders nothing when there are no pending invites.\n */\nexport function InvitationBanner({ className }: InvitationBannerProps) {\n const { data: org } = useOrg();\n const acceptInvitation = useAcceptInvitation();\n\n if (!org?.pendingInvitations?.length) return null;\n\n return (\n <div\n className={`border-b border-border bg-blue-50 dark:bg-blue-950/30 px-3 py-2.5 sm:px-4 ${className ?? \"\"}`}\n >\n {org.pendingInvitations.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between gap-3 text-sm\"\n >\n <span className=\"text-foreground\">\n <span className=\"font-medium\">{inv.invitedBy}</span> invited you to\n join <span className=\"font-medium\">{inv.orgName}</span>\n </span>\n <button\n type=\"button\"\n onClick={() => {\n acceptInvitation.mutate(inv.id);\n }}\n disabled={acceptInvitation.isPending}\n className=\"rounded-md bg-green-600 px-2.5 py-1 text-xs font-medium text-white hover:bg-green-700 disabled:opacity-50\"\n >\n {acceptInvitation.isPending ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Join\"\n )}\n </button>\n </div>\n ))}\n {acceptInvitation.error && (\n <div className=\"mt-1 text-xs text-red-600\">\n {(acceptInvitation.error as Error).message}\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"InvitationBanner.js","sourceRoot":"","sources":["../../../src/client/org/InvitationBanner.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState } from \"react\";\nimport { IconLoader2 } from \"@tabler/icons-react\";\nimport { useOrg, useAcceptInvitation, useJoinByDomain } from \"./hooks.js\";\n\nexport interface InvitationBannerProps {\n className?: string;\n}\n\n/**\n * Top-of-app banner that surfaces:\n * - Pending org invitations (one-click Accept).\n * - Domain-match orgs the user can auto-join because their email domain\n * matches `organizations.allowed_domain` (one-click Join). Lets a new\n * signup at e.g. `someone@builder.io` see and join the existing\n * Builder.io org without going through the picker.\n *\n * Renders nothing when there's nothing to surface.\n */\nexport function InvitationBanner({ className }: InvitationBannerProps) {\n const { data: org } = useOrg();\n const acceptInvitation = useAcceptInvitation();\n const joinByDomain = useJoinByDomain();\n const [joiningOrgId, setJoiningOrgId] = useState<string | null>(null);\n\n const pendingInvitations = org?.pendingInvitations ?? [];\n const domainMatches = org?.domainMatches ?? [];\n\n if (pendingInvitations.length === 0 && domainMatches.length === 0) {\n return null;\n }\n\n const error = acceptInvitation.error || joinByDomain.error;\n\n return (\n <div\n className={`border-b border-border bg-blue-50 dark:bg-blue-950/30 px-3 py-2.5 sm:px-4 ${className ?? \"\"}`}\n >\n {pendingInvitations.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between gap-3 text-sm\"\n >\n <span className=\"text-foreground\">\n <span className=\"font-medium\">{inv.invitedBy}</span> invited you to\n join <span className=\"font-medium\">{inv.orgName}</span>\n </span>\n <button\n type=\"button\"\n onClick={() => {\n acceptInvitation.mutate(inv.id);\n }}\n disabled={acceptInvitation.isPending}\n className=\"rounded-md bg-green-600 px-2.5 py-1 text-xs font-medium text-white hover:bg-green-700 disabled:opacity-50 cursor-pointer\"\n >\n {acceptInvitation.isPending ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Join\"\n )}\n </button>\n </div>\n ))}\n {domainMatches.map((match) => {\n const isJoining =\n joinByDomain.isPending && joiningOrgId === match.orgId;\n return (\n <div\n key={match.orgId}\n className=\"flex items-center justify-between gap-3 text-sm\"\n >\n <span className=\"text-foreground\">\n Your team is already using this app. Join{\" \"}\n <span className=\"font-medium\">{match.orgName}</span> to\n collaborate.\n </span>\n <button\n type=\"button\"\n onClick={() => {\n setJoiningOrgId(match.orgId);\n joinByDomain.mutate(match.orgId, {\n onSettled: () => setJoiningOrgId(null),\n });\n }}\n disabled={joinByDomain.isPending}\n className=\"rounded-md bg-green-600 px-2.5 py-1 text-xs font-medium text-white hover:bg-green-700 disabled:opacity-50 cursor-pointer\"\n >\n {isJoining ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Join\"\n )}\n </button>\n </div>\n );\n })}\n {error && (\n <div className=\"mt-1 text-xs text-red-600\">\n {(error as Error).message}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"OrgSwitcher.d.ts","sourceRoot":"","sources":["../../../src/client/org/OrgSwitcher.tsx"],"names":[],"mappings":"AAqBA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAyBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,YAAY,GACb,EAAE,gBAAgB,2CAgVlB"}
1
+ {"version":3,"file":"OrgSwitcher.d.ts","sourceRoot":"","sources":["../../../src/client/org/OrgSwitcher.tsx"],"names":[],"mappings":"AAsBA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAyBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,YAAY,GACb,EAAE,gBAAgB,2CA4YlB"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useState } from "react";
3
3
  import * as PopoverPrimitive from "@radix-ui/react-popover";
4
4
  import { IconBuilding, IconCheck, IconLoader2, IconLogout, IconPlus, IconSelector, IconUser, IconUserPlus, } from "@tabler/icons-react";
5
- import { useOrg, useSwitchOrg, useCreateOrg, useInviteMember, useAcceptInvitation, } from "./hooks.js";
5
+ import { useOrg, useSwitchOrg, useCreateOrg, useInviteMember, useAcceptInvitation, useJoinByDomain, } from "./hooks.js";
6
6
  import { agentNativePath } from "../api-path.js";
7
7
  function personalLabelFromEmail(email) {
8
8
  if (!email)
@@ -32,11 +32,13 @@ export function OrgSwitcher({ className, hideWhenSingle, reserveSpace, }) {
32
32
  const createOrg = useCreateOrg();
33
33
  const inviteMember = useInviteMember();
34
34
  const acceptInvitation = useAcceptInvitation();
35
+ const joinByDomain = useJoinByDomain();
35
36
  const [open, setOpen] = useState(false);
36
37
  const [mode, setMode] = useState("list");
37
38
  const [newName, setNewName] = useState("");
38
39
  const [inviteEmail, setInviteEmail] = useState("");
39
40
  const [signingOut, setSigningOut] = useState(false);
41
+ const [joiningOrgId, setJoiningOrgId] = useState(null);
40
42
  const handleOpenChange = (next) => {
41
43
  setOpen(next);
42
44
  if (!next) {
@@ -65,12 +67,16 @@ export function OrgSwitcher({ className, hideWhenSingle, reserveSpace, }) {
65
67
  }
66
68
  const orgs = org.orgs ?? [];
67
69
  const pendingInvitations = org.pendingInvitations ?? [];
70
+ const domainMatches = org.domainMatches ?? [];
68
71
  const orgCount = orgs.length;
69
- const hasAny = orgCount > 0 || pendingInvitations.length > 0;
72
+ const hasAny = orgCount > 0 || pendingInvitations.length > 0 || domainMatches.length > 0;
70
73
  if (!hasAny && !org.email) {
71
74
  return reserveSpace ? (_jsx("div", { "aria-hidden": "true", className: `h-8 ${className ?? ""}` })) : null;
72
75
  }
73
- if (hideWhenSingle && orgCount < 2 && pendingInvitations.length === 0) {
76
+ if (hideWhenSingle &&
77
+ orgCount < 2 &&
78
+ pendingInvitations.length === 0 &&
79
+ domainMatches.length === 0) {
74
80
  return reserveSpace ? (_jsx("div", { "aria-hidden": "true", className: `h-8 ${className ?? ""}` })) : null;
75
81
  }
76
82
  const canInvite = !!org.orgId && (org.role === "owner" || org.role === "admin");
@@ -102,8 +108,26 @@ export function OrgSwitcher({ className, hideWhenSingle, reserveSpace, }) {
102
108
  catch {
103
109
  /* error surfaced via acceptInvitation.error */
104
110
  }
105
- }, disabled: acceptInvitation.isPending, className: "rounded px-1.5 py-0.5 text-[11px] font-medium text-primary hover:bg-primary/10 disabled:opacity-50 cursor-pointer", children: acceptInvitation.isPending ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : ("Join") })] }, inv.id)))] })), _jsx("div", { className: "my-1 h-px bg-border" }), _jsxs("button", { type: "button", onClick: () => setMode("create"), className: `${ITEM_CLASS} cursor-pointer`, children: [_jsx(IconPlus, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }), _jsx("span", { className: "flex-1 text-left", children: "Create organization" })] }), canInvite && (_jsxs("button", { type: "button", onClick: () => setMode("invite"), className: `${ITEM_CLASS} cursor-pointer`, children: [_jsx(IconUserPlus, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }), _jsx("span", { className: "flex-1 text-left", children: "Invite member" })] })), _jsx("div", { className: "my-1 h-px bg-border" }), _jsxs("button", { type: "button", onClick: handleSignOut, disabled: signingOut, className: `${ITEM_CLASS} cursor-pointer`, children: [signingOut ? (_jsx(IconLoader2, { className: "h-3.5 w-3.5 shrink-0 animate-spin text-muted-foreground" })) : (_jsx(IconLogout, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" })), _jsxs("span", { className: "flex-1 text-left", children: ["Sign out", org.email ? (_jsxs("span", { className: "ml-1 text-muted-foreground", children: ["(", org.email, ")"] })) : null] })] }), (switchOrg.error || acceptInvitation.error) && (_jsx("div", { className: "px-2.5 pt-1 text-[11px] text-destructive", children: (switchOrg.error || acceptInvitation.error)
106
- .message }))] })), mode === "create" && (_jsxs("form", { onSubmit: async (e) => {
111
+ }, disabled: acceptInvitation.isPending, className: "rounded px-1.5 py-0.5 text-[11px] font-medium text-primary hover:bg-primary/10 disabled:opacity-50 cursor-pointer", children: acceptInvitation.isPending ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : ("Join") })] }, inv.id)))] })), domainMatches.length > 0 && (_jsxs(_Fragment, { children: [(orgs.length > 0 || pendingInvitations.length > 0) && (_jsx("div", { className: "my-1 h-px bg-border" })), _jsx("div", { className: SECTION_LABEL_CLASS, children: "Join your team" }), domainMatches.map((match) => {
112
+ const isJoining = joinByDomain.isPending && joiningOrgId === match.orgId;
113
+ return (_jsxs("div", { className: "flex items-center gap-2 px-2.5 py-1.5 text-xs", children: [_jsx(IconBuilding, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }), _jsx("span", { className: "truncate flex-1 text-foreground", children: match.orgName }), _jsx("button", { type: "button", onClick: async () => {
114
+ setJoiningOrgId(match.orgId);
115
+ try {
116
+ await joinByDomain.mutateAsync(match.orgId);
117
+ setOpen(false);
118
+ }
119
+ catch {
120
+ /* error surfaced via joinByDomain.error */
121
+ }
122
+ finally {
123
+ setJoiningOrgId(null);
124
+ }
125
+ }, disabled: joinByDomain.isPending, className: "rounded px-1.5 py-0.5 text-[11px] font-medium text-primary hover:bg-primary/10 disabled:opacity-50 cursor-pointer", children: isJoining ? (_jsx(IconLoader2, { className: "h-3 w-3 animate-spin" })) : ("Join") })] }, match.orgId));
126
+ })] })), _jsx("div", { className: "my-1 h-px bg-border" }), _jsxs("button", { type: "button", onClick: () => setMode("create"), className: `${ITEM_CLASS} cursor-pointer`, children: [_jsx(IconPlus, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }), _jsx("span", { className: "flex-1 text-left", children: "Create organization" })] }), canInvite && (_jsxs("button", { type: "button", onClick: () => setMode("invite"), className: `${ITEM_CLASS} cursor-pointer`, children: [_jsx(IconUserPlus, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }), _jsx("span", { className: "flex-1 text-left", children: "Invite member" })] })), _jsx("div", { className: "my-1 h-px bg-border" }), _jsxs("button", { type: "button", onClick: handleSignOut, disabled: signingOut, className: `${ITEM_CLASS} cursor-pointer`, children: [signingOut ? (_jsx(IconLoader2, { className: "h-3.5 w-3.5 shrink-0 animate-spin text-muted-foreground" })) : (_jsx(IconLogout, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" })), _jsxs("span", { className: "flex-1 text-left", children: ["Sign out", org.email ? (_jsxs("span", { className: "ml-1 text-muted-foreground", children: ["(", org.email, ")"] })) : null] })] }), (switchOrg.error ||
127
+ acceptInvitation.error ||
128
+ joinByDomain.error) && (_jsx("div", { className: "px-2.5 pt-1 text-[11px] text-destructive", children: (switchOrg.error ||
129
+ acceptInvitation.error ||
130
+ joinByDomain.error).message }))] })), mode === "create" && (_jsxs("form", { onSubmit: async (e) => {
107
131
  e.preventDefault();
108
132
  const name = newName.trim();
109
133
  if (!name)