@howone/sdk 0.1.27 → 0.2.0

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.
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import React$1, { Component, ReactNode } from 'react';
2
2
  import * as axios from 'axios';
3
- import { AxiosResponse, InternalAxiosRequestConfig, AxiosRequestConfig, AxiosInstance } from 'axios';
3
+ import { AxiosResponse, AxiosRequestConfig, InternalAxiosRequestConfig, AxiosInstance } from 'axios';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import { ToastOptions } from 'react-toastify';
6
6
 
@@ -185,6 +185,7 @@ declare function getCodeStatus(email: string): Promise<any>;
185
185
  */
186
186
  interface AIWorkflowResponse {
187
187
  success: boolean;
188
+ status?: number;
188
189
  output?: Record<string, unknown>;
189
190
  error?: string;
190
191
  metadata?: Record<string, unknown>;
@@ -207,7 +208,7 @@ declare class AIWorkflowClient {
207
208
  * 按 ID 执行工作流:POST {baseUrl}/workflow/{workflowId}/execute
208
209
  * body: { input, options }
209
210
  */
210
- executeWorkflow(workflowId: string, inputs: Record<string, unknown>, options?: Record<string, unknown>): Promise<AIWorkflowResponse>;
211
+ executeWorkflow(workflowId: string, inputs: Record<string, unknown>, options?: Record<string, unknown>): Promise<AIWorkflowResponse | null>;
211
212
  }
212
213
  declare function createAIWorkflowClient(options?: AIWorkflowClientOptions): AIWorkflowClient;
213
214
  declare const aiWorkflow: AIWorkflowClient;
@@ -338,29 +339,28 @@ type AuthState$1 = {
338
339
  };
339
340
  declare function onAuthStateChanged(cb: (state: AuthState$1) => void): () => void;
340
341
 
341
- declare function setAuthRoot(url: string): void;
342
- declare function getAuthRoot(): string;
343
- declare const AUTH_ROOT: string;
342
+ type Environment = 'local' | 'dev' | 'prod';
343
+ type envs = {
344
+ AUTH_ROOT_VALUE: string;
345
+ baseUrl: string;
346
+ aiBaseUrl: string;
347
+ };
348
+ declare function setEnvironment(e: Environment): envs;
349
+ declare function getEnvironment(): Environment;
350
+ declare function getEnvs(): envs;
344
351
  declare function setDefaultProjectId(id: string | null): void;
345
352
  declare function getDefaultProjectId(): string | null;
353
+ declare function getGlobalEnvironment(): Environment | null;
346
354
 
347
- declare const request: Request;
348
- declare const aiRequest: Request;
349
- declare const workflowRequest: Request;
350
- /**
351
- * 简单工厂:返回一个对外友好的 client,封装业务 request 与 AI workflow request。
352
- * 默认使用上面导出的 `request` 和 `aiRequest`,也可以通过 options 覆盖。
353
- */
354
355
  /**
355
356
  * Higher-level factory: createClient
356
357
  * - minimal surface compatible with `createClient({ projectId, authRequired })`
357
358
  * - returns executeWorkflow, request, aiRequest and a tiny auth helper (set/get token)
358
359
  */
359
- declare function createClient(opts?: {
360
- projectId?: string;
360
+ declare function createClient(opts: {
361
+ projectId: string;
362
+ env?: 'local' | 'dev' | 'prod';
361
363
  authRequired?: boolean;
362
- baseUrl?: string;
363
- aiBaseUrl?: string;
364
364
  mode?: "auto" | "standalone" | "embedded";
365
365
  auth?: {
366
366
  mode?: "none" | "managed" | "headless";
@@ -373,10 +373,8 @@ declare function createClient(opts?: {
373
373
  sensitiveParams?: string[];
374
374
  };
375
375
  };
376
- requestInstance?: Request;
377
- aiRequestInstance?: Request;
378
376
  }): {
379
- projectId: string | null;
377
+ projectId: string;
380
378
  request: {
381
379
  instance: axios.AxiosInstance;
382
380
  request: (config: RequestConfig) => Promise<AxiosResponse<any, any>>;
@@ -536,6 +534,18 @@ interface ErrorFallbackProps {
536
534
  }
537
535
  declare const DefaultErrorFallback: React$1.FC<ErrorFallbackProps>;
538
536
 
537
+ type ButtonSize = "sm" | "md" | "lg";
538
+ type ButtonVariant = "solid" | "ghost" | "flat";
539
+ interface ClayxButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
540
+ isIconOnly?: boolean;
541
+ size?: ButtonSize;
542
+ variant?: ButtonVariant;
543
+ children?: React$1.ReactNode;
544
+ }
545
+ declare const ClayxButton: React$1.FC<ClayxButtonProps>;
546
+
547
+ declare function showLimitUpgradeToast(message: string, onUpgrade: () => void): void;
548
+
539
549
  type Theme = "dark" | "light" | "system";
540
550
  type ThemeProviderProps = {
541
551
  children: React.ReactNode;
@@ -564,6 +574,7 @@ declare function GlobalToastContainer(): react_jsx_runtime.JSX.Element;
564
574
  interface ToastParams {
565
575
  title?: string;
566
576
  message?: string;
577
+ render?: (closeToast: () => void) => React$1.ReactNode;
567
578
  component?: React$1.ReactNode;
568
579
  options?: Partial<ToastOptions>;
569
580
  }
@@ -575,10 +586,63 @@ declare const ClayxToast: {
575
586
  default: (params: ToastParams) => void;
576
587
  };
577
588
 
589
+ interface SourceLocation {
590
+ file: string;
591
+ line: number;
592
+ component: string;
593
+ }
594
+ interface ElementSelectionData {
595
+ sourceLocation: SourceLocation | null;
596
+ element: {
597
+ tagName: string;
598
+ className: string;
599
+ id: string;
600
+ text: string;
601
+ };
602
+ rect: {
603
+ top: number;
604
+ left: number;
605
+ width: number;
606
+ height: number;
607
+ };
608
+ }
609
+ interface ElementSelectorProps {
610
+ active: boolean;
611
+ onSelect?: (data: ElementSelectionData) => void;
612
+ onCancel?: () => void;
613
+ }
614
+ declare const ElementSelector: React$1.FC<ElementSelectorProps>;
615
+
616
+ interface ElementSelectorProviderProps {
617
+ children: React$1.ReactNode;
618
+ }
619
+ /**
620
+ * 元素选择器提供者组件
621
+ * 监听来自 iframe.js 的自定义事件,自动显示/隐藏元素选择器
622
+ */
623
+ declare const ElementSelectorProvider: React$1.FC<ElementSelectorProviderProps>;
624
+
578
625
  declare function useIsMobile(): boolean;
579
626
 
580
627
  declare function useDebounce<T>(value: T, delay: number): T;
581
628
 
629
+ interface UseElementSelectorReturn {
630
+ isSelecting: boolean;
631
+ selectedElement: ElementSelectionData | null;
632
+ startSelecting: () => void;
633
+ stopSelecting: () => void;
634
+ clearSelection: () => void;
635
+ }
636
+ /**
637
+ * 元素选择器 Hook
638
+ * 用于管理元素选择状态和向父窗口发送消息
639
+ */
640
+ declare function useElementSelector(): UseElementSelectorReturn;
641
+ /**
642
+ * 向父窗口发送元素选择数据
643
+ */
644
+ declare function sendElementSelectionToParent(data: ElementSelectionData): void;
645
+
582
646
  /**
583
647
  * 错误处理模块 - 核心类型定义
584
648
  *
@@ -867,4 +931,74 @@ declare class SimpleErrorHandler {
867
931
  captureError(error: Error, details?: any): void;
868
932
  }
869
933
 
870
- export { type AIWorkflowClientOptions, type AIWorkflowResponse, AUTH_ROOT, AUTH_TOKEN_KEY, type AccessContext, type Artifact, type ArtifactCreateInput, type ArtifactListQuery, type AxiosAIWorkflowOptions, ClayxToast, DEFAULT_SELECTOR_CONFIG, DefaultErrorFallback, ERROR_CONFIG, type EmailLoginRequest, type EmailLoginResponse, type EnhancedErrorConfig, ErrorBoundary, ErrorHandler, type ErrorPayload, type ErrorSeverity, type ErrorStats, type ErrorType, FloatingButton, GLOBAL_CONFIG, GlobalToastContainer, HowOneProvider, type HowOneProviderProps, Loading, LoadingSpinner, LoginForm, type MessageType, type SelectorState, type SendCodeRequest, type SendCodeResponse, type SimpleErrorConfig, SimpleErrorHandler, ThemeProvider, ThemeToggle, type UserInteraction, type ViewInfo, type Visibility, aiRequest, aiWorkflow, canAccessArtifact, createAIWorkflowClient, createAIWorkflowClientAxios, createArtifactsClient, createClient, getAuthRoot, getCodeStatus, getDefaultProjectId, getToken, howone, isTokenValid, loginWithEmailCode, onAuthStateChanged, parseUserFromToken, request, sendEmailVerificationCode, setAuthRoot, setDefaultProjectId, setToken, unifiedAuth, unifiedOAuth, useAuth, useDebounce, useHowoneContext, useIsMobile, useTheme, workflowRequest };
934
+ /**
935
+ * iframe navigation and element selector utilities
936
+ * Replaces the standalone iframe.js script
937
+ */
938
+ declare function customGoBack(): boolean;
939
+ declare function customGoForward(): boolean;
940
+ declare function triggerElementSelection(): void;
941
+ declare function cancelElementSelection(): void;
942
+ /**
943
+ * Initialize iframe navigation system
944
+ * Call this once when your app starts
945
+ */
946
+ declare function initIframeNavigation(): void;
947
+ /**
948
+ * Public API for iframe navigation
949
+ */
950
+ declare const iframeNavigation: {
951
+ /**
952
+ * Initialize the navigation system
953
+ */
954
+ init: typeof initIframeNavigation;
955
+ /**
956
+ * Add a page to navigation history
957
+ */
958
+ addPage: (url?: string, title?: string) => void;
959
+ /**
960
+ * Get current navigation state
961
+ */
962
+ getState: () => {
963
+ canGoBack: boolean;
964
+ canGoForward: boolean;
965
+ historyLength: number;
966
+ currentIndex: number;
967
+ currentPage: {
968
+ url: string;
969
+ title: string;
970
+ timestamp: number;
971
+ };
972
+ };
973
+ /**
974
+ * Update navigation state (send to parent)
975
+ */
976
+ updateState: () => void;
977
+ /**
978
+ * Go back in history
979
+ */
980
+ goBack: typeof customGoBack;
981
+ /**
982
+ * Go forward in history
983
+ */
984
+ goForward: typeof customGoForward;
985
+ };
986
+ /**
987
+ * Public API for element selector
988
+ */
989
+ declare const elementSelector: {
990
+ /**
991
+ * Start element selection mode
992
+ */
993
+ startSelection: typeof triggerElementSelection;
994
+ /**
995
+ * Cancel element selection mode
996
+ */
997
+ cancel: typeof cancelElementSelection;
998
+ /**
999
+ * Check if selector is active
1000
+ */
1001
+ isActive: () => boolean;
1002
+ };
1003
+
1004
+ export { type AIWorkflowClientOptions, type AIWorkflowResponse, AUTH_TOKEN_KEY, type AccessContext, type Artifact, type ArtifactCreateInput, type ArtifactListQuery, type AxiosAIWorkflowOptions, ClayxButton, ClayxToast, DEFAULT_SELECTOR_CONFIG, DefaultErrorFallback, ERROR_CONFIG, type ElementSelectionData, ElementSelector, ElementSelectorProvider, type EmailLoginRequest, type EmailLoginResponse, type EnhancedErrorConfig, type Environment, ErrorBoundary, ErrorHandler, type ErrorPayload, type ErrorSeverity, type ErrorStats, type ErrorType, FloatingButton, GLOBAL_CONFIG, GlobalToastContainer, HowOneProvider, type HowOneProviderProps, Loading, LoadingSpinner, LoginForm, type MessageType, type SelectorState, type SendCodeRequest, type SendCodeResponse, type SimpleErrorConfig, SimpleErrorHandler, type SourceLocation, ThemeProvider, ThemeToggle, type UseElementSelectorReturn, type UserInteraction, type ViewInfo, type Visibility, aiWorkflow, canAccessArtifact, createAIWorkflowClient, createAIWorkflowClientAxios, createArtifactsClient, createClient, elementSelector, type envs, getCodeStatus, getDefaultProjectId, getEnvironment, getEnvs, getGlobalEnvironment, getToken, howone, iframeNavigation, initIframeNavigation, isTokenValid, loginWithEmailCode, onAuthStateChanged, parseUserFromToken, sendElementSelectionToParent, sendEmailVerificationCode, setDefaultProjectId, setEnvironment, setToken, showLimitUpgradeToast, unifiedAuth, unifiedOAuth, useAuth, useDebounce, useElementSelector, useHowoneContext, useIsMobile, useTheme };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import React$1, { Component, ReactNode } from 'react';
2
2
  import * as axios from 'axios';
3
- import { AxiosResponse, InternalAxiosRequestConfig, AxiosRequestConfig, AxiosInstance } from 'axios';
3
+ import { AxiosResponse, AxiosRequestConfig, InternalAxiosRequestConfig, AxiosInstance } from 'axios';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import { ToastOptions } from 'react-toastify';
6
6
 
@@ -185,6 +185,7 @@ declare function getCodeStatus(email: string): Promise<any>;
185
185
  */
186
186
  interface AIWorkflowResponse {
187
187
  success: boolean;
188
+ status?: number;
188
189
  output?: Record<string, unknown>;
189
190
  error?: string;
190
191
  metadata?: Record<string, unknown>;
@@ -207,7 +208,7 @@ declare class AIWorkflowClient {
207
208
  * 按 ID 执行工作流:POST {baseUrl}/workflow/{workflowId}/execute
208
209
  * body: { input, options }
209
210
  */
210
- executeWorkflow(workflowId: string, inputs: Record<string, unknown>, options?: Record<string, unknown>): Promise<AIWorkflowResponse>;
211
+ executeWorkflow(workflowId: string, inputs: Record<string, unknown>, options?: Record<string, unknown>): Promise<AIWorkflowResponse | null>;
211
212
  }
212
213
  declare function createAIWorkflowClient(options?: AIWorkflowClientOptions): AIWorkflowClient;
213
214
  declare const aiWorkflow: AIWorkflowClient;
@@ -338,29 +339,28 @@ type AuthState$1 = {
338
339
  };
339
340
  declare function onAuthStateChanged(cb: (state: AuthState$1) => void): () => void;
340
341
 
341
- declare function setAuthRoot(url: string): void;
342
- declare function getAuthRoot(): string;
343
- declare const AUTH_ROOT: string;
342
+ type Environment = 'local' | 'dev' | 'prod';
343
+ type envs = {
344
+ AUTH_ROOT_VALUE: string;
345
+ baseUrl: string;
346
+ aiBaseUrl: string;
347
+ };
348
+ declare function setEnvironment(e: Environment): envs;
349
+ declare function getEnvironment(): Environment;
350
+ declare function getEnvs(): envs;
344
351
  declare function setDefaultProjectId(id: string | null): void;
345
352
  declare function getDefaultProjectId(): string | null;
353
+ declare function getGlobalEnvironment(): Environment | null;
346
354
 
347
- declare const request: Request;
348
- declare const aiRequest: Request;
349
- declare const workflowRequest: Request;
350
- /**
351
- * 简单工厂:返回一个对外友好的 client,封装业务 request 与 AI workflow request。
352
- * 默认使用上面导出的 `request` 和 `aiRequest`,也可以通过 options 覆盖。
353
- */
354
355
  /**
355
356
  * Higher-level factory: createClient
356
357
  * - minimal surface compatible with `createClient({ projectId, authRequired })`
357
358
  * - returns executeWorkflow, request, aiRequest and a tiny auth helper (set/get token)
358
359
  */
359
- declare function createClient(opts?: {
360
- projectId?: string;
360
+ declare function createClient(opts: {
361
+ projectId: string;
362
+ env?: 'local' | 'dev' | 'prod';
361
363
  authRequired?: boolean;
362
- baseUrl?: string;
363
- aiBaseUrl?: string;
364
364
  mode?: "auto" | "standalone" | "embedded";
365
365
  auth?: {
366
366
  mode?: "none" | "managed" | "headless";
@@ -373,10 +373,8 @@ declare function createClient(opts?: {
373
373
  sensitiveParams?: string[];
374
374
  };
375
375
  };
376
- requestInstance?: Request;
377
- aiRequestInstance?: Request;
378
376
  }): {
379
- projectId: string | null;
377
+ projectId: string;
380
378
  request: {
381
379
  instance: axios.AxiosInstance;
382
380
  request: (config: RequestConfig) => Promise<AxiosResponse<any, any>>;
@@ -536,6 +534,18 @@ interface ErrorFallbackProps {
536
534
  }
537
535
  declare const DefaultErrorFallback: React$1.FC<ErrorFallbackProps>;
538
536
 
537
+ type ButtonSize = "sm" | "md" | "lg";
538
+ type ButtonVariant = "solid" | "ghost" | "flat";
539
+ interface ClayxButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
540
+ isIconOnly?: boolean;
541
+ size?: ButtonSize;
542
+ variant?: ButtonVariant;
543
+ children?: React$1.ReactNode;
544
+ }
545
+ declare const ClayxButton: React$1.FC<ClayxButtonProps>;
546
+
547
+ declare function showLimitUpgradeToast(message: string, onUpgrade: () => void): void;
548
+
539
549
  type Theme = "dark" | "light" | "system";
540
550
  type ThemeProviderProps = {
541
551
  children: React.ReactNode;
@@ -564,6 +574,7 @@ declare function GlobalToastContainer(): react_jsx_runtime.JSX.Element;
564
574
  interface ToastParams {
565
575
  title?: string;
566
576
  message?: string;
577
+ render?: (closeToast: () => void) => React$1.ReactNode;
567
578
  component?: React$1.ReactNode;
568
579
  options?: Partial<ToastOptions>;
569
580
  }
@@ -575,10 +586,63 @@ declare const ClayxToast: {
575
586
  default: (params: ToastParams) => void;
576
587
  };
577
588
 
589
+ interface SourceLocation {
590
+ file: string;
591
+ line: number;
592
+ component: string;
593
+ }
594
+ interface ElementSelectionData {
595
+ sourceLocation: SourceLocation | null;
596
+ element: {
597
+ tagName: string;
598
+ className: string;
599
+ id: string;
600
+ text: string;
601
+ };
602
+ rect: {
603
+ top: number;
604
+ left: number;
605
+ width: number;
606
+ height: number;
607
+ };
608
+ }
609
+ interface ElementSelectorProps {
610
+ active: boolean;
611
+ onSelect?: (data: ElementSelectionData) => void;
612
+ onCancel?: () => void;
613
+ }
614
+ declare const ElementSelector: React$1.FC<ElementSelectorProps>;
615
+
616
+ interface ElementSelectorProviderProps {
617
+ children: React$1.ReactNode;
618
+ }
619
+ /**
620
+ * 元素选择器提供者组件
621
+ * 监听来自 iframe.js 的自定义事件,自动显示/隐藏元素选择器
622
+ */
623
+ declare const ElementSelectorProvider: React$1.FC<ElementSelectorProviderProps>;
624
+
578
625
  declare function useIsMobile(): boolean;
579
626
 
580
627
  declare function useDebounce<T>(value: T, delay: number): T;
581
628
 
629
+ interface UseElementSelectorReturn {
630
+ isSelecting: boolean;
631
+ selectedElement: ElementSelectionData | null;
632
+ startSelecting: () => void;
633
+ stopSelecting: () => void;
634
+ clearSelection: () => void;
635
+ }
636
+ /**
637
+ * 元素选择器 Hook
638
+ * 用于管理元素选择状态和向父窗口发送消息
639
+ */
640
+ declare function useElementSelector(): UseElementSelectorReturn;
641
+ /**
642
+ * 向父窗口发送元素选择数据
643
+ */
644
+ declare function sendElementSelectionToParent(data: ElementSelectionData): void;
645
+
582
646
  /**
583
647
  * 错误处理模块 - 核心类型定义
584
648
  *
@@ -867,4 +931,74 @@ declare class SimpleErrorHandler {
867
931
  captureError(error: Error, details?: any): void;
868
932
  }
869
933
 
870
- export { type AIWorkflowClientOptions, type AIWorkflowResponse, AUTH_ROOT, AUTH_TOKEN_KEY, type AccessContext, type Artifact, type ArtifactCreateInput, type ArtifactListQuery, type AxiosAIWorkflowOptions, ClayxToast, DEFAULT_SELECTOR_CONFIG, DefaultErrorFallback, ERROR_CONFIG, type EmailLoginRequest, type EmailLoginResponse, type EnhancedErrorConfig, ErrorBoundary, ErrorHandler, type ErrorPayload, type ErrorSeverity, type ErrorStats, type ErrorType, FloatingButton, GLOBAL_CONFIG, GlobalToastContainer, HowOneProvider, type HowOneProviderProps, Loading, LoadingSpinner, LoginForm, type MessageType, type SelectorState, type SendCodeRequest, type SendCodeResponse, type SimpleErrorConfig, SimpleErrorHandler, ThemeProvider, ThemeToggle, type UserInteraction, type ViewInfo, type Visibility, aiRequest, aiWorkflow, canAccessArtifact, createAIWorkflowClient, createAIWorkflowClientAxios, createArtifactsClient, createClient, getAuthRoot, getCodeStatus, getDefaultProjectId, getToken, howone, isTokenValid, loginWithEmailCode, onAuthStateChanged, parseUserFromToken, request, sendEmailVerificationCode, setAuthRoot, setDefaultProjectId, setToken, unifiedAuth, unifiedOAuth, useAuth, useDebounce, useHowoneContext, useIsMobile, useTheme, workflowRequest };
934
+ /**
935
+ * iframe navigation and element selector utilities
936
+ * Replaces the standalone iframe.js script
937
+ */
938
+ declare function customGoBack(): boolean;
939
+ declare function customGoForward(): boolean;
940
+ declare function triggerElementSelection(): void;
941
+ declare function cancelElementSelection(): void;
942
+ /**
943
+ * Initialize iframe navigation system
944
+ * Call this once when your app starts
945
+ */
946
+ declare function initIframeNavigation(): void;
947
+ /**
948
+ * Public API for iframe navigation
949
+ */
950
+ declare const iframeNavigation: {
951
+ /**
952
+ * Initialize the navigation system
953
+ */
954
+ init: typeof initIframeNavigation;
955
+ /**
956
+ * Add a page to navigation history
957
+ */
958
+ addPage: (url?: string, title?: string) => void;
959
+ /**
960
+ * Get current navigation state
961
+ */
962
+ getState: () => {
963
+ canGoBack: boolean;
964
+ canGoForward: boolean;
965
+ historyLength: number;
966
+ currentIndex: number;
967
+ currentPage: {
968
+ url: string;
969
+ title: string;
970
+ timestamp: number;
971
+ };
972
+ };
973
+ /**
974
+ * Update navigation state (send to parent)
975
+ */
976
+ updateState: () => void;
977
+ /**
978
+ * Go back in history
979
+ */
980
+ goBack: typeof customGoBack;
981
+ /**
982
+ * Go forward in history
983
+ */
984
+ goForward: typeof customGoForward;
985
+ };
986
+ /**
987
+ * Public API for element selector
988
+ */
989
+ declare const elementSelector: {
990
+ /**
991
+ * Start element selection mode
992
+ */
993
+ startSelection: typeof triggerElementSelection;
994
+ /**
995
+ * Cancel element selection mode
996
+ */
997
+ cancel: typeof cancelElementSelection;
998
+ /**
999
+ * Check if selector is active
1000
+ */
1001
+ isActive: () => boolean;
1002
+ };
1003
+
1004
+ export { type AIWorkflowClientOptions, type AIWorkflowResponse, AUTH_TOKEN_KEY, type AccessContext, type Artifact, type ArtifactCreateInput, type ArtifactListQuery, type AxiosAIWorkflowOptions, ClayxButton, ClayxToast, DEFAULT_SELECTOR_CONFIG, DefaultErrorFallback, ERROR_CONFIG, type ElementSelectionData, ElementSelector, ElementSelectorProvider, type EmailLoginRequest, type EmailLoginResponse, type EnhancedErrorConfig, type Environment, ErrorBoundary, ErrorHandler, type ErrorPayload, type ErrorSeverity, type ErrorStats, type ErrorType, FloatingButton, GLOBAL_CONFIG, GlobalToastContainer, HowOneProvider, type HowOneProviderProps, Loading, LoadingSpinner, LoginForm, type MessageType, type SelectorState, type SendCodeRequest, type SendCodeResponse, type SimpleErrorConfig, SimpleErrorHandler, type SourceLocation, ThemeProvider, ThemeToggle, type UseElementSelectorReturn, type UserInteraction, type ViewInfo, type Visibility, aiWorkflow, canAccessArtifact, createAIWorkflowClient, createAIWorkflowClientAxios, createArtifactsClient, createClient, elementSelector, type envs, getCodeStatus, getDefaultProjectId, getEnvironment, getEnvs, getGlobalEnvironment, getToken, howone, iframeNavigation, initIframeNavigation, isTokenValid, loginWithEmailCode, onAuthStateChanged, parseUserFromToken, sendElementSelectionToParent, sendEmailVerificationCode, setDefaultProjectId, setEnvironment, setToken, showLimitUpgradeToast, unifiedAuth, unifiedOAuth, useAuth, useDebounce, useElementSelector, useHowoneContext, useIsMobile, useTheme };