@stackframe/tanstack-start 0.0.1 → 2.8.92

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 (1037) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +26 -0
  3. package/dist/chunk-BE-pF4vm.js +34 -0
  4. package/dist/components/api-key-dialogs.d.ts +28 -0
  5. package/dist/components/api-key-dialogs.d.ts.map +1 -0
  6. package/dist/components/api-key-dialogs.js +163 -0
  7. package/dist/components/api-key-dialogs.js.map +1 -0
  8. package/dist/components/api-key-table.d.ts +10 -0
  9. package/dist/components/api-key-table.d.ts.map +1 -0
  10. package/dist/components/api-key-table.js +144 -0
  11. package/dist/components/api-key-table.js.map +1 -0
  12. package/dist/components/credential-sign-in.d.ts +7 -0
  13. package/dist/components/credential-sign-in.d.ts.map +1 -0
  14. package/dist/components/credential-sign-in.js +87 -0
  15. package/dist/components/credential-sign-in.js.map +1 -0
  16. package/dist/components/credential-sign-up.d.ts +9 -0
  17. package/dist/components/credential-sign-up.d.ts.map +1 -0
  18. package/dist/components/credential-sign-up.js +121 -0
  19. package/dist/components/credential-sign-up.js.map +1 -0
  20. package/dist/components/elements/form-warning.d.ts +11 -0
  21. package/dist/components/elements/form-warning.d.ts.map +1 -0
  22. package/dist/components/elements/form-warning.js +18 -0
  23. package/dist/components/elements/form-warning.js.map +1 -0
  24. package/dist/components/elements/maybe-full-page.d.ts +16 -0
  25. package/dist/components/elements/maybe-full-page.d.ts.map +1 -0
  26. package/dist/components/elements/maybe-full-page.js +41 -0
  27. package/dist/components/elements/maybe-full-page.js.map +1 -0
  28. package/dist/components/elements/separator-with-text.d.ts +11 -0
  29. package/dist/components/elements/separator-with-text.d.ts.map +1 -0
  30. package/dist/components/elements/separator-with-text.js +31 -0
  31. package/dist/components/elements/separator-with-text.js.map +1 -0
  32. package/dist/components/elements/sidebar-layout.d.ts +21 -0
  33. package/dist/components/elements/sidebar-layout.d.ts.map +1 -0
  34. package/dist/components/elements/sidebar-layout.js +135 -0
  35. package/dist/components/elements/sidebar-layout.js.map +1 -0
  36. package/dist/components/elements/ssr-layout-effect.d.ts +10 -0
  37. package/dist/components/elements/ssr-layout-effect.d.ts.map +1 -0
  38. package/dist/components/elements/ssr-layout-effect.js +22 -0
  39. package/dist/components/elements/ssr-layout-effect.js.map +1 -0
  40. package/dist/components/elements/user-avatar.d.ts +15 -0
  41. package/dist/components/elements/user-avatar.d.ts.map +1 -0
  42. package/dist/components/elements/user-avatar.js +30 -0
  43. package/dist/components/elements/user-avatar.js.map +1 -0
  44. package/dist/components/link.d.ts +16 -0
  45. package/dist/components/link.d.ts.map +1 -0
  46. package/dist/components/link.js +29 -0
  47. package/dist/components/link.js.map +1 -0
  48. package/dist/components/magic-link-sign-in.d.ts +7 -0
  49. package/dist/components/magic-link-sign-in.d.ts.map +1 -0
  50. package/dist/components/magic-link-sign-in.js +138 -0
  51. package/dist/components/magic-link-sign-in.js.map +1 -0
  52. package/dist/components/message-cards/known-error-message-card.d.ts +14 -0
  53. package/dist/components/message-cards/known-error-message-card.d.ts.map +1 -0
  54. package/dist/components/message-cards/known-error-message-card.js +24 -0
  55. package/dist/components/message-cards/known-error-message-card.js.map +1 -0
  56. package/dist/components/message-cards/message-card.d.ts +19 -0
  57. package/dist/components/message-cards/message-card.d.ts.map +1 -0
  58. package/dist/components/message-cards/message-card.js +46 -0
  59. package/dist/components/message-cards/message-card.js.map +1 -0
  60. package/dist/components/message-cards/predefined-message-card.d.ts +13 -0
  61. package/dist/components/message-cards/predefined-message-card.d.ts.map +1 -0
  62. package/dist/components/message-cards/predefined-message-card.js +73 -0
  63. package/dist/components/message-cards/predefined-message-card.js.map +1 -0
  64. package/dist/components/oauth-button-group.d.ts +19 -0
  65. package/dist/components/oauth-button-group.d.ts.map +1 -0
  66. package/dist/components/oauth-button-group.js +24 -0
  67. package/dist/components/oauth-button-group.js.map +1 -0
  68. package/dist/components/oauth-button.d.ts +17 -0
  69. package/dist/components/oauth-button.d.ts.map +1 -0
  70. package/dist/components/oauth-button.js +173 -0
  71. package/dist/components/oauth-button.js.map +1 -0
  72. package/dist/components/passkey-button.d.ts +11 -0
  73. package/dist/components/passkey-button.d.ts.map +1 -0
  74. package/dist/components/passkey-button.js +33 -0
  75. package/dist/components/passkey-button.js.map +1 -0
  76. package/dist/components/profile-image-editor.d.ts +15 -0
  77. package/dist/components/profile-image-editor.d.ts.map +1 -0
  78. package/dist/components/profile-image-editor.js +171 -0
  79. package/dist/components/profile-image-editor.js.map +1 -0
  80. package/dist/components/selected-team-switcher.d.ts +31 -0
  81. package/dist/components/selected-team-switcher.d.ts.map +1 -0
  82. package/dist/components/selected-team-switcher.js +59 -0
  83. package/dist/components/selected-team-switcher.js.map +1 -0
  84. package/dist/components/team-icon.d.ts +10 -0
  85. package/dist/components/team-icon.d.ts.map +1 -0
  86. package/dist/components/team-icon.js +31 -0
  87. package/dist/components/team-icon.js.map +1 -0
  88. package/dist/components/team-switcher.d.ts +31 -0
  89. package/dist/components/team-switcher.d.ts.map +1 -0
  90. package/dist/components/team-switcher.js +123 -0
  91. package/dist/components/team-switcher.js.map +1 -0
  92. package/dist/components/use-in-iframe.d.ts +5 -0
  93. package/dist/components/use-in-iframe.d.ts.map +1 -0
  94. package/dist/components/use-in-iframe.js +18 -0
  95. package/dist/components/use-in-iframe.js.map +1 -0
  96. package/dist/components/user-button.d.ts +22 -0
  97. package/dist/components/user-button.d.ts.map +1 -0
  98. package/dist/components/user-button.js +134 -0
  99. package/dist/components/user-button.js.map +1 -0
  100. package/dist/components-page/account-settings/active-sessions/active-sessions-page.d.ts +20 -0
  101. package/dist/components-page/account-settings/active-sessions/active-sessions-page.d.ts.map +1 -0
  102. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js +208 -0
  103. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -0
  104. package/dist/components-page/account-settings/api-keys/api-keys-page.d.ts +16 -0
  105. package/dist/components-page/account-settings/api-keys/api-keys-page.d.ts.map +1 -0
  106. package/dist/components-page/account-settings/api-keys/api-keys-page.js +115 -0
  107. package/dist/components-page/account-settings/api-keys/api-keys-page.js.map +1 -0
  108. package/dist/components-page/account-settings/editable-text.d.ts +10 -0
  109. package/dist/components-page/account-settings/editable-text.d.ts.map +1 -0
  110. package/dist/components-page/account-settings/editable-text.js +49 -0
  111. package/dist/components-page/account-settings/editable-text.js.map +1 -0
  112. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.d.ts +9 -0
  113. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.d.ts.map +1 -0
  114. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.js +24 -0
  115. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -0
  116. package/dist/components-page/account-settings/email-and-auth/emails-section.d.ts +9 -0
  117. package/dist/components-page/account-settings/email-and-auth/emails-section.d.ts.map +1 -0
  118. package/dist/components-page/account-settings/email-and-auth/emails-section.js +181 -0
  119. package/dist/components-page/account-settings/email-and-auth/emails-section.js.map +1 -0
  120. package/dist/components-page/account-settings/email-and-auth/mfa-section.d.ts +9 -0
  121. package/dist/components-page/account-settings/email-and-auth/mfa-section.d.ts.map +1 -0
  122. package/dist/components-page/account-settings/email-and-auth/mfa-section.js +121 -0
  123. package/dist/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -0
  124. package/dist/components-page/account-settings/email-and-auth/otp-section.d.ts +9 -0
  125. package/dist/components-page/account-settings/email-and-auth/otp-section.d.ts.map +1 -0
  126. package/dist/components-page/account-settings/email-and-auth/otp-section.js +80 -0
  127. package/dist/components-page/account-settings/email-and-auth/otp-section.js.map +1 -0
  128. package/dist/components-page/account-settings/email-and-auth/passkey-section.d.ts +9 -0
  129. package/dist/components-page/account-settings/email-and-auth/passkey-section.d.ts.map +1 -0
  130. package/dist/components-page/account-settings/email-and-auth/passkey-section.js +89 -0
  131. package/dist/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -0
  132. package/dist/components-page/account-settings/email-and-auth/password-section.d.ts +9 -0
  133. package/dist/components-page/account-settings/email-and-auth/password-section.d.ts.map +1 -0
  134. package/dist/components-page/account-settings/email-and-auth/password-section.js +161 -0
  135. package/dist/components-page/account-settings/email-and-auth/password-section.js.map +1 -0
  136. package/dist/components-page/account-settings/notifications/notifications-page.d.ts +7 -0
  137. package/dist/components-page/account-settings/notifications/notifications-page.d.ts.map +1 -0
  138. package/dist/components-page/account-settings/notifications/notifications-page.js +42 -0
  139. package/dist/components-page/account-settings/notifications/notifications-page.js.map +1 -0
  140. package/dist/components-page/account-settings/page-layout.d.ts +9 -0
  141. package/dist/components-page/account-settings/page-layout.d.ts.map +1 -0
  142. package/dist/components-page/account-settings/page-layout.js +15 -0
  143. package/dist/components-page/account-settings/page-layout.js.map +1 -0
  144. package/dist/components-page/account-settings/payments/payments-page.d.ts +12 -0
  145. package/dist/components-page/account-settings/payments/payments-page.d.ts.map +1 -0
  146. package/dist/components-page/account-settings/payments/payments-page.js +55 -0
  147. package/dist/components-page/account-settings/payments/payments-page.js.map +1 -0
  148. package/dist/components-page/account-settings/payments/payments-panel.d.ts +61 -0
  149. package/dist/components-page/account-settings/payments/payments-panel.d.ts.map +1 -0
  150. package/dist/components-page/account-settings/payments/payments-panel.js +466 -0
  151. package/dist/components-page/account-settings/payments/payments-panel.js.map +1 -0
  152. package/dist/components-page/account-settings/profile-page/profile-page.d.ts +12 -0
  153. package/dist/components-page/account-settings/profile-page/profile-page.d.ts.map +1 -0
  154. package/dist/components-page/account-settings/profile-page/profile-page.js +46 -0
  155. package/dist/components-page/account-settings/profile-page/profile-page.js.map +1 -0
  156. package/dist/components-page/account-settings/section.d.ts +11 -0
  157. package/dist/components-page/account-settings/section.d.ts.map +1 -0
  158. package/dist/components-page/account-settings/section.js +29 -0
  159. package/dist/components-page/account-settings/section.js.map +1 -0
  160. package/dist/components-page/account-settings/settings/delete-account-section.d.ts +9 -0
  161. package/dist/components-page/account-settings/settings/delete-account-section.d.ts.map +1 -0
  162. package/dist/components-page/account-settings/settings/delete-account-section.js +70 -0
  163. package/dist/components-page/account-settings/settings/delete-account-section.js.map +1 -0
  164. package/dist/components-page/account-settings/settings/settings-page.d.ts +9 -0
  165. package/dist/components-page/account-settings/settings/settings-page.d.ts.map +1 -0
  166. package/dist/components-page/account-settings/settings/settings-page.js +15 -0
  167. package/dist/components-page/account-settings/settings/settings-page.js.map +1 -0
  168. package/dist/components-page/account-settings/settings/sign-out-section.d.ts +9 -0
  169. package/dist/components-page/account-settings/settings/sign-out-section.d.ts.map +1 -0
  170. package/dist/components-page/account-settings/settings/sign-out-section.js +33 -0
  171. package/dist/components-page/account-settings/settings/sign-out-section.js.map +1 -0
  172. package/dist/components-page/account-settings/teams/leave-team-section.d.ts +10 -0
  173. package/dist/components-page/account-settings/teams/leave-team-section.d.ts.map +1 -0
  174. package/dist/components-page/account-settings/teams/leave-team-section.js +48 -0
  175. package/dist/components-page/account-settings/teams/leave-team-section.js.map +1 -0
  176. package/dist/components-page/account-settings/teams/team-api-keys-section.d.ts +10 -0
  177. package/dist/components-page/account-settings/teams/team-api-keys-section.d.ts.map +1 -0
  178. package/dist/components-page/account-settings/teams/team-api-keys-section.js +57 -0
  179. package/dist/components-page/account-settings/teams/team-api-keys-section.js.map +1 -0
  180. package/dist/components-page/account-settings/teams/team-creation-page.d.ts +9 -0
  181. package/dist/components-page/account-settings/teams/team-creation-page.d.ts.map +1 -0
  182. package/dist/components-page/account-settings/teams/team-creation-page.js +67 -0
  183. package/dist/components-page/account-settings/teams/team-creation-page.js.map +1 -0
  184. package/dist/components-page/account-settings/teams/team-display-name-section.d.ts +10 -0
  185. package/dist/components-page/account-settings/teams/team-display-name-section.d.ts.map +1 -0
  186. package/dist/components-page/account-settings/teams/team-display-name-section.js +25 -0
  187. package/dist/components-page/account-settings/teams/team-display-name-section.js.map +1 -0
  188. package/dist/components-page/account-settings/teams/team-member-invitation-section.d.ts +10 -0
  189. package/dist/components-page/account-settings/teams/team-member-invitation-section.d.ts.map +1 -0
  190. package/dist/components-page/account-settings/teams/team-member-invitation-section.js +114 -0
  191. package/dist/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -0
  192. package/dist/components-page/account-settings/teams/team-member-list-section.d.ts +10 -0
  193. package/dist/components-page/account-settings/teams/team-member-list-section.d.ts.map +1 -0
  194. package/dist/components-page/account-settings/teams/team-member-list-section.js +40 -0
  195. package/dist/components-page/account-settings/teams/team-member-list-section.js.map +1 -0
  196. package/dist/components-page/account-settings/teams/team-page.d.ts +10 -0
  197. package/dist/components-page/account-settings/teams/team-page.d.ts.map +1 -0
  198. package/dist/components-page/account-settings/teams/team-page.js +28 -0
  199. package/dist/components-page/account-settings/teams/team-page.js.map +1 -0
  200. package/dist/components-page/account-settings/teams/team-profile-image-section.d.ts +10 -0
  201. package/dist/components-page/account-settings/teams/team-profile-image-section.d.ts.map +1 -0
  202. package/dist/components-page/account-settings/teams/team-profile-image-section.js +27 -0
  203. package/dist/components-page/account-settings/teams/team-profile-image-section.js.map +1 -0
  204. package/dist/components-page/account-settings/teams/team-profile-user-section.d.ts +10 -0
  205. package/dist/components-page/account-settings/teams/team-profile-user-section.d.ts.map +1 -0
  206. package/dist/components-page/account-settings/teams/team-profile-user-section.js +27 -0
  207. package/dist/components-page/account-settings/teams/team-profile-user-section.js.map +1 -0
  208. package/dist/components-page/account-settings.d.ts +58 -0
  209. package/dist/components-page/account-settings.d.ts.map +1 -0
  210. package/dist/components-page/account-settings.js +267 -0
  211. package/dist/components-page/account-settings.js.map +1 -0
  212. package/dist/components-page/auth-page.d.ts +26 -0
  213. package/dist/components-page/auth-page.d.ts.map +1 -0
  214. package/dist/components-page/auth-page.js +163 -0
  215. package/dist/components-page/auth-page.js.map +1 -0
  216. package/dist/components-page/cli-auth-confirm.d.ts +21 -0
  217. package/dist/components-page/cli-auth-confirm.d.ts.map +1 -0
  218. package/dist/components-page/cli-auth-confirm.js +216 -0
  219. package/dist/components-page/cli-auth-confirm.js.map +1 -0
  220. package/dist/components-page/cli-auth-confirm.test.d.ts +1 -0
  221. package/dist/components-page/cli-auth-confirm.test.js +176 -0
  222. package/dist/components-page/cli-auth-confirm.test.js.map +1 -0
  223. package/dist/components-page/email-verification.d.ts +10 -0
  224. package/dist/components-page/email-verification.d.ts.map +1 -0
  225. package/dist/components-page/email-verification.js +60 -0
  226. package/dist/components-page/email-verification.js.map +1 -0
  227. package/dist/components-page/error-page.d.ts +10 -0
  228. package/dist/components-page/error-page.d.ts.map +1 -0
  229. package/dist/components-page/error-page.js +77 -0
  230. package/dist/components-page/error-page.js.map +1 -0
  231. package/dist/components-page/forgot-password.d.ts +14 -0
  232. package/dist/components-page/forgot-password.d.ts.map +1 -0
  233. package/dist/components-page/forgot-password.js +103 -0
  234. package/dist/components-page/forgot-password.js.map +1 -0
  235. package/dist/components-page/magic-link-callback.d.ts +10 -0
  236. package/dist/components-page/magic-link-callback.d.ts.map +1 -0
  237. package/dist/components-page/magic-link-callback.js +75 -0
  238. package/dist/components-page/magic-link-callback.js.map +1 -0
  239. package/dist/components-page/mfa.d.ts +11 -0
  240. package/dist/components-page/mfa.d.ts.map +1 -0
  241. package/dist/components-page/mfa.js +166 -0
  242. package/dist/components-page/mfa.js.map +1 -0
  243. package/dist/components-page/oauth-callback.d.ts +11 -0
  244. package/dist/components-page/oauth-callback.d.ts.map +1 -0
  245. package/dist/components-page/oauth-callback.js +72 -0
  246. package/dist/components-page/oauth-callback.js.map +1 -0
  247. package/dist/components-page/onboarding.d.ts +9 -0
  248. package/dist/components-page/onboarding.d.ts.map +1 -0
  249. package/dist/components-page/onboarding.js +140 -0
  250. package/dist/components-page/onboarding.js.map +1 -0
  251. package/dist/components-page/password-reset.d.ts +17 -0
  252. package/dist/components-page/password-reset.d.ts.map +1 -0
  253. package/dist/components-page/password-reset.js +161 -0
  254. package/dist/components-page/password-reset.js.map +1 -0
  255. package/dist/components-page/section.d.ts +1 -0
  256. package/dist/components-page/section.js +2 -0
  257. package/dist/components-page/sign-in.d.ts +23 -0
  258. package/dist/components-page/sign-in.d.ts.map +1 -0
  259. package/dist/components-page/sign-in.js +20 -0
  260. package/dist/components-page/sign-in.js.map +1 -0
  261. package/dist/components-page/sign-out.d.ts +9 -0
  262. package/dist/components-page/sign-out.d.ts.map +1 -0
  263. package/dist/components-page/sign-out.js +26 -0
  264. package/dist/components-page/sign-out.js.map +1 -0
  265. package/dist/components-page/sign-up.d.ts +13 -0
  266. package/dist/components-page/sign-up.d.ts.map +1 -0
  267. package/dist/components-page/sign-up.js +22 -0
  268. package/dist/components-page/sign-up.js.map +1 -0
  269. package/dist/components-page/stack-handler-client.d.ts +50 -0
  270. package/dist/components-page/stack-handler-client.d.ts.map +1 -0
  271. package/dist/components-page/stack-handler-client.js +235 -0
  272. package/dist/components-page/stack-handler-client.js.map +1 -0
  273. package/dist/components-page/stack-handler.d.ts +32 -0
  274. package/dist/components-page/stack-handler.d.ts.map +1 -0
  275. package/dist/components-page/stack-handler.js +12 -0
  276. package/dist/components-page/stack-handler.js.map +1 -0
  277. package/dist/components-page/team-creation.d.ts +9 -0
  278. package/dist/components-page/team-creation.d.ts.map +1 -0
  279. package/dist/components-page/team-creation.js +80 -0
  280. package/dist/components-page/team-creation.js.map +1 -0
  281. package/dist/components-page/team-invitation.d.ts +13 -0
  282. package/dist/components-page/team-invitation.d.ts.map +1 -0
  283. package/dist/components-page/team-invitation.js +109 -0
  284. package/dist/components-page/team-invitation.js.map +1 -0
  285. package/dist/dev-tool/dev-tool-core.d.ts +7 -0
  286. package/dist/dev-tool/dev-tool-core.d.ts.map +1 -0
  287. package/dist/dev-tool/dev-tool-core.js +2107 -0
  288. package/dist/dev-tool/dev-tool-core.js.map +1 -0
  289. package/dist/dev-tool/dev-tool-styles.d.ts +5 -0
  290. package/dist/dev-tool/dev-tool-styles.d.ts.map +1 -0
  291. package/dist/dev-tool/dev-tool-styles.js +2757 -0
  292. package/dist/dev-tool/dev-tool-styles.js.map +1 -0
  293. package/dist/dev-tool/dev-tool-trigger-position.d.ts +36 -0
  294. package/dist/dev-tool/dev-tool-trigger-position.d.ts.map +1 -0
  295. package/dist/dev-tool/dev-tool-trigger-position.js +70 -0
  296. package/dist/dev-tool/dev-tool-trigger-position.js.map +1 -0
  297. package/dist/dev-tool/dev-tool-trigger-position.test.d.ts +1 -0
  298. package/dist/dev-tool/dev-tool-trigger-position.test.js +155 -0
  299. package/dist/dev-tool/dev-tool-trigger-position.test.js.map +1 -0
  300. package/dist/dev-tool/index.d.ts +19 -0
  301. package/dist/dev-tool/index.d.ts.map +1 -0
  302. package/dist/dev-tool/index.js +119 -0
  303. package/dist/dev-tool/index.js.map +1 -0
  304. package/dist/esm/components/api-key-dialogs.d.ts +28 -0
  305. package/dist/esm/components/api-key-dialogs.d.ts.map +1 -0
  306. package/dist/esm/components/api-key-dialogs.js +158 -0
  307. package/dist/esm/components/api-key-dialogs.js.map +1 -0
  308. package/dist/esm/components/api-key-table.d.ts +10 -0
  309. package/dist/esm/components/api-key-table.d.ts.map +1 -0
  310. package/dist/esm/components/api-key-table.js +142 -0
  311. package/dist/esm/components/api-key-table.js.map +1 -0
  312. package/dist/esm/components/credential-sign-in.d.ts +7 -0
  313. package/dist/esm/components/credential-sign-in.d.ts.map +1 -0
  314. package/dist/esm/components/credential-sign-in.js +85 -0
  315. package/dist/esm/components/credential-sign-in.js.map +1 -0
  316. package/dist/esm/components/credential-sign-up.d.ts +9 -0
  317. package/dist/esm/components/credential-sign-up.d.ts.map +1 -0
  318. package/dist/esm/components/credential-sign-up.js +117 -0
  319. package/dist/esm/components/credential-sign-up.js.map +1 -0
  320. package/dist/esm/components/elements/form-warning.d.ts +11 -0
  321. package/dist/esm/components/elements/form-warning.d.ts.map +1 -0
  322. package/dist/esm/components/elements/form-warning.js +16 -0
  323. package/dist/esm/components/elements/form-warning.js.map +1 -0
  324. package/dist/esm/components/elements/maybe-full-page.d.ts +16 -0
  325. package/dist/esm/components/elements/maybe-full-page.d.ts.map +1 -0
  326. package/dist/esm/components/elements/maybe-full-page.js +38 -0
  327. package/dist/esm/components/elements/maybe-full-page.js.map +1 -0
  328. package/dist/esm/components/elements/separator-with-text.d.ts +11 -0
  329. package/dist/esm/components/elements/separator-with-text.d.ts.map +1 -0
  330. package/dist/esm/components/elements/separator-with-text.js +29 -0
  331. package/dist/esm/components/elements/separator-with-text.js.map +1 -0
  332. package/dist/esm/components/elements/sidebar-layout.d.ts +21 -0
  333. package/dist/esm/components/elements/sidebar-layout.d.ts.map +1 -0
  334. package/dist/esm/components/elements/sidebar-layout.js +132 -0
  335. package/dist/esm/components/elements/sidebar-layout.js.map +1 -0
  336. package/dist/esm/components/elements/ssr-layout-effect.d.ts +10 -0
  337. package/dist/esm/components/elements/ssr-layout-effect.d.ts.map +1 -0
  338. package/dist/esm/components/elements/ssr-layout-effect.js +20 -0
  339. package/dist/esm/components/elements/ssr-layout-effect.js.map +1 -0
  340. package/dist/esm/components/elements/user-avatar.d.ts +15 -0
  341. package/dist/esm/components/elements/user-avatar.d.ts.map +1 -0
  342. package/dist/esm/components/elements/user-avatar.js +28 -0
  343. package/dist/esm/components/elements/user-avatar.js.map +1 -0
  344. package/dist/esm/components/link.d.ts +16 -0
  345. package/dist/esm/components/link.d.ts.map +1 -0
  346. package/dist/esm/components/link.js +26 -0
  347. package/dist/esm/components/link.js.map +1 -0
  348. package/dist/esm/components/magic-link-sign-in.d.ts +7 -0
  349. package/dist/esm/components/magic-link-sign-in.d.ts.map +1 -0
  350. package/dist/esm/components/magic-link-sign-in.js +136 -0
  351. package/dist/esm/components/magic-link-sign-in.js.map +1 -0
  352. package/dist/esm/components/message-cards/known-error-message-card.d.ts +14 -0
  353. package/dist/esm/components/message-cards/known-error-message-card.d.ts.map +1 -0
  354. package/dist/esm/components/message-cards/known-error-message-card.js +22 -0
  355. package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -0
  356. package/dist/esm/components/message-cards/message-card.d.ts +19 -0
  357. package/dist/esm/components/message-cards/message-card.d.ts.map +1 -0
  358. package/dist/esm/components/message-cards/message-card.js +43 -0
  359. package/dist/esm/components/message-cards/message-card.js.map +1 -0
  360. package/dist/esm/components/message-cards/predefined-message-card.d.ts +13 -0
  361. package/dist/esm/components/message-cards/predefined-message-card.d.ts.map +1 -0
  362. package/dist/esm/components/message-cards/predefined-message-card.js +71 -0
  363. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -0
  364. package/dist/esm/components/oauth-button-group.d.ts +19 -0
  365. package/dist/esm/components/oauth-button-group.d.ts.map +1 -0
  366. package/dist/esm/components/oauth-button-group.js +22 -0
  367. package/dist/esm/components/oauth-button-group.js.map +1 -0
  368. package/dist/esm/components/oauth-button.d.ts +17 -0
  369. package/dist/esm/components/oauth-button.d.ts.map +1 -0
  370. package/dist/esm/components/oauth-button.js +170 -0
  371. package/dist/esm/components/oauth-button.js.map +1 -0
  372. package/dist/esm/components/passkey-button.d.ts +11 -0
  373. package/dist/esm/components/passkey-button.d.ts.map +1 -0
  374. package/dist/esm/components/passkey-button.js +31 -0
  375. package/dist/esm/components/passkey-button.js.map +1 -0
  376. package/dist/esm/components/profile-image-editor.d.ts +15 -0
  377. package/dist/esm/components/profile-image-editor.d.ts.map +1 -0
  378. package/dist/esm/components/profile-image-editor.js +165 -0
  379. package/dist/esm/components/profile-image-editor.js.map +1 -0
  380. package/dist/esm/components/selected-team-switcher.d.ts +31 -0
  381. package/dist/esm/components/selected-team-switcher.d.ts.map +1 -0
  382. package/dist/esm/components/selected-team-switcher.js +57 -0
  383. package/dist/esm/components/selected-team-switcher.js.map +1 -0
  384. package/dist/esm/components/team-icon.d.ts +10 -0
  385. package/dist/esm/components/team-icon.d.ts.map +1 -0
  386. package/dist/esm/components/team-icon.js +29 -0
  387. package/dist/esm/components/team-icon.js.map +1 -0
  388. package/dist/esm/components/team-switcher.d.ts +31 -0
  389. package/dist/esm/components/team-switcher.d.ts.map +1 -0
  390. package/dist/esm/components/team-switcher.js +121 -0
  391. package/dist/esm/components/team-switcher.js.map +1 -0
  392. package/dist/esm/components/use-in-iframe.d.ts +5 -0
  393. package/dist/esm/components/use-in-iframe.d.ts.map +1 -0
  394. package/dist/esm/components/use-in-iframe.js +16 -0
  395. package/dist/esm/components/use-in-iframe.js.map +1 -0
  396. package/dist/esm/components/user-button.d.ts +22 -0
  397. package/dist/esm/components/user-button.d.ts.map +1 -0
  398. package/dist/esm/components/user-button.js +131 -0
  399. package/dist/esm/components/user-button.js.map +1 -0
  400. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.d.ts +20 -0
  401. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.d.ts.map +1 -0
  402. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js +206 -0
  403. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -0
  404. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.d.ts +16 -0
  405. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.d.ts.map +1 -0
  406. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js +113 -0
  407. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js.map +1 -0
  408. package/dist/esm/components-page/account-settings/editable-text.d.ts +10 -0
  409. package/dist/esm/components-page/account-settings/editable-text.d.ts.map +1 -0
  410. package/dist/esm/components-page/account-settings/editable-text.js +47 -0
  411. package/dist/esm/components-page/account-settings/editable-text.js.map +1 -0
  412. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.d.ts +9 -0
  413. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.d.ts.map +1 -0
  414. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js +22 -0
  415. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -0
  416. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.d.ts +9 -0
  417. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.d.ts.map +1 -0
  418. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js +179 -0
  419. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js.map +1 -0
  420. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.d.ts +9 -0
  421. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.d.ts.map +1 -0
  422. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js +118 -0
  423. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -0
  424. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.d.ts +9 -0
  425. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.d.ts.map +1 -0
  426. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js +78 -0
  427. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js.map +1 -0
  428. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.d.ts +9 -0
  429. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.d.ts.map +1 -0
  430. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js +87 -0
  431. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -0
  432. package/dist/esm/components-page/account-settings/email-and-auth/password-section.d.ts +9 -0
  433. package/dist/esm/components-page/account-settings/email-and-auth/password-section.d.ts.map +1 -0
  434. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js +158 -0
  435. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js.map +1 -0
  436. package/dist/esm/components-page/account-settings/notifications/notifications-page.d.ts +7 -0
  437. package/dist/esm/components-page/account-settings/notifications/notifications-page.d.ts.map +1 -0
  438. package/dist/esm/components-page/account-settings/notifications/notifications-page.js +40 -0
  439. package/dist/esm/components-page/account-settings/notifications/notifications-page.js.map +1 -0
  440. package/dist/esm/components-page/account-settings/page-layout.d.ts +9 -0
  441. package/dist/esm/components-page/account-settings/page-layout.d.ts.map +1 -0
  442. package/dist/esm/components-page/account-settings/page-layout.js +13 -0
  443. package/dist/esm/components-page/account-settings/page-layout.js.map +1 -0
  444. package/dist/esm/components-page/account-settings/payments/payments-page.d.ts +12 -0
  445. package/dist/esm/components-page/account-settings/payments/payments-page.d.ts.map +1 -0
  446. package/dist/esm/components-page/account-settings/payments/payments-page.js +53 -0
  447. package/dist/esm/components-page/account-settings/payments/payments-page.js.map +1 -0
  448. package/dist/esm/components-page/account-settings/payments/payments-panel.d.ts +61 -0
  449. package/dist/esm/components-page/account-settings/payments/payments-panel.d.ts.map +1 -0
  450. package/dist/esm/components-page/account-settings/payments/payments-panel.js +464 -0
  451. package/dist/esm/components-page/account-settings/payments/payments-panel.js.map +1 -0
  452. package/dist/esm/components-page/account-settings/profile-page/profile-page.d.ts +12 -0
  453. package/dist/esm/components-page/account-settings/profile-page/profile-page.d.ts.map +1 -0
  454. package/dist/esm/components-page/account-settings/profile-page/profile-page.js +44 -0
  455. package/dist/esm/components-page/account-settings/profile-page/profile-page.js.map +1 -0
  456. package/dist/esm/components-page/account-settings/section.d.ts +11 -0
  457. package/dist/esm/components-page/account-settings/section.d.ts.map +1 -0
  458. package/dist/esm/components-page/account-settings/section.js +27 -0
  459. package/dist/esm/components-page/account-settings/section.js.map +1 -0
  460. package/dist/esm/components-page/account-settings/settings/delete-account-section.d.ts +9 -0
  461. package/dist/esm/components-page/account-settings/settings/delete-account-section.d.ts.map +1 -0
  462. package/dist/esm/components-page/account-settings/settings/delete-account-section.js +68 -0
  463. package/dist/esm/components-page/account-settings/settings/delete-account-section.js.map +1 -0
  464. package/dist/esm/components-page/account-settings/settings/settings-page.d.ts +9 -0
  465. package/dist/esm/components-page/account-settings/settings/settings-page.d.ts.map +1 -0
  466. package/dist/esm/components-page/account-settings/settings/settings-page.js +13 -0
  467. package/dist/esm/components-page/account-settings/settings/settings-page.js.map +1 -0
  468. package/dist/esm/components-page/account-settings/settings/sign-out-section.d.ts +9 -0
  469. package/dist/esm/components-page/account-settings/settings/sign-out-section.d.ts.map +1 -0
  470. package/dist/esm/components-page/account-settings/settings/sign-out-section.js +31 -0
  471. package/dist/esm/components-page/account-settings/settings/sign-out-section.js.map +1 -0
  472. package/dist/esm/components-page/account-settings/teams/leave-team-section.d.ts +10 -0
  473. package/dist/esm/components-page/account-settings/teams/leave-team-section.d.ts.map +1 -0
  474. package/dist/esm/components-page/account-settings/teams/leave-team-section.js +46 -0
  475. package/dist/esm/components-page/account-settings/teams/leave-team-section.js.map +1 -0
  476. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.d.ts +10 -0
  477. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.d.ts.map +1 -0
  478. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js +55 -0
  479. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js.map +1 -0
  480. package/dist/esm/components-page/account-settings/teams/team-creation-page.d.ts +9 -0
  481. package/dist/esm/components-page/account-settings/teams/team-creation-page.d.ts.map +1 -0
  482. package/dist/esm/components-page/account-settings/teams/team-creation-page.js +65 -0
  483. package/dist/esm/components-page/account-settings/teams/team-creation-page.js.map +1 -0
  484. package/dist/esm/components-page/account-settings/teams/team-display-name-section.d.ts +10 -0
  485. package/dist/esm/components-page/account-settings/teams/team-display-name-section.d.ts.map +1 -0
  486. package/dist/esm/components-page/account-settings/teams/team-display-name-section.js +23 -0
  487. package/dist/esm/components-page/account-settings/teams/team-display-name-section.js.map +1 -0
  488. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.d.ts +10 -0
  489. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.d.ts.map +1 -0
  490. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js +112 -0
  491. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js.map +1 -0
  492. package/dist/esm/components-page/account-settings/teams/team-member-list-section.d.ts +10 -0
  493. package/dist/esm/components-page/account-settings/teams/team-member-list-section.d.ts.map +1 -0
  494. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js +38 -0
  495. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js.map +1 -0
  496. package/dist/esm/components-page/account-settings/teams/team-page.d.ts +10 -0
  497. package/dist/esm/components-page/account-settings/teams/team-page.d.ts.map +1 -0
  498. package/dist/esm/components-page/account-settings/teams/team-page.js +26 -0
  499. package/dist/esm/components-page/account-settings/teams/team-page.js.map +1 -0
  500. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.d.ts +10 -0
  501. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.d.ts.map +1 -0
  502. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.js +25 -0
  503. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.js.map +1 -0
  504. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.d.ts +10 -0
  505. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.d.ts.map +1 -0
  506. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.js +25 -0
  507. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.js.map +1 -0
  508. package/dist/esm/components-page/account-settings.d.ts +58 -0
  509. package/dist/esm/components-page/account-settings.d.ts.map +1 -0
  510. package/dist/esm/components-page/account-settings.js +264 -0
  511. package/dist/esm/components-page/account-settings.js.map +1 -0
  512. package/dist/esm/components-page/auth-page.d.ts +26 -0
  513. package/dist/esm/components-page/auth-page.d.ts.map +1 -0
  514. package/dist/esm/components-page/auth-page.js +161 -0
  515. package/dist/esm/components-page/auth-page.js.map +1 -0
  516. package/dist/esm/components-page/cli-auth-confirm.d.ts +21 -0
  517. package/dist/esm/components-page/cli-auth-confirm.d.ts.map +1 -0
  518. package/dist/esm/components-page/cli-auth-confirm.js +213 -0
  519. package/dist/esm/components-page/cli-auth-confirm.js.map +1 -0
  520. package/dist/esm/components-page/cli-auth-confirm.test.d.ts +1 -0
  521. package/dist/esm/components-page/cli-auth-confirm.test.js +175 -0
  522. package/dist/esm/components-page/cli-auth-confirm.test.js.map +1 -0
  523. package/dist/esm/components-page/email-verification.d.ts +10 -0
  524. package/dist/esm/components-page/email-verification.d.ts.map +1 -0
  525. package/dist/esm/components-page/email-verification.js +57 -0
  526. package/dist/esm/components-page/email-verification.js.map +1 -0
  527. package/dist/esm/components-page/error-page.d.ts +10 -0
  528. package/dist/esm/components-page/error-page.d.ts.map +1 -0
  529. package/dist/esm/components-page/error-page.js +75 -0
  530. package/dist/esm/components-page/error-page.js.map +1 -0
  531. package/dist/esm/components-page/forgot-password.d.ts +14 -0
  532. package/dist/esm/components-page/forgot-password.d.ts.map +1 -0
  533. package/dist/esm/components-page/forgot-password.js +100 -0
  534. package/dist/esm/components-page/forgot-password.js.map +1 -0
  535. package/dist/esm/components-page/magic-link-callback.d.ts +10 -0
  536. package/dist/esm/components-page/magic-link-callback.d.ts.map +1 -0
  537. package/dist/esm/components-page/magic-link-callback.js +72 -0
  538. package/dist/esm/components-page/magic-link-callback.js.map +1 -0
  539. package/dist/esm/components-page/mfa.d.ts +11 -0
  540. package/dist/esm/components-page/mfa.d.ts.map +1 -0
  541. package/dist/esm/components-page/mfa.js +164 -0
  542. package/dist/esm/components-page/mfa.js.map +1 -0
  543. package/dist/esm/components-page/oauth-callback.d.ts +11 -0
  544. package/dist/esm/components-page/oauth-callback.d.ts.map +1 -0
  545. package/dist/esm/components-page/oauth-callback.js +70 -0
  546. package/dist/esm/components-page/oauth-callback.js.map +1 -0
  547. package/dist/esm/components-page/onboarding.d.ts +9 -0
  548. package/dist/esm/components-page/onboarding.d.ts.map +1 -0
  549. package/dist/esm/components-page/onboarding.js +138 -0
  550. package/dist/esm/components-page/onboarding.js.map +1 -0
  551. package/dist/esm/components-page/password-reset.d.ts +17 -0
  552. package/dist/esm/components-page/password-reset.d.ts.map +1 -0
  553. package/dist/esm/components-page/password-reset.js +157 -0
  554. package/dist/esm/components-page/password-reset.js.map +1 -0
  555. package/dist/esm/components-page/section.d.ts +1 -0
  556. package/dist/esm/components-page/section.js +4 -0
  557. package/dist/esm/components-page/sign-in.d.ts +23 -0
  558. package/dist/esm/components-page/sign-in.d.ts.map +1 -0
  559. package/dist/esm/components-page/sign-in.js +18 -0
  560. package/dist/esm/components-page/sign-in.js.map +1 -0
  561. package/dist/esm/components-page/sign-out.d.ts +9 -0
  562. package/dist/esm/components-page/sign-out.d.ts.map +1 -0
  563. package/dist/esm/components-page/sign-out.js +24 -0
  564. package/dist/esm/components-page/sign-out.js.map +1 -0
  565. package/dist/esm/components-page/sign-up.d.ts +13 -0
  566. package/dist/esm/components-page/sign-up.d.ts.map +1 -0
  567. package/dist/esm/components-page/sign-up.js +20 -0
  568. package/dist/esm/components-page/sign-up.js.map +1 -0
  569. package/dist/esm/components-page/stack-handler-client.d.ts +49 -0
  570. package/dist/esm/components-page/stack-handler-client.d.ts.map +1 -0
  571. package/dist/esm/components-page/stack-handler-client.js +233 -0
  572. package/dist/esm/components-page/stack-handler-client.js.map +1 -0
  573. package/dist/esm/components-page/stack-handler.d.ts +33 -0
  574. package/dist/esm/components-page/stack-handler.d.ts.map +1 -0
  575. package/dist/esm/components-page/stack-handler.js +11 -0
  576. package/dist/esm/components-page/stack-handler.js.map +1 -0
  577. package/dist/esm/components-page/team-creation.d.ts +9 -0
  578. package/dist/esm/components-page/team-creation.d.ts.map +1 -0
  579. package/dist/esm/components-page/team-creation.js +78 -0
  580. package/dist/esm/components-page/team-creation.js.map +1 -0
  581. package/dist/esm/components-page/team-invitation.d.ts +13 -0
  582. package/dist/esm/components-page/team-invitation.d.ts.map +1 -0
  583. package/dist/esm/components-page/team-invitation.js +106 -0
  584. package/dist/esm/components-page/team-invitation.js.map +1 -0
  585. package/dist/esm/dev-tool/dev-tool-core.d.ts +7 -0
  586. package/dist/esm/dev-tool/dev-tool-core.d.ts.map +1 -0
  587. package/dist/esm/dev-tool/dev-tool-core.js +2105 -0
  588. package/dist/esm/dev-tool/dev-tool-core.js.map +1 -0
  589. package/dist/esm/dev-tool/dev-tool-styles.d.ts +5 -0
  590. package/dist/esm/dev-tool/dev-tool-styles.d.ts.map +1 -0
  591. package/dist/esm/dev-tool/dev-tool-styles.js +2755 -0
  592. package/dist/esm/dev-tool/dev-tool-styles.js.map +1 -0
  593. package/dist/esm/dev-tool/dev-tool-trigger-position.d.ts +36 -0
  594. package/dist/esm/dev-tool/dev-tool-trigger-position.d.ts.map +1 -0
  595. package/dist/esm/dev-tool/dev-tool-trigger-position.js +65 -0
  596. package/dist/esm/dev-tool/dev-tool-trigger-position.js.map +1 -0
  597. package/dist/esm/dev-tool/dev-tool-trigger-position.test.d.ts +1 -0
  598. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js +155 -0
  599. package/dist/esm/dev-tool/dev-tool-trigger-position.test.js.map +1 -0
  600. package/dist/esm/dev-tool/index.d.ts +19 -0
  601. package/dist/esm/dev-tool/index.d.ts.map +1 -0
  602. package/dist/esm/dev-tool/index.js +117 -0
  603. package/dist/esm/dev-tool/index.js.map +1 -0
  604. package/dist/esm/generated/global-css.d.ts +5 -0
  605. package/dist/esm/generated/global-css.d.ts.map +1 -0
  606. package/dist/esm/generated/global-css.js +6 -0
  607. package/dist/esm/generated/global-css.js.map +1 -0
  608. package/dist/esm/generated/quetzal-translations.d.ts +6 -0
  609. package/dist/esm/generated/quetzal-translations.d.ts.map +1 -0
  610. package/dist/esm/generated/quetzal-translations.js +4307 -0
  611. package/dist/esm/generated/quetzal-translations.js.map +1 -0
  612. package/dist/esm/global.d.ts +1 -0
  613. package/dist/esm/index.d.ts +27 -0
  614. package/dist/esm/index.js +28 -0
  615. package/dist/esm/integrations/convex/component/convex.config.d.ts +7 -0
  616. package/dist/esm/integrations/convex/component/convex.config.d.ts.map +1 -0
  617. package/dist/esm/integrations/convex/component/convex.config.js +8 -0
  618. package/dist/esm/integrations/convex/component/convex.config.js.map +1 -0
  619. package/dist/esm/integrations/convex.d.ts +13 -0
  620. package/dist/esm/integrations/convex.d.ts.map +1 -0
  621. package/dist/esm/integrations/convex.js +23 -0
  622. package/dist/esm/integrations/convex.js.map +1 -0
  623. package/dist/esm/lib/auth.d.ts +29 -0
  624. package/dist/esm/lib/auth.d.ts.map +1 -0
  625. package/dist/esm/lib/auth.js +108 -0
  626. package/dist/esm/lib/auth.js.map +1 -0
  627. package/dist/esm/lib/auth.test.d.ts +1 -0
  628. package/dist/esm/lib/auth.test.js +60 -0
  629. package/dist/esm/lib/auth.test.js.map +1 -0
  630. package/dist/esm/lib/cookie.d.ts +50 -0
  631. package/dist/esm/lib/cookie.d.ts.map +1 -0
  632. package/dist/esm/lib/cookie.js +347 -0
  633. package/dist/esm/lib/cookie.js.map +1 -0
  634. package/dist/esm/lib/env.d.ts +37 -0
  635. package/dist/esm/lib/env.d.ts.map +1 -0
  636. package/dist/esm/lib/env.js +88 -0
  637. package/dist/esm/lib/env.js.map +1 -0
  638. package/dist/esm/lib/hooks.d.ts +33 -0
  639. package/dist/esm/lib/hooks.d.ts.map +1 -0
  640. package/dist/esm/lib/hooks.js +27 -0
  641. package/dist/esm/lib/hooks.js.map +1 -0
  642. package/dist/esm/lib/stack-app/api-keys/index.d.ts +53 -0
  643. package/dist/esm/lib/stack-app/api-keys/index.d.ts.map +1 -0
  644. package/dist/esm/lib/stack-app/api-keys/index.js +22 -0
  645. package/dist/esm/lib/stack-app/api-keys/index.js.map +1 -0
  646. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts +423 -0
  647. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  648. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js +1041 -0
  649. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -0
  650. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts +562 -0
  651. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  652. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js +2631 -0
  653. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -0
  654. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +1 -0
  655. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js +32 -0
  656. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  657. package/dist/esm/lib/stack-app/apps/implementations/common.d.ts +66 -0
  658. package/dist/esm/lib/stack-app/apps/implementations/common.d.ts.map +1 -0
  659. package/dist/esm/lib/stack-app/apps/implementations/common.js +167 -0
  660. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -0
  661. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.d.ts +42 -0
  662. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.d.ts.map +1 -0
  663. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js +211 -0
  664. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.js.map +1 -0
  665. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.d.ts +1 -0
  666. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js +87 -0
  667. package/dist/esm/lib/stack-app/apps/implementations/event-tracker.test.js.map +1 -0
  668. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts +9 -0
  669. package/dist/esm/lib/stack-app/apps/implementations/index.d.ts.map +1 -0
  670. package/dist/esm/lib/stack-app/apps/implementations/index.js +27 -0
  671. package/dist/esm/lib/stack-app/apps/implementations/index.js.map +1 -0
  672. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.d.ts +35 -0
  673. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.d.ts.map +1 -0
  674. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js +187 -0
  675. package/dist/esm/lib/stack-app/apps/implementations/redirect-page-urls.js.map +1 -0
  676. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.d.ts +260 -0
  677. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.d.ts.map +1 -0
  678. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js +1383 -0
  679. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -0
  680. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts +28 -0
  681. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts.map +1 -0
  682. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.js +31 -0
  683. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  684. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.d.ts +1 -0
  685. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.js +82 -0
  686. package/dist/esm/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  687. package/dist/esm/lib/stack-app/apps/implementations/session-replay.d.ts +108 -0
  688. package/dist/esm/lib/stack-app/apps/implementations/session-replay.d.ts.map +1 -0
  689. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js +234 -0
  690. package/dist/esm/lib/stack-app/apps/implementations/session-replay.js.map +1 -0
  691. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.d.ts +1 -0
  692. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.js +29 -0
  693. package/dist/esm/lib/stack-app/apps/implementations/session-replay.test.js.map +1 -0
  694. package/dist/esm/lib/stack-app/apps/index.d.ts +4 -0
  695. package/dist/esm/lib/stack-app/apps/index.js +5 -0
  696. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.d.ts +252 -0
  697. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.d.ts.map +1 -0
  698. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js +8 -0
  699. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +1 -0
  700. package/dist/esm/lib/stack-app/apps/interfaces/client-app.d.ts +220 -0
  701. package/dist/esm/lib/stack-app/apps/interfaces/client-app.d.ts.map +1 -0
  702. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js +8 -0
  703. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +1 -0
  704. package/dist/esm/lib/stack-app/apps/interfaces/server-app.d.ts +153 -0
  705. package/dist/esm/lib/stack-app/apps/interfaces/server-app.d.ts.map +1 -0
  706. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js +8 -0
  707. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +1 -0
  708. package/dist/esm/lib/stack-app/common.d.ts +183 -0
  709. package/dist/esm/lib/stack-app/common.d.ts.map +1 -0
  710. package/dist/esm/lib/stack-app/common.js +7 -0
  711. package/dist/esm/lib/stack-app/common.js.map +1 -0
  712. package/dist/esm/lib/stack-app/connected-accounts/index.d.ts +57 -0
  713. package/dist/esm/lib/stack-app/connected-accounts/index.d.ts.map +1 -0
  714. package/dist/esm/lib/stack-app/connected-accounts/index.js +1 -0
  715. package/dist/esm/lib/stack-app/contact-channels/index.d.ts +43 -0
  716. package/dist/esm/lib/stack-app/contact-channels/index.d.ts.map +1 -0
  717. package/dist/esm/lib/stack-app/contact-channels/index.js +39 -0
  718. package/dist/esm/lib/stack-app/contact-channels/index.js.map +1 -0
  719. package/dist/esm/lib/stack-app/customers/index.d.ts +129 -0
  720. package/dist/esm/lib/stack-app/customers/index.d.ts.map +1 -0
  721. package/dist/esm/lib/stack-app/customers/index.js +1 -0
  722. package/dist/esm/lib/stack-app/data-vault/index.d.ts +14 -0
  723. package/dist/esm/lib/stack-app/data-vault/index.d.ts.map +1 -0
  724. package/dist/esm/lib/stack-app/data-vault/index.js +1 -0
  725. package/dist/esm/lib/stack-app/email/index.d.ts +204 -0
  726. package/dist/esm/lib/stack-app/email/index.d.ts.map +1 -0
  727. package/dist/esm/lib/stack-app/email/index.js +1 -0
  728. package/dist/esm/lib/stack-app/email-templates/index.d.ts +17 -0
  729. package/dist/esm/lib/stack-app/email-templates/index.d.ts.map +1 -0
  730. package/dist/esm/lib/stack-app/email-templates/index.js +11 -0
  731. package/dist/esm/lib/stack-app/email-templates/index.js.map +1 -0
  732. package/dist/esm/lib/stack-app/index.d.ts +14 -0
  733. package/dist/esm/lib/stack-app/index.js +5 -0
  734. package/dist/esm/lib/stack-app/internal-api-keys/index.d.ts +42 -0
  735. package/dist/esm/lib/stack-app/internal-api-keys/index.d.ts.map +1 -0
  736. package/dist/esm/lib/stack-app/internal-api-keys/index.js +14 -0
  737. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +1 -0
  738. package/dist/esm/lib/stack-app/notification-categories/index.d.ts +11 -0
  739. package/dist/esm/lib/stack-app/notification-categories/index.d.ts.map +1 -0
  740. package/dist/esm/lib/stack-app/notification-categories/index.js +1 -0
  741. package/dist/esm/lib/stack-app/permissions/index.d.ts +43 -0
  742. package/dist/esm/lib/stack-app/permissions/index.d.ts.map +1 -0
  743. package/dist/esm/lib/stack-app/permissions/index.js +31 -0
  744. package/dist/esm/lib/stack-app/permissions/index.js.map +1 -0
  745. package/dist/esm/lib/stack-app/project-configs/index.d.ts +99 -0
  746. package/dist/esm/lib/stack-app/project-configs/index.d.ts.map +1 -0
  747. package/dist/esm/lib/stack-app/project-configs/index.js +1 -0
  748. package/dist/esm/lib/stack-app/projects/index.d.ts +147 -0
  749. package/dist/esm/lib/stack-app/projects/index.d.ts.map +1 -0
  750. package/dist/esm/lib/stack-app/projects/index.js +66 -0
  751. package/dist/esm/lib/stack-app/projects/index.js.map +1 -0
  752. package/dist/esm/lib/stack-app/session-replays/index.d.ts +66 -0
  753. package/dist/esm/lib/stack-app/session-replays/index.d.ts.map +1 -0
  754. package/dist/esm/lib/stack-app/session-replays/index.js +1 -0
  755. package/dist/esm/lib/stack-app/teams/index.d.ts +163 -0
  756. package/dist/esm/lib/stack-app/teams/index.d.ts.map +1 -0
  757. package/dist/esm/lib/stack-app/teams/index.js +35 -0
  758. package/dist/esm/lib/stack-app/teams/index.js.map +1 -0
  759. package/dist/esm/lib/stack-app/url-targets.d.ts +40 -0
  760. package/dist/esm/lib/stack-app/url-targets.d.ts.map +1 -0
  761. package/dist/esm/lib/stack-app/url-targets.js +280 -0
  762. package/dist/esm/lib/stack-app/url-targets.js.map +1 -0
  763. package/dist/esm/lib/stack-app/url-targets.test.d.ts +1 -0
  764. package/dist/esm/lib/stack-app/url-targets.test.js +169 -0
  765. package/dist/esm/lib/stack-app/url-targets.test.js.map +1 -0
  766. package/dist/esm/lib/stack-app/users/index.d.ts +400 -0
  767. package/dist/esm/lib/stack-app/users/index.d.ts.map +1 -0
  768. package/dist/esm/lib/stack-app/users/index.js +71 -0
  769. package/dist/esm/lib/stack-app/users/index.js.map +1 -0
  770. package/dist/esm/lib/translations.d.ts +7 -0
  771. package/dist/esm/lib/translations.d.ts.map +1 -0
  772. package/dist/esm/lib/translations.js +18 -0
  773. package/dist/esm/lib/translations.js.map +1 -0
  774. package/dist/esm/providers/stack-context.d.ts +10 -0
  775. package/dist/esm/providers/stack-context.d.ts.map +1 -0
  776. package/dist/esm/providers/stack-context.js +10 -0
  777. package/dist/esm/providers/stack-context.js.map +1 -0
  778. package/dist/esm/providers/stack-provider-client.d.ts +17 -0
  779. package/dist/esm/providers/stack-provider-client.d.ts.map +1 -0
  780. package/dist/esm/providers/stack-provider-client.js +30 -0
  781. package/dist/esm/providers/stack-provider-client.js.map +1 -0
  782. package/dist/esm/providers/stack-provider.d.ts +26 -0
  783. package/dist/esm/providers/stack-provider.d.ts.map +1 -0
  784. package/dist/esm/providers/stack-provider.js +24 -0
  785. package/dist/esm/providers/stack-provider.js.map +1 -0
  786. package/dist/esm/providers/theme-provider.d.ts +46 -0
  787. package/dist/esm/providers/theme-provider.d.ts.map +1 -0
  788. package/dist/esm/providers/theme-provider.js +68 -0
  789. package/dist/esm/providers/theme-provider.js.map +1 -0
  790. package/dist/esm/providers/translation-provider-client.d.ts +16 -0
  791. package/dist/esm/providers/translation-provider-client.d.ts.map +1 -0
  792. package/dist/esm/providers/translation-provider-client.js +20 -0
  793. package/dist/esm/providers/translation-provider-client.js.map +1 -0
  794. package/dist/esm/providers/translation-provider.d.ts +16 -0
  795. package/dist/esm/providers/translation-provider.d.ts.map +1 -0
  796. package/dist/esm/providers/translation-provider.js +23 -0
  797. package/dist/esm/providers/translation-provider.js.map +1 -0
  798. package/dist/esm/tanstack-start-server-context.combined.d.ts +12 -0
  799. package/dist/esm/tanstack-start-server-context.combined.d.ts.map +1 -0
  800. package/dist/esm/tanstack-start-server-context.combined.js +1 -0
  801. package/dist/esm/tanstack-start-server-context.default.d.ts +9 -0
  802. package/dist/esm/tanstack-start-server-context.default.d.ts.map +1 -0
  803. package/dist/esm/tanstack-start-server-context.default.js +10 -0
  804. package/dist/esm/tanstack-start-server-context.default.js.map +1 -0
  805. package/dist/esm/tanstack-start-server-context.server.d.ts +2 -0
  806. package/dist/esm/tanstack-start-server-context.server.js +3 -0
  807. package/dist/esm/utils/browser-script.d.ts +9 -0
  808. package/dist/esm/utils/browser-script.d.ts.map +1 -0
  809. package/dist/esm/utils/browser-script.js +105 -0
  810. package/dist/esm/utils/browser-script.js.map +1 -0
  811. package/dist/esm/utils/constants.d.ts +81 -0
  812. package/dist/esm/utils/constants.d.ts.map +1 -0
  813. package/dist/esm/utils/constants.js +82 -0
  814. package/dist/esm/utils/constants.js.map +1 -0
  815. package/dist/esm/utils/url.d.ts +5 -0
  816. package/dist/esm/utils/url.d.ts.map +1 -0
  817. package/dist/esm/utils/url.js +16 -0
  818. package/dist/esm/utils/url.js.map +1 -0
  819. package/dist/generated/global-css.d.ts +5 -0
  820. package/dist/generated/global-css.d.ts.map +1 -0
  821. package/dist/generated/global-css.js +8 -0
  822. package/dist/generated/global-css.js.map +1 -0
  823. package/dist/generated/quetzal-translations.d.ts +6 -0
  824. package/dist/generated/quetzal-translations.d.ts.map +1 -0
  825. package/dist/generated/quetzal-translations.js +4310 -0
  826. package/dist/generated/quetzal-translations.js.map +1 -0
  827. package/dist/global.d.d.ts +0 -0
  828. package/dist/global.d.ts +1 -0
  829. package/dist/index.d.ts +40 -0
  830. package/dist/index.js +192 -0
  831. package/dist/integrations/convex/component/convex.config.d.ts +61 -0
  832. package/dist/integrations/convex/component/convex.config.d.ts.map +1 -0
  833. package/dist/integrations/convex/component/convex.config.js +9 -0
  834. package/dist/integrations/convex/component/convex.config.js.map +1 -0
  835. package/dist/integrations/convex.d.ts +13 -0
  836. package/dist/integrations/convex.d.ts.map +1 -0
  837. package/dist/integrations/convex.js +25 -0
  838. package/dist/integrations/convex.js.map +1 -0
  839. package/dist/lib/auth.d.ts +29 -0
  840. package/dist/lib/auth.d.ts.map +1 -0
  841. package/dist/lib/auth.js +111 -0
  842. package/dist/lib/auth.js.map +1 -0
  843. package/dist/lib/auth.test.d.ts +1 -0
  844. package/dist/lib/auth.test.js +60 -0
  845. package/dist/lib/auth.test.js.map +1 -0
  846. package/dist/lib/cookie.d.ts +50 -0
  847. package/dist/lib/cookie.d.ts.map +1 -0
  848. package/dist/lib/cookie.js +366 -0
  849. package/dist/lib/cookie.js.map +1 -0
  850. package/dist/lib/env.d.ts +37 -0
  851. package/dist/lib/env.d.ts.map +1 -0
  852. package/dist/lib/env.js +90 -0
  853. package/dist/lib/env.js.map +1 -0
  854. package/dist/lib/hooks.d.ts +35 -0
  855. package/dist/lib/hooks.d.ts.map +1 -0
  856. package/dist/lib/hooks.js +30 -0
  857. package/dist/lib/hooks.js.map +1 -0
  858. package/dist/lib/stack-app/api-keys/index.d.ts +53 -0
  859. package/dist/lib/stack-app/api-keys/index.d.ts.map +1 -0
  860. package/dist/lib/stack-app/api-keys/index.js +25 -0
  861. package/dist/lib/stack-app/api-keys/index.js.map +1 -0
  862. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts +421 -0
  863. package/dist/lib/stack-app/apps/implementations/admin-app-impl.d.ts.map +1 -0
  864. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js +1043 -0
  865. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -0
  866. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts +561 -0
  867. package/dist/lib/stack-app/apps/implementations/client-app-impl.d.ts.map +1 -0
  868. package/dist/lib/stack-app/apps/implementations/client-app-impl.js +2637 -0
  869. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -0
  870. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.d.ts +1 -0
  871. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js +32 -0
  872. package/dist/lib/stack-app/apps/implementations/client-app-impl.oauth-prefetch.test.js.map +1 -0
  873. package/dist/lib/stack-app/apps/implementations/common.d.ts +66 -0
  874. package/dist/lib/stack-app/apps/implementations/common.d.ts.map +1 -0
  875. package/dist/lib/stack-app/apps/implementations/common.js +186 -0
  876. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -0
  877. package/dist/lib/stack-app/apps/implementations/event-tracker.d.ts +42 -0
  878. package/dist/lib/stack-app/apps/implementations/event-tracker.d.ts.map +1 -0
  879. package/dist/lib/stack-app/apps/implementations/event-tracker.js +213 -0
  880. package/dist/lib/stack-app/apps/implementations/event-tracker.js.map +1 -0
  881. package/dist/lib/stack-app/apps/implementations/event-tracker.test.d.ts +1 -0
  882. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js +87 -0
  883. package/dist/lib/stack-app/apps/implementations/event-tracker.test.js.map +1 -0
  884. package/dist/lib/stack-app/apps/implementations/index.d.ts +9 -0
  885. package/dist/lib/stack-app/apps/implementations/index.d.ts.map +1 -0
  886. package/dist/lib/stack-app/apps/implementations/index.js +31 -0
  887. package/dist/lib/stack-app/apps/implementations/index.js.map +1 -0
  888. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.d.ts +35 -0
  889. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.d.ts.map +1 -0
  890. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js +191 -0
  891. package/dist/lib/stack-app/apps/implementations/redirect-page-urls.js.map +1 -0
  892. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts +260 -0
  893. package/dist/lib/stack-app/apps/implementations/server-app-impl.d.ts.map +1 -0
  894. package/dist/lib/stack-app/apps/implementations/server-app-impl.js +1385 -0
  895. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -0
  896. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts +28 -0
  897. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.d.ts.map +1 -0
  898. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.js +33 -0
  899. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.js.map +1 -0
  900. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.d.ts +1 -0
  901. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.js +82 -0
  902. package/dist/lib/stack-app/apps/implementations/session-refresh-subscription.test.js.map +1 -0
  903. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts +108 -0
  904. package/dist/lib/stack-app/apps/implementations/session-replay.d.ts.map +1 -0
  905. package/dist/lib/stack-app/apps/implementations/session-replay.js +242 -0
  906. package/dist/lib/stack-app/apps/implementations/session-replay.js.map +1 -0
  907. package/dist/lib/stack-app/apps/implementations/session-replay.test.d.ts +1 -0
  908. package/dist/lib/stack-app/apps/implementations/session-replay.test.js +29 -0
  909. package/dist/lib/stack-app/apps/implementations/session-replay.test.js.map +1 -0
  910. package/dist/lib/stack-app/apps/index.d.ts +4 -0
  911. package/dist/lib/stack-app/apps/index.js +24 -0
  912. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts +252 -0
  913. package/dist/lib/stack-app/apps/interfaces/admin-app.d.ts.map +1 -0
  914. package/dist/lib/stack-app/apps/interfaces/admin-app.js +10 -0
  915. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +1 -0
  916. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts +220 -0
  917. package/dist/lib/stack-app/apps/interfaces/client-app.d.ts.map +1 -0
  918. package/dist/lib/stack-app/apps/interfaces/client-app.js +10 -0
  919. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -0
  920. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts +153 -0
  921. package/dist/lib/stack-app/apps/interfaces/server-app.d.ts.map +1 -0
  922. package/dist/lib/stack-app/apps/interfaces/server-app.js +10 -0
  923. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +1 -0
  924. package/dist/lib/stack-app/common.d.ts +183 -0
  925. package/dist/lib/stack-app/common.d.ts.map +1 -0
  926. package/dist/lib/stack-app/common.js +9 -0
  927. package/dist/lib/stack-app/common.js.map +1 -0
  928. package/dist/lib/stack-app/connected-accounts/index.d.ts +57 -0
  929. package/dist/lib/stack-app/connected-accounts/index.d.ts.map +1 -0
  930. package/dist/lib/stack-app/connected-accounts/index.js +0 -0
  931. package/dist/lib/stack-app/contact-channels/index.d.ts +43 -0
  932. package/dist/lib/stack-app/contact-channels/index.d.ts.map +1 -0
  933. package/dist/lib/stack-app/contact-channels/index.js +44 -0
  934. package/dist/lib/stack-app/contact-channels/index.js.map +1 -0
  935. package/dist/lib/stack-app/customers/index.d.ts +129 -0
  936. package/dist/lib/stack-app/customers/index.d.ts.map +1 -0
  937. package/dist/lib/stack-app/customers/index.js +0 -0
  938. package/dist/lib/stack-app/data-vault/index.d.ts +14 -0
  939. package/dist/lib/stack-app/data-vault/index.d.ts.map +1 -0
  940. package/dist/lib/stack-app/data-vault/index.js +0 -0
  941. package/dist/lib/stack-app/email/index.d.ts +204 -0
  942. package/dist/lib/stack-app/email/index.d.ts.map +1 -0
  943. package/dist/lib/stack-app/email/index.js +0 -0
  944. package/dist/lib/stack-app/email-templates/index.d.ts +17 -0
  945. package/dist/lib/stack-app/email-templates/index.d.ts.map +1 -0
  946. package/dist/lib/stack-app/email-templates/index.js +13 -0
  947. package/dist/lib/stack-app/email-templates/index.js.map +1 -0
  948. package/dist/lib/stack-app/index.d.ts +15 -0
  949. package/dist/lib/stack-app/index.js +36 -0
  950. package/dist/lib/stack-app/internal-api-keys/index.d.ts +42 -0
  951. package/dist/lib/stack-app/internal-api-keys/index.d.ts.map +1 -0
  952. package/dist/lib/stack-app/internal-api-keys/index.js +16 -0
  953. package/dist/lib/stack-app/internal-api-keys/index.js.map +1 -0
  954. package/dist/lib/stack-app/notification-categories/index.d.ts +11 -0
  955. package/dist/lib/stack-app/notification-categories/index.d.ts.map +1 -0
  956. package/dist/lib/stack-app/notification-categories/index.js +0 -0
  957. package/dist/lib/stack-app/permissions/index.d.ts +43 -0
  958. package/dist/lib/stack-app/permissions/index.d.ts.map +1 -0
  959. package/dist/lib/stack-app/permissions/index.js +36 -0
  960. package/dist/lib/stack-app/permissions/index.js.map +1 -0
  961. package/dist/lib/stack-app/project-configs/index.d.ts +99 -0
  962. package/dist/lib/stack-app/project-configs/index.d.ts.map +1 -0
  963. package/dist/lib/stack-app/project-configs/index.js +0 -0
  964. package/dist/lib/stack-app/projects/index.d.ts +147 -0
  965. package/dist/lib/stack-app/projects/index.d.ts.map +1 -0
  966. package/dist/lib/stack-app/projects/index.js +69 -0
  967. package/dist/lib/stack-app/projects/index.js.map +1 -0
  968. package/dist/lib/stack-app/session-replays/index.d.ts +66 -0
  969. package/dist/lib/stack-app/session-replays/index.d.ts.map +1 -0
  970. package/dist/lib/stack-app/session-replays/index.js +0 -0
  971. package/dist/lib/stack-app/teams/index.d.ts +163 -0
  972. package/dist/lib/stack-app/teams/index.d.ts.map +1 -0
  973. package/dist/lib/stack-app/teams/index.js +40 -0
  974. package/dist/lib/stack-app/teams/index.js.map +1 -0
  975. package/dist/lib/stack-app/url-targets.d.ts +40 -0
  976. package/dist/lib/stack-app/url-targets.d.ts.map +1 -0
  977. package/dist/lib/stack-app/url-targets.js +289 -0
  978. package/dist/lib/stack-app/url-targets.js.map +1 -0
  979. package/dist/lib/stack-app/url-targets.test.d.ts +1 -0
  980. package/dist/lib/stack-app/url-targets.test.js +169 -0
  981. package/dist/lib/stack-app/url-targets.test.js.map +1 -0
  982. package/dist/lib/stack-app/users/index.d.ts +400 -0
  983. package/dist/lib/stack-app/users/index.d.ts.map +1 -0
  984. package/dist/lib/stack-app/users/index.js +76 -0
  985. package/dist/lib/stack-app/users/index.js.map +1 -0
  986. package/dist/lib/translations.d.ts +7 -0
  987. package/dist/lib/translations.d.ts.map +1 -0
  988. package/dist/lib/translations.js +21 -0
  989. package/dist/lib/translations.js.map +1 -0
  990. package/dist/providers/stack-context.d.ts +10 -0
  991. package/dist/providers/stack-context.d.ts.map +1 -0
  992. package/dist/providers/stack-context.js +13 -0
  993. package/dist/providers/stack-context.js.map +1 -0
  994. package/dist/providers/stack-provider-client.d.ts +17 -0
  995. package/dist/providers/stack-provider-client.d.ts.map +1 -0
  996. package/dist/providers/stack-provider-client.js +34 -0
  997. package/dist/providers/stack-provider-client.js.map +1 -0
  998. package/dist/providers/stack-provider.d.ts +25 -0
  999. package/dist/providers/stack-provider.d.ts.map +1 -0
  1000. package/dist/providers/stack-provider.js +26 -0
  1001. package/dist/providers/stack-provider.js.map +1 -0
  1002. package/dist/providers/theme-provider.d.ts +46 -0
  1003. package/dist/providers/theme-provider.d.ts.map +1 -0
  1004. package/dist/providers/theme-provider.js +72 -0
  1005. package/dist/providers/theme-provider.js.map +1 -0
  1006. package/dist/providers/translation-provider-client.d.ts +16 -0
  1007. package/dist/providers/translation-provider-client.d.ts.map +1 -0
  1008. package/dist/providers/translation-provider-client.js +23 -0
  1009. package/dist/providers/translation-provider-client.js.map +1 -0
  1010. package/dist/providers/translation-provider.d.ts +16 -0
  1011. package/dist/providers/translation-provider.d.ts.map +1 -0
  1012. package/dist/providers/translation-provider.js +25 -0
  1013. package/dist/providers/translation-provider.js.map +1 -0
  1014. package/dist/storage-CKzvsBxG.d.ts +1912 -0
  1015. package/dist/storage-CKzvsBxG.d.ts.map +1 -0
  1016. package/dist/tanstack-start-server-context.combined.d.ts +12 -0
  1017. package/dist/tanstack-start-server-context.combined.d.ts.map +1 -0
  1018. package/dist/tanstack-start-server-context.combined.js +0 -0
  1019. package/dist/tanstack-start-server-context.default.d.ts +9 -0
  1020. package/dist/tanstack-start-server-context.default.d.ts.map +1 -0
  1021. package/dist/tanstack-start-server-context.default.js +16 -0
  1022. package/dist/tanstack-start-server-context.default.js.map +1 -0
  1023. package/dist/tanstack-start-server-context.server.d.ts +2 -0
  1024. package/dist/tanstack-start-server-context.server.js +34 -0
  1025. package/dist/utils/browser-script.d.ts +9 -0
  1026. package/dist/utils/browser-script.d.ts.map +1 -0
  1027. package/dist/utils/browser-script.js +107 -0
  1028. package/dist/utils/browser-script.js.map +1 -0
  1029. package/dist/utils/constants.d.ts +81 -0
  1030. package/dist/utils/constants.d.ts.map +1 -0
  1031. package/dist/utils/constants.js +92 -0
  1032. package/dist/utils/constants.js.map +1 -0
  1033. package/dist/utils/url.d.ts +5 -0
  1034. package/dist/utils/url.d.ts.map +1 -0
  1035. package/dist/utils/url.js +18 -0
  1036. package/dist/utils/url.js.map +1 -0
  1037. package/package.json +129 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-tool-core.js","names":[],"sources":["../../../src/dev-tool/dev-tool-core.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY, INSTEAD EDIT THE CORRESPONDING FILE IN packages/template\n//===========================================\n\nimport type { RequestLogEntry } from \"@stackframe/stack-shared/dist/interface/client-interface\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { isLocalhost } from \"@stackframe/stack-shared/dist/utils/urls\";\nimport type { StackClientApp } from \"../lib/stack-app\";\nimport { getBaseUrl } from \"../lib/stack-app/apps/implementations/common\";\nimport type { HandlerUrlOptions, HandlerUrls, HandlerUrlTarget } from \"../lib/stack-app/common\";\nimport { stackAppInternalsSymbol } from \"../lib/stack-app/common\";\nimport { getPagePrompt } from \"../lib/stack-app/url-targets\";\nimport { devToolCSS } from \"./dev-tool-styles\";\nimport type { TriggerCorner, TriggerPlacement } from \"./dev-tool-trigger-position\";\nimport { clampTriggerPosition, getSnappedTriggerPlacement, resolveTriggerPosition } from \"./dev-tool-trigger-position\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype TabId = 'overview' | 'customize' | 'ai' | 'dashboard' | 'console' | 'support';\n\ntype TabResult = { element: HTMLElement, cleanup?: () => void };\n\ntype ApiLogEntry = {\n id: string;\n timestamp: number;\n method: string;\n url: string;\n status?: number;\n duration?: number;\n error?: string;\n};\n\ntype EventLogEntry = {\n id: string;\n timestamp: number;\n type: 'error' | 'info';\n message: string;\n};\n\ntype DevToolState = {\n isOpen: boolean;\n activeTab: TabId;\n panelWidth: number;\n panelHeight: number;\n};\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst STORAGE_KEY = '__stack-dev-tool-state';\nconst TRIGGER_POS_KEY = 'stack-devtool-trigger-position';\nconst ROOT_ID = '__stack-dev-tool-root';\nconst GLOBAL_INSTANCE_KEY = '__stack-dev-tool-instance';\nconst MAX_LOG_ENTRIES = 500;\nconst CONSOLE_LOG_BATCH_SIZE = 100;\nconst DRAG_THRESHOLD = 5;\nconst DOCS_URL = 'https://docs.stack-auth.com';\n\nconst TABS: { id: TabId; label: string; icon: string }[] = [\n { id: 'overview', label: 'Overview', icon: '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/></svg>' },\n { id: 'customize', label: 'Customize', icon: '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 20h9\"/><path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\"/></svg>' },\n { id: 'ai', label: 'AI', icon: '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/></svg>' },\n { id: 'console', label: 'Console', icon: '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"4 17 10 11 4 5\"/><line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\"/></svg>' },\n { id: 'dashboard', label: 'Dashboard', icon: '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M3 9h18\"/><path d=\"M9 21V9\"/></svg>' },\n { id: 'support', label: 'Support', icon: '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"/></svg>' },\n];\n\nconst DEFAULT_STATE: DevToolState = {\n isOpen: false,\n activeTab: 'overview',\n panelWidth: 800,\n panelHeight: 520,\n};\n\nconst STACK_LOGO_SVG = '<svg width=\"14\" height=\"17\" viewBox=\"0 0 131 156\" fill=\"currentColor\"><path d=\"M124.447 28.6459L70.1382 1.75616C67.3472 0.374284 64.0715 0.372197 61.279 1.75051L0.740967 31.6281V87.6369L65.7101 119.91L117.56 93.675V112.414L65.7101 138.44L0.740967 106.584V119.655C0.740967 122.359 2.28151 124.827 4.71097 126.015L62.282 154.161C65.0966 155.538 68.3938 155.515 71.1888 154.099L130.47 124.074V79.7105C130.47 74.8003 125.34 71.5769 120.915 73.7077L79.4531 93.675V75.9771L130.47 50.1589V38.3485C130.47 34.2325 128.137 30.4724 124.447 28.6459Z\"/></svg>';\n\n// ---------------------------------------------------------------------------\n// State management\n// ---------------------------------------------------------------------------\n\nfunction loadState(): DevToolState {\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n const parsed = JSON.parse(stored);\n // Migrate old 'components' tab name to 'customize'\n if (parsed.activeTab === 'components') parsed.activeTab = 'customize';\n if (parsed.activeTab === 'docs') parsed.activeTab = 'overview';\n return { ...DEFAULT_STATE, ...parsed, isOpen: false };\n }\n } catch {}\n return { ...DEFAULT_STATE };\n}\n\nfunction saveState(state: DevToolState) {\n try {\n // Keep layout preferences across pages, but do not reopen the panel automatically on remount.\n localStorage.setItem(STORAGE_KEY, JSON.stringify({ ...state, isOpen: false }));\n } catch {}\n}\n\nfunction createStateStore() {\n let state = loadState();\n const listeners = new Set<() => void>();\n\n return {\n get: () => state,\n update(partial: Partial<DevToolState>) {\n state = { ...state, ...partial };\n saveState(state);\n listeners.forEach((fn) => fn());\n },\n subscribe(fn: () => void) {\n listeners.add(fn);\n return () => {\n listeners.delete(fn);\n };\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Global log store (survives remounts, shared across instances)\n// ---------------------------------------------------------------------------\n\ntype LogStore = {\n apiLogs: ApiLogEntry[];\n eventLogs: EventLogEntry[];\n listeners: Set<() => void>;\n addApiLog(entry: ApiLogEntry): void;\n addEventLog(entry: EventLogEntry): void;\n clear(): void;\n subscribe(fn: () => void): () => void;\n};\n\ntype DevToolGlobalInstance = {\n cleanup: () => void;\n};\n\nfunction isDevToolGlobalInstance(value: unknown): value is DevToolGlobalInstance {\n return typeof value === 'object' && value !== null && typeof Reflect.get(value, 'cleanup') === 'function';\n}\n\nfunction getGlobalDevToolInstance(): DevToolGlobalInstance | null {\n if (typeof window === 'undefined') return null;\n const value: unknown = Reflect.get(window, GLOBAL_INSTANCE_KEY);\n return isDevToolGlobalInstance(value) ? value : null;\n}\n\nfunction setGlobalDevToolInstance(instance: DevToolGlobalInstance | null) {\n if (typeof window === 'undefined') return;\n if (instance === null) {\n Reflect.deleteProperty(window, GLOBAL_INSTANCE_KEY);\n } else {\n Reflect.set(window, GLOBAL_INSTANCE_KEY, instance);\n }\n}\n\nfunction getGlobalLogStore(): LogStore {\n const g = globalThis as any;\n if (!g.__STACK_DEV_TOOL_LOG_STORE__) {\n g.__STACK_DEV_TOOL_LOG_STORE__ = {\n apiLogs: [] as ApiLogEntry[],\n eventLogs: [] as EventLogEntry[],\n listeners: new Set<() => void>(),\n addApiLog(entry: ApiLogEntry) {\n this.apiLogs = [entry, ...this.apiLogs].slice(0, MAX_LOG_ENTRIES);\n this.listeners.forEach((fn: () => void) => fn());\n },\n addEventLog(entry: EventLogEntry) {\n this.eventLogs = [entry, ...this.eventLogs].slice(0, MAX_LOG_ENTRIES);\n this.listeners.forEach((fn: () => void) => fn());\n },\n clear() {\n this.apiLogs = [];\n this.eventLogs = [];\n this.listeners.forEach((fn: () => void) => fn());\n },\n subscribe(fn: () => void) {\n this.listeners.add(fn);\n return () => {\n this.listeners.delete(fn);\n };\n },\n };\n }\n return g.__STACK_DEV_TOOL_LOG_STORE__;\n}\n\n// ---------------------------------------------------------------------------\n// Utility helpers\n// ---------------------------------------------------------------------------\n\nlet _idCounter = 0;\nfunction nextId() {\n return `sdt-${++_idCounter}-${Date.now()}`;\n}\n\nfunction resolveApiBaseUrl(app: StackClientApp<true>): string {\n const opts = app[stackAppInternalsSymbol].getConstructorOptions();\n return getBaseUrl(opts.baseUrl);\n}\n\nfunction deriveDashboardBaseUrl(apiBaseUrl: string): string {\n try {\n const url = new URL(apiBaseUrl);\n if (url.hostname === 'localhost' || url.hostname === '127.0.0.1' || url.hostname === '[::1]') {\n const port = url.port;\n if (port && port.endsWith('02')) {\n url.port = port.slice(0, -2) + '01';\n }\n return url.origin;\n }\n if (url.hostname.startsWith('api.')) {\n url.hostname = 'app.' + url.hostname.slice(4);\n return url.origin;\n }\n return url.origin;\n } catch {\n return 'https://app.stack-auth.com';\n }\n}\n\nfunction resolveDashboardUrl(app: StackClientApp<true>): string {\n const base = deriveDashboardBaseUrl(resolveApiBaseUrl(app));\n return `${base}/projects/${encodeURIComponent(app.projectId)}`;\n}\n\nfunction formatTimestamp(ts: number): string {\n return new Date(ts).toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n fractionalSecondDigits: 3,\n } as any);\n}\n\nfunction escapeHtml(str: string): string {\n return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\n\nfunction generateRandomEmail(): string {\n const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\n let id = '';\n for (let i = 0; i < 8; i++) {\n id += chars[Math.floor(Math.random() * chars.length)];\n }\n return `dev-${id}@test.stack-auth.com`;\n}\n\n// ---------------------------------------------------------------------------\n// DOM helpers\n// ---------------------------------------------------------------------------\n\nfunction h<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n attrs?: Record<string, any> | null,\n ...children: (string | Node | null | undefined)[]\n): HTMLElementTagNameMap[K] {\n const el = document.createElement(tag);\n if (attrs) {\n for (const [k, v] of Object.entries(attrs)) {\n if (v == null) continue;\n if (k === 'className') {\n el.className = v;\n } else if (k === 'style' && typeof v === 'object') {\n Object.assign(el.style, v);\n } else if (k.startsWith('on') && typeof v === 'function') {\n el.addEventListener(k.slice(2).toLowerCase(), v);\n } else {\n el.setAttribute(k, String(v));\n }\n }\n }\n for (const child of children) {\n if (child == null) continue;\n el.appendChild(typeof child === 'string' ? document.createTextNode(child) : child);\n }\n return el;\n}\n\nfunction setHtml(el: HTMLElement, html: string) {\n el.innerHTML = html;\n}\n\nfunction hasAppendChild(value: unknown): value is { appendChild(node: Node): void } {\n return typeof value === 'object' && value !== null && typeof Reflect.get(value, 'appendChild') === 'function';\n}\n\nfunction parseMarkdownImage(line: string): { alt: string, src: string } | null {\n const match = line.trim().match(/^!\\[([^\\]]*)\\]\\((.+)\\)$/);\n if (!match) return null;\n\n const [, alt, src] = match;\n const normalizedSrc = src.trim();\n if (normalizedSrc === '') return null;\n\n return {\n alt: alt.trim(),\n src: normalizedSrc,\n };\n}\n\nfunction appendInlineMarkdown(container: HTMLElement, text: string) {\n const tokenPattern = /(\\[[^\\]]+\\]\\([^)]+\\)|`[^`\\n]+`|\\*\\*[^*\\n]+\\*\\*|__[^_\\n]+__|\\*[^*\\n]+\\*|_[^_\\n]+_)/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = tokenPattern.exec(text)) !== null) {\n if (match.index > lastIndex) {\n container.appendChild(document.createTextNode(text.slice(lastIndex, match.index)));\n }\n\n const token = match[0];\n if (token.startsWith(\"`\")) {\n container.appendChild(h(\"code\", { className: \"sdt-ai-inline-code\" }, token.slice(1, -1)));\n } else if (token.startsWith(\"**\") || token.startsWith(\"__\")) {\n const bold = h(\"strong\", { className: \"sdt-ai-bold\" });\n appendInlineMarkdown(bold, token.slice(2, -2));\n container.appendChild(bold);\n } else if (token.startsWith(\"*\") || token.startsWith(\"_\")) {\n const italic = h(\"em\");\n appendInlineMarkdown(italic, token.slice(1, -1));\n container.appendChild(italic);\n } else {\n const linkMatch = token.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)$/);\n if (linkMatch) {\n const [, linkText, href] = linkMatch;\n const trimmedHref = href.trim();\n if (/^(https?:\\/\\/|mailto:)/i.test(trimmedHref)) {\n const link = h(\"a\", {\n className: \"sdt-ai-link\",\n href: trimmedHref,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n });\n appendInlineMarkdown(link, linkText);\n container.appendChild(link);\n } else {\n container.appendChild(document.createTextNode(token));\n }\n } else {\n container.appendChild(document.createTextNode(token));\n }\n }\n\n lastIndex = tokenPattern.lastIndex;\n }\n\n if (lastIndex < text.length) {\n container.appendChild(document.createTextNode(text.slice(lastIndex)));\n }\n}\n\n// ---------------------------------------------------------------------------\n// Trigger button (draggable pill — corner-snapping, icon only)\n// ---------------------------------------------------------------------------\n\nfunction createTrigger(onClick: () => void): { element: HTMLElement; cleanup: () => void } {\n type Position = { left: number; top: number };\n type Placement = TriggerPlacement;\n\n // Measured lazily after the element is appended to the DOM.\n let triggerSize = { width: 36, height: 36 };\n\n function isPosition(value: unknown): value is Position {\n if (typeof value !== 'object' || value === null) return false;\n return typeof Reflect.get(value, 'left') === 'number' && typeof Reflect.get(value, 'top') === 'number';\n }\n\n function isPlacement(value: unknown): value is Placement {\n if (typeof value !== 'object' || value === null) return false;\n const corner = Reflect.get(value, 'corner');\n return ['top-left', 'top-right', 'bottom-left', 'bottom-right'].includes(String(corner));\n }\n\n function loadPlacement(): Placement | null {\n try {\n const raw = localStorage.getItem(TRIGGER_POS_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw);\n\n if (isPlacement(parsed)) return parsed;\n\n // Migrate old side-based placement { side, offset } to nearest corner.\n if (typeof parsed === 'object' && parsed !== null && 'side' in parsed && 'offset' in parsed) {\n const side = String(Reflect.get(parsed, 'side'));\n const offset = Number(Reflect.get(parsed, 'offset'));\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n let corner: TriggerCorner;\n if (side === 'right') corner = offset < vh / 2 ? 'top-right' : 'bottom-right';\n else if (side === 'left') corner = offset < vh / 2 ? 'top-left' : 'bottom-left';\n else if (side === 'top') corner = offset < vw / 2 ? 'top-left' : 'top-right';\n else corner = offset < vw / 2 ? 'bottom-left' : 'bottom-right';\n return { corner };\n }\n\n // Migrate old absolute position.\n if (isPosition(parsed)) {\n return getSnappedTriggerPlacement(parsed, triggerSize, { width: window.innerWidth, height: window.innerHeight });\n }\n } catch {}\n return null;\n }\n\n function savePlacement(placement: Placement) {\n try {\n localStorage.setItem(TRIGGER_POS_KEY, JSON.stringify(placement));\n } catch {}\n }\n\n let animationTimeout: number | null = null;\n\n function setPositionAnimation(isAnimated: boolean) {\n if (animationTimeout !== null) {\n window.clearTimeout(animationTimeout);\n animationTimeout = null;\n }\n btn.classList.toggle('sdt-trigger-position-animated', isAnimated);\n if (isAnimated) {\n animationTimeout = window.setTimeout(() => {\n animationTimeout = null;\n btn.classList.remove('sdt-trigger-position-animated');\n }, 180);\n }\n }\n\n function applyPos(nextPos: Position, options?: { animate?: boolean }) {\n setPositionAnimation(options?.animate === true);\n pos = nextPos;\n btn.style.left = pos.left + 'px';\n btn.style.top = pos.top + 'px';\n }\n\n const btn = h('button', {\n className: 'sdt-trigger',\n 'aria-label': 'Toggle Stack Auth Dev Tools',\n 'data-stack-devtool-trigger': 'true',\n title: 'Stack Auth Dev Tools',\n });\n const logoSpan = h('span', { className: 'sdt-trigger-logo' });\n setHtml(logoSpan, STACK_LOGO_SVG);\n btn.appendChild(logoSpan);\n\n let placement = loadPlacement() ?? { corner: 'bottom-right' as TriggerCorner };\n let pos = resolveTriggerPosition(placement, triggerSize, { width: window.innerWidth, height: window.innerHeight });\n applyPos(pos);\n\n let dragState: { startX: number; startY: number; startLeft: number; startTop: number; didDrag: boolean } | null = null;\n\n // After mount, measure the actual rendered size and re-snap if needed.\n requestAnimationFrame(() => {\n const rect = btn.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n triggerSize = { width: rect.width, height: rect.height };\n const measured = resolveTriggerPosition(placement, triggerSize, { width: window.innerWidth, height: window.innerHeight });\n if (measured.left !== pos.left || measured.top !== pos.top) {\n applyPos(measured, { animate: true });\n }\n }\n });\n\n btn.addEventListener('pointerdown', (e) => {\n e.preventDefault();\n setPositionAnimation(false);\n btn.setPointerCapture(e.pointerId);\n dragState = { startX: e.clientX, startY: e.clientY, startLeft: pos.left, startTop: pos.top, didDrag: false };\n });\n\n btn.addEventListener('pointermove', (e) => {\n if (!dragState) return;\n const dx = e.clientX - dragState.startX;\n const dy = e.clientY - dragState.startY;\n if (!dragState.didDrag && Math.abs(dx) + Math.abs(dy) < DRAG_THRESHOLD) return;\n dragState.didDrag = true;\n applyPos(clampTriggerPosition(\n { left: dragState.startLeft + dx, top: dragState.startTop + dy },\n triggerSize,\n { width: window.innerWidth, height: window.innerHeight },\n ));\n });\n\n btn.addEventListener('pointerup', (e) => {\n const ds = dragState;\n dragState = null;\n if (!ds) return;\n btn.releasePointerCapture(e.pointerId);\n if (ds.didDrag) {\n placement = getSnappedTriggerPlacement(pos, triggerSize, { width: window.innerWidth, height: window.innerHeight });\n applyPos(resolveTriggerPosition(placement, triggerSize, { width: window.innerWidth, height: window.innerHeight }), { animate: true });\n savePlacement(placement);\n } else {\n onClick();\n }\n });\n\n // On viewport resize, reapply the existing corner placement to the new dimensions.\n // Placement (corner) only changes when the user drags.\n function onResize() {\n const resizedPos = resolveTriggerPosition(placement, triggerSize, { width: window.innerWidth, height: window.innerHeight });\n if (resizedPos.left !== pos.left || resizedPos.top !== pos.top) {\n applyPos(resizedPos, { animate: true });\n }\n }\n\n window.addEventListener('resize', onResize);\n\n return {\n element: btn,\n cleanup: () => {\n if (animationTimeout !== null) {\n window.clearTimeout(animationTimeout);\n }\n window.removeEventListener('resize', onResize);\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Tab bar with sliding indicator\n// ---------------------------------------------------------------------------\n\nfunction createTabBar(\n tabs: { id: string; label: string; icon?: string }[],\n activeTab: string,\n onTabChange: (id: string) => void,\n opts?: { variant?: 'bar' | 'pills'; trailing?: HTMLElement },\n): { el: HTMLElement; setActive: (id: string) => void } {\n const variant = opts?.variant ?? 'bar';\n const barClass = variant === 'pills' ? 'sdt-console-tabs' : 'sdt-tabbar';\n const tabClass = variant === 'pills' ? 'sdt-console-tab' : 'sdt-tab';\n const indicatorClass = variant === 'pills' ? 'sdt-console-tab-indicator' : 'sdt-tab-indicator';\n\n const bar = h('div', { className: barClass });\n const indicator = h('div', { className: indicatorClass });\n indicator.style.opacity = '0';\n bar.appendChild(indicator);\n\n let current = activeTab;\n let isInitial = true;\n\n const buttons = tabs.map((tab) => {\n const btn = h('button', {\n className: tabClass,\n 'data-tab-id': tab.id,\n 'data-active': String(tab.id === activeTab),\n });\n if (tab.icon) {\n const iconSpan = h('span', { className: 'sdt-tab-icon' });\n setHtml(iconSpan, tab.icon);\n btn.appendChild(iconSpan);\n }\n btn.appendChild(document.createTextNode(tab.label));\n btn.addEventListener('click', () => onTabChange(tab.id));\n bar.appendChild(btn);\n return btn;\n });\n\n if (variant === 'bar') {\n bar.appendChild(h('div', { className: 'sdt-tabbar-spacer' }));\n }\n if (opts?.trailing) {\n bar.appendChild(opts.trailing);\n }\n\n function measure() {\n const btn = bar.querySelector<HTMLElement>(`[data-tab-id=\"${current}\"]`);\n if (!btn) return;\n indicator.style.transform = `translateX(${btn.offsetLeft}px)`;\n indicator.style.width = btn.offsetWidth + 'px';\n indicator.style.height = btn.offsetHeight + 'px';\n indicator.style.opacity = '1';\n indicator.style.transition = isInitial ? 'none' : '';\n isInitial = false;\n }\n\n const ro = new ResizeObserver(measure);\n ro.observe(bar);\n requestAnimationFrame(measure);\n\n function setActive(id: string) {\n current = id;\n buttons.forEach((btn) => {\n const tabId = btn.getAttribute('data-tab-id');\n btn.setAttribute('data-active', String(tabId === id));\n });\n measure();\n }\n\n return { el: bar, setActive };\n}\n\n// ---------------------------------------------------------------------------\n// Iframe helper\n// ---------------------------------------------------------------------------\n\nfunction createIframeTab(src: string, title: string, loadingMsg = 'Loading\\u2026', errorMsg = 'Unable to load content', errorDetail?: string, openExternallyLabel?: string): HTMLElement {\n const container = h('div', { className: 'sdt-iframe-container' });\n if (openExternallyLabel != null) {\n container.appendChild(h('div', { className: 'sdt-iframe-toolbar' },\n h('a', { href: src, target: '_blank', rel: 'noopener noreferrer', className: 'sdt-iframe-open-link' }, openExternallyLabel),\n ));\n }\n const loadingEl = h('div', { className: 'sdt-iframe-loading' }, loadingMsg);\n container.appendChild(loadingEl);\n\n const iframe = document.createElement('iframe');\n iframe.src = src;\n iframe.title = title;\n iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-popups allow-forms');\n iframe.style.display = 'none';\n\n iframe.addEventListener('load', () => {\n loadingEl.style.display = 'none';\n iframe.style.display = 'block';\n });\n\n iframe.addEventListener('error', () => {\n loadingEl.style.display = 'none';\n container.innerHTML = '';\n const errDiv = h('div', { className: 'sdt-iframe-error' });\n errDiv.appendChild(h('div', null, errorMsg));\n if (errorDetail) {\n errDiv.appendChild(h('div', { style: { fontSize: '12px', color: 'var(--sdt-text-tertiary)' } }, errorDetail));\n }\n const retryBtn = h('button', { className: 'sdt-iframe-error-btn' }, 'Retry');\n retryBtn.addEventListener('click', () => {\n container.replaceWith(createIframeTab(src, title, loadingMsg, errorMsg, errorDetail, openExternallyLabel));\n });\n errDiv.appendChild(retryBtn);\n const link = h('a', { href: src, target: '_blank', rel: 'noopener noreferrer', style: { color: 'var(--sdt-accent)', fontSize: '12px', textDecoration: 'none' } }, 'Open in new tab');\n errDiv.appendChild(link);\n container.appendChild(errDiv);\n });\n\n container.appendChild(iframe);\n return container;\n}\n\n// ===========================================================================================\n// TABS\n// ===========================================================================================\n\n// ---------------------------------------------------------------------------\n// Overview tab\n// ---------------------------------------------------------------------------\n\nfunction createOverviewTab(app: StackClientApp<true>): TabResult {\n const container = h('div', { className: 'sdt-ov' });\n\n // ── Identity card ──────────────────────────────────────────────────────────\n const heroCard = h('div', { className: 'sdt-ov-card sdt-ov-card-hero' });\n heroCard.appendChild(h('div', { className: 'sdt-ov-label' }, 'Identity'));\n\n const userRow = h('div', { className: 'sdt-ov-user-row' });\n const avatar = h('div', { className: 'sdt-ov-avatar' }, '?');\n const userMeta = h('div', { className: 'sdt-ov-user-meta' });\n const userName = h('div', { className: 'sdt-ov-user-name' }, 'Loading\\u2026');\n const userEmail = h('div', { className: 'sdt-ov-user-email' }, '');\n const authIndicator = h('div', { className: 'sdt-ov-auth-indicator', style: { display: 'none' } }, 'Authenticated');\n userMeta.append(userName, userEmail, authIndicator);\n userRow.append(avatar, userMeta);\n heroCard.appendChild(userRow);\n\n const actions = h('div', { className: 'sdt-ov-actions' });\n const toast = h('div', { className: 'sdt-ov-toast', style: { display: 'none' } });\n const emailRow = h('div', { className: 'sdt-ov-email-input' });\n const emailInput = h('input', { type: 'email', placeholder: 'Sign in as email\\u2026' }) as HTMLInputElement;\n const emailBtn = h('button', null);\n setHtml(emailBtn, '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/><polyline points=\"12 5 19 12 12 19\"/></svg>');\n emailRow.append(emailInput, emailBtn);\n\n function isBestEffortOverviewError(error: unknown) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return true;\n }\n if (error instanceof TypeError) {\n return true;\n }\n if (error instanceof Error) {\n return error.message.includes('Failed to fetch')\n || error.message.includes('NetworkError')\n || error.message.includes('Load failed')\n || error.message.includes('network connection');\n }\n return false;\n }\n\n function showToast(msg: string, type: 'success' | 'error') {\n toast.textContent = msg;\n toast.className = `sdt-ov-toast sdt-ov-toast-${type}`;\n toast.style.display = '';\n setTimeout(() => {\n toast.style.display = 'none';\n }, 4000);\n }\n\n let currentUser: any = null;\n let loading = false;\n\n function rebuildActions() {\n actions.innerHTML = '';\n if (currentUser) {\n const signOutBtn = h('button', { className: 'sdt-ov-btn sdt-ov-btn-danger' }, 'Sign Out');\n signOutBtn.disabled = loading;\n signOutBtn.addEventListener('click', () => {\n runAsynchronously(async () => {\n loading = true;\n rebuildActions();\n try {\n await currentUser.signOut();\n showToast('Signed out', 'success');\n } catch (e: any) {\n showToast(e.message || 'Sign out failed', 'error');\n }\n loading = false;\n await refreshUser();\n });\n });\n const randomBtn = h('button', { className: 'sdt-ov-btn sdt-ov-btn-primary' }, 'Random User');\n randomBtn.disabled = loading;\n randomBtn.addEventListener('click', () => {\n runAsynchronously(doQuickSignIn());\n });\n actions.append(signOutBtn, randomBtn);\n } else {\n const quickBtn = h('button', { className: 'sdt-ov-btn sdt-ov-btn-primary sdt-ov-btn-wide' }, loading ? 'Working\\u2026' : 'Quick Sign In');\n quickBtn.disabled = loading;\n quickBtn.addEventListener('click', () => {\n runAsynchronously(doQuickSignIn());\n });\n actions.appendChild(quickBtn);\n }\n emailInput.placeholder = currentUser ? 'Switch to email\\u2026' : 'Sign in as email\\u2026';\n actions.appendChild(emailRow);\n }\n\n async function doQuickSignIn() {\n if (!isLocalhost(window.location.href)) {\n showToast('Quick sign-in is only available on localhost', 'error');\n return;\n }\n loading = true;\n rebuildActions();\n const email = generateRandomEmail();\n try {\n const signUpResult = await app.signUpWithCredential({ email, password: email, noRedirect: true } as any);\n if (signUpResult.status === 'error') {\n showToast(`Sign up failed: ${signUpResult.error.message}`, 'error');\n loading = false;\n rebuildActions();\n return;\n }\n const signInResult = await app.signInWithCredential({ email, password: email, noRedirect: true });\n if (signInResult.status === 'error') {\n showToast(`Sign in failed: ${signInResult.error.message}`, 'error');\n } else {\n showToast(`Signed in as ${email}`, 'success');\n }\n } catch (e: any) {\n showToast(e.message || 'Unknown error', 'error');\n }\n loading = false;\n await refreshUser();\n }\n\n async function doSignInAs(targetEmail: string) {\n if (!targetEmail.trim()) return;\n if (!isLocalhost(window.location.href)) {\n showToast('Quick sign-in is only available on localhost', 'error');\n return;\n }\n loading = true;\n rebuildActions();\n const trimmed = targetEmail.trim();\n try {\n const signInResult = await app.signInWithCredential({ email: trimmed, password: trimmed, noRedirect: true });\n if (signInResult.status === 'ok') {\n showToast(`Signed in as ${trimmed}`, 'success');\n emailInput.value = '';\n loading = false;\n await refreshUser();\n return;\n }\n const signUpResult = await app.signUpWithCredential({ email: trimmed, password: trimmed, noRedirect: true } as any);\n if (signUpResult.status === 'error') {\n showToast(`Failed: ${signUpResult.error.message}`, 'error');\n loading = false;\n rebuildActions();\n return;\n }\n const retryResult = await app.signInWithCredential({ email: trimmed, password: trimmed, noRedirect: true });\n if (retryResult.status === 'error') {\n showToast(`Sign in failed: ${retryResult.error.message}`, 'error');\n } else {\n showToast(`Signed in as ${trimmed}`, 'success');\n emailInput.value = '';\n }\n } catch (e: any) {\n showToast(e.message || 'Unknown error', 'error');\n }\n loading = false;\n await refreshUser();\n }\n\n emailBtn.addEventListener('click', () => {\n runAsynchronously(doSignInAs(emailInput.value));\n });\n emailInput.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n runAsynchronously(doSignInAs(emailInput.value));\n }\n });\n\n heroCard.append(actions, toast);\n\n // ── Auth methods card ──────────────────────────────────────────────────────\n const methodsCard = h('div', { className: 'sdt-ov-card sdt-ov-card-auth' });\n methodsCard.appendChild(h('div', { className: 'sdt-ov-label' }, 'Auth Methods'));\n const authGrid = h('div', { className: 'sdt-ov-auth-grid' });\n for (let i = 0; i < 3; i++) {\n authGrid.appendChild(h('div', { className: 'sdt-ov-method sdt-ov-skeleton-pill' }));\n }\n methodsCard.appendChild(authGrid);\n let hasActiveAuthMethod: boolean | null = null;\n\n async function loadAuthMethods() {\n try {\n const project = await app.getProject();\n authGrid.innerHTML = '';\n const config = project.config;\n hasActiveAuthMethod = config.credentialEnabled\n || config.magicLinkEnabled\n || config.passkeyEnabled\n || config.oauthProviders.length > 0;\n const methods = [\n { label: 'Password', enabled: config.credentialEnabled },\n { label: 'Magic Link', enabled: config.magicLinkEnabled },\n { label: 'Passkey', enabled: config.passkeyEnabled },\n ];\n for (const m of methods) {\n const pill = h('div', { className: `sdt-ov-method ${m.enabled ? 'sdt-ov-method-on' : 'sdt-ov-method-off'}` });\n pill.appendChild(h('span', { className: 'sdt-ov-method-name' }, m.label));\n authGrid.appendChild(pill);\n }\n for (const p of config.oauthProviders) {\n const pill = h('div', { className: 'sdt-ov-method sdt-ov-method-on sdt-ov-method-oauth' });\n pill.appendChild(h('span', { className: 'sdt-ov-method-name' }, p.id));\n authGrid.appendChild(pill);\n }\n if (!config.signUpEnabled) {\n const pill = h('div', { className: 'sdt-ov-method sdt-ov-method-warn' });\n pill.appendChild(h('span', { className: 'sdt-ov-method-name' }, 'Sign-up off'));\n authGrid.appendChild(pill);\n }\n buildChecklist();\n } catch (error) {\n authGrid.innerHTML = '<div style=\"font-size:11px;color:var(--sdt-text-tertiary)\">Could not load auth methods</div>';\n hasActiveAuthMethod = null;\n buildChecklist();\n if (!isBestEffortOverviewError(error)) {\n throw error;\n }\n }\n }\n\n // Overview hydration is best-effort while the local Stack backend is still booting.\n runAsynchronously(loadAuthMethods());\n\n // ── Setup checklist (only shown when something is incomplete) ──────────────\n const checksCard = h('div', { className: 'sdt-ov-card sdt-ov-card-checks' });\n const projectId = app.projectId;\n let checksCardMounted = false;\n\n function buildChecklist() {\n checksCard.innerHTML = '';\n const checks = [\n { ok: !!projectId && projectId !== 'default', label: 'Project configured', hint: null },\n { ok: hasActiveAuthMethod === true, label: 'Auth method active', hint: hasActiveAuthMethod === null ? 'Still checking project config' : null },\n { ok: !!currentUser, label: 'Sign in a test user', hint: 'Use \\u201cQuick Sign In\\u201d above \\u2192' },\n ];\n const passCount = checks.filter((c) => c.ok).length;\n const allGood = passCount === checks.length;\n\n if (allGood) {\n if (checksCardMounted && checksCard.parentElement) {\n container.removeChild(checksCard);\n checksCardMounted = false;\n }\n return;\n }\n\n if (!checksCardMounted) {\n container.appendChild(checksCard);\n checksCardMounted = true;\n }\n\n const titleRow = h('div', { className: 'sdt-ov-checks-header' });\n const titleLabel = h('div', { className: 'sdt-ov-label', style: { marginBottom: '0', color: 'var(--sdt-warning)' } }, 'Setup');\n const badge = h('span', { className: 'sdt-ov-checks-badge sdt-ov-checks-badge-warn' }, `${passCount}\\u200a/\\u200a${checks.length}`);\n titleRow.append(titleLabel, badge);\n checksCard.appendChild(titleRow);\n\n const bar = h('div', { className: 'sdt-ov-checks-bar' });\n const fill = h('div', { className: 'sdt-ov-checks-bar-fill' });\n fill.style.width = `${(passCount / checks.length) * 100}%`;\n bar.appendChild(fill);\n checksCard.appendChild(bar);\n\n for (const c of checks) {\n const row = h('div', { className: 'sdt-ov-setup-row' });\n row.appendChild(h('span', { className: `sdt-ov-setup-dot ${c.ok ? 'sdt-ov-setup-dot-ok' : 'sdt-ov-setup-dot-warn'}` }));\n row.appendChild(h('span', { className: 'sdt-ov-setup-label' }, c.label));\n if (!c.ok && c.hint) {\n row.appendChild(h('span', { className: 'sdt-ov-setup-hint' }, c.hint));\n }\n checksCard.appendChild(row);\n }\n }\n\n async function refreshUser() {\n try {\n currentUser = await app.getUser();\n\n if (currentUser) {\n const initials = (currentUser.displayName || currentUser.primaryEmail || '?')\n .split(' ').map((s: string) => s[0]).join('').slice(0, 2).toUpperCase();\n avatar.className = 'sdt-ov-avatar sdt-ov-avatar-active';\n if (currentUser.profileImageUrl) {\n avatar.innerHTML = `<img src=\"${escapeHtml(currentUser.profileImageUrl)}\" alt=\"\" />`;\n } else {\n avatar.textContent = initials;\n }\n userName.textContent = currentUser.displayName || 'Anonymous';\n userEmail.textContent = currentUser.primaryEmail || 'No email';\n authIndicator.style.display = '';\n } else {\n avatar.className = 'sdt-ov-avatar';\n avatar.textContent = '?';\n userName.textContent = 'No user signed in';\n userEmail.textContent = 'Sign in to test auth flows';\n authIndicator.style.display = 'none';\n }\n } catch (error) {\n avatar.className = 'sdt-ov-avatar';\n avatar.textContent = '?';\n userName.textContent = 'Could not load user';\n userEmail.textContent = 'Check your local Stack backend';\n authIndicator.style.display = 'none';\n currentUser = null;\n if (!isBestEffortOverviewError(error)) {\n throw error;\n }\n }\n rebuildActions();\n buildChecklist();\n }\n\n container.append(heroCard, methodsCard);\n buildChecklist();\n runAsynchronously(refreshUser());\n const userPoll = setInterval(() => {\n runAsynchronously(refreshUser());\n }, 3000);\n\n return { element: container, cleanup: () => clearInterval(userPoll) };\n}\n\n// ---------------------------------------------------------------------------\n// Console tab\n// ---------------------------------------------------------------------------\n\ntype MergedLogEntry =\n | { kind: 'api', entry: ApiLogEntry }\n | { kind: 'event', entry: EventLogEntry };\n\nfunction createConsoleTab(logStore: LogStore): TabResult {\n const container = h('div', { className: 'sdt-console-panel' });\n\n const EVENT_TYPE_STYLES: Record<string, string> = {\n 'error': 'sdt-badge-error',\n 'info': 'sdt-badge-info',\n };\n\n const title = h('div', { className: 'sdt-console-title' }, 'Logs');\n const actions = h('div', { className: 'sdt-console-actions' });\n const copyBtn = h('button', { className: 'sdt-console-action-btn', title: 'Copy logs' });\n setHtml(copyBtn, '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>Copy');\n const exportBtn = h('button', { className: 'sdt-console-action-btn', title: 'Export logs' });\n setHtml(exportBtn, '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"/></svg>Export');\n const clearBtn = h('button', { className: 'sdt-console-action-btn', title: 'Clear logs' });\n setHtml(clearBtn, '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"3 6 5 6 21 6\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/><path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\"/></svg>Clear');\n actions.append(copyBtn, exportBtn, clearBtn);\n container.appendChild(h('div', { className: 'sdt-console-header' }, title, actions));\n\n const contentArea = h('div', { className: 'sdt-console-log-scroll sdt-tab-content-fade' });\n container.appendChild(contentArea);\n\n let visibleLogCount = CONSOLE_LOG_BATCH_SIZE;\n\n function getMergedLogs(): MergedLogEntry[] {\n return [\n ...logStore.apiLogs.map((entry) => ({ kind: 'api' as const, entry })),\n ...logStore.eventLogs.map((entry) => ({ kind: 'event' as const, entry })),\n ].sort((a, b) => b.entry.timestamp - a.entry.timestamp);\n }\n\n function formatLogLine(item: MergedLogEntry): string {\n if (item.kind === 'api') {\n const log = item.entry;\n const status = log.status !== undefined ? ` [${log.status}]` : '';\n const duration = log.duration !== undefined ? ` ${log.duration}ms` : '';\n const error = log.error !== undefined ? ` ${log.error}` : '';\n return `${new Date(log.timestamp).toISOString()} ${log.method} ${log.url}${status}${duration}${error}`;\n }\n\n const log = item.entry;\n return `${new Date(log.timestamp).toISOString()} ${log.type.toUpperCase()} ${log.message}`;\n }\n\n function formatLogsForExport(): string {\n const lines = [\n '=== Stack Auth Dev Tool Logs ===',\n `Generated: ${new Date().toISOString()}`,\n `Total logs: ${getMergedLogs().length}`,\n '',\n ...getMergedLogs().map(formatLogLine),\n ];\n return lines.join('\\n');\n }\n\n function renderLogItem(item: MergedLogEntry): HTMLElement {\n if (item.kind === 'api') {\n const log = item.entry;\n const row = h('div', { className: 'sdt-log-item' });\n row.appendChild(h('span', { className: 'sdt-log-time' }, formatTimestamp(log.timestamp)));\n row.appendChild(h('span', { className: `sdt-log-method sdt-log-method-${log.method.toLowerCase()}` }, log.method));\n row.appendChild(h('span', { className: 'sdt-log-url' }, log.url));\n if (log.status !== undefined) {\n row.appendChild(h('span', { className: `sdt-log-status ${log.status < 400 ? 'sdt-log-status-ok' : 'sdt-log-status-err'}` }, String(log.status)));\n }\n if (log.duration !== undefined) {\n row.appendChild(h('span', { className: 'sdt-log-time' }, log.duration + 'ms'));\n }\n return row;\n }\n\n const log = item.entry;\n const row = h('div', { className: 'sdt-log-item' });\n row.appendChild(h('span', { className: 'sdt-log-time' }, formatTimestamp(log.timestamp)));\n row.appendChild(h('span', { className: `sdt-badge ${EVENT_TYPE_STYLES[log.type] || 'sdt-badge-info'}` }, log.type));\n row.appendChild(h('span', { className: 'sdt-log-message' }, log.message));\n return row;\n }\n\n function renderLogs() {\n const previousScrollTop = contentArea.scrollTop;\n contentArea.innerHTML = '';\n const merged = getMergedLogs();\n visibleLogCount = Math.min(Math.max(visibleLogCount, CONSOLE_LOG_BATCH_SIZE), Math.max(merged.length, CONSOLE_LOG_BATCH_SIZE));\n\n if (merged.length === 0) {\n contentArea.innerHTML = '<div class=\"sdt-empty-state\"><div class=\"sdt-empty-state-icon\">\\uD83D\\uDCCB</div><div>No logs recorded yet</div><div style=\"font-size:12px;color:var(--sdt-text-tertiary)\">API calls and auth events will appear here</div></div>';\n return;\n }\n\n const list = h('div', { className: 'sdt-log-list' });\n for (const item of merged.slice(0, visibleLogCount)) {\n list.appendChild(renderLogItem(item));\n }\n if (visibleLogCount < merged.length) {\n list.appendChild(h('div', { className: 'sdt-log-load-hint' }, `${merged.length - visibleLogCount} older logs available`));\n }\n contentArea.appendChild(list);\n contentArea.scrollTop = Math.min(previousScrollTop, contentArea.scrollHeight);\n }\n\n function maybeLoadOlderLogs() {\n const mergedLength = getMergedLogs().length;\n if (visibleLogCount >= mergedLength) return;\n const distanceFromBottom = contentArea.scrollHeight - contentArea.scrollTop - contentArea.clientHeight;\n if (distanceFromBottom <= 48) {\n visibleLogCount = Math.min(visibleLogCount + CONSOLE_LOG_BATCH_SIZE, mergedLength);\n renderLogs();\n }\n }\n\n contentArea.addEventListener('scroll', maybeLoadOlderLogs);\n renderLogs();\n\n copyBtn.addEventListener('click', () => {\n runAsynchronously(\n navigator.clipboard.writeText(formatLogsForExport()).then(() => {\n copyBtn.textContent = '\\u2713 Copied';\n setTimeout(() => {\n setHtml(copyBtn, '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>Copy');\n }, 1500);\n })\n );\n });\n\n exportBtn.addEventListener('click', () => {\n const blob = new Blob([formatLogsForExport()], { type: 'text/plain;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const link = h('a', { href: url, download: `stack-auth-dev-tool-logs-${new Date().toISOString()}.txt` });\n document.body.appendChild(link);\n link.click();\n link.remove();\n URL.revokeObjectURL(url);\n });\n\n clearBtn.addEventListener('click', () => {\n visibleLogCount = CONSOLE_LOG_BATCH_SIZE;\n logStore.clear();\n });\n\n const unsub = logStore.subscribe(() => {\n renderLogs();\n });\n\n return {\n element: container,\n cleanup: () => {\n contentArea.removeEventListener('scroll', maybeLoadOlderLogs);\n unsub();\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// AI tab\n// ---------------------------------------------------------------------------\n\nfunction createAITab(app: StackClientApp<true>): HTMLElement {\n const container = h('div', { className: 'sdt-ai-container' });\n const apiBaseUrl = resolveApiBaseUrl(app);\n\n type ToolCallState = 'running' | 'success' | 'error';\n type ToolCall = {\n id: string,\n toolName: string,\n argsText: string | null,\n resultText: string | null,\n state: ToolCallState,\n errorText: string | null,\n isExpanded: boolean,\n };\n type AssistantPart =\n | { type: 'text', content: string }\n | { type: 'tool', toolCallId: string };\n type UserMessage = { role: 'user'; content: string };\n type AssistantMessage = { role: 'assistant'; parts: AssistantPart[]; toolCallsById: Map<string, ToolCall> };\n type Message = UserMessage | AssistantMessage;\n const messages: Message[] = [];\n let aiLoading = false;\n let activeAiAbortController: AbortController | null = null;\n\n const messagesArea = h('div', { className: 'sdt-ai-messages' });\n const inputArea = h('div', { className: 'sdt-ai-input-area' });\n\n const SUGGESTED_QUESTIONS = [\n { icon: '\\uD83D\\uDD12', text: 'How do I protect a Next.js route?' },\n { icon: '\\uD83D\\uDC65', text: 'How do teams and permissions work?' },\n { icon: '\\uD83D\\uDD17', text: 'How do I add OAuth providers?' },\n { icon: '\\u2709\\uFE0F', text: 'How do I customize auth emails?' },\n ];\n\n function getHeaders(): Record<string, string> {\n const opts = app[stackAppInternalsSymbol].getConstructorOptions();\n const headers: Record<string, string> = {\n 'X-Stack-Access-Type': 'client',\n 'X-Stack-Project-Id': app.projectId,\n };\n if ('publishableClientKey' in opts && opts.publishableClientKey) {\n headers['X-Stack-Publishable-Client-Key'] = opts.publishableClientKey as string;\n }\n return headers;\n }\n\n function renderToolCard(toolCall: ToolCall): HTMLElement {\n const toolCard = h('div', { className: 'sdt-ai-tool-card' });\n const header = h('button', { className: 'sdt-ai-tool-header', type: 'button' });\n header.appendChild(h('span', { className: 'sdt-ai-tool-name' }, toolCall.toolName));\n header.appendChild(h('span', { className: `sdt-ai-tool-status sdt-ai-tool-status-${toolCall.state}` }, toolCall.state));\n header.appendChild(h('span', { className: `sdt-ai-tool-chevron${toolCall.isExpanded ? ' sdt-ai-tool-chevron-open' : ''}` }, '\\u25BE'));\n header.addEventListener('click', () => {\n toolCall.isExpanded = !toolCall.isExpanded;\n renderMessages();\n });\n toolCard.appendChild(header);\n\n if (toolCall.isExpanded) {\n const body = h('div', { className: 'sdt-ai-tool-body' });\n if (toolCall.argsText !== null) {\n body.appendChild(h('div', { className: 'sdt-ai-tool-label' }, 'Args'));\n const argsPre = h('pre', { className: 'sdt-ai-tool-pre' });\n argsPre.appendChild(h('code', null, toolCall.argsText));\n body.appendChild(argsPre);\n }\n if (toolCall.resultText !== null) {\n body.appendChild(h('div', { className: 'sdt-ai-tool-label' }, toolCall.state === 'error' ? 'Error' : 'Result'));\n const resultPre = h('pre', { className: 'sdt-ai-tool-pre' });\n resultPre.appendChild(h('code', null, toolCall.resultText));\n body.appendChild(resultPre);\n }\n if (toolCall.state === 'running') {\n body.appendChild(h('div', { className: 'sdt-ai-tool-running' }, 'Running...'));\n }\n toolCard.appendChild(body);\n }\n\n return toolCard;\n }\n\n function renderMessages() {\n messagesArea.innerHTML = '';\n\n if (messages.length === 0) {\n const empty = h('div', { className: 'sdt-ai-empty' });\n const icon = h('div', { className: 'sdt-ai-empty-icon' });\n setHtml(icon, '<svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/></svg>');\n empty.appendChild(icon);\n empty.appendChild(h('div', { className: 'sdt-ai-empty-title' }, 'Ask AI'));\n empty.appendChild(h('div', { className: 'sdt-ai-empty-desc' }, 'Get help with Stack Auth integration, troubleshooting, and best practices.'));\n\n const suggestions = h('div', { className: 'sdt-ai-suggestions' });\n for (const q of SUGGESTED_QUESTIONS) {\n const btn = h('button', { className: 'sdt-ai-suggestion' });\n btn.appendChild(h('span', { className: 'sdt-ai-suggestion-icon' }, q.icon));\n btn.appendChild(h('span', null, q.text));\n btn.addEventListener('click', () => {\n runAsynchronously(sendMessage(q.text));\n });\n suggestions.appendChild(btn);\n }\n empty.appendChild(suggestions);\n messagesArea.appendChild(empty);\n return;\n }\n\n const list = h('div', { className: 'sdt-ai-message-list' });\n for (const msg of messages) {\n if (msg.role === 'user') {\n const msgDiv = h('div', { className: 'sdt-ai-msg sdt-ai-msg-user' });\n const bubble = h('div', { className: 'sdt-ai-bubble sdt-ai-bubble-user' });\n bubble.appendChild(h('p', null, msg.content));\n msgDiv.appendChild(bubble);\n const avatarDiv = h('div', { className: 'sdt-ai-avatar sdt-ai-avatar-user' });\n setHtml(avatarDiv, '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/></svg>');\n msgDiv.appendChild(avatarDiv);\n list.appendChild(msgDiv);\n } else {\n const msgDiv = h('div', { className: 'sdt-ai-msg sdt-ai-msg-assistant' });\n const avatarDiv = h('div', { className: 'sdt-ai-avatar sdt-ai-avatar-assistant' });\n setHtml(avatarDiv, '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/></svg>');\n msgDiv.appendChild(avatarDiv);\n const bubble = h('div', { className: 'sdt-ai-bubble sdt-ai-bubble-assistant' });\n if (msg.parts.length === 0) {\n bubble.innerHTML = '<div class=\"sdt-ai-thinking\"><span class=\"sdt-ai-thinking-dot\"></span><span class=\"sdt-ai-thinking-dot\"></span><span class=\"sdt-ai-thinking-dot\"></span></div>';\n } else {\n for (const part of msg.parts) {\n if (part.type === 'text') {\n const textContainer = h('div', { className: 'sdt-ai-part-text' });\n renderMarkdownInto(textContainer, part.content);\n bubble.appendChild(textContainer);\n continue;\n }\n\n const toolCall = msg.toolCallsById.get(part.toolCallId);\n if (toolCall == null) {\n const missingTool = h('div', { className: 'sdt-ai-tool-card' });\n const missingBody = h('div', { className: 'sdt-ai-tool-body' });\n missingBody.appendChild(h('div', { className: 'sdt-ai-tool-label' }, 'Error'));\n const missingPre = h('pre', { className: 'sdt-ai-tool-pre' });\n missingPre.appendChild(h('code', null, `Missing tool call state for ${part.toolCallId}`));\n missingBody.appendChild(missingPre);\n missingTool.appendChild(missingBody);\n bubble.appendChild(missingTool);\n continue;\n }\n const toolsContainer = h('div', { className: 'sdt-ai-tools' });\n toolsContainer.appendChild(renderToolCard(toolCall));\n bubble.appendChild(toolsContainer);\n }\n }\n msgDiv.appendChild(bubble);\n list.appendChild(msgDiv);\n }\n }\n messagesArea.appendChild(list);\n messagesArea.scrollTop = messagesArea.scrollHeight;\n }\n\n function renderMarkdownInto(el: HTMLElement, content: string) {\n function appendBlockWithInlineMarkdown(tag: \"p\" | \"li\" | \"h1\" | \"h2\" | \"h3\", className: string, text: string) {\n const block = h(tag, { className });\n appendInlineMarkdown(block, text);\n el.appendChild(block);\n }\n\n const lines = content.split('\\n');\n let i = 0;\n while (i < lines.length) {\n const line = lines[i];\n\n if (line.startsWith('```')) {\n const lang = line.slice(3).trim();\n const codeLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i].startsWith('```')) {\n codeLines.push(lines[i]);\n i++;\n }\n i++;\n const block = h('div', { className: 'sdt-ai-code-block' });\n const header = h('div', { className: 'sdt-ai-code-header' });\n header.appendChild(h('span', { className: 'sdt-ai-code-lang' }, lang || 'CODE'));\n const copyBtn = h('button', { className: 'sdt-ai-copy-btn' }, '\\u2398');\n const code = codeLines.join('\\n');\n copyBtn.addEventListener('click', () => {\n runAsynchronously(navigator.clipboard.writeText(code).then(() => {\n copyBtn.textContent = '\\u2713';\n setTimeout(() => {\n copyBtn.textContent = '\\u2398';\n }, 1500);\n }));\n });\n header.appendChild(copyBtn);\n block.appendChild(header);\n const pre = h('pre', { className: 'sdt-ai-code-pre' });\n pre.appendChild(h('code', null, code));\n block.appendChild(pre);\n el.appendChild(block);\n continue;\n }\n\n const headingMatch = line.match(/^(#{1,3}) (.+)/);\n if (headingMatch) {\n const tag = `h${headingMatch[1].length}` as 'h1' | 'h2' | 'h3';\n appendBlockWithInlineMarkdown(tag, \"sdt-ai-heading\", headingMatch[2]);\n i++;\n continue;\n }\n\n if (/^[-*] /.test(line)) {\n const ul = h('ul', { className: 'sdt-ai-list' });\n while (i < lines.length && /^[-*] /.test(lines[i])) {\n const li = h(\"li\");\n appendInlineMarkdown(li, lines[i].replace(/^[-*] /, \"\"));\n ul.appendChild(li);\n i++;\n }\n el.appendChild(ul);\n continue;\n }\n\n if (/^\\d+\\. /.test(line)) {\n const ol = h('ol', { className: 'sdt-ai-list sdt-ai-list-ordered' });\n while (i < lines.length && /^\\d+\\. /.test(lines[i])) {\n const li = h(\"li\");\n appendInlineMarkdown(li, lines[i].replace(/^\\d+\\. /, \"\"));\n ol.appendChild(li);\n i++;\n }\n el.appendChild(ol);\n continue;\n }\n\n if (line.trim() === '') {\n i++;\n continue;\n }\n\n appendBlockWithInlineMarkdown(\"p\", \"sdt-ai-paragraph\", line);\n i++;\n }\n }\n\n function stringifyForDebug(value: unknown): string {\n if (value === undefined || typeof value === 'function' || typeof value === 'symbol') {\n return String(value);\n }\n return JSON.stringify(value, null, 2);\n }\n\n function getLastItem<T>(items: readonly T[]): T | undefined {\n return items.length > 0 ? items[items.length - 1] : undefined;\n }\n\n function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n function expectObject(value: unknown, payload: string): Record<string, unknown> {\n if (!isRecord(value)) {\n throw new Error(`SSE payload must be an object: ${payload}`);\n }\n return value;\n }\n\n function getRequiredStringField(event: Record<string, unknown>, field: string, payload: string): string {\n const value = event[field];\n if (typeof value !== 'string') {\n throw new Error(`SSE event '${String(event.type)}' missing string '${field}': ${payload}`);\n }\n return value;\n }\n\n function getCurrentAssistantMessage(): AssistantMessage {\n const lastMessage = getLastItem(messages);\n if (lastMessage?.role !== 'assistant') {\n throw new Error('Expected current message to be an assistant message');\n }\n return lastMessage;\n }\n\n function appendTextDelta(delta: string) {\n const assistantMessage = getCurrentAssistantMessage();\n const lastPart = getLastItem(assistantMessage.parts);\n if (lastPart?.type === 'text') {\n lastPart.content += delta;\n return;\n }\n assistantMessage.parts.push({ type: 'text', content: delta });\n }\n\n function ensureToolPart(assistantMessage: AssistantMessage, toolCallId: string) {\n const hasPart = assistantMessage.parts.some(part => part.type === 'tool' && part.toolCallId === toolCallId);\n if (!hasPart) {\n assistantMessage.parts.push({ type: 'tool', toolCallId });\n }\n }\n\n function findOrCreateToolCall(toolCallId: string, fallbackToolName: string): ToolCall {\n const assistantMessage = getCurrentAssistantMessage();\n const existing = assistantMessage.toolCallsById.get(toolCallId);\n if (existing != null) {\n if (existing.toolName === 'tool' && fallbackToolName !== 'tool') {\n existing.toolName = fallbackToolName;\n }\n ensureToolPart(assistantMessage, toolCallId);\n return existing;\n }\n\n const created: ToolCall = {\n id: toolCallId,\n toolName: fallbackToolName,\n argsText: null,\n resultText: null,\n state: 'running',\n errorText: null,\n isExpanded: false,\n };\n assistantMessage.toolCallsById.set(toolCallId, created);\n ensureToolPart(assistantMessage, toolCallId);\n return created;\n }\n\n async function sendMessage(text: string) {\n if (!text.trim() || aiLoading) return;\n messages.push({ role: 'user', content: text.trim() });\n messages.push({ role: 'assistant', parts: [], toolCallsById: new Map<string, ToolCall>() });\n aiLoading = true;\n renderMessages();\n renderInput();\n\n try {\n const abortController = new AbortController();\n activeAiAbortController = abortController;\n const res = await fetch(`${apiBaseUrl}/api/latest/ai/query/stream`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...getHeaders(),\n },\n signal: abortController.signal,\n body: JSON.stringify({\n systemPrompt: 'command-center-ask-ai',\n tools: ['docs'],\n quality: 'smart',\n speed: 'slow',\n messages: messages\n .slice(0, -1)\n .map((m) => ({\n role: m.role,\n content: [{ type: 'text', text: m.role === 'user' ? m.content : m.parts.filter(part => part.type === 'text').map(part => part.content).join('') }],\n })),\n }),\n });\n\n if (!res.ok) {\n throw new Error(`AI request failed with status ${res.status}`);\n }\n if (!res.body) {\n throw new Error('AI request returned no response body');\n }\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n const streamLines = buffer.split('\\n');\n buffer = streamLines.pop() || '';\n\n for (const streamLine of streamLines) {\n const line = streamLine.trim();\n if (line === '' || line.startsWith(':')) continue;\n if (!line.startsWith('data: ')) {\n throw new Error(`Unexpected SSE line: ${line}`);\n }\n\n const payload = line.slice(6);\n if (payload === '[DONE]') continue;\n const event = expectObject(JSON.parse(payload), payload);\n const eventType = getRequiredStringField(event, 'type', payload);\n\n switch (eventType) {\n case 'start':\n case 'start-step':\n case 'finish-step':\n case 'finish':\n case 'message-metadata':\n case 'text-start':\n case 'text-end':\n case 'reasoning-start':\n case 'reasoning-delta':\n case 'reasoning-end':\n case 'source-url':\n case 'source-document':\n case 'file': {\n break;\n }\n case 'text-delta': {\n const delta = getRequiredStringField(event, 'delta', payload);\n appendTextDelta(delta);\n break;\n }\n case 'tool-input-start': {\n const toolCallId = getRequiredStringField(event, 'toolCallId', payload);\n const toolName = getRequiredStringField(event, 'toolName', payload);\n const toolCall = findOrCreateToolCall(toolCallId, toolName);\n toolCall.state = 'running';\n toolCall.resultText = null;\n toolCall.errorText = null;\n toolCall.argsText = '';\n break;\n }\n case 'tool-input-delta': {\n const toolCallId = getRequiredStringField(event, 'toolCallId', payload);\n const inputTextDelta = getRequiredStringField(event, 'inputTextDelta', payload);\n const toolCall = findOrCreateToolCall(toolCallId, 'tool');\n toolCall.argsText = (toolCall.argsText ?? '') + inputTextDelta;\n break;\n }\n case 'tool-input-available': {\n const toolCallId = getRequiredStringField(event, 'toolCallId', payload);\n const toolName = getRequiredStringField(event, 'toolName', payload);\n const toolCall = findOrCreateToolCall(toolCallId, toolName);\n toolCall.argsText = stringifyForDebug(event.input);\n break;\n }\n case 'tool-input-error': {\n const toolCallId = getRequiredStringField(event, 'toolCallId', payload);\n const toolName = getRequiredStringField(event, 'toolName', payload);\n const errorText = getRequiredStringField(event, 'errorText', payload);\n const toolCall = findOrCreateToolCall(toolCallId, toolName);\n toolCall.state = 'error';\n toolCall.errorText = errorText;\n toolCall.resultText = errorText;\n break;\n }\n case 'tool-output-available': {\n const toolCallId = getRequiredStringField(event, 'toolCallId', payload);\n const toolCall = findOrCreateToolCall(toolCallId, 'tool');\n const preliminary = event.preliminary === true;\n toolCall.resultText = stringifyForDebug(event.output);\n if (!preliminary) {\n toolCall.state = 'success';\n }\n break;\n }\n case 'tool-output-error': {\n const toolCallId = getRequiredStringField(event, 'toolCallId', payload);\n const errorText = getRequiredStringField(event, 'errorText', payload);\n const toolCall = findOrCreateToolCall(toolCallId, 'tool');\n toolCall.state = 'error';\n toolCall.errorText = errorText;\n toolCall.resultText = errorText;\n break;\n }\n case 'tool-output-denied': {\n const toolCallId = getRequiredStringField(event, 'toolCallId', payload);\n const toolCall = findOrCreateToolCall(toolCallId, 'tool');\n toolCall.state = 'error';\n toolCall.errorText = 'Tool output denied';\n toolCall.resultText = 'Tool output denied';\n break;\n }\n case 'tool-approval-request': {\n const toolCallId = getRequiredStringField(event, 'toolCallId', payload);\n const approvalId = getRequiredStringField(event, 'approvalId', payload);\n const toolCall = findOrCreateToolCall(toolCallId, 'tool');\n toolCall.state = 'running';\n toolCall.resultText = `Approval requested (${approvalId})`;\n break;\n }\n case 'abort': {\n const reason = typeof event.reason === 'string' ? event.reason : 'unknown reason';\n throw new Error(`AI stream aborted: ${reason}`);\n }\n case 'error': {\n throw new Error(\n typeof event.errorText === 'string'\n ? `AI stream error: ${event.errorText}`\n : `AI stream error event: ${payload}`\n );\n }\n default: {\n if (eventType.startsWith('data-')) {\n break;\n }\n throw new Error(`Unexpected AI stream event type: ${eventType}`);\n }\n }\n }\n\n renderMessages();\n }\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n const assistantMessage = getCurrentAssistantMessage();\n if (assistantMessage.parts.length === 0) {\n assistantMessage.parts.push({ type: 'text', content: 'Stopped.' });\n }\n renderMessages();\n return;\n }\n\n const message = error instanceof Error ? error.message : 'Unknown AI stream error';\n const lastMessage = getLastItem(messages);\n if (lastMessage?.role === 'assistant') {\n lastMessage.parts = [{ type: 'text', content: message }];\n lastMessage.toolCallsById.clear();\n }\n renderMessages();\n alert(`AI stream failed: ${message}`);\n } finally {\n aiLoading = false;\n activeAiAbortController = null;\n renderMessages();\n renderInput();\n }\n }\n\n const inputWrapper = h('div', { className: 'sdt-ai-input-wrapper' });\n const input = h('input', {\n type: 'text',\n className: 'sdt-ai-input',\n placeholder: 'Ask anything about Stack Auth...',\n autocomplete: 'off',\n autocorrect: 'off',\n spellcheck: 'false',\n }) as HTMLInputElement;\n const sendBtn = h('button', { className: 'sdt-ai-send-btn', title: 'Send' });\n setHtml(sendBtn, '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/><polygon points=\"22 2 15 22 11 13 2 9 22 2\"/></svg>');\n\n function renderInput() {\n input.disabled = false;\n input.placeholder = messages.length === 0 ? 'Ask anything about Stack Auth...' : 'Ask a follow-up...';\n if (aiLoading) {\n sendBtn.classList.add('sdt-ai-send-btn-active');\n sendBtn.classList.add('sdt-ai-stop-btn');\n sendBtn.setAttribute('title', 'Stop');\n setHtml(sendBtn, '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"/></svg>');\n } else if (input.value.trim()) {\n sendBtn.classList.add('sdt-ai-send-btn-active');\n sendBtn.classList.remove('sdt-ai-stop-btn');\n sendBtn.setAttribute('title', 'Send');\n setHtml(sendBtn, '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/><polygon points=\"22 2 15 22 11 13 2 9 22 2\"/></svg>');\n } else {\n sendBtn.classList.remove('sdt-ai-send-btn-active');\n sendBtn.classList.remove('sdt-ai-stop-btn');\n sendBtn.setAttribute('title', 'Send');\n setHtml(sendBtn, '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/><polygon points=\"22 2 15 22 11 13 2 9 22 2\"/></svg>');\n }\n }\n\n input.addEventListener('input', renderInput);\n input.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n if (aiLoading) {\n activeAiAbortController?.abort();\n } else {\n runAsynchronously(sendMessage(input.value));\n input.value = '';\n }\n renderInput();\n }\n });\n sendBtn.addEventListener('click', () => {\n if (aiLoading) {\n activeAiAbortController?.abort();\n } else {\n runAsynchronously(sendMessage(input.value));\n input.value = '';\n }\n renderInput();\n });\n\n const newChatBtn = h('button', { className: 'sdt-ai-new-chat', title: 'New conversation', style: { display: 'none' } });\n setHtml(newChatBtn, '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/></svg>');\n newChatBtn.addEventListener('click', () => {\n if (aiLoading) {\n activeAiAbortController?.abort();\n }\n messages.length = 0;\n input.value = '';\n renderMessages();\n renderInput();\n newChatBtn.style.display = 'none';\n });\n\n inputWrapper.append(input, sendBtn);\n inputArea.append(newChatBtn, inputWrapper);\n\n container.append(messagesArea, inputArea);\n renderMessages();\n renderInput();\n\n return container;\n}\n\n// ---------------------------------------------------------------------------\n// Dashboard tab\n// ---------------------------------------------------------------------------\n\nfunction createDashboardTab(app: StackClientApp<true>): HTMLElement {\n const dashboardUrl = resolveDashboardUrl(app);\n return createIframeTab(dashboardUrl, 'Stack Auth Dashboard', 'Loading dashboard\\u2026', 'Unable to load dashboard', 'The dashboard may require authentication or block framing', 'Open in New Tab');\n}\n\n// ---------------------------------------------------------------------------\n// Support tab\n// ---------------------------------------------------------------------------\n\nfunction createSupportTab(app: StackClientApp<true>): HTMLElement {\n const container = h('div', { className: 'sdt-support-tab' });\n const apiBaseUrl = resolveApiBaseUrl(app);\n\n function createFeedbackForm(): HTMLElement {\n const pane = h('div', { className: 'sdt-support-feedback-pane' });\n const form = h('form', { className: 'sdt-support-form' });\n\n let feedbackType: 'feedback' | 'bug' = 'feedback';\n let status: 'idle' | 'submitting' | 'success' | 'error' = 'idle';\n let errorMessage = '';\n\n const nameInput = h('input', { className: 'sdt-support-input', type: 'text', placeholder: 'Your name' }) as HTMLInputElement;\n const emailInput = h('input', { className: 'sdt-support-input', type: 'email', placeholder: 'you@example.com', required: 'true' }) as HTMLInputElement;\n const messageInput = h('textarea', { className: 'sdt-support-textarea', placeholder: \"What's on your mind?\", required: 'true', rows: '5' }) as HTMLTextAreaElement;\n\n function render() {\n form.innerHTML = '';\n\n if (status === 'success') {\n const successDiv = h('div', { className: 'sdt-support-status sdt-support-status-success' });\n const icon = h('div', { className: 'sdt-support-status-icon' });\n setHtml(icon, '<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"><path d=\"M6 10l3 3 5-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>');\n successDiv.append(\n icon,\n h('div', { className: 'sdt-support-status-title' }, 'Feedback sent'),\n h('div', { className: 'sdt-support-status-msg' }, \"Thank you! We'll get back to you soon.\"),\n );\n const resetBtn = h('button', { className: 'sdt-support-submit', style: { marginTop: '12px', width: 'auto' } }, 'Send another');\n resetBtn.addEventListener('click', () => {\n status = 'idle';\n render();\n });\n successDiv.appendChild(resetBtn);\n form.appendChild(successDiv);\n return;\n }\n\n if (status === 'error') {\n const errDiv = h('div', { className: 'sdt-support-status sdt-support-status-error' });\n const icon = h('div', { className: 'sdt-support-status-icon' });\n setHtml(icon, '<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"><path d=\"M10 6v5m0 3h.01\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>');\n errDiv.append(\n icon,\n h('div', { className: 'sdt-support-status-title' }, 'Failed to send'),\n h('div', { className: 'sdt-support-status-msg' }, errorMessage || 'Please try again.'),\n );\n const retryBtn = h('button', { className: 'sdt-support-submit', style: { marginTop: '12px', width: 'auto' } }, 'Try again');\n retryBtn.addEventListener('click', () => {\n status = 'idle';\n errorMessage = '';\n render();\n });\n errDiv.appendChild(retryBtn);\n form.appendChild(errDiv);\n return;\n }\n\n const nameField = h('div', { className: 'sdt-support-field' });\n const nameLabel = h('label', { className: 'sdt-support-label' }, 'Name ');\n nameLabel.appendChild(h('span', { className: 'sdt-support-optional' }, 'optional'));\n nameField.append(nameLabel, nameInput);\n form.appendChild(nameField);\n\n const emailField = h('div', { className: 'sdt-support-field' });\n emailField.append(h('label', { className: 'sdt-support-label' }, 'Email'), emailInput);\n form.appendChild(emailField);\n\n const msgField = h('div', { className: 'sdt-support-field' });\n msgField.append(h('label', { className: 'sdt-support-label' }, feedbackType === 'bug' ? 'Description' : 'Message'), messageInput);\n messageInput.placeholder = feedbackType === 'bug' ? 'Steps to reproduce, expected vs. actual behavior\\u2026' : \"What's on your mind?\";\n form.appendChild(msgField);\n\n const typeCards = h('div', { className: 'sdt-support-type-cards' });\n const feedbackBtn = h('button', { type: 'button', className: `sdt-support-type-card ${feedbackType === 'feedback' ? 'sdt-support-type-card-active' : ''}` });\n setHtml(feedbackBtn, '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"/></svg><span>Feedback</span>');\n feedbackBtn.addEventListener('click', () => {\n feedbackType = 'feedback';\n render();\n });\n const bugBtn = h('button', { type: 'button', className: `sdt-support-type-card ${feedbackType === 'bug' ? 'sdt-support-type-card-active' : ''}` });\n setHtml(bugBtn, '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 2l1.88 1.88M14.12 3.88L16 2M9 7.13v-1a3.003 3.003 0 1 1 6 0v1\"/><path d=\"M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6\"/><path d=\"M12 20v-9M6.53 9C4.6 8.8 3 7.1 3 5M6 13H2M6 17H3M21 5c0 2.1-1.6 3.8-3.53 4M18 13h4M21 17h-3\"/></svg><span>Bug Report</span>');\n bugBtn.addEventListener('click', () => {\n feedbackType = 'bug';\n render();\n });\n typeCards.append(feedbackBtn, bugBtn);\n form.appendChild(typeCards);\n\n const submitBtn = h('button', { type: 'submit', className: 'sdt-support-submit' });\n setHtml(submitBtn, 'Submit <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/><polyline points=\"12 5 19 12 12 19\"/></svg>');\n submitBtn.disabled = status === 'submitting';\n form.appendChild(submitBtn);\n\n const channels = h('div', { className: 'sdt-support-channels' });\n channels.innerHTML = `\n <a href=\"https://discord.stack-auth.com\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"sdt-support-channel\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z\"/></svg>\n <span>Discord</span>\n </a>\n <a href=\"mailto:team@stack-auth.com\" class=\"sdt-support-channel\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/><path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\"/></svg>\n <span>Email</span>\n </a>\n <a href=\"https://github.com/hexclave/stack-auth\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"sdt-support-channel\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0 1 12 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z\"/></svg>\n <span>GitHub</span>\n </a>`;\n form.appendChild(channels);\n form.insertBefore(channels, form.firstChild);\n }\n\n form.addEventListener('submit', (e) => {\n e.preventDefault();\n if (!emailInput.value.trim() || !messageInput.value.trim()) return;\n runAsynchronously(async () => {\n status = 'submitting';\n render();\n try {\n const response = await fetch(`${apiBaseUrl}/api/latest/internal/feedback`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n body: JSON.stringify({\n name: nameInput.value.trim() || undefined,\n email: emailInput.value.trim(),\n message: messageInput.value.trim(),\n feedback_type: feedbackType,\n }),\n });\n if (!response.ok) {\n throw new Error(`Failed to send: ${response.status} ${response.statusText}`);\n }\n const result = await response.json();\n if (!result.success) {\n throw new Error(result.message || 'Failed to send feedback');\n }\n status = 'success';\n messageInput.value = '';\n } catch (err: any) {\n status = 'error';\n errorMessage = err.message || 'An unexpected error occurred';\n }\n render();\n });\n });\n\n render();\n pane.appendChild(form);\n return pane;\n }\n\n container.appendChild(createFeedbackForm());\n return container;\n}\n\n// ---------------------------------------------------------------------------\n// Components tab\n// ---------------------------------------------------------------------------\n\nfunction createComponentsTab(app: StackClientApp<true>): HTMLElement {\n const container = h('div', { className: 'sdt-pg-layout' });\n const apiBaseUrl = resolveApiBaseUrl(app);\n const urls = app.urls;\n const urlOptions: HandlerUrlOptions = app[stackAppInternalsSymbol].getConstructorOptions().urls ?? {};\n\n const PAGE_ENTRIES: { key: keyof HandlerUrls; label: string }[] = [\n { key: 'signIn' as any, label: 'Sign-in' },\n { key: 'signUp' as any, label: 'Sign-up' },\n { key: 'forgotPassword' as any, label: 'Forgot password' },\n { key: 'passwordReset' as any, label: 'Password reset' },\n { key: 'emailVerification' as any, label: 'Email verification' },\n { key: 'accountSettings' as any, label: 'Account settings' },\n { key: 'teamInvitation' as any, label: 'Team invitation' },\n { key: 'cliAuthConfirm' as any, label: 'CLI auth confirmation' },\n { key: 'mfa' as any, label: 'MFA' },\n { key: 'onboarding' as any, label: 'Onboarding' },\n { key: 'error' as any, label: 'Error' },\n ];\n\n type PageClassification = 'handler-component' | 'hosted' | 'custom';\n\n function classifyPage(key: keyof HandlerUrls): { classification: PageClassification; version: number | null } {\n const target: HandlerUrlTarget = (urlOptions as any)[key] ?? (urlOptions as any).default ?? { type: 'handler-component' };\n if (typeof target === 'string') {\n return { classification: 'custom', version: null };\n }\n if ('type' in target) {\n if (target.type === 'custom') {\n return { classification: 'custom', version: (target as any).version ?? null };\n }\n return { classification: target.type as PageClassification, version: null };\n }\n return { classification: 'handler-component', version: null };\n }\n\n type PageInfo = {\n key: keyof HandlerUrls;\n label: string;\n url: string;\n classification: PageClassification;\n version: number | null;\n versionStatus: string;\n versionChangelogs: { version: number; changelog: string }[];\n };\n\n let latestVersions: Map<string, { version: number; changelogs: Record<number, string> }> | null = null;\n let selectedKey: string | null = null;\n\n runAsynchronously(\n fetch(`${apiBaseUrl}/api/latest/internal/component-versions`)\n .then((r) => r.json())\n .then((data) => {\n latestVersions = new Map(Object.entries(data.versions ?? {}));\n renderSidebar();\n })\n .catch(() => {})\n );\n\n function buildPages(): PageInfo[] {\n return PAGE_ENTRIES.map((entry) => {\n const { classification, version } = classifyPage(entry.key);\n let versionStatus = 'current';\n let versionChangelogs: { version: number; changelog: string }[] = [];\n\n if (classification === 'custom' && version != null && latestVersions) {\n const info = latestVersions.get(entry.key as string);\n if (info && version < info.version) {\n versionStatus = 'outdated';\n versionChangelogs = Object.entries(info.changelogs)\n .map(([v, cl]) => ({ version: Number(v), changelog: cl }))\n .filter((e) => e.version > version)\n .sort((a, b) => a.version - b.version);\n }\n }\n\n return {\n key: entry.key,\n label: entry.label,\n url: (urls as any)[entry.key] || '',\n classification,\n version,\n versionStatus,\n versionChangelogs,\n };\n });\n }\n\n function getCompactUrl(url: string): string {\n const resolved = new URL(url, window.location.origin);\n return `${resolved.pathname}${resolved.search}${resolved.hash}`;\n }\n\n const sidebar = h('div', { className: 'sdt-pg-sidebar' });\n const mainArea = h('div', { className: 'sdt-pg-main' });\n\n function renderSidebar() {\n sidebar.innerHTML = '';\n const pages = buildPages();\n const outdatedCount = pages.filter((p) => p.versionStatus === 'outdated').length;\n\n const head = h('div', { className: 'sdt-pg-sidebar-head' });\n head.appendChild(h('span', { className: 'sdt-pg-sidebar-title' }, 'Pages'));\n head.appendChild(h('span', { className: 'sdt-pg-sidebar-count' }, String(pages.length)));\n if (outdatedCount > 0) {\n head.appendChild(h('span', { className: 'sdt-pg-sidebar-warn' }, `${outdatedCount} outdated`));\n }\n sidebar.appendChild(head);\n\n const list = h('div', { className: 'sdt-pg-list' });\n for (const page of pages) {\n const isOutdated = page.versionStatus === 'outdated';\n const item = h('div', {\n className: `sdt-pg-item ${isOutdated ? 'sdt-pg-item-warn' : ''}`,\n 'data-selected': String(selectedKey === page.key),\n });\n const dotClass = isOutdated\n ? 'sdt-pg-item-dot-warn'\n : page.classification === 'custom'\n ? 'sdt-pg-item-dot-custom'\n : 'sdt-pg-item-dot-handler';\n item.appendChild(h('span', { className: `sdt-pg-item-dot ${dotClass}` }));\n item.appendChild(h('span', { className: 'sdt-pg-item-label' }, page.label));\n if (isOutdated) {\n item.appendChild(h('span', { className: 'sdt-pg-badge sdt-pg-badge-outdated' }, 'Outdated'));\n }\n item.addEventListener('click', () => {\n selectedKey = page.key as string;\n renderSidebar();\n renderDetail(page);\n });\n list.appendChild(item);\n }\n sidebar.appendChild(list);\n }\n\n function renderDetail(page: PageInfo) {\n mainArea.innerHTML = '';\n const detail = h('div', { className: 'sdt-pg-detail' });\n\n const header = h('div', { className: 'sdt-pg-header' });\n const headerTop = h('div', { className: 'sdt-pg-header-top' });\n headerTop.appendChild(h('h3', { className: 'sdt-pg-title' }, `${page.label} Page`));\n headerTop.appendChild(h('a', { href: page.url, target: '_blank', rel: 'noopener noreferrer', className: 'sdt-pg-title-url' }, getCompactUrl(page.url)));\n if (page.versionStatus === 'outdated') {\n headerTop.appendChild(h('span', { className: 'sdt-pg-badge sdt-pg-badge-outdated' }, 'Outdated'));\n }\n header.appendChild(headerTop);\n\n const redirectMethod = `stackApp.redirectTo${(page.key as string).charAt(0).toUpperCase()}${(page.key as string).slice(1)}()`;\n const codeRow = h('div', { className: 'sdt-pg-code-inline' });\n codeRow.appendChild(h('code', { className: 'sdt-pg-code' }, redirectMethod));\n const openBtn = h('button', { className: 'sdt-pg-copy-btn sdt-pg-open-btn' });\n setHtml(openBtn, 'Open <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7 17L17 7\"/><path d=\"M7 7h10v10\"/></svg>');\n openBtn.addEventListener('click', () => {\n const resolved = new URL(page.url, window.location.origin);\n window.open(resolved.toString(), '_blank', 'noopener,noreferrer');\n });\n codeRow.appendChild(openBtn);\n header.appendChild(codeRow);\n detail.appendChild(header);\n\n const prompt = getPagePrompt(page.key as string, page.version ?? undefined);\n if (prompt) {\n const isOutdated = page.versionStatus === 'outdated';\n const showPrompt = page.classification === 'handler-component' || page.classification === 'hosted' || isOutdated;\n if (showPrompt) {\n let promptText: string;\n if (isOutdated && prompt.upgradePrompt) {\n promptText = prompt.upgradePrompt;\n } else if (prompt.fullPrompt) {\n promptText = prompt.fullPrompt;\n } else {\n promptText = '';\n }\n\n if (promptText) {\n const section = h('div', { className: 'sdt-pg-section' });\n section.appendChild(h('div', { className: 'sdt-pg-section-label' }, isOutdated ? 'Use this prompt to upgrade your component:' : 'Want to customize this page? Paste this prompt into your coding agent.'));\n section.appendChild(h('pre', { className: 'sdt-pg-pre' }, promptText));\n const footer = h('div', { className: 'sdt-pg-section-footer' });\n const copyBtn = h('button', { className: 'sdt-pg-copy-btn' }, 'Copy prompt');\n copyBtn.addEventListener('click', () => {\n runAsynchronously(navigator.clipboard.writeText(promptText).then(() => {\n copyBtn.textContent = '\\u2713 Copied';\n setTimeout(() => {\n copyBtn.textContent = 'Copy prompt';\n }, 1500);\n }));\n });\n footer.appendChild(copyBtn);\n section.appendChild(footer);\n detail.appendChild(section);\n }\n }\n }\n\n mainArea.appendChild(detail);\n }\n\n function renderEmptyMain() {\n mainArea.innerHTML = '';\n const empty = h('div', { className: 'sdt-pg-empty' });\n const icon = h('div', { className: 'sdt-pg-empty-icon' });\n setHtml(icon, '<svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"/></svg>');\n empty.appendChild(icon);\n empty.appendChild(h('div', { className: 'sdt-pg-empty-text' }, 'Select a page to inspect'));\n empty.appendChild(h('div', { className: 'sdt-pg-empty-sub' }, 'View configuration, preview, and upgrade prompts'));\n mainArea.appendChild(empty);\n }\n\n renderSidebar();\n renderEmptyMain();\n\n container.append(sidebar, mainArea);\n return container;\n}\n\n// ---------------------------------------------------------------------------\n// Panel (main shell with tab bar and content area)\n// ---------------------------------------------------------------------------\n\nfunction createPanel(\n app: StackClientApp<true>,\n state: ReturnType<typeof createStateStore>,\n logStore: LogStore,\n onClose: () => void,\n): { element: HTMLElement, cleanup: () => void } {\n const panel = h('div', { className: 'sdt-panel' });\n let panelAnimationTimeout: ReturnType<typeof setTimeout> | null = null;\n\n function animateNextPanelGeometryChange() {\n panel.classList.add('sdt-panel-geometry-animated');\n if (panelAnimationTimeout !== null) {\n clearTimeout(panelAnimationTimeout);\n }\n panelAnimationTimeout = setTimeout(() => {\n panel.classList.remove('sdt-panel-geometry-animated');\n panelAnimationTimeout = null;\n }, 220);\n }\n\n function applyPanelMode(tabId: TabId, opts?: { animate?: boolean }) {\n if (opts?.animate === true) {\n animateNextPanelGeometryChange();\n }\n\n if (tabId === 'dashboard') {\n panel.classList.add('sdt-panel-fullscreen');\n panel.style.width = '';\n panel.style.height = '';\n return;\n }\n\n panel.classList.remove('sdt-panel-fullscreen');\n panel.style.width = state.get().panelWidth + 'px';\n panel.style.height = state.get().panelHeight + 'px';\n }\n\n applyPanelMode(state.get().activeTab);\n\n const inner = h('div', { className: 'sdt-panel-inner' });\n\n const closeBtn = h('button', { className: 'sdt-close-btn', 'aria-label': 'Close' });\n setHtml(closeBtn, '<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><line x1=\"3\" y1=\"3\" x2=\"11\" y2=\"11\"/><line x1=\"11\" y1=\"3\" x2=\"3\" y2=\"11\"/></svg>');\n closeBtn.addEventListener('click', onClose);\n\n const docsLink = h('a', { href: DOCS_URL, target: '_blank', rel: 'noopener noreferrer', className: 'sdt-docs-link' });\n docsLink.appendChild(document.createTextNode('Docs'));\n const docsIcon = h('span', { className: 'sdt-docs-link-icon', 'aria-hidden': 'true' });\n setHtml(docsIcon, '<svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M7 17L17 7\"/><path d=\"M7 7h10v10\"/></svg>');\n docsLink.appendChild(docsIcon);\n\n const trailingControls = h('div', { className: 'sdt-tabbar-actions' }, docsLink, closeBtn);\n\n const tabBar = createTabBar(TABS, state.get().activeTab, (id) => {\n state.update({ activeTab: id as TabId });\n applyPanelMode(id as TabId, { animate: true });\n showTab(id as TabId);\n }, { trailing: trailingControls });\n inner.appendChild(tabBar.el);\n\n const content = h('div', { className: 'sdt-content' });\n const layers = h('div', { className: 'sdt-tab-layers' });\n content.appendChild(layers);\n inner.appendChild(content);\n\n const mountedPanes = new Map<TabId, HTMLElement>();\n const cleanups: Array<() => void> = [];\n\n function mountTab(pane: HTMLElement, result: TabResult | HTMLElement) {\n if ('element' in result) {\n pane.appendChild(result.element);\n if (result.cleanup) {\n cleanups.push(result.cleanup);\n }\n } else {\n pane.appendChild(result);\n }\n }\n\n function getOrCreatePane(tabId: TabId): HTMLElement {\n if (mountedPanes.has(tabId)) {\n return mountedPanes.get(tabId)!;\n }\n const pane = h('div', { className: 'sdt-tab-pane' });\n if (tabId === 'dashboard') {\n pane.classList.add('sdt-tab-pane-iframe');\n }\n switch (tabId) {\n case 'overview': {\n mountTab(pane, createOverviewTab(app));\n break;\n }\n case 'customize': {\n mountTab(pane, createComponentsTab(app));\n break;\n }\n case 'ai': {\n mountTab(pane, createAITab(app));\n break;\n }\n case 'console': {\n mountTab(pane, createConsoleTab(logStore));\n break;\n }\n case 'dashboard': {\n mountTab(pane, createDashboardTab(app));\n break;\n }\n case 'support': {\n mountTab(pane, createSupportTab(app));\n break;\n }\n }\n mountedPanes.set(tabId, pane);\n layers.appendChild(pane);\n return pane;\n }\n\n function showTab(tabId: TabId) {\n const pane = getOrCreatePane(tabId);\n tabBar.setActive(tabId);\n for (const [, p] of mountedPanes) {\n p.classList.remove('sdt-tab-pane-active');\n }\n pane.classList.add('sdt-tab-pane-active');\n }\n\n showTab(state.get().activeTab);\n\n function addResizeHandle(edge: 'top' | 'left' | 'top-left') {\n const handle = h('div', { className: `sdt-resize-handle sdt-resize-${edge}` });\n let startX = 0;\n let startY = 0;\n let startW = 0;\n let startH = 0;\n\n handle.addEventListener('pointerdown', (e) => {\n e.preventDefault();\n if (panelAnimationTimeout !== null) {\n clearTimeout(panelAnimationTimeout);\n panelAnimationTimeout = null;\n }\n panel.classList.remove('sdt-panel-geometry-animated');\n handle.setPointerCapture(e.pointerId);\n startX = e.clientX;\n startY = e.clientY;\n startW = panel.offsetWidth;\n startH = panel.offsetHeight;\n });\n\n handle.addEventListener('pointermove', (e) => {\n if (!handle.hasPointerCapture(e.pointerId)) return;\n const dx = startX - e.clientX;\n const dy = startY - e.clientY;\n if (edge === 'left' || edge === 'top-left') {\n const newW = Math.max(400, Math.min(startW + dx, window.innerWidth - 32));\n panel.style.width = newW + 'px';\n }\n if (edge === 'top' || edge === 'top-left') {\n const newH = Math.max(300, Math.min(startH + dy, window.innerHeight - 80));\n panel.style.height = newH + 'px';\n }\n });\n\n handle.addEventListener('pointerup', (e) => {\n handle.releasePointerCapture(e.pointerId);\n state.update({ panelWidth: panel.offsetWidth, panelHeight: panel.offsetHeight });\n });\n\n panel.appendChild(handle);\n }\n\n addResizeHandle('top');\n addResizeHandle('left');\n addResizeHandle('top-left');\n\n panel.appendChild(inner);\n return {\n element: panel,\n cleanup: () => {\n if (panelAnimationTimeout !== null) {\n clearTimeout(panelAnimationTimeout);\n }\n for (const fn of cleanups) fn();\n },\n };\n}\n\n// ===========================================================================================\n// Main entry point\n// ===========================================================================================\n\nexport function createDevTool(app: StackClientApp<true>): () => void {\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\n return () => {};\n }\n const body = Reflect.get(document, 'body');\n if (!hasAppendChild(body)) return () => {};\n\n getGlobalDevToolInstance()?.cleanup();\n let existingRoot = document.getElementById(ROOT_ID);\n while (existingRoot !== null) {\n existingRoot.remove();\n existingRoot = document.getElementById(ROOT_ID);\n }\n\n const root = document.createElement('div');\n root.id = ROOT_ID;\n body.appendChild(root);\n\n const wrapper = h('div', { className: 'stack-devtool' });\n root.appendChild(wrapper);\n\n const style = document.createElement('style');\n style.textContent = devToolCSS;\n wrapper.appendChild(style);\n\n const state = createStateStore();\n const logStore = getGlobalLogStore();\n\n let panel: { element: HTMLElement, cleanup: () => void } | null = null;\n\n function closePanelAndPersistClosed() {\n closePanel();\n }\n\n function openPanel() {\n if (panel) return;\n state.update({ activeTab: 'overview' });\n panel = createPanel(app, state, logStore, closePanelAndPersistClosed);\n wrapper.appendChild(panel.element);\n }\n\n function closePanel() {\n if (!panel) return;\n state.update({ isOpen: false });\n const closing = panel;\n panel = null;\n closing.cleanup();\n closing.element.classList.add('sdt-panel-exiting');\n setTimeout(() => {\n if (wrapper.contains(closing.element)) {\n wrapper.removeChild(closing.element);\n }\n }, 150);\n }\n\n function togglePanel() {\n if (state.get().isOpen) {\n closePanel();\n } else {\n state.update({ isOpen: true });\n openPanel();\n }\n }\n\n const trigger = createTrigger(togglePanel);\n wrapper.appendChild(trigger.element);\n\n if (state.get().isOpen) {\n openPanel();\n }\n\n const removeRequestListener = app[stackAppInternalsSymbol].addRequestListener((entry: RequestLogEntry) => {\n const timestamp = Date.now();\n logStore.addApiLog({\n id: nextId(),\n timestamp,\n method: entry.method,\n url: entry.path,\n status: entry.status,\n duration: entry.duration,\n error: entry.error,\n });\n if (entry.error) {\n logStore.addEventLog({ id: nextId(), timestamp, type: 'error', message: `Network error on ${entry.method} ${entry.path}: ${entry.error}` });\n } else if (entry.status && entry.status >= 400) {\n logStore.addEventLog({ id: nextId(), timestamp, type: 'error', message: `API error ${entry.status} on ${entry.method} ${entry.path}` });\n }\n });\n\n let didCleanup = false;\n const instance: DevToolGlobalInstance = {\n cleanup: () => {\n if (didCleanup) return;\n didCleanup = true;\n if (getGlobalDevToolInstance() === instance) {\n setGlobalDevToolInstance(null);\n }\n trigger.cleanup();\n removeRequestListener();\n panel?.cleanup();\n if (root.parentNode) {\n root.parentNode.removeChild(root);\n }\n },\n };\n setGlobalDevToolInstance(instance);\n\n return () => {\n instance.cleanup();\n };\n}\n\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ //#region src/dev-tool/dev-tool-styles.d.ts
