@fiction/sdk 1.0.59 → 1.0.61
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/{FModal.vue_vue_type_script_setup_true_lang-C4CbSGGe.js → FModal.vue_vue_type_script_setup_true_lang-Ce7y9PSl.js} +2 -2
- package/dist/{FModal.vue_vue_type_script_setup_true_lang-C4CbSGGe.js.map → FModal.vue_vue_type_script_setup_true_lang-Ce7y9PSl.js.map} +1 -1
- package/dist/{SelfProvider.vue_vue_type_script_setup_true_lang-DFXdpHBQ.js → SelfProvider.vue_vue_type_script_setup_true_lang-26F7cqUz.js} +2 -2
- package/dist/{SelfProvider.vue_vue_type_script_setup_true_lang-DFXdpHBQ.js.map → SelfProvider.vue_vue_type_script_setup_true_lang-26F7cqUz.js.map} +1 -1
- package/dist/{SelfWidgetInline-RP4Bgvb2.js → SelfWidgetInline-DM14q3uW.js} +2 -2
- package/dist/{SelfWidgetInline-RP4Bgvb2.js.map → SelfWidgetInline-DM14q3uW.js.map} +1 -1
- package/dist/{SelfWidgetModal-BfSYtDi_.js → SelfWidgetModal-BpkLEYY0.js} +3 -3
- package/dist/{SelfWidgetModal-BfSYtDi_.js.map → SelfWidgetModal-BpkLEYY0.js.map} +1 -1
- package/dist/{SelfWidgetPopup-DZkw2epa.js → SelfWidgetPopup-DjwPpHLy.js} +2 -2
- package/dist/{SelfWidgetPopup-DZkw2epa.js.map → SelfWidgetPopup-DjwPpHLy.js.map} +1 -1
- package/dist/SelfWrap.vue_vue_type_script_setup_true_lang-DLAFn8rY.js +7826 -0
- package/dist/SelfWrap.vue_vue_type_script_setup_true_lang-DLAFn8rY.js.map +1 -0
- package/dist/demo/index.d.ts +8 -8
- package/dist/sdk.css +1 -1
- package/dist/sdkClient.d.ts +12 -12
- package/dist/self/accounts.d.ts +104 -0
- package/dist/self/index.d.ts +2 -0
- package/dist/self/schema.d.ts +1 -1
- package/dist/self/ui/SelfWrap.vue.d.ts +4 -4
- package/dist/self.js +43 -40
- package/dist/widget.js +87 -87
- package/dist/widget.js.map +1 -1
- package/package.json +6 -7
- package/dist/SelfWrap.vue_vue_type_script_setup_true_lang-rvOPLj1D.js +0 -5600
- package/dist/SelfWrap.vue_vue_type_script_setup_true_lang-rvOPLj1D.js.map +0 -1
package/dist/widget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.js","sources":["../widget/FictionWidget.ts","../widget/composables/useFictionWidget.ts"],"sourcesContent":["import type { App, ComponentPublicInstance } from 'vue'\nimport type { Self } from '@fiction/types'\nimport { FictionSDK } from '../sdkClient'\nimport sdkCSS from '../self/ui/styles.css?inline'\nimport { createApp } from 'vue'\n\ntype WidgetMode = 'inline' | 'popup' | 'modal'\n\nexport interface WidgetConfig {\n el?: HTMLElement // Optional for modal mode (creates and appends to body)\n mode: WidgetMode\n handle?: string\n self?: Self\n context?: string\n firstMessage?: string\n apiBase?: string\n onClose?: () => void // Callback when widget is closed (modal/popup modes)\n}\n\nexport interface WidgetUpdate {\n self?: Self\n context?: string\n firstMessage?: string\n}\n\ntype WidgetInstance = {\n toggle?: () => void\n open?: () => void\n close?: () => void\n update?: (config: WidgetUpdate) => void\n} & ComponentPublicInstance\n\nconst logger = {\n info: (message: string) => console.log(`[Fiction Widget] ${message}`),\n error: (message: string) => console.error(`[Fiction Widget] ${message}`),\n warn: (message: string) => console.warn(`[Fiction Widget] ${message}`),\n}\n\nexport class FictionWidget {\n private app: App | null = null\n private shadowRoot: ShadowRoot | null = null\n private widgetInstance: WidgetInstance | null = null\n private config: WidgetConfig\n private sdk: FictionSDK\n private container: HTMLElement | null = null\n private static modalInstances = new Map<string, FictionWidget>()\n\n constructor(config: WidgetConfig) {\n this.config = config\n\n // Validate required config\n if (!config.mode)\n throw new Error('FictionWidget: mode is required')\n if (!config.handle && !config.self)\n throw new Error('FictionWidget: either handle or self is required')\n\n // For non-modal modes, el is required\n if (config.mode !== 'modal' && !config.el)\n throw new Error(`FictionWidget: el (HTMLElement) is required for ${config.mode} mode`)\n\n // For modal mode, handle singleton pattern\n if (config.mode === 'modal') {\n const instanceKey = config.handle || config.self?.selfId || 'default'\n const existing = FictionWidget.modalInstances.get(instanceKey)\n if (existing) {\n logger.warn(`Destroying existing modal widget for: ${instanceKey}`)\n existing.destroy()\n }\n FictionWidget.modalInstances.set(instanceKey, this)\n }\n\n // Create SDK instance (singleton)\n const isDev = typeof window !== 'undefined'\n ? window.location.hostname === 'localhost' || window.location.hostname.includes('127.0.0.1')\n : false\n\n this.sdk = FictionSDK.getInstance({\n isDev,\n ...(config.apiBase && { apiBase: config.apiBase }),\n })\n\n logger.info(`Initializing ${config.mode} mode for @${config.handle || config.self?.handle} (isDev: ${isDev})`)\n\n this.init()\n }\n\n private async init() {\n // For modal mode, create container and append to body\n if (this.config.mode === 'modal') {\n this.container = document.createElement('div')\n this.container.id = `fiction-modal-${this.config.handle || this.config.self?.selfId || 'widget'}`\n document.body.appendChild(this.container)\n\n // Create shadow root in modal container\n this.shadowRoot = this.container.attachShadow({ mode: 'open' })\n }\n else {\n // For other modes, use provided element\n this.shadowRoot = this.config.el!.attachShadow({ mode: 'open' })\n }\n\n // Inject SDK CSS into shadow DOM\n const styleElement = document.createElement('style')\n styleElement.textContent = sdkCSS\n this.shadowRoot.appendChild(styleElement)\n\n // Create mount point\n const mountPoint = document.createElement('div')\n mountPoint.id = 'fiction-widget-root'\n mountPoint.style.cssText = 'width: 100%; height: 100%;'\n this.shadowRoot.appendChild(mountPoint)\n\n // Import and mount mode-specific component\n await this.mountMode(mountPoint)\n }\n\n private async mountMode(mountPoint: HTMLElement) {\n const { mode } = this.config\n\n if (mode === 'inline') {\n const { default: SelfWidgetInline } = await import('./ui/SelfWidgetInline.vue')\n\n this.app = createApp(SelfWidgetInline, {\n sdk: this.sdk,\n handle: this.config.handle,\n self: this.config.self,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else if (mode === 'popup') {\n const { default: SelfWidgetPopup } = await import('./ui/SelfWidgetPopup.vue')\n\n this.app = createApp(SelfWidgetPopup, {\n sdk: this.sdk,\n handle: this.config.handle,\n self: this.config.self,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n position: 'bottom-right', // Default position for popup\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else if (mode === 'modal') {\n const { default: SelfWidgetModal } = await import('./ui/SelfWidgetModal.vue')\n\n this.app = createApp(SelfWidgetModal, {\n sdk: this.sdk,\n handle: this.config.handle,\n self: this.config.self,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n onClose: () => {\n // Call user's onClose callback if provided\n if (this.config.onClose) {\n this.config.onClose()\n }\n // Auto-destroy modal when closed\n this.destroy()\n },\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else {\n throw new Error(`FictionWidget: unsupported mode \"${mode}\"`)\n }\n }\n\n /**\n * Update widget with new configuration without re-mounting\n */\n update(updates: WidgetUpdate) {\n if (this.widgetInstance?.update) {\n this.widgetInstance.update(updates)\n logger.info(`Widget updated: ${Object.keys(updates).join(', ')}`)\n }\n else {\n logger.warn('Widget instance does not support update()')\n }\n }\n\n /**\n * Toggle widget visibility (popup mode only)\n */\n toggle() {\n if (this.widgetInstance?.toggle) {\n this.widgetInstance.toggle()\n }\n else {\n logger.warn('Widget mode does not support toggle()')\n }\n }\n\n /**\n * Open widget (popup mode only)\n */\n open() {\n if (this.widgetInstance?.open) {\n this.widgetInstance.open()\n }\n else {\n logger.warn('Widget mode does not support open()')\n }\n }\n\n /**\n * Close widget (popup mode only)\n */\n close() {\n if (this.widgetInstance?.close) {\n this.widgetInstance.close()\n }\n else {\n logger.warn('Widget mode does not support close()')\n }\n }\n\n /**\n * Destroy widget and cleanup\n */\n destroy() {\n if (this.app) {\n this.app.unmount()\n this.app = null\n }\n\n if (this.shadowRoot) {\n this.shadowRoot.innerHTML = ''\n this.shadowRoot = null\n }\n\n // For modal mode, remove container from body and remove from singleton map\n if (this.config.mode === 'modal') {\n if (this.container) {\n this.container.remove()\n this.container = null\n }\n\n const instanceKey = this.config.handle || this.config.self?.selfId || 'default'\n FictionWidget.modalInstances.delete(instanceKey)\n }\n\n this.widgetInstance = null\n\n logger.info(`Widget destroyed for handle: ${this.config.handle || this.config.self?.handle}`)\n }\n}\n","import type { MaybeRef } from 'vue'\nimport type { Self } from '@fiction/types'\nimport type { WidgetConfig, WidgetUpdate } from '../FictionWidget'\nimport { computed, onUnmounted, ref, unref, watch } from 'vue'\nimport { FictionWidget } from '../FictionWidget'\n\nexport interface UseFictionWidgetConfig {\n mode: WidgetConfig['mode']\n handle?: MaybeRef<string | undefined>\n self?: MaybeRef<Self | null | undefined>\n context?: MaybeRef<string | undefined>\n firstMessage?: MaybeRef<string | undefined>\n apiBase?: string\n onClose?: () => void\n}\n\n/**\n * Composable for managing FictionWidget lifecycle with automatic initialization,\n * reactive updates, and cleanup.\n *\n * Benefits:\n * - Eliminates manual DOM timing coordination (watch + nextTick)\n * - Automatic cleanup on unmount\n * - Reactive prop updates via widget.update()\n * - Prevents double initialization\n * - Clear loading/error states\n *\n * @example\n * ```vue\n * <script setup>\n * const selfRef = ref<Self | null>(null)\n * const { containerRef, loading, error } = useFictionWidget({\n * mode: 'inline',\n * self: selfRef,\n * context: 'welcome'\n * })\n * </script>\n *\n * <template>\n * <div ref=\"containerRef\" class=\"w-full h-full\" />\n * </template>\n * ```\n */\nexport function useFictionWidget(config: UseFictionWidgetConfig) {\n const containerRef = ref<HTMLElement | null>(null)\n const widget = ref<InstanceType<typeof FictionWidget> | null>(null)\n const loading = ref(true)\n const error = ref<string | null>(null)\n\n // Track if widget has been initialized to prevent double-init\n const initialized = ref(false)\n\n // Computed values for reactive tracking\n const currentHandle = computed(() => unref(config.handle))\n const currentSelf = computed(() => unref(config.self))\n const currentContext = computed(() => unref(config.context))\n const currentFirstMessage = computed(() => unref(config.firstMessage))\n\n // Check if we have required data for initialization\n const hasRequiredData = computed(() => {\n if (config.mode === 'modal') {\n // Modal doesn't need container\n return !!(currentHandle.value || currentSelf.value)\n }\n // Inline/popup need container + (handle or self)\n return !!(containerRef.value && (currentHandle.value || currentSelf.value))\n })\n\n // Initialize widget when container and data are ready\n watch([containerRef, currentSelf, currentHandle], async () => {\n // Skip if already initialized or missing required data\n if (initialized.value || !hasRequiredData.value) {\n return\n }\n\n loading.value = true\n error.value = null\n\n try {\n // Wait for next tick to ensure DOM is fully rendered\n await new Promise(resolve => setTimeout(resolve, 0))\n\n const widgetConfig: WidgetConfig = {\n mode: config.mode,\n handle: currentHandle.value,\n self: currentSelf.value || undefined,\n context: currentContext.value,\n firstMessage: currentFirstMessage.value,\n apiBase: config.apiBase,\n onClose: config.onClose,\n }\n\n // Add container element for non-modal modes\n if (config.mode !== 'modal') {\n widgetConfig.el = containerRef.value!\n }\n\n widget.value = new FictionWidget(widgetConfig)\n initialized.value = true\n } catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to initialize widget'\n console.error('[useFictionWidget] Initialization error:', err)\n } finally {\n loading.value = false\n }\n }, { immediate: true })\n\n // Watch for prop changes and update widget reactively\n watch([currentSelf, currentContext, currentFirstMessage], () => {\n if (!widget.value || !initialized.value) {\n return\n }\n\n const updates: WidgetUpdate = {}\n if (currentSelf.value !== undefined) {\n updates.self = currentSelf.value || undefined\n }\n if (currentContext.value !== undefined) {\n updates.context = currentContext.value\n }\n if (currentFirstMessage.value !== undefined) {\n updates.firstMessage = currentFirstMessage.value\n }\n\n if (Object.keys(updates).length > 0) {\n widget.value.update(updates)\n }\n })\n\n // Cleanup on unmount\n onUnmounted(() => {\n if (widget.value) {\n widget.value.destroy()\n widget.value = null\n }\n initialized.value = false\n })\n\n return {\n containerRef,\n widget,\n loading,\n error,\n }\n}\n"],"names":["logger","__name","message","_FictionWidget","config","__publicField","instanceKey","existing","isDev","FictionSDK","styleElement","sdkCSS","mountPoint","mode","SelfWidgetInline","createApp","SelfWidgetPopup","SelfWidgetModal","updates","FictionWidget","useFictionWidget","containerRef","ref","widget","loading","error","initialized","currentHandle","computed","unref","currentSelf","currentContext","currentFirstMessage","hasRequiredData","watch","resolve","widgetConfig","err","onUnmounted"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"widget.js","sources":["../widget/FictionWidget.ts","../widget/composables/useFictionWidget.ts"],"sourcesContent":["import type { App, ComponentPublicInstance } from 'vue'\nimport type { Self } from '@fiction/types'\nimport { FictionSDK } from '../sdkClient'\nimport sdkCSS from '../self/ui/styles.css?inline'\nimport { createApp } from 'vue'\n\ntype WidgetMode = 'inline' | 'popup' | 'modal'\n\nexport interface WidgetConfig {\n el?: HTMLElement // Optional for modal mode (creates and appends to body)\n mode: WidgetMode\n handle?: string\n self?: Self\n context?: string\n firstMessage?: string\n apiBase?: string\n onClose?: () => void // Callback when widget is closed (modal/popup modes)\n}\n\nexport interface WidgetUpdate {\n self?: Self\n context?: string\n firstMessage?: string\n}\n\ntype WidgetInstance = {\n toggle?: () => void\n open?: () => void\n close?: () => void\n update?: (config: WidgetUpdate) => void\n} & ComponentPublicInstance\n\nconst logger = {\n info: (message: string) => console.log(`[Fiction Widget] ${message}`),\n error: (message: string) => console.error(`[Fiction Widget] ${message}`),\n warn: (message: string) => console.warn(`[Fiction Widget] ${message}`),\n}\n\nexport class FictionWidget {\n private app: App | null = null\n private shadowRoot: ShadowRoot | null = null\n private widgetInstance: WidgetInstance | null = null\n private config: WidgetConfig\n private sdk: FictionSDK\n private container: HTMLElement | null = null\n private static modalInstances = new Map<string, FictionWidget>()\n\n constructor(config: WidgetConfig) {\n this.config = config\n\n // Validate required config\n if (!config.mode)\n throw new Error('FictionWidget: mode is required')\n if (!config.handle && !config.self)\n throw new Error('FictionWidget: either handle or self is required')\n\n // For non-modal modes, el is required\n if (config.mode !== 'modal' && !config.el)\n throw new Error(`FictionWidget: el (HTMLElement) is required for ${config.mode} mode`)\n\n // For modal mode, handle singleton pattern\n if (config.mode === 'modal') {\n const instanceKey = config.handle || config.self?.selfId || 'default'\n const existing = FictionWidget.modalInstances.get(instanceKey)\n if (existing) {\n logger.warn(`Destroying existing modal widget for: ${instanceKey}`)\n existing.destroy()\n }\n FictionWidget.modalInstances.set(instanceKey, this)\n }\n\n // Create SDK instance (singleton)\n const isDev = typeof window !== 'undefined'\n ? window.location.hostname === 'localhost' || window.location.hostname.includes('127.0.0.1')\n : false\n\n this.sdk = FictionSDK.getInstance({\n isDev,\n ...(config.apiBase && { apiBase: config.apiBase }),\n })\n\n logger.info(`Initializing ${config.mode} mode for @${config.handle || config.self?.handle} (isDev: ${isDev})`)\n\n this.init()\n }\n\n private async init() {\n // For modal mode, create container and append to body\n if (this.config.mode === 'modal') {\n this.container = document.createElement('div')\n this.container.id = `fiction-modal-${this.config.handle || this.config.self?.selfId || 'widget'}`\n document.body.appendChild(this.container)\n\n // Create shadow root in modal container\n this.shadowRoot = this.container.attachShadow({ mode: 'open' })\n }\n else {\n // For other modes, use provided element\n this.shadowRoot = this.config.el!.attachShadow({ mode: 'open' })\n }\n\n // Inject SDK CSS into shadow DOM\n const styleElement = document.createElement('style')\n styleElement.textContent = sdkCSS\n this.shadowRoot.appendChild(styleElement)\n\n // Create mount point\n const mountPoint = document.createElement('div')\n mountPoint.id = 'fiction-widget-root'\n mountPoint.style.cssText = 'width: 100%; height: 100%;'\n this.shadowRoot.appendChild(mountPoint)\n\n // Import and mount mode-specific component\n await this.mountMode(mountPoint)\n }\n\n private async mountMode(mountPoint: HTMLElement) {\n const { mode } = this.config\n\n if (mode === 'inline') {\n const { default: SelfWidgetInline } = await import('./ui/SelfWidgetInline.vue')\n\n this.app = createApp(SelfWidgetInline, {\n sdk: this.sdk,\n handle: this.config.handle,\n self: this.config.self,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else if (mode === 'popup') {\n const { default: SelfWidgetPopup } = await import('./ui/SelfWidgetPopup.vue')\n\n this.app = createApp(SelfWidgetPopup, {\n sdk: this.sdk,\n handle: this.config.handle,\n self: this.config.self,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n position: 'bottom-right', // Default position for popup\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else if (mode === 'modal') {\n const { default: SelfWidgetModal } = await import('./ui/SelfWidgetModal.vue')\n\n this.app = createApp(SelfWidgetModal, {\n sdk: this.sdk,\n handle: this.config.handle,\n self: this.config.self,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n onClose: () => {\n // Call user's onClose callback if provided\n if (this.config.onClose) {\n this.config.onClose()\n }\n // Auto-destroy modal when closed\n this.destroy()\n },\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n }\n else {\n throw new Error(`FictionWidget: unsupported mode \"${mode}\"`)\n }\n }\n\n /**\n * Update widget with new configuration without re-mounting\n */\n update(updates: WidgetUpdate) {\n if (this.widgetInstance?.update) {\n this.widgetInstance.update(updates)\n logger.info(`Widget updated: ${Object.keys(updates).join(', ')}`)\n }\n else {\n logger.warn('Widget instance does not support update()')\n }\n }\n\n /**\n * Toggle widget visibility (popup mode only)\n */\n toggle() {\n if (this.widgetInstance?.toggle) {\n this.widgetInstance.toggle()\n }\n else {\n logger.warn('Widget mode does not support toggle()')\n }\n }\n\n /**\n * Open widget (popup mode only)\n */\n open() {\n if (this.widgetInstance?.open) {\n this.widgetInstance.open()\n }\n else {\n logger.warn('Widget mode does not support open()')\n }\n }\n\n /**\n * Close widget (popup mode only)\n */\n close() {\n if (this.widgetInstance?.close) {\n this.widgetInstance.close()\n }\n else {\n logger.warn('Widget mode does not support close()')\n }\n }\n\n /**\n * Destroy widget and cleanup\n */\n destroy() {\n if (this.app) {\n this.app.unmount()\n this.app = null\n }\n\n if (this.shadowRoot) {\n this.shadowRoot.innerHTML = ''\n this.shadowRoot = null\n }\n\n // For modal mode, remove container from body and remove from singleton map\n if (this.config.mode === 'modal') {\n if (this.container) {\n this.container.remove()\n this.container = null\n }\n\n const instanceKey = this.config.handle || this.config.self?.selfId || 'default'\n FictionWidget.modalInstances.delete(instanceKey)\n }\n\n this.widgetInstance = null\n\n logger.info(`Widget destroyed for handle: ${this.config.handle || this.config.self?.handle}`)\n }\n}\n","import type { MaybeRef } from 'vue'\nimport type { Self } from '@fiction/types'\nimport type { WidgetConfig, WidgetUpdate } from '../FictionWidget'\nimport { computed, onUnmounted, ref, unref, watch } from 'vue'\nimport { FictionWidget } from '../FictionWidget'\n\nexport interface UseFictionWidgetConfig {\n mode: WidgetConfig['mode']\n handle?: MaybeRef<string | undefined>\n self?: MaybeRef<Self | null | undefined>\n context?: MaybeRef<string | undefined>\n firstMessage?: MaybeRef<string | undefined>\n apiBase?: string\n onClose?: () => void\n}\n\n/**\n * Composable for managing FictionWidget lifecycle with automatic initialization,\n * reactive updates, and cleanup.\n *\n * Benefits:\n * - Eliminates manual DOM timing coordination (watch + nextTick)\n * - Automatic cleanup on unmount\n * - Reactive prop updates via widget.update()\n * - Prevents double initialization\n * - Clear loading/error states\n *\n * @example\n * ```vue\n * <script setup>\n * const selfRef = ref<Self | null>(null)\n * const { containerRef, loading, error } = useFictionWidget({\n * mode: 'inline',\n * self: selfRef,\n * context: 'welcome'\n * })\n * </script>\n *\n * <template>\n * <div ref=\"containerRef\" class=\"w-full h-full\" />\n * </template>\n * ```\n */\nexport function useFictionWidget(config: UseFictionWidgetConfig) {\n const containerRef = ref<HTMLElement | null>(null)\n const widget = ref<InstanceType<typeof FictionWidget> | null>(null)\n const loading = ref(true)\n const error = ref<string | null>(null)\n\n // Track if widget has been initialized to prevent double-init\n const initialized = ref(false)\n\n // Computed values for reactive tracking\n const currentHandle = computed(() => unref(config.handle))\n const currentSelf = computed(() => unref(config.self))\n const currentContext = computed(() => unref(config.context))\n const currentFirstMessage = computed(() => unref(config.firstMessage))\n\n // Check if we have required data for initialization\n const hasRequiredData = computed(() => {\n if (config.mode === 'modal') {\n // Modal doesn't need container\n return !!(currentHandle.value || currentSelf.value)\n }\n // Inline/popup need container + (handle or self)\n return !!(containerRef.value && (currentHandle.value || currentSelf.value))\n })\n\n // Initialize widget when container and data are ready\n watch([containerRef, currentSelf, currentHandle], async () => {\n // Skip if already initialized or missing required data\n if (initialized.value || !hasRequiredData.value) {\n return\n }\n\n loading.value = true\n error.value = null\n\n try {\n // Wait for next tick to ensure DOM is fully rendered\n await new Promise(resolve => setTimeout(resolve, 0))\n\n const widgetConfig: WidgetConfig = {\n mode: config.mode,\n handle: currentHandle.value,\n self: currentSelf.value || undefined,\n context: currentContext.value,\n firstMessage: currentFirstMessage.value,\n apiBase: config.apiBase,\n onClose: config.onClose,\n }\n\n // Add container element for non-modal modes\n if (config.mode !== 'modal') {\n widgetConfig.el = containerRef.value!\n }\n\n widget.value = new FictionWidget(widgetConfig)\n initialized.value = true\n } catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to initialize widget'\n console.error('[useFictionWidget] Initialization error:', err)\n } finally {\n loading.value = false\n }\n }, { immediate: true })\n\n // Watch for prop changes and update widget reactively\n watch([currentSelf, currentContext, currentFirstMessage], () => {\n if (!widget.value || !initialized.value) {\n return\n }\n\n const updates: WidgetUpdate = {}\n if (currentSelf.value !== undefined) {\n updates.self = currentSelf.value || undefined\n }\n if (currentContext.value !== undefined) {\n updates.context = currentContext.value\n }\n if (currentFirstMessage.value !== undefined) {\n updates.firstMessage = currentFirstMessage.value\n }\n\n if (Object.keys(updates).length > 0) {\n widget.value.update(updates)\n }\n })\n\n // Cleanup on unmount\n onUnmounted(() => {\n if (widget.value) {\n widget.value.destroy()\n widget.value = null\n }\n initialized.value = false\n })\n\n return {\n containerRef,\n widget,\n loading,\n error,\n }\n}\n"],"names":["logger","__name","message","_FictionWidget","config","__publicField","instanceKey","existing","isDev","FictionSDK","styleElement","sdkCSS","mountPoint","mode","SelfWidgetInline","createApp","SelfWidgetPopup","SelfWidgetModal","updates","FictionWidget","useFictionWidget","containerRef","ref","widget","loading","error","initialized","currentHandle","computed","unref","currentSelf","currentContext","currentFirstMessage","hasRequiredData","watch","resolve","widgetConfig","err","onUnmounted"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fiction/sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.61",
|
|
4
4
|
"description": "SDK for Fiction app authentication and user management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/sdk.js",
|
|
@@ -48,28 +48,27 @@
|
|
|
48
48
|
"registry": "https://registry.npmjs.org/"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"@fiction/types": "^1.0.0",
|
|
52
51
|
"vue": "^3.5.0"
|
|
53
52
|
},
|
|
54
53
|
"dependencies": {
|
|
55
|
-
"@elevenlabs/client": "^0.
|
|
54
|
+
"@elevenlabs/client": "^0.8.0",
|
|
56
55
|
"@fiction/utils": "latest",
|
|
57
56
|
"@nanostores/vue": "^1.0.1",
|
|
58
|
-
"hono": "^4.
|
|
57
|
+
"hono": "^4.10.1",
|
|
59
58
|
"nanoid": "^5.1.6",
|
|
60
59
|
"nanostores": "^1.0.1",
|
|
61
60
|
"zod": "^4.1.12",
|
|
62
|
-
"@fiction/types": "1.0.
|
|
61
|
+
"@fiction/types": "1.0.42"
|
|
63
62
|
},
|
|
64
63
|
"devDependencies": {
|
|
65
64
|
"@antfu/eslint-config": "^5.4.1",
|
|
66
65
|
"@iconify-json/heroicons": "^1.2.3",
|
|
67
66
|
"@iconify-json/logos": "^1.2.9",
|
|
68
|
-
"@iconify-json/lucide": "^1.2.
|
|
67
|
+
"@iconify-json/lucide": "^1.2.70",
|
|
69
68
|
"@iconify-json/simple-icons": "^1.2.54",
|
|
70
69
|
"@iconify-json/tabler": "^1.2.23",
|
|
71
70
|
"@vitejs/plugin-vue": "^6.0.1",
|
|
72
|
-
"eslint": "^9.
|
|
71
|
+
"eslint": "^9.38.0",
|
|
73
72
|
"terser": "^5.44.0",
|
|
74
73
|
"typescript": "^5.9.3",
|
|
75
74
|
"vite": "^7.1.10",
|