2
+ declare const devToolCSS = "\n .stack-devtool {\n --sdt-bg: #0a0a0b;\n --sdt-bg-elevated: #141416;\n --sdt-bg-hover: #1c1c1f;\n --sdt-bg-active: #232326;\n --sdt-bg-subtle: #111113;\n --sdt-border: #2a2a2e;\n --sdt-border-subtle: #1e1e22;\n --sdt-text: #ececef;\n --sdt-text-secondary: #8b8b93;\n --sdt-text-tertiary: #5c5c66;\n --sdt-accent: #6366f1;\n --sdt-accent-hover: #818cf8;\n --sdt-accent-muted: rgba(99, 102, 241, 0.15);\n --sdt-success: #22c55e;\n --sdt-success-muted: rgba(34, 197, 94, 0.15);\n --sdt-warning: #eab308;\n --sdt-warning-muted: rgba(234, 179, 8, 0.15);\n --sdt-error: #ef4444;\n --sdt-error-muted: rgba(239, 68, 68, 0.15);\n --sdt-info: #3b82f6;\n --sdt-info-muted: rgba(59, 130, 246, 0.15);\n --sdt-overlay-bg: rgba(17, 17, 19, 0.92);\n --sdt-radius: 8px;\n --sdt-radius-sm: 4px;\n --sdt-radius-lg: 12px;\n --sdt-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n --sdt-font-mono: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas, monospace;\n --sdt-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.05);\n --sdt-trigger-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.08);\n\n all: initial;\n font-family: var(--sdt-font);\n color: var(--sdt-text);\n font-size: 13px;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n box-sizing: border-box;\n }\n\n .stack-devtool *, .stack-devtool *::before, .stack-devtool *::after {\n box-sizing: border-box;\n }\n\n /* Trigger pill */\n .stack-devtool .sdt-trigger {\n position: fixed;\n z-index: 2147483647;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n padding: 0;\n background: var(--sdt-bg-elevated);\n border: 1px solid var(--sdt-border);\n border-radius: 10px;\n cursor: grab;\n box-shadow: var(--sdt-trigger-shadow);\n transition: background 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;\n user-select: none;\n touch-action: none;\n }\n\n .stack-devtool .sdt-trigger-position-animated {\n transition: left 0.14s cubic-bezier(0.2, 0.8, 0.2, 1), top 0.14s cubic-bezier(0.2, 0.8, 0.2, 1), background 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;\n }\n\n .stack-devtool .sdt-trigger:hover {\n background: var(--sdt-bg-hover);\n border-color: var(--sdt-accent);\n box-shadow: var(--sdt-trigger-shadow), 0 0 0 1px var(--sdt-accent);\n }\n\n .stack-devtool .sdt-trigger:active {\n cursor: grabbing;\n }\n\n .stack-devtool .sdt-trigger-logo {\n width: 22px;\n height: 22px;\n border-radius: 6px;\n background: var(--sdt-accent);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n line-height: 0;\n }\n\n /* Panel overlay */\n .stack-devtool .sdt-panel {\n position: fixed;\n bottom: 60px;\n right: 16px;\n z-index: 99998;\n width: 800px;\n max-width: calc(100vw - 32px);\n height: 520px;\n max-height: calc(100vh - 80px);\n background: var(--sdt-bg);\n border: 1px solid var(--sdt-border);\n border-radius: var(--sdt-radius-lg);\n box-shadow: var(--sdt-shadow);\n display: flex;\n flex-direction: column;\n overflow: visible;\n }\n\n .stack-devtool .sdt-panel-geometry-animated {\n transition: width 0.18s cubic-bezier(0.2, 0.8, 0.2, 1),\n height 0.18s cubic-bezier(0.2, 0.8, 0.2, 1),\n right 0.18s cubic-bezier(0.2, 0.8, 0.2, 1),\n bottom 0.18s cubic-bezier(0.2, 0.8, 0.2, 1),\n border-radius 0.18s cubic-bezier(0.2, 0.8, 0.2, 1),\n border-color 0.18s cubic-bezier(0.2, 0.8, 0.2, 1);\n }\n\n .stack-devtool .sdt-panel-fullscreen {\n right: 0;\n bottom: 0;\n width: 100vw;\n max-width: none;\n height: 100vh;\n max-height: none;\n border: none;\n border-radius: 0;\n }\n\n .stack-devtool .sdt-panel-inner {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow: hidden;\n border-radius: var(--sdt-radius-lg);\n animation: sdt-panel-enter 0.2s ease-out;\n }\n\n .stack-devtool .sdt-panel-fullscreen .sdt-panel-inner {\n border-radius: 0;\n }\n\n .stack-devtool .sdt-panel-fullscreen .sdt-resize-handle {\n display: none;\n }\n\n @keyframes sdt-panel-enter {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(8px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n }\n\n .stack-devtool .sdt-panel-exiting {\n animation: sdt-panel-exit 0.15s ease-in forwards;\n }\n\n @keyframes sdt-panel-exit {\n from {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n to {\n opacity: 0;\n transform: scale(0.95) translateY(8px);\n }\n }\n\n /* Tab bar */\n .stack-devtool .sdt-tabbar {\n position: relative;\n display: flex;\n align-items: center;\n height: 44px;\n padding: 0 8px;\n background: var(--sdt-bg-subtle);\n border-bottom: 1px solid var(--sdt-border);\n flex-shrink: 0;\n gap: 2px;\n overflow-x: auto;\n }\n\n .stack-devtool .sdt-panel-fullscreen .sdt-tabbar {\n position: absolute;\n top: 8px;\n left: 8px;\n right: 8px;\n z-index: 2;\n background: var(--sdt-overlay-bg);\n border: 1px solid var(--sdt-border);\n border-radius: var(--sdt-radius);\n box-shadow: var(--sdt-trigger-shadow);\n }\n\n .stack-devtool .sdt-tab-indicator {\n position: absolute;\n top: 6px;\n left: 0;\n height: 32px;\n background: var(--sdt-bg-active);\n border-radius: var(--sdt-radius);\n transition: transform 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94),\n width 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n pointer-events: none;\n z-index: 0;\n }\n\n .stack-devtool .sdt-tab {\n position: relative;\n z-index: 1;\n display: flex;\n align-items: center;\n gap: 6px;\n height: 32px;\n padding: 0 12px;\n background: transparent;\n border: none;\n border-radius: var(--sdt-radius);\n cursor: pointer;\n font-family: var(--sdt-font);\n font-size: 12px;\n font-weight: 500;\n color: var(--sdt-text-secondary);\n transition: color 0.15s ease;\n white-space: nowrap;\n outline: none;\n }\n\n .stack-devtool .sdt-tab:hover {\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-tab[data-active=\"true\"] {\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-tab-icon {\n width: 14px;\n height: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-tabbar-spacer {\n flex: 1;\n }\n\n .stack-devtool .sdt-tabbar-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-docs-link {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n height: 28px;\n padding: 0 8px;\n color: var(--sdt-text-secondary);\n border-radius: var(--sdt-radius-sm);\n font-family: var(--sdt-font);\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n text-decoration: none;\n white-space: nowrap;\n transition: color 0.15s ease, background 0.15s ease;\n }\n\n .stack-devtool .sdt-docs-link:hover {\n color: var(--sdt-text);\n background: var(--sdt-bg-hover);\n }\n\n .stack-devtool .sdt-docs-link-icon {\n display: flex;\n width: 13px;\n height: 13px;\n line-height: 0;\n }\n\n .stack-devtool .sdt-close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: transparent;\n border: none;\n border-radius: var(--sdt-radius-sm);\n cursor: pointer;\n color: var(--sdt-text-tertiary);\n transition: all 0.15s ease;\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-close-btn:hover {\n color: var(--sdt-text);\n background: var(--sdt-bg-hover);\n }\n\n /* Tab content area */\n .stack-devtool .sdt-content {\n flex: 1;\n position: relative;\n overflow: hidden;\n min-height: 0;\n }\n\n .stack-devtool .sdt-panel-fullscreen .sdt-content {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n }\n\n .stack-devtool .sdt-tab-layers {\n position: absolute;\n inset: 0;\n }\n\n .stack-devtool .sdt-tab-pane {\n position: absolute;\n inset: 0;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 16px;\n visibility: hidden;\n pointer-events: none;\n }\n\n .stack-devtool .sdt-tab-pane-iframe {\n padding: 0;\n overflow: hidden;\n }\n\n .stack-devtool .sdt-tab-pane-active {\n visibility: visible;\n pointer-events: auto;\n animation: sdt-tab-fade-in 0.15s ease-out;\n }\n\n @keyframes sdt-tab-fade-in {\n from {\n opacity: 0;\n transform: translateY(6px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .stack-devtool .sdt-tab-pane::-webkit-scrollbar {\n width: 6px;\n }\n\n .stack-devtool .sdt-tab-pane::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .stack-devtool .sdt-tab-pane::-webkit-scrollbar-thumb {\n background: var(--sdt-border);\n border-radius: 3px;\n }\n\n /* ===== Overview tab \u2014 single column ===== */\n\n .stack-devtool .sdt-ov {\n display: flex;\n flex-direction: column;\n gap: 10px;\n max-width: 660px;\n margin: 0 auto;\n }\n\n /* Card base */\n .stack-devtool .sdt-ov-card {\n background: var(--sdt-bg-elevated);\n border: 1px solid var(--sdt-border-subtle);\n border-radius: 12px;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 0;\n transition: box-shadow 0.2s ease, border-color 0.2s ease;\n overflow: hidden;\n min-width: 0;\n }\n\n .stack-devtool .sdt-ov-card-hero {\n background: linear-gradient(135deg, rgba(99,102,241,0.04) 0%, transparent 50%), var(--sdt-bg-elevated);\n }\n\n .stack-devtool .sdt-ov-label {\n font-size: 9px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 1.2px;\n color: var(--sdt-text-tertiary);\n margin-bottom: 10px;\n }\n\n .stack-devtool .sdt-ov-user-row {\n display: flex;\n align-items: center;\n gap: 14px;\n margin-bottom: 14px;\n }\n\n .stack-devtool .sdt-ov-avatar {\n width: 52px;\n height: 52px;\n border-radius: 50%;\n background: var(--sdt-bg-hover);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n font-weight: 700;\n color: var(--sdt-text-tertiary);\n flex-shrink: 0;\n border: 2px solid var(--sdt-border-subtle);\n overflow: hidden;\n }\n\n .stack-devtool .sdt-ov-avatar-active {\n background: var(--sdt-accent-muted);\n color: var(--sdt-accent);\n border-color: rgba(99,102,241,0.3);\n }\n\n .stack-devtool .sdt-ov-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n }\n\n .stack-devtool .sdt-ov-user-meta {\n min-width: 0;\n flex: 1;\n }\n\n .stack-devtool .sdt-ov-user-name {\n font-size: 16px;\n font-weight: 700;\n color: var(--sdt-text);\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .stack-devtool .sdt-ov-user-email {\n font-size: 12px;\n font-family: var(--sdt-font-mono);\n color: var(--sdt-text-secondary);\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .stack-devtool .sdt-ov-auth-indicator {\n display: flex;\n align-items: center;\n gap: 5px;\n margin-top: 5px;\n font-size: 11px;\n font-weight: 600;\n color: var(--sdt-success);\n }\n\n .stack-devtool .sdt-ov-auth-indicator::before {\n content: '';\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--sdt-success);\n box-shadow: 0 0 6px rgba(34,197,94,0.5);\n }\n\n /* Actions */\n .stack-devtool .sdt-ov-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 4px;\n }\n\n .stack-devtool .sdt-ov-btn {\n height: 30px;\n padding: 0 12px;\n border-radius: 6px;\n border: none;\n font-size: 12px;\n font-weight: 600;\n font-family: var(--sdt-font);\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n }\n .stack-devtool .sdt-ov-btn:disabled { opacity: 0.4; cursor: not-allowed; }\n\n .stack-devtool .sdt-ov-btn-primary {\n background: var(--sdt-accent);\n color: #fff;\n }\n .stack-devtool .sdt-ov-btn-primary:hover { background: var(--sdt-accent-hover); }\n\n .stack-devtool .sdt-ov-btn-secondary {\n background: var(--sdt-bg-hover);\n color: var(--sdt-text);\n }\n .stack-devtool .sdt-ov-btn-secondary:hover { background: var(--sdt-bg-active); }\n\n .stack-devtool .sdt-ov-btn-danger {\n background: var(--sdt-error-muted);\n color: var(--sdt-error);\n border: 1px solid rgba(239, 68, 68, 0.15);\n }\n .stack-devtool .sdt-ov-btn-danger:hover { background: rgba(239, 68, 68, 0.2); }\n\n .stack-devtool .sdt-ov-btn-wide { flex: 1; }\n\n .stack-devtool .sdt-ov-email-input {\n display: flex;\n flex: 1 1 180px;\n border: 1px solid var(--sdt-border-subtle);\n border-radius: 6px;\n overflow: hidden;\n background: var(--sdt-bg);\n transition: border-color 0.15s ease;\n }\n .stack-devtool .sdt-ov-email-input:focus-within {\n border-color: var(--sdt-accent);\n box-shadow: 0 0 0 2px var(--sdt-accent-muted);\n }\n .stack-devtool .sdt-ov-email-input input {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n background: transparent;\n border: none;\n color: var(--sdt-text);\n font-size: 11px;\n font-family: var(--sdt-font);\n outline: none;\n min-width: 0;\n }\n .stack-devtool .sdt-ov-email-input input::placeholder { color: var(--sdt-text-tertiary); }\n .stack-devtool .sdt-ov-email-input button {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-left: 1px solid var(--sdt-border-subtle);\n background: transparent;\n color: var(--sdt-accent);\n cursor: pointer;\n flex-shrink: 0;\n font-family: var(--sdt-font);\n }\n .stack-devtool .sdt-ov-email-input button:hover { background: var(--sdt-accent-muted); }\n .stack-devtool .sdt-ov-email-input button:disabled { opacity: 0.3; cursor: not-allowed; }\n\n .stack-devtool .sdt-ov-toast {\n font-size: 11px;\n padding: 5px 10px;\n border-radius: 6px;\n margin-top: 8px;\n line-height: 1.4;\n }\n .stack-devtool .sdt-ov-toast-success { background: var(--sdt-success-muted); color: var(--sdt-success); }\n .stack-devtool .sdt-ov-toast-error { background: var(--sdt-error-muted); color: var(--sdt-error); }\n\n /* --- Auth methods card --- */\n .stack-devtool .sdt-ov-card-auth {\n padding: 14px 16px;\n }\n\n .stack-devtool .sdt-ov-auth-grid {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n\n .stack-devtool .sdt-ov-method {\n display: flex;\n align-items: center;\n gap: 5px;\n padding: 4px 8px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 600;\n border: 1px solid var(--sdt-border-subtle);\n background: var(--sdt-bg);\n transition: all 0.15s ease;\n }\n\n .stack-devtool .sdt-ov-method-on {\n color: var(--sdt-text);\n background: var(--sdt-success-muted);\n border-color: rgba(34, 197, 94, 0.12);\n }\n\n .stack-devtool .sdt-ov-method-off {\n color: var(--sdt-text-tertiary);\n opacity: 0.5;\n border-style: dashed;\n }\n\n .stack-devtool .sdt-ov-method-oauth {\n text-transform: capitalize;\n }\n\n .stack-devtool .sdt-ov-method-warn {\n color: var(--sdt-warning);\n border-color: rgba(234, 179, 8, 0.2);\n }\n\n .stack-devtool .sdt-ov-skeleton-pill {\n width: 64px;\n height: 26px;\n border-radius: 6px;\n background: var(--sdt-bg-hover);\n border: 1px solid var(--sdt-border-subtle);\n animation: sdt-ov-shimmer 1.5s ease-in-out infinite;\n }\n\n @keyframes sdt-ov-shimmer {\n 0%, 100% { opacity: 0.4; }\n 50% { opacity: 0.7; }\n }\n\n /* --- Setup checklist card (only shown when something is incomplete) --- */\n .stack-devtool .sdt-ov-card-checks {\n padding: 14px 16px;\n border-color: rgba(234, 179, 8, 0.25);\n }\n\n .stack-devtool .sdt-ov-checks-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: 8px;\n }\n\n .stack-devtool .sdt-ov-checks-badge {\n font-size: 10px;\n font-weight: 700;\n padding: 1px 6px;\n border-radius: 4px;\n }\n\n .stack-devtool .sdt-ov-checks-badge-ok {\n background: var(--sdt-success-muted);\n color: var(--sdt-success);\n }\n\n .stack-devtool .sdt-ov-checks-badge-warn {\n background: var(--sdt-warning-muted);\n color: var(--sdt-warning);\n }\n\n .stack-devtool .sdt-ov-checks-bar {\n height: 3px;\n border-radius: 2px;\n background: var(--sdt-border-subtle);\n margin-bottom: 10px;\n overflow: hidden;\n }\n\n .stack-devtool .sdt-ov-checks-bar-fill {\n height: 100%;\n border-radius: 2px;\n background: var(--sdt-warning);\n transition: width 0.4s ease;\n }\n\n .stack-devtool .sdt-ov-setup-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 0;\n font-size: 12px;\n border-bottom: 1px solid var(--sdt-border-subtle);\n }\n\n .stack-devtool .sdt-ov-setup-row:last-child { border-bottom: none; }\n\n .stack-devtool .sdt-ov-setup-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-ov-setup-dot-ok { background: var(--sdt-success); }\n .stack-devtool .sdt-ov-setup-dot-warn { background: var(--sdt-warning); }\n\n .stack-devtool .sdt-ov-setup-label {\n color: var(--sdt-text);\n font-size: 12px;\n }\n\n .stack-devtool .sdt-ov-setup-hint {\n margin-left: auto;\n font-size: 11px;\n color: var(--sdt-text-tertiary);\n }\n\n /* Status badges (shared across tabs) */\n .stack-devtool .sdt-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n }\n .stack-devtool .sdt-badge-success { background: var(--sdt-success-muted); color: var(--sdt-success); }\n .stack-devtool .sdt-badge-warning { background: var(--sdt-warning-muted); color: var(--sdt-warning); }\n .stack-devtool .sdt-badge-error { background: var(--sdt-error-muted); color: var(--sdt-error); }\n .stack-devtool .sdt-badge-info { background: var(--sdt-info-muted); color: var(--sdt-info); }\n\n /* ===== Components / Pages tab ===== */\n\n .stack-devtool .sdt-pg-layout {\n display: flex;\n height: calc(100% + 32px);\n margin: -16px;\n }\n\n /* --- Sidebar --- */\n .stack-devtool .sdt-pg-sidebar {\n width: 250px;\n flex-shrink: 0;\n border-right: 1px solid var(--sdt-border);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .stack-devtool .sdt-pg-sidebar-head {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 12px 14px 8px;\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-pg-sidebar-title {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 1px;\n text-transform: uppercase;\n color: var(--sdt-text-tertiary);\n }\n\n .stack-devtool .sdt-pg-sidebar-count {\n font-size: 10px;\n font-weight: 700;\n color: var(--sdt-text-tertiary);\n background: var(--sdt-bg-active);\n padding: 0 5px;\n border-radius: 6px;\n line-height: 18px;\n }\n\n .stack-devtool .sdt-pg-sidebar-warn {\n margin-left: auto;\n font-size: 10px;\n font-weight: 700;\n color: var(--sdt-warning);\n background: var(--sdt-warning-muted);\n padding: 0 6px;\n border-radius: 6px;\n line-height: 18px;\n }\n\n .stack-devtool .sdt-pg-list {\n flex: 1;\n overflow-y: auto;\n padding: 0 6px 6px;\n }\n\n /* --- List item --- */\n .stack-devtool .sdt-pg-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 10px;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.12s ease;\n font-size: 13px;\n color: var(--sdt-text);\n position: relative;\n }\n\n .stack-devtool .sdt-pg-item:hover {\n background: var(--sdt-bg-hover);\n }\n\n .stack-devtool .sdt-pg-item[data-selected=\"true\"] {\n background: var(--sdt-accent-muted);\n }\n\n .stack-devtool .sdt-pg-item[data-selected=\"true\"] .sdt-pg-item-label {\n color: var(--sdt-accent-hover);\n font-weight: 600;\n }\n\n .stack-devtool .sdt-pg-item-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n flex-shrink: 0;\n }\n .stack-devtool .sdt-pg-item-dot-handler { background: var(--sdt-info); }\n .stack-devtool .sdt-pg-item-dot-custom { background: var(--sdt-success); }\n .stack-devtool .sdt-pg-item-dot-warn {\n background: var(--sdt-warning);\n box-shadow: 0 0 6px rgba(234, 179, 8, 0.4);\n }\n\n .stack-devtool .sdt-pg-item-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n /* --- Badges --- */\n .stack-devtool .sdt-pg-badge {\n display: inline-flex;\n align-items: center;\n height: 20px;\n padding: 0 7px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.2px;\n flex-shrink: 0;\n line-height: 1;\n }\n\n .stack-devtool .sdt-pg-badge-outdated { background: var(--sdt-warning-muted); color: var(--sdt-warning); }\n\n /* --- Empty state --- */\n .stack-devtool .sdt-pg-empty {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n text-align: center;\n }\n\n .stack-devtool .sdt-pg-empty-icon {\n color: var(--sdt-text-tertiary);\n opacity: 0.35;\n margin-bottom: 4px;\n }\n\n .stack-devtool .sdt-pg-empty-text {\n font-size: 14px;\n font-weight: 600;\n color: var(--sdt-text-secondary);\n }\n\n .stack-devtool .sdt-pg-empty-sub {\n font-size: 12px;\n color: var(--sdt-text-tertiary);\n }\n\n /* --- Main panel --- */\n .stack-devtool .sdt-pg-main {\n flex: 1;\n overflow-y: auto;\n padding: 16px 18px;\n display: flex;\n flex-direction: column;\n }\n\n /* --- Detail view --- */\n .stack-devtool .sdt-pg-detail {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n /* Header */\n .stack-devtool .sdt-pg-header {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .stack-devtool .sdt-pg-header-top {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .stack-devtool .sdt-pg-title {\n font-size: 15px;\n font-weight: 700;\n margin: 0;\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-pg-title-url {\n min-width: 0;\n max-width: 280px;\n color: var(--sdt-text-tertiary);\n font-family: var(--sdt-font-mono);\n font-size: 11px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-decoration: none;\n }\n\n .stack-devtool .sdt-pg-title-url:hover {\n color: var(--sdt-accent);\n }\n\n .stack-devtool .sdt-pg-subtitle {\n font-size: 12px;\n color: var(--sdt-text-secondary);\n line-height: 1.4;\n }\n\n .stack-devtool .sdt-pg-code-inline {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n }\n\n .stack-devtool .sdt-pg-code {\n flex: 1;\n min-width: 0;\n font-family: var(--sdt-font-mono);\n font-size: 12px;\n color: var(--sdt-accent);\n background: var(--sdt-bg-elevated);\n border-radius: 6px;\n padding: 6px 10px;\n border: 1px solid var(--sdt-border-subtle);\n }\n\n /* --- Copy button --- */\n .stack-devtool .sdt-pg-copy-btn {\n height: 26px;\n padding: 0 10px;\n border-radius: 6px;\n border: 1px solid var(--sdt-border);\n background: var(--sdt-bg-active);\n color: var(--sdt-text-secondary);\n cursor: pointer;\n font-size: 11px;\n font-weight: 600;\n font-family: var(--sdt-font);\n transition: all 0.12s ease;\n flex-shrink: 0;\n white-space: nowrap;\n }\n\n .stack-devtool .sdt-pg-open-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n height: 32px;\n padding: 0 12px;\n font-size: 12px;\n }\n\n .stack-devtool .sdt-pg-open-btn svg {\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-pg-copy-btn:hover {\n background: var(--sdt-bg-hover);\n color: var(--sdt-text);\n border-color: var(--sdt-accent);\n }\n\n .stack-devtool .sdt-pg-copy-btn-ok {\n border-color: rgba(34, 197, 94, 0.3);\n color: var(--sdt-success);\n background: var(--sdt-success-muted);\n }\n\n /* --- Update banner --- */\n .stack-devtool .sdt-pg-update-banner {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 14px;\n background: rgba(234, 179, 8, 0.08);\n border: 1px solid rgba(234, 179, 8, 0.3);\n border-radius: 10px;\n }\n\n .stack-devtool .sdt-pg-update-banner-icon {\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background: rgba(234, 179, 8, 0.2);\n color: var(--sdt-warning);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 800;\n flex-shrink: 0;\n margin-top: 1px;\n }\n\n .stack-devtool .sdt-pg-update-banner-body {\n flex: 1;\n min-width: 0;\n }\n\n .stack-devtool .sdt-pg-update-banner-title {\n font-size: 13px;\n font-weight: 700;\n color: var(--sdt-warning);\n margin-bottom: 2px;\n }\n\n .stack-devtool .sdt-pg-update-banner-text {\n font-size: 12px;\n color: var(--sdt-text-secondary);\n line-height: 1.5;\n }\n\n .stack-devtool .sdt-pg-update-banner-text strong {\n color: var(--sdt-text);\n font-weight: 600;\n }\n\n /* --- Sections (changelog, prompt) --- */\n .stack-devtool .sdt-pg-section {\n border: 1px solid var(--sdt-border-subtle);\n border-radius: 10px;\n padding: 12px 14px;\n background: var(--sdt-bg-elevated);\n }\n\n .stack-devtool .sdt-pg-section-warn {\n border-color: rgba(234, 179, 8, 0.25);\n background: rgba(234, 179, 8, 0.03);\n }\n\n .stack-devtool .sdt-pg-section-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--sdt-text-secondary);\n margin-bottom: 8px;\n }\n\n .stack-devtool .sdt-pg-section-warn .sdt-pg-section-label {\n color: var(--sdt-warning);\n }\n\n .stack-devtool .sdt-pg-section-footer {\n display: flex;\n margin-top: 8px;\n }\n\n /* Changelog list */\n .stack-devtool .sdt-pg-changelog-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .stack-devtool .sdt-pg-changelog-item {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n font-size: 12px;\n color: var(--sdt-text);\n line-height: 1.5;\n }\n\n .stack-devtool .sdt-pg-changelog-bullet {\n flex-shrink: 0;\n font-size: 12px;\n line-height: 1.5;\n }\n\n /* Pre block */\n .stack-devtool .sdt-pg-pre {\n font-family: var(--sdt-font-mono);\n font-size: 11px;\n line-height: 1.6;\n color: var(--sdt-text);\n background: var(--sdt-bg);\n border-radius: 6px;\n padding: 10px 12px;\n margin: 0;\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 200px;\n overflow-y: auto;\n border: 1px solid var(--sdt-border-subtle);\n }\n\n .stack-devtool .sdt-preview-loading,\n .stack-devtool .sdt-preview-unavailable {\n font-size: 12px;\n color: var(--sdt-text-secondary);\n line-height: 1.5;\n }\n\n .stack-devtool .sdt-preview-error {\n font-size: 12px;\n color: var(--sdt-error);\n line-height: 1.5;\n }\n\n .stack-devtool .sdt-preview-code {\n font-family: var(--sdt-font-mono);\n font-size: 11px;\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-props-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n }\n\n .stack-devtool .sdt-props-table th {\n text-align: left;\n font-weight: 600;\n color: var(--sdt-text-tertiary);\n padding: 6px 8px;\n border-bottom: 1px solid var(--sdt-border);\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .stack-devtool .sdt-props-table td {\n padding: 6px 8px;\n border-bottom: 1px solid var(--sdt-border-subtle);\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-props-table td:first-child {\n font-family: var(--sdt-font-mono);\n color: var(--sdt-accent-hover);\n }\n\n .stack-devtool .sdt-props-table td:last-child {\n font-family: var(--sdt-font-mono);\n color: var(--sdt-text-secondary);\n }\n\n /* Iframe tabs */\n .stack-devtool .sdt-iframe-container {\n position: relative;\n flex: 1;\n min-height: 0;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .stack-devtool .sdt-iframe-toolbar {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 1;\n flex-shrink: 0;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 8px;\n padding: 0;\n }\n\n .stack-devtool .sdt-panel-fullscreen .sdt-iframe-toolbar {\n top: 60px;\n right: 12px;\n }\n\n .stack-devtool .sdt-iframe-open-link {\n display: inline-flex;\n align-items: center;\n min-height: 28px;\n padding: 0 10px;\n background: var(--sdt-overlay-bg);\n border: 1px solid var(--sdt-border);\n border-radius: var(--sdt-radius-sm);\n color: var(--sdt-accent-hover);\n font-family: var(--sdt-font);\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n text-decoration: none;\n }\n\n .stack-devtool .sdt-iframe-open-link:hover {\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-iframe-container iframe {\n flex: 1;\n min-height: 0;\n width: 100%;\n height: 100%;\n border: none;\n background: white;\n border-radius: 0;\n }\n\n .stack-devtool .sdt-iframe-loading {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--sdt-text-secondary);\n font-size: 13px;\n }\n\n .stack-devtool .sdt-iframe-error {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n color: var(--sdt-text-secondary);\n font-size: 13px;\n }\n\n .stack-devtool .sdt-iframe-error-btn {\n padding: 6px 16px;\n background: var(--sdt-accent);\n color: white;\n border: none;\n border-radius: var(--sdt-radius);\n cursor: pointer;\n font-family: var(--sdt-font);\n font-size: 12px;\n font-weight: 500;\n transition: background 0.15s ease;\n }\n\n .stack-devtool .sdt-iframe-error-btn:hover {\n background: var(--sdt-accent-hover);\n }\n\n /* Shared content fade animation */\n .stack-devtool .sdt-tab-content-fade {\n animation: sdt-tab-fade-in 0.15s ease-out;\n }\n\n /* Console tab */\n .stack-devtool .sdt-console-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n }\n\n .stack-devtool .sdt-console-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 12px;\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-console-title {\n color: var(--sdt-text);\n font-size: 13px;\n font-weight: 600;\n }\n\n .stack-devtool .sdt-console-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n justify-content: flex-end;\n }\n\n .stack-devtool .sdt-console-action-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n height: 28px;\n padding: 0 9px;\n background: var(--sdt-bg-elevated);\n border: 1px solid var(--sdt-border);\n border-radius: var(--sdt-radius-sm);\n color: var(--sdt-text-secondary);\n cursor: pointer;\n font-family: var(--sdt-font);\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease;\n white-space: nowrap;\n }\n\n .stack-devtool .sdt-console-action-btn:hover {\n color: var(--sdt-text);\n background: var(--sdt-bg-hover);\n border-color: var(--sdt-border);\n }\n\n .stack-devtool .sdt-console-action-btn svg {\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-console-log-scroll {\n flex: 1;\n min-height: 0;\n overflow: auto;\n }\n\n .stack-devtool .sdt-console-tabs {\n position: relative;\n display: flex;\n flex: 1;\n gap: 2px;\n background: var(--sdt-bg-subtle);\n border-radius: var(--sdt-radius);\n padding: 2px;\n }\n\n .stack-devtool .sdt-console-tab-indicator {\n position: absolute;\n top: 2px;\n left: 0;\n background: var(--sdt-bg-active);\n border-radius: var(--sdt-radius-sm);\n transition: transform 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94),\n width 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);\n pointer-events: none;\n z-index: 0;\n }\n\n .stack-devtool .sdt-console-tab {\n position: relative;\n z-index: 1;\n flex: 1;\n padding: 6px 12px;\n background: transparent;\n border: none;\n border-radius: var(--sdt-radius-sm);\n cursor: pointer;\n font-family: var(--sdt-font);\n font-size: 12px;\n font-weight: 500;\n color: var(--sdt-text-secondary);\n transition: color 0.15s ease;\n text-align: center;\n }\n\n .stack-devtool .sdt-console-tab:hover {\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-console-tab[data-active=\"true\"] {\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-log-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .stack-devtool .sdt-log-load-hint {\n padding: 8px 10px;\n color: var(--sdt-text-tertiary);\n font-family: var(--sdt-font);\n font-size: 12px;\n text-align: center;\n }\n\n .stack-devtool .sdt-log-item {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 10px;\n background: var(--sdt-bg-elevated);\n border: 1px solid var(--sdt-border-subtle);\n border-radius: var(--sdt-radius-sm);\n font-size: 12px;\n font-family: var(--sdt-font-mono);\n }\n\n .stack-devtool .sdt-log-time {\n color: var(--sdt-text-tertiary);\n flex-shrink: 0;\n font-size: 11px;\n }\n\n .stack-devtool .sdt-log-type {\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-log-message {\n flex: 1;\n color: var(--sdt-text);\n word-break: break-all;\n }\n\n .stack-devtool .sdt-log-method {\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-log-method-get {\n background: var(--sdt-info-muted);\n color: var(--sdt-info);\n }\n\n .stack-devtool .sdt-log-method-post {\n background: var(--sdt-success-muted);\n color: var(--sdt-success);\n }\n\n .stack-devtool .sdt-log-method-put, .stack-devtool .sdt-log-method-patch {\n background: var(--sdt-warning-muted);\n color: var(--sdt-warning);\n }\n\n .stack-devtool .sdt-log-method-delete {\n background: var(--sdt-error-muted);\n color: var(--sdt-error);\n }\n\n .stack-devtool .sdt-log-status {\n font-size: 11px;\n flex-shrink: 0;\n }\n\n .stack-devtool .sdt-log-status-ok {\n color: var(--sdt-success);\n }\n\n .stack-devtool .sdt-log-status-err {\n color: var(--sdt-error);\n }\n\n .stack-devtool .sdt-log-url {\n flex: 1;\n color: var(--sdt-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .stack-devtool .sdt-empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: 40px 20px;\n color: var(--sdt-text-tertiary);\n font-size: 13px;\n text-align: center;\n gap: 4px;\n }\n\n .stack-devtool .sdt-empty-state-icon {\n font-size: 24px;\n margin-bottom: 8px;\n opacity: 0.5;\n }\n\n /* Config info table */\n .stack-devtool .sdt-config-table {\n width: 100%;\n border-collapse: collapse;\n }\n\n .stack-devtool .sdt-config-table td {\n padding: 8px 10px;\n border-bottom: 1px solid var(--sdt-border-subtle);\n font-size: 12px;\n }\n\n .stack-devtool .sdt-config-table td:first-child {\n color: var(--sdt-text-secondary);\n width: 160px;\n font-weight: 500;\n }\n\n .stack-devtool .sdt-config-table td:last-child {\n color: var(--sdt-text);\n font-family: var(--sdt-font-mono);\n word-break: break-all;\n }\n\n .stack-devtool .sdt-config-table td .sdt-config-link {\n font-family: inherit;\n color: var(--sdt-accent);\n text-decoration: underline;\n text-underline-offset: 2px;\n }\n\n .stack-devtool .sdt-config-table td .sdt-config-link:hover {\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-config-muted {\n color: var(--sdt-text-tertiary);\n font-style: italic;\n }\n\n /* Resize handle */\n .stack-devtool .sdt-resize-handle {\n position: absolute;\n top: 0;\n left: -4px;\n width: 8px;\n height: 100%;\n cursor: ew-resize;\n z-index: 10;\n }\n\n .stack-devtool .sdt-resize-handle::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 3px;\n width: 2px;\n height: 32px;\n transform: translateY(-50%);\n background: transparent;\n border-radius: 1px;\n transition: background 0.15s ease;\n }\n\n .stack-devtool .sdt-resize-handle:hover::after,\n .stack-devtool .sdt-resize-handle:active::after {\n background: var(--sdt-accent);\n }\n\n .stack-devtool .sdt-resize-handle-top {\n position: absolute;\n top: -4px;\n left: 0;\n width: 100%;\n height: 8px;\n cursor: ns-resize;\n z-index: 10;\n }\n\n .stack-devtool .sdt-resize-handle-top::after {\n content: '';\n position: absolute;\n left: 50%;\n top: 3px;\n height: 2px;\n width: 32px;\n transform: translateX(-50%);\n background: transparent;\n border-radius: 1px;\n transition: background 0.15s ease;\n }\n\n .stack-devtool .sdt-resize-handle-top:hover::after,\n .stack-devtool .sdt-resize-handle-top:active::after {\n background: var(--sdt-accent);\n }\n\n .stack-devtool .sdt-resize-handle-corner {\n position: absolute;\n top: -6px;\n left: -6px;\n width: 14px;\n height: 14px;\n cursor: nwse-resize;\n z-index: 11;\n }\n\n .stack-devtool .sdt-resize-handle-corner::after {\n content: '';\n position: absolute;\n bottom: 4px;\n right: 4px;\n width: 5px;\n height: 5px;\n background: transparent;\n border-radius: 50%;\n transition: background 0.15s ease;\n }\n\n .stack-devtool .sdt-resize-handle-corner:hover::after,\n .stack-devtool .sdt-resize-handle-corner:active::after {\n background: var(--sdt-accent);\n }\n\n .stack-devtool .sdt-no-components {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--sdt-text-tertiary);\n font-size: 13px;\n text-align: center;\n padding: 20px;\n }\n\n /* Support tab */\n .stack-devtool .sdt-support-tab {\n display: flex;\n flex-direction: column;\n height: calc(100% + 32px);\n margin: -16px;\n }\n\n .stack-devtool .sdt-support-feedback-pane {\n padding: 20px;\n height: 100%;\n overflow-y: auto;\n }\n\n /* Form layout */\n .stack-devtool .sdt-support-form {\n display: flex;\n flex-direction: column;\n gap: 14px;\n }\n\n /* Type cards */\n .stack-devtool .sdt-support-type-cards {\n display: flex;\n gap: 8px;\n }\n\n .stack-devtool .sdt-support-type-card {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 8px 10px;\n background: var(--sdt-bg);\n border: 1px solid var(--sdt-border-subtle);\n border-radius: var(--sdt-radius);\n cursor: pointer;\n font-family: var(--sdt-font);\n font-size: 11px;\n font-weight: 500;\n color: var(--sdt-text-secondary);\n transition: all 0.15s ease;\n }\n\n .stack-devtool .sdt-support-type-card svg {\n flex-shrink: 0;\n opacity: 0.6;\n transition: opacity 0.15s ease;\n }\n\n .stack-devtool .sdt-support-type-card:hover {\n background: var(--sdt-bg-hover);\n border-color: var(--sdt-border);\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-support-type-card:hover svg {\n opacity: 1;\n }\n\n .stack-devtool .sdt-support-type-card-active {\n border-color: var(--sdt-accent);\n background: var(--sdt-accent-muted);\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-support-type-card-active svg {\n opacity: 1;\n color: var(--sdt-accent);\n }\n\n /* Field group */\n .stack-devtool .sdt-support-field {\n display: flex;\n flex-direction: column;\n gap: 5px;\n }\n\n .stack-devtool .sdt-support-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--sdt-text-secondary);\n letter-spacing: 0.3px;\n text-transform: uppercase;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .stack-devtool .sdt-support-optional {\n font-size: 10px;\n font-weight: 400;\n color: var(--sdt-text-tertiary);\n text-transform: none;\n letter-spacing: 0;\n }\n\n /* Inputs */\n .stack-devtool .sdt-support-input,\n .stack-devtool .sdt-support-textarea {\n width: 100%;\n padding: 9px 12px;\n background: var(--sdt-bg);\n border: 1px solid var(--sdt-border-subtle);\n border-radius: var(--sdt-radius-sm);\n color: var(--sdt-text);\n font-family: var(--sdt-font);\n font-size: 13px;\n outline: none;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n }\n\n .stack-devtool .sdt-support-input::placeholder,\n .stack-devtool .sdt-support-textarea::placeholder {\n color: var(--sdt-text-tertiary);\n }\n\n .stack-devtool .sdt-support-input:focus,\n .stack-devtool .sdt-support-textarea:focus {\n border-color: var(--sdt-accent);\n box-shadow: 0 0 0 3px var(--sdt-accent-muted);\n }\n\n .stack-devtool .sdt-support-textarea {\n resize: vertical;\n min-height: 100px;\n line-height: 1.6;\n }\n\n /* Submit button */\n .stack-devtool .sdt-support-submit {\n width: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 9px 20px;\n background: var(--sdt-accent);\n color: white;\n border: none;\n border-radius: var(--sdt-radius);\n cursor: pointer;\n font-family: var(--sdt-font);\n font-size: 12px;\n font-weight: 600;\n letter-spacing: 0.2px;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow: 0 1px 3px rgba(99, 102, 241, 0.3);\n }\n\n .stack-devtool .sdt-support-submit:hover:not(:disabled) {\n background: var(--sdt-accent-hover);\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.4);\n transform: translateY(-1px);\n }\n\n .stack-devtool .sdt-support-submit:active:not(:disabled) {\n transform: translateY(0);\n box-shadow: 0 1px 2px rgba(99, 102, 241, 0.2);\n }\n\n .stack-devtool .sdt-support-submit:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n box-shadow: none;\n }\n\n .stack-devtool .sdt-support-submit svg {\n flex-shrink: 0;\n }\n\n @keyframes sdt-spin {\n to { transform: rotate(360deg); }\n }\n\n .stack-devtool .sdt-support-spinner {\n animation: sdt-spin 1s linear infinite;\n }\n\n /* Status screens (success / error) */\n .stack-devtool .sdt-support-status {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 32px 20px;\n border-radius: var(--sdt-radius-lg);\n text-align: center;\n gap: 6px;\n }\n\n .stack-devtool .sdt-support-status-success {\n background: linear-gradient(180deg, var(--sdt-success-muted), transparent 80%);\n border: 1px solid rgba(34, 197, 94, 0.15);\n }\n\n .stack-devtool .sdt-support-status-error {\n background: linear-gradient(180deg, var(--sdt-error-muted), transparent 80%);\n border: 1px solid rgba(239, 68, 68, 0.15);\n }\n\n .stack-devtool .sdt-support-status-icon {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 6px;\n }\n\n .stack-devtool .sdt-support-status-success .sdt-support-status-icon {\n background: rgba(34, 197, 94, 0.15);\n color: var(--sdt-success);\n box-shadow: 0 0 20px rgba(34, 197, 94, 0.1);\n }\n\n .stack-devtool .sdt-support-status-error .sdt-support-status-icon {\n background: rgba(239, 68, 68, 0.15);\n color: var(--sdt-error);\n box-shadow: 0 0 20px rgba(239, 68, 68, 0.1);\n }\n\n .stack-devtool .sdt-support-status-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-support-status-msg {\n font-size: 12px;\n color: var(--sdt-text-secondary);\n line-height: 1.5;\n max-width: 260px;\n }\n\n /* Support channels */\n .stack-devtool .sdt-support-channels {\n display: flex;\n gap: 8px;\n }\n\n .stack-devtool .sdt-support-channel {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 8px 10px;\n background: var(--sdt-bg);\n border: 1px solid var(--sdt-border-subtle);\n border-radius: var(--sdt-radius);\n color: var(--sdt-text-secondary);\n text-decoration: none;\n font-size: 11px;\n font-weight: 500;\n transition: all 0.15s ease;\n }\n\n .stack-devtool .sdt-support-channel:hover {\n background: var(--sdt-bg-hover);\n border-color: var(--sdt-border);\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-support-channel svg {\n flex-shrink: 0;\n opacity: 0.6;\n transition: opacity 0.15s ease;\n }\n\n .stack-devtool .sdt-support-channel:hover svg {\n opacity: 1;\n }\n\n /* --- Light theme: system preference fallback --- */\n @media (prefers-color-scheme: light) {\n .stack-devtool {\n --sdt-bg: #ffffff;\n --sdt-bg-elevated: #f8f8fa;\n --sdt-bg-hover: #f0f0f3;\n --sdt-bg-active: #e8e8ec;\n --sdt-bg-subtle: #fafafa;\n --sdt-border: #e0e0e5;\n --sdt-border-subtle: #eaeaef;\n --sdt-text: #111113;\n --sdt-text-secondary: #6b6b73;\n --sdt-text-tertiary: #9b9ba3;\n --sdt-accent: #6366f1;\n --sdt-accent-hover: #4f46e5;\n --sdt-accent-muted: rgba(99, 102, 241, 0.1);\n --sdt-success: #16a34a;\n --sdt-success-muted: rgba(22, 163, 74, 0.1);\n --sdt-warning: #ca8a04;\n --sdt-warning-muted: rgba(202, 138, 4, 0.1);\n --sdt-error: #dc2626;\n --sdt-error-muted: rgba(220, 38, 38, 0.1);\n --sdt-info: #2563eb;\n --sdt-info-muted: rgba(37, 99, 235, 0.1);\n --sdt-overlay-bg: rgba(255, 255, 255, 0.92);\n --sdt-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.06);\n --sdt-trigger-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(0, 0, 0, 0.06);\n }\n }\n\n /* Export dialog \u2014 positioned inside the dev tool panel */\n .stack-devtool .sdt-share-overlay {\n position: absolute;\n inset: 0;\n z-index: 20;\n background: rgba(0, 0, 0, 0.4);\n display: flex;\n align-items: center;\n justify-content: center;\n animation: sdt-tab-fade-in 0.15s ease-out;\n border-radius: var(--sdt-radius-lg);\n }\n\n .stack-devtool .sdt-share-dialog {\n width: 380px;\n max-width: calc(100% - 32px);\n background: var(--sdt-bg);\n border: 1px solid var(--sdt-border);\n border-radius: var(--sdt-radius-lg);\n box-shadow: var(--sdt-shadow);\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .stack-devtool .sdt-share-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .stack-devtool .sdt-share-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-share-status {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 20px;\n color: var(--sdt-text-secondary);\n font-size: 13px;\n }\n\n .stack-devtool .sdt-share-url-row {\n display: flex;\n gap: 6px;\n align-items: center;\n }\n\n .stack-devtool .sdt-share-url-row .sdt-support-input {\n flex: 1;\n font-family: var(--sdt-font-mono);\n font-size: 12px;\n }\n\n .stack-devtool .sdt-share-copy-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n flex-shrink: 0;\n background: var(--sdt-bg-elevated);\n border: 1px solid var(--sdt-border-subtle);\n border-radius: var(--sdt-radius-sm);\n color: var(--sdt-text-secondary);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .stack-devtool .sdt-share-copy-btn:hover {\n background: var(--sdt-bg-hover);\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-share-actions {\n display: flex;\n gap: 8px;\n }\n\n .stack-devtool .sdt-share-action-btn {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 10px 12px;\n background: var(--sdt-bg-elevated);\n border: 1px solid var(--sdt-border-subtle);\n border-radius: var(--sdt-radius);\n color: var(--sdt-text-secondary);\n text-decoration: none;\n font-family: var(--sdt-font);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .stack-devtool .sdt-share-action-btn:hover {\n background: var(--sdt-bg-hover);\n border-color: var(--sdt-border);\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-share-action-btn svg {\n flex-shrink: 0;\n opacity: 0.7;\n }\n\n .stack-devtool .sdt-share-action-btn:hover svg {\n opacity: 1;\n }\n\n .stack-devtool .sdt-share-action-btn-accent {\n background: var(--sdt-accent);\n border-color: var(--sdt-accent);\n color: white;\n }\n\n .stack-devtool .sdt-share-action-btn-accent:hover {\n background: var(--sdt-accent-hover);\n border-color: var(--sdt-accent-hover);\n color: white;\n }\n\n .stack-devtool .sdt-share-action-btn-accent svg {\n opacity: 1;\n }\n\n /* --- AI Chat tab --- */\n\n .stack-devtool .sdt-ai-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n }\n\n .stack-devtool .sdt-ai-messages {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 16px;\n scroll-behavior: smooth;\n }\n\n .stack-devtool .sdt-ai-message-list {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n /* --- Empty state --- */\n\n .stack-devtool .sdt-ai-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 12px;\n padding: 24px;\n text-align: center;\n }\n\n .stack-devtool .sdt-ai-empty-icon {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n background: var(--sdt-accent-muted);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--sdt-accent);\n margin-bottom: 4px;\n }\n\n .stack-devtool .sdt-ai-empty-title {\n font-size: 16px;\n font-weight: 600;\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-ai-empty-desc {\n font-size: 12px;\n color: var(--sdt-text-secondary);\n max-width: 320px;\n line-height: 1.5;\n }\n\n .stack-devtool .sdt-ai-suggestions {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-top: 8px;\n width: 100%;\n max-width: 340px;\n }\n\n .stack-devtool .sdt-ai-suggestion {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n border-radius: var(--sdt-radius);\n background: var(--sdt-bg-elevated);\n border: 1px solid var(--sdt-border-subtle);\n color: var(--sdt-text-secondary);\n font-size: 12px;\n cursor: pointer;\n text-align: left;\n transition: all 0.15s ease;\n font-family: var(--sdt-font);\n line-height: 1.4;\n }\n\n .stack-devtool .sdt-ai-suggestion:hover {\n background: var(--sdt-bg-hover);\n border-color: var(--sdt-border);\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-ai-suggestion-icon {\n font-size: 14px;\n flex-shrink: 0;\n }\n\n /* --- Messages --- */\n\n .stack-devtool .sdt-ai-msg {\n display: flex;\n gap: 10px;\n align-items: flex-start;\n }\n\n .stack-devtool .sdt-ai-msg-user {\n justify-content: flex-end;\n }\n\n .stack-devtool .sdt-ai-msg-assistant {\n justify-content: flex-start;\n }\n\n .stack-devtool .sdt-ai-avatar {\n width: 26px;\n height: 26px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n margin-top: 2px;\n }\n\n .stack-devtool .sdt-ai-avatar-user {\n background: var(--sdt-info-muted);\n color: var(--sdt-info);\n order: 2;\n }\n\n .stack-devtool .sdt-ai-avatar-assistant {\n background: var(--sdt-accent-muted);\n color: var(--sdt-accent);\n }\n\n .stack-devtool .sdt-ai-bubble {\n min-width: 0;\n max-width: 85%;\n border-radius: var(--sdt-radius-lg);\n padding: 10px 14px;\n }\n\n .stack-devtool .sdt-ai-bubble-user {\n background: var(--sdt-info-muted);\n border: 1px solid rgba(59, 130, 246, 0.1);\n }\n\n .stack-devtool .sdt-ai-bubble-user p {\n font-size: 13px;\n line-height: 1.55;\n color: var(--sdt-text);\n margin: 0;\n word-break: break-word;\n }\n\n .stack-devtool .sdt-ai-bubble-assistant {\n background: var(--sdt-bg-elevated);\n border: 1px solid var(--sdt-border-subtle);\n }\n\n /* --- Thinking dots --- */\n\n .stack-devtool .sdt-ai-thinking {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 0;\n }\n\n .stack-devtool .sdt-ai-thinking-dot {\n width: 5px;\n height: 5px;\n border-radius: 50%;\n background: var(--sdt-accent);\n opacity: 0.5;\n animation: sdt-ai-pulse 1.2s ease-in-out infinite;\n }\n\n .stack-devtool .sdt-ai-thinking-dot:nth-child(2) { animation-delay: 0.15s; }\n .stack-devtool .sdt-ai-thinking-dot:nth-child(3) { animation-delay: 0.3s; }\n\n @keyframes sdt-ai-pulse {\n 0%, 80%, 100% { opacity: 0.3; transform: scale(0.85); }\n 40% { opacity: 1; transform: scale(1.1); }\n }\n\n .stack-devtool .sdt-ai-streaming-indicator {\n display: flex;\n align-items: center;\n gap: 3px;\n margin-top: 6px;\n }\n\n /* --- Markdown content inside assistant bubble --- */\n\n .stack-devtool .sdt-ai-paragraph {\n font-size: 13px;\n line-height: 1.6;\n color: var(--sdt-text);\n margin: 0 0 10px;\n word-break: break-word;\n }\n\n .stack-devtool .sdt-ai-paragraph:last-child { margin-bottom: 0; }\n\n .stack-devtool .sdt-ai-bold {\n font-weight: 600;\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-ai-inline-code {\n display: inline;\n padding: 1.5px 5px;\n border-radius: 4px;\n font-family: var(--sdt-font-mono);\n font-size: 11.5px;\n background: var(--sdt-bg-hover);\n color: var(--sdt-text);\n border: 1px solid var(--sdt-border-subtle);\n }\n\n .stack-devtool .sdt-ai-link {\n color: var(--sdt-info);\n text-decoration: none;\n transition: color 0.1s;\n }\n\n .stack-devtool .sdt-ai-link:hover {\n color: var(--sdt-accent-hover);\n text-decoration: underline;\n text-underline-offset: 2px;\n }\n\n .stack-devtool .sdt-ai-heading {\n font-weight: 600;\n color: var(--sdt-text);\n margin: 12px 0 6px;\n line-height: 1.35;\n }\n\n .stack-devtool .sdt-ai-heading:first-child { margin-top: 0; }\n\n .stack-devtool .sdt-ai-bubble-assistant h1.sdt-ai-heading { font-size: 15px; }\n .stack-devtool .sdt-ai-bubble-assistant h2.sdt-ai-heading { font-size: 13.5px; }\n .stack-devtool .sdt-ai-bubble-assistant h3.sdt-ai-heading { font-size: 13px; }\n\n .stack-devtool .sdt-ai-list {\n font-size: 13px;\n line-height: 1.6;\n color: var(--sdt-text);\n margin: 0 0 10px;\n padding-left: 20px;\n }\n\n .stack-devtool .sdt-ai-list:last-child { margin-bottom: 0; }\n\n .stack-devtool .sdt-ai-list li {\n margin-bottom: 3px;\n padding-left: 2px;\n }\n\n .stack-devtool .sdt-ai-list li::marker {\n color: var(--sdt-text-tertiary);\n }\n\n .stack-devtool .sdt-ai-list-ordered {\n list-style-type: decimal;\n }\n\n .stack-devtool .sdt-ai-tools {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin: 6px 0;\n }\n\n .stack-devtool .sdt-ai-part-text {\n margin: 6px 0;\n }\n\n .stack-devtool .sdt-ai-tool-card {\n border: 1px solid var(--sdt-border-subtle);\n border-radius: var(--sdt-radius);\n background: var(--sdt-bg-subtle);\n overflow: hidden;\n }\n\n .stack-devtool .sdt-ai-tool-header {\n width: 100%;\n border: none;\n background: transparent;\n color: inherit;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n cursor: pointer;\n text-align: left;\n font-family: var(--sdt-font);\n }\n\n .stack-devtool .sdt-ai-tool-header:hover {\n background: var(--sdt-bg-hover);\n }\n\n .stack-devtool .sdt-ai-tool-name {\n font-size: 12px;\n font-weight: 600;\n color: var(--sdt-text);\n flex: 1;\n }\n\n .stack-devtool .sdt-ai-tool-status {\n font-size: 10px;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n font-weight: 600;\n }\n\n .stack-devtool .sdt-ai-tool-status-running { color: var(--sdt-warning); }\n .stack-devtool .sdt-ai-tool-status-success { color: var(--sdt-success); }\n .stack-devtool .sdt-ai-tool-status-error { color: var(--sdt-error); }\n\n .stack-devtool .sdt-ai-tool-chevron {\n color: var(--sdt-text-tertiary);\n font-size: 10px;\n transition: transform 0.15s ease;\n }\n\n .stack-devtool .sdt-ai-tool-chevron-open {\n transform: rotate(180deg);\n }\n\n .stack-devtool .sdt-ai-tool-body {\n border-top: 1px solid var(--sdt-border-subtle);\n padding: 8px 10px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .stack-devtool .sdt-ai-tool-label {\n font-size: 10px;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--sdt-text-tertiary);\n font-weight: 600;\n }\n\n .stack-devtool .sdt-ai-tool-pre {\n margin: 0;\n padding: 8px;\n border: 1px solid var(--sdt-border-subtle);\n border-radius: var(--sdt-radius-sm);\n background: var(--sdt-bg);\n font-family: var(--sdt-font-mono);\n font-size: 11px;\n line-height: 1.5;\n color: var(--sdt-text-secondary);\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n .stack-devtool .sdt-ai-tool-running {\n font-size: 11px;\n color: var(--sdt-text-secondary);\n }\n\n .stack-devtool .sdt-ai-blockquote {\n border-left: 3px solid var(--sdt-accent);\n padding-left: 12px;\n margin: 8px 0;\n font-size: 13px;\n color: var(--sdt-text-secondary);\n font-style: italic;\n }\n\n .stack-devtool .sdt-ai-hr {\n border: none;\n border-top: 1px solid var(--sdt-border-subtle);\n margin: 12px 0;\n }\n\n /* --- Code blocks --- */\n\n .stack-devtool .sdt-ai-code-block {\n border-radius: var(--sdt-radius);\n overflow: hidden;\n margin: 8px 0;\n border: 1px solid var(--sdt-border-subtle);\n background: var(--sdt-bg-subtle);\n }\n\n .stack-devtool .sdt-ai-code-block:last-child { margin-bottom: 0; }\n\n .stack-devtool .sdt-ai-code-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 5px 10px;\n border-bottom: 1px solid var(--sdt-border-subtle);\n background: var(--sdt-bg);\n }\n\n .stack-devtool .sdt-ai-code-lang {\n font-size: 9px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--sdt-text-tertiary);\n font-family: var(--sdt-font);\n }\n\n .stack-devtool .sdt-ai-copy-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: var(--sdt-radius-sm);\n border: none;\n background: transparent;\n color: var(--sdt-text-tertiary);\n cursor: pointer;\n font-size: 12px;\n font-family: var(--sdt-font);\n transition: all 0.15s ease;\n }\n\n .stack-devtool .sdt-ai-copy-btn:hover {\n background: var(--sdt-bg-hover);\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-ai-copy-btn-copied {\n color: var(--sdt-success) !important;\n }\n\n .stack-devtool .sdt-ai-code-pre {\n margin: 0;\n padding: 10px 12px;\n overflow-x: auto;\n font-family: var(--sdt-font-mono);\n font-size: 11.5px;\n line-height: 1.6;\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-ai-code-pre code {\n font-family: inherit;\n background: none;\n border: none;\n padding: 0;\n }\n\n /* --- Error --- */\n\n .stack-devtool .sdt-ai-error {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 14px;\n margin: 8px 16px;\n border-radius: var(--sdt-radius);\n background: var(--sdt-error-muted);\n border: 1px solid rgba(239, 68, 68, 0.2);\n font-size: 12px;\n color: var(--sdt-error);\n line-height: 1.4;\n }\n\n /* --- Input area --- */\n\n .stack-devtool .sdt-ai-input-area {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-top: 1px solid var(--sdt-border-subtle);\n background: var(--sdt-bg);\n }\n\n .stack-devtool .sdt-ai-new-chat {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: var(--sdt-radius);\n border: 1px solid var(--sdt-border-subtle);\n background: var(--sdt-bg-elevated);\n color: var(--sdt-text-secondary);\n cursor: pointer;\n flex-shrink: 0;\n transition: all 0.15s ease;\n font-family: var(--sdt-font);\n }\n\n .stack-devtool .sdt-ai-new-chat:hover {\n background: var(--sdt-bg-hover);\n border-color: var(--sdt-border);\n color: var(--sdt-text);\n }\n\n .stack-devtool .sdt-ai-input-wrapper {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 6px;\n border-radius: var(--sdt-radius);\n background: var(--sdt-bg-elevated);\n border: 1px solid var(--sdt-border-subtle);\n padding: 0 4px 0 12px;\n transition: border-color 0.15s ease;\n }\n\n .stack-devtool .sdt-ai-input-wrapper:focus-within {\n border-color: var(--sdt-accent);\n box-shadow: 0 0 0 2px var(--sdt-accent-muted);\n }\n\n .stack-devtool .sdt-ai-input {\n flex: 1;\n background: transparent;\n border: none;\n outline: none;\n color: var(--sdt-text);\n font-size: 13px;\n font-family: var(--sdt-font);\n padding: 8px 0;\n min-width: 0;\n }\n\n .stack-devtool .sdt-ai-input::placeholder {\n color: var(--sdt-text-tertiary);\n }\n\n .stack-devtool .sdt-ai-input:disabled {\n opacity: 0.5;\n }\n\n .stack-devtool .sdt-ai-send-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border-radius: 6px;\n border: none;\n background: transparent;\n color: var(--sdt-text-tertiary);\n cursor: not-allowed;\n flex-shrink: 0;\n transition: all 0.15s ease;\n font-family: var(--sdt-font);\n }\n\n .stack-devtool .sdt-ai-send-btn-active {\n background: var(--sdt-accent);\n color: white;\n cursor: pointer;\n }\n\n .stack-devtool .sdt-ai-send-btn-active:hover {\n background: var(--sdt-accent-hover);\n }\n\n .stack-devtool .sdt-ai-stop-btn,\n .stack-devtool .sdt-ai-stop-btn:hover {\n background: var(--sdt-error);\n color: white;\n }\n\n /* Accessible focus indicator for keyboard navigation */\n .stack-devtool .sdt-tab:focus-visible {\n outline: 2px solid var(--sdt-accent);\n outline-offset: -2px;\n border-radius: var(--sdt-radius);\n }\n\n /* Reduced motion: disable animations for users who prefer it */\n @media (prefers-reduced-motion: reduce) {\n .stack-devtool .sdt-panel-inner,\n .stack-devtool .sdt-panel-exiting,\n .stack-devtool .sdt-tab-content,\n .stack-devtool .sdt-ov-pulse-dot,\n .stack-devtool .sdt-ov-skeleton-pill,\n .stack-devtool .sdt-support-spinner,\n .stack-devtool .sdt-ai-thinking-dot {\n animation: none !important;\n }\n\n .stack-devtool .sdt-tab-indicator,\n .stack-devtool .sdt-tab {\n transition: none !important;\n }\n }\n\n /* --- Stack theme explicit overrides (take priority over system preference) --- */\n html:has(head > [data-stack-theme=\"light\"]) .stack-devtool {\n --sdt-bg: #ffffff;\n --sdt-bg-elevated: #f8f8fa;\n --sdt-bg-hover: #f0f0f3;\n --sdt-bg-active: #e8e8ec;\n --sdt-bg-subtle: #fafafa;\n --sdt-border: #e0e0e5;\n --sdt-border-subtle: #eaeaef;\n --sdt-text: #111113;\n --sdt-text-secondary: #6b6b73;\n --sdt-text-tertiary: #9b9ba3;\n --sdt-accent: #6366f1;\n --sdt-accent-hover: #4f46e5;\n --sdt-accent-muted: rgba(99, 102, 241, 0.1);\n --sdt-success: #16a34a;\n --sdt-success-muted: rgba(22, 163, 74, 0.1);\n --sdt-warning: #ca8a04;\n --sdt-warning-muted: rgba(202, 138, 4, 0.1);\n --sdt-error: #dc2626;\n --sdt-error-muted: rgba(220, 38, 38, 0.1);\n --sdt-info: #2563eb;\n --sdt-info-muted: rgba(37, 99, 235, 0.1);\n --sdt-overlay-bg: rgba(255, 255, 255, 0.92);\n --sdt-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.06);\n --sdt-trigger-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(0, 0, 0, 0.06);\n }\n\n html:has(head > [data-stack-theme=\"dark\"]) .stack-devtool {\n --sdt-bg: #0a0a0b;\n --sdt-bg-elevated: #141416;\n --sdt-bg-hover: #1c1c1f;\n --sdt-bg-active: #232326;\n --sdt-bg-subtle: #111113;\n --sdt-border: #2a2a2e;\n --sdt-border-subtle: #1e1e22;\n --sdt-text: #ececef;\n --sdt-text-secondary: #8b8b93;\n --sdt-text-tertiary: #5c5c66;\n --sdt-accent: #6366f1;\n --sdt-accent-hover: #818cf8;\n --sdt-accent-muted: rgba(99, 102, 241, 0.15);\n --sdt-success: #22c55e;\n --sdt-success-muted: rgba(34, 197, 94, 0.15);\n --sdt-warning: #eab308;\n --sdt-warning-muted: rgba(234, 179, 8, 0.15);\n --sdt-error: #ef4444;\n --sdt-error-muted: rgba(239, 68, 68, 0.15);\n --sdt-info: #3b82f6;\n --sdt-info-muted: rgba(59, 130, 246, 0.15);\n --sdt-overlay-bg: rgba(17, 17, 19, 0.92);\n --sdt-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.05);\n --sdt-trigger-shadow: 0 4px 12px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.08);\n }\n";
3
+ //#endregion
4
+ export { devToolCSS };
5
+ //# sourceMappingURL=dev-tool-styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-tool-styles.d.ts","names":[],"sources":["../../../src/dev-tool/dev-tool-styles.ts"],"mappings":";cAQa,UAAA"}