@blinq_ai/widget 0.1.0 → 0.1.2
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/README.md +12 -4
- package/dist/blinq-widget.iife.global.js +1923 -997
- package/dist/blinq-widget.iife.global.js.map +1 -1
- package/dist/browser.cjs +1580 -796
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +3 -2
- package/dist/browser.d.ts +3 -2
- package/dist/browser.js +168 -1114
- package/dist/browser.js.map +1 -1
- package/dist/{chunk-2BSH3PRA.js → chunk-DQF42RXH.js} +1884 -145
- package/dist/chunk-DQF42RXH.js.map +1 -0
- package/dist/cli.js +122 -14
- package/dist/index.cjs +1886 -142
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +96 -108
- package/dist/index.d.ts +96 -108
- package/dist/index.js +11 -1
- package/dist/widget-core-D0ZdQY2E.d.cts +253 -0
- package/dist/widget-core-D0ZdQY2E.d.ts +253 -0
- package/package.json +3 -2
- package/dist/chunk-2BSH3PRA.js.map +0 -1
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/embed-styles.ts","../src/browser.ts"],"sourcesContent":["export const EMBED_WIDGET_STYLES = `\n :host {\n all: initial;\n display: block;\n position: static;\n color-scheme: light;\n }\n\n *, *::before, *::after {\n box-sizing: border-box;\n }\n\n button,\n input {\n font: inherit;\n }\n\n .blinq-shell {\n position: fixed;\n bottom: 24px;\n z-index: 2147483647;\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: 420px;\n max-width: calc(100vw - 24px);\n font-family:\n \"Inter\", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,\n \"Segoe UI\", sans-serif;\n pointer-events: none;\n --blinq-accent: #111111;\n --blinq-background: #ffffff;\n --blinq-panel: rgba(255, 255, 255, 0.98);\n --blinq-panel-soft: #fafafa;\n --blinq-surface: #ffffff;\n --blinq-surface-soft: #f5f5f5;\n --blinq-surface-muted: #ededed;\n --blinq-border: rgba(17, 17, 17, 0.08);\n --blinq-border-strong: rgba(17, 17, 17, 0.18);\n --blinq-text: #111111;\n --blinq-text-soft: #262626;\n --blinq-text-muted: #737373;\n --blinq-user-bubble: #111111;\n --blinq-user-text: #ffffff;\n --blinq-shadow: 0 24px 60px rgba(17, 17, 17, 0.12);\n }\n\n .blinq-shell[data-side=\"left\"] {\n left: 24px;\n align-items: flex-start;\n }\n\n .blinq-shell[data-side=\"right\"] {\n right: 24px;\n align-items: flex-end;\n }\n\n .blinq-panel,\n .blinq-launcher {\n pointer-events: auto;\n }\n\n .blinq-launcher {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n min-height: 58px;\n padding: 0 18px;\n border: 1px solid var(--blinq-border);\n border-radius: 20px;\n background: #ffffff;\n color: var(--blinq-text);\n box-shadow: 0 18px 40px rgba(17, 17, 17, 0.12);\n backdrop-filter: blur(18px);\n -webkit-backdrop-filter: blur(18px);\n transition:\n transform 180ms ease,\n box-shadow 180ms ease,\n border-color 180ms ease;\n }\n\n .blinq-launcher:hover {\n transform: translateY(-2px);\n border-color: rgba(17, 17, 17, 0.16);\n box-shadow: 0 22px 46px rgba(17, 17, 17, 0.16);\n }\n\n .blinq-launcher-badge {\n display: grid;\n place-items: center;\n width: 34px;\n height: 34px;\n border-radius: 12px;\n background: #111111;\n color: #ffffff;\n transition:\n transform 180ms ease,\n box-shadow 180ms ease;\n }\n\n .blinq-launcher:hover .blinq-launcher-badge {\n transform: scale(1.06);\n box-shadow: 0 10px 24px rgba(17, 17, 17, 0.22);\n }\n\n .blinq-launcher-icon-only {\n width: 58px;\n min-width: 58px;\n padding: 0;\n border-radius: 18px;\n }\n\n .blinq-launcher-agent {\n overflow: visible;\n }\n\n .blinq-agent-orbit {\n stroke: rgba(255, 255, 255, 0.42);\n stroke-width: 1.3;\n stroke-dasharray: 2.6 2.6;\n transform-origin: center;\n transition: opacity 180ms ease;\n }\n\n .blinq-agent-spark,\n .blinq-agent-head,\n .blinq-agent-antenna,\n .blinq-agent-antenna-dot,\n .blinq-agent-neck {\n transform-origin: center;\n }\n\n .blinq-launcher:hover .blinq-agent-orbit {\n animation: blinq-agent-spin 2.2s linear infinite;\n }\n\n .blinq-launcher:hover .blinq-agent-spark {\n animation: blinq-agent-spark 1.1s ease-in-out infinite;\n }\n\n .blinq-launcher:hover .blinq-agent-head,\n .blinq-launcher:hover .blinq-agent-neck,\n .blinq-launcher:hover .blinq-agent-antenna,\n .blinq-launcher:hover .blinq-agent-antenna-dot {\n animation: blinq-agent-bob 1.35s ease-in-out infinite;\n }\n\n .blinq-launcher-copy {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n line-height: 1.1;\n }\n\n .blinq-launcher-label {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--blinq-text-muted);\n }\n\n .blinq-launcher-title {\n margin-top: 3px;\n font-size: 14px;\n font-weight: 600;\n color: var(--blinq-text);\n }\n\n .blinq-panel {\n width: 100%;\n max-width: 420px;\n border: 1px solid var(--blinq-border);\n border-radius: 28px;\n overflow: hidden;\n background: #ffffff;\n box-shadow: var(--blinq-shadow);\n backdrop-filter: blur(24px);\n -webkit-backdrop-filter: blur(24px);\n }\n\n .blinq-header {\n padding: 16px;\n border-bottom: 1px solid var(--blinq-border);\n background: #ffffff;\n }\n\n .blinq-status-line {\n margin-top: 10px;\n font-size: 12px;\n line-height: 1.45;\n color: var(--blinq-text-muted);\n }\n\n .blinq-header-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n }\n\n .blinq-header-copy {\n min-width: 0;\n flex: 1;\n }\n\n .blinq-header-badges {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n\n .blinq-heading-row {\n margin-top: 14px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n }\n\n .blinq-heading {\n font-size: 16px;\n font-weight: 700;\n letter-spacing: -0.02em;\n color: var(--blinq-text);\n }\n\n .blinq-subheading {\n margin-top: 6px;\n max-width: 320px;\n font-size: 13px;\n line-height: 1.45;\n color: var(--blinq-text-muted);\n }\n\n .blinq-statusbar {\n margin-top: 14px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n flex-wrap: wrap;\n }\n\n .blinq-status {\n display: inline-flex;\n align-items: center;\n min-height: 34px;\n padding: 0 12px;\n border-radius: 999px;\n border: 1px solid var(--blinq-border);\n background: #f8f8f8;\n color: var(--blinq-text-soft);\n font-size: 12px;\n line-height: 1.45;\n }\n\n .blinq-runtime-chip {\n display: inline-flex;\n align-items: center;\n min-height: 34px;\n padding: 0 12px;\n border-radius: 999px;\n background: #111111;\n border: 1px solid #111111;\n color: #ffffff;\n font-size: 12px;\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n }\n\n .blinq-workspace {\n display: grid;\n grid-template-columns: 112px minmax(0, 1fr);\n min-height: 430px;\n }\n\n .blinq-sidebar {\n display: flex;\n flex-direction: column;\n gap: 14px;\n padding: 16px;\n border-right: 1px solid var(--blinq-border);\n background: #fafafa;\n }\n\n .blinq-sidebar-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .blinq-tab-trigger {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n min-height: 56px;\n padding: 10px;\n border: 1px solid transparent;\n border-radius: 18px;\n background: transparent;\n color: var(--blinq-text-soft);\n cursor: pointer;\n transition:\n background 120ms ease,\n border-color 120ms ease,\n color 120ms ease,\n transform 120ms ease;\n }\n\n .blinq-tab-trigger:hover {\n background: rgba(255,255,255,0.9);\n border-color: var(--blinq-border);\n }\n\n .blinq-tab-trigger-active {\n background: #ffffff;\n border-color: rgba(17, 17, 17, 0.16);\n box-shadow: 0 10px 24px rgba(17, 17, 17, 0.08);\n color: var(--blinq-text);\n }\n\n .blinq-tab-icon {\n display: grid;\n place-items: center;\n width: 32px;\n height: 32px;\n border-radius: 12px;\n background: rgba(15, 23, 42, 0.04);\n color: currentColor;\n flex: 0 0 auto;\n }\n\n .blinq-tab-copy {\n display: flex;\n flex-direction: column;\n min-width: 0;\n align-items: flex-start;\n text-align: left;\n }\n\n .blinq-tab-label {\n font-size: 13px;\n font-weight: 600;\n }\n\n .blinq-tab-caption {\n margin-top: 2px;\n font-size: 11px;\n color: var(--blinq-text-muted);\n }\n\n .blinq-tab-count {\n margin-left: auto;\n min-width: 22px;\n height: 22px;\n padding: 0 6px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 999px;\n background: rgba(15, 23, 42, 0.06);\n color: var(--blinq-text-soft);\n font-size: 11px;\n font-weight: 700;\n }\n\n .blinq-separator {\n height: 1px;\n background: var(--blinq-border);\n }\n\n .blinq-sidebar-card {\n gap: 12px;\n border-radius: 18px;\n background: rgba(255,255,255,0.94);\n box-shadow: 0 12px 30px rgba(15, 23, 42, 0.06);\n }\n\n .blinq-sidebar-card-header {\n padding: 14px 14px 0;\n }\n\n .blinq-sidebar-card-content {\n padding: 0 14px 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .blinq-stat-line {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n font-size: 12px;\n color: var(--blinq-text-muted);\n }\n\n .blinq-stat-line strong {\n color: var(--blinq-text);\n font-size: 12px;\n }\n\n .blinq-main {\n display: flex;\n flex-direction: column;\n min-width: 0;\n background: transparent;\n }\n\n .blinq-main-toolbar {\n padding: 16px 18px 12px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .blinq-toolbar-label {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--blinq-text-muted);\n }\n\n .blinq-prompt-row {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .blinq-prompt-chip {\n padding: 8px 12px;\n border-radius: 999px;\n border: 1px solid var(--blinq-border);\n background: rgba(255,255,255,0.95);\n color: var(--blinq-text-soft);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition:\n background 120ms ease,\n border-color 120ms ease,\n color 120ms ease,\n transform 120ms ease;\n }\n\n .blinq-prompt-chip:hover {\n border-color: rgba(17, 17, 17, 0.16);\n color: #111111;\n background: #f7f7f7;\n }\n\n .blinq-scroll {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-height: 0;\n height: 100%;\n max-height: 420px;\n padding: 16px;\n overflow-y: auto;\n }\n\n .blinq-thread {\n min-height: 0;\n }\n\n .blinq-thread-viewport {\n width: 100%;\n }\n\n .blinq-scroll-actions,\n .blinq-scroll-context {\n padding-top: 18px;\n }\n\n .blinq-scroll::-webkit-scrollbar {\n width: 8px;\n }\n\n .blinq-scroll::-webkit-scrollbar-thumb {\n background: rgba(148, 163, 184, 0.25);\n border-radius: 999px;\n }\n\n .blinq-message {\n max-width: 88%;\n border-radius: 20px;\n padding: 13px 14px;\n font-size: 14px;\n line-height: 1.55;\n white-space: pre-wrap;\n border: 1px solid var(--blinq-border);\n box-shadow: 0 12px 30px rgba(15, 23, 42, 0.05);\n }\n\n .blinq-message[data-role=\"assistant\"] {\n align-self: flex-start;\n background: rgba(255,255,255,0.98);\n color: var(--blinq-text);\n }\n\n .blinq-message[data-kind=\"artifact\"] {\n max-width: 100%;\n width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n }\n\n .blinq-message[data-role=\"user\"] {\n align-self: flex-end;\n background: var(--blinq-user-bubble);\n border-color: rgba(17, 17, 17, 0.22);\n color: var(--blinq-user-text);\n }\n\n .blinq-message-copy {\n display: block;\n }\n\n .blinq-message-copy-reveal {\n animation: blinq-blur-in 220ms cubic-bezier(0.16, 1, 0.3, 1);\n will-change: opacity, transform, filter;\n }\n\n .blinq-thinking-card {\n align-self: flex-start;\n background: rgba(255,255,255,0.98);\n color: var(--blinq-text);\n }\n\n .blinq-thinking {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n min-height: 20px;\n font-size: 13px;\n color: var(--blinq-text-muted);\n opacity: 1;\n transform: translateY(0);\n transition:\n opacity 180ms ease,\n transform 180ms ease;\n }\n\n .blinq-thinking-dots {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n }\n\n .blinq-thinking-dots > span {\n width: 6px;\n height: 6px;\n border-radius: 999px;\n background: #111111;\n animation: blinq-thinking-pulse 1.1s ease-in-out infinite;\n }\n\n .blinq-thinking-dots > span:nth-child(2) {\n animation-delay: 120ms;\n }\n\n .blinq-thinking-dots > span:nth-child(3) {\n animation-delay: 240ms;\n }\n\n .blinq-card {\n display: flex;\n flex-direction: column;\n gap: 14px;\n border: 1px solid var(--blinq-border);\n border-radius: 20px;\n background: var(--blinq-surface);\n color: var(--blinq-text);\n box-shadow: 0 16px 36px rgba(15, 23, 42, 0.06);\n }\n\n .blinq-card-header {\n display: flex;\n flex-direction: column;\n gap: 7px;\n padding: 16px 16px 0;\n }\n\n .blinq-card-title {\n font-size: 15px;\n font-weight: 700;\n color: var(--blinq-text);\n }\n\n .blinq-card-description {\n font-size: 13px;\n line-height: 1.5;\n color: var(--blinq-text-muted);\n }\n\n .blinq-card-content {\n padding: 0 16px 16px;\n }\n\n .blinq-action-card {\n align-self: stretch;\n gap: 0;\n }\n\n .blinq-plan-card {\n border-color: var(--blinq-border-strong);\n }\n\n .blinq-plan-step {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 0;\n border-top: 1px solid rgba(17, 17, 17, 0.06);\n }\n\n .blinq-plan-step:first-child {\n border-top: 0;\n padding-top: 0;\n }\n\n .blinq-plan-step-index {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 999px;\n background: #111111;\n color: #ffffff;\n font-size: 11px;\n font-weight: 700;\n flex: none;\n }\n\n .blinq-plan-step-copy {\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 3px;\n font-size: 13px;\n color: var(--blinq-text);\n }\n\n .blinq-plan-step-meta {\n font-size: 12px;\n color: var(--blinq-text-muted);\n }\n\n .blinq-plan-step[data-current=\"true\"] .blinq-plan-step-index {\n box-shadow: 0 0 0 4px rgba(17, 17, 17, 0.08);\n }\n\n .blinq-plan-step[data-status=\"completed\"] .blinq-plan-step-index {\n background: #111111;\n }\n\n .blinq-plan-step[data-status=\"failed\"] .blinq-plan-step-index,\n .blinq-plan-step[data-status=\"cancelled\"] .blinq-plan-step-index {\n background: #525252;\n }\n\n .blinq-action-meta-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .blinq-action-details {\n margin-top: 8px;\n }\n\n .blinq-action-details > summary {\n cursor: pointer;\n font-size: 12px;\n font-weight: 600;\n color: #111111;\n list-style: none;\n }\n\n .blinq-action-details > summary::-webkit-details-marker {\n display: none;\n }\n\n .blinq-code {\n margin-top: 10px;\n padding: 10px 12px;\n border-radius: 14px;\n background: var(--blinq-surface-soft);\n border: 1px solid var(--blinq-border);\n font-size: 12px;\n line-height: 1.45;\n white-space: pre-wrap;\n color: var(--blinq-text-soft);\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n }\n\n .blinq-code-compact {\n margin-top: 12px;\n }\n\n .blinq-action-state {\n margin-top: 12px;\n font-size: 12px;\n color: var(--blinq-text-muted);\n }\n\n .blinq-action-state[data-state=\"approved\"] {\n color: #111111;\n }\n\n .blinq-action-state[data-state=\"declined\"] {\n color: var(--blinq-text-muted);\n }\n\n .blinq-actions {\n display: flex;\n gap: 10px;\n margin-top: 14px;\n }\n\n .blinq-actions > * {\n flex: 1;\n }\n\n .blinq-context-grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n }\n\n .blinq-context-card {\n min-height: 150px;\n }\n\n .blinq-context-card-wide {\n grid-column: 1 / -1;\n }\n\n .blinq-context-copy {\n font-size: 13px;\n line-height: 1.5;\n color: var(--blinq-text-soft);\n }\n\n .blinq-empty-card {\n min-height: 180px;\n justify-content: center;\n }\n\n .blinq-badge-pill {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 28px;\n padding: 0 10px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n }\n\n .blinq-badge-pill-default {\n background: rgba(15, 23, 42, 0.05);\n color: var(--blinq-text-soft);\n }\n\n .blinq-badge-pill-outline {\n border: 1px solid var(--blinq-border);\n color: var(--blinq-text-muted);\n background: rgba(255,255,255,0.84);\n }\n\n .blinq-badge-pill-soft {\n background: #f5f5f5;\n color: #111111;\n }\n\n .blinq-badge-pill-accent {\n background: #111111;\n color: #ffffff;\n }\n\n .blinq-composer {\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 0 16px 16px;\n border-top: 1px solid var(--blinq-border);\n background: #ffffff;\n }\n\n .blinq-composer-copy {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .blinq-composer-title {\n font-size: 12px;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--blinq-text-muted);\n }\n\n .blinq-composer-hint {\n font-size: 13px;\n line-height: 1.45;\n color: var(--blinq-text-muted);\n }\n\n .blinq-composer-controls {\n display: flex;\n padding-top: 14px;\n }\n\n .blinq-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n border-radius: 14px;\n border: 1px solid transparent;\n font-size: 14px;\n font-weight: 600;\n transition:\n background 120ms ease,\n border-color 120ms ease,\n color 120ms ease,\n opacity 120ms ease,\n transform 120ms ease;\n cursor: pointer;\n outline: none;\n }\n\n .blinq-button:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n\n .blinq-button:focus-visible,\n .blinq-input:focus-visible,\n .blinq-tab-trigger:focus-visible,\n .blinq-prompt-chip:focus-visible {\n box-shadow: 0 0 0 3px rgba(17, 17, 17, 0.12);\n outline: none;\n }\n\n .blinq-button-default {\n background: #111111;\n color: white;\n box-shadow: 0 12px 24px rgba(17, 17, 17, 0.16);\n }\n\n .blinq-button-default:hover:not(:disabled) {\n filter: brightness(1.04);\n }\n\n .blinq-button-outline {\n border-color: var(--blinq-border-strong);\n background: #ffffff;\n color: var(--blinq-text);\n }\n\n .blinq-button-outline:hover:not(:disabled),\n .blinq-button-ghost:hover:not(:disabled) {\n background: var(--blinq-surface-soft);\n }\n\n .blinq-button-ghost {\n border-color: var(--blinq-border);\n background: rgba(255,255,255,0.76);\n color: var(--blinq-text-soft);\n }\n\n .blinq-button-destructive {\n background: #111111;\n border-color: #111111;\n color: #ffffff;\n }\n\n .blinq-button-md {\n height: 44px;\n padding: 0 16px;\n }\n\n .blinq-button-sm {\n height: 36px;\n padding: 0 12px;\n font-size: 13px;\n }\n\n .blinq-button-icon {\n width: 44px;\n height: 44px;\n padding: 0;\n }\n\n .blinq-button-icon-sm {\n width: 36px;\n height: 36px;\n padding: 0;\n border-radius: 12px;\n }\n\n .blinq-input {\n width: 100%;\n min-width: 0;\n height: 52px;\n border-radius: 18px;\n border: 1px solid var(--blinq-border-strong);\n padding: 0 48px 0 44px;\n background: #ffffff;\n color: var(--blinq-text);\n outline: none;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);\n }\n\n .blinq-input-shell {\n position: relative;\n width: 100%;\n }\n\n .blinq-recording-input {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n min-width: 0;\n height: 52px;\n padding: 0 48px 0 44px;\n border-radius: 18px;\n border: 1px solid var(--blinq-border-strong);\n background: #ffffff;\n color: var(--blinq-text);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);\n }\n\n .blinq-recording-time {\n flex: 0 0 auto;\n min-width: 42px;\n font-size: 12px;\n font-weight: 700;\n letter-spacing: 0.04em;\n color: var(--blinq-text-soft);\n font-variant-numeric: tabular-nums;\n }\n\n .blinq-recording-waveform {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n flex: 1 1 auto;\n min-width: 0;\n height: 24px;\n overflow: hidden;\n }\n\n .blinq-recording-waveform-bar {\n width: 3px;\n min-width: 3px;\n height: 100%;\n border-radius: 999px;\n background: rgba(17, 17, 17, 0.22);\n transform-origin: center bottom;\n transition:\n transform 110ms ease,\n background 110ms ease;\n }\n\n .blinq-input-mic {\n position: absolute;\n left: 8px;\n top: 50%;\n transform: translateY(-50%);\n z-index: 2;\n }\n\n .blinq-input-send {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n z-index: 2;\n width: 36px;\n height: 36px;\n min-width: 36px;\n border-radius: 12px;\n }\n\n .blinq-text-animate {\n display: block;\n }\n\n .blinq-text-animate-blur-in .blinq-text-segment {\n display: inline-block;\n opacity: 0;\n filter: blur(8px);\n animation: blinq-blur-in 420ms cubic-bezier(0.16, 1, 0.3, 1) forwards;\n }\n\n @keyframes blinq-thinking-pulse {\n 0%, 100% {\n opacity: 0.28;\n transform: translateY(0);\n }\n\n 50% {\n opacity: 1;\n transform: translateY(-2px);\n }\n }\n\n @keyframes blinq-agent-spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes blinq-agent-bob {\n 0%, 100% {\n transform: translateY(0);\n }\n\n 50% {\n transform: translateY(-0.8px);\n }\n }\n\n @keyframes blinq-agent-spark {\n 0%, 100% {\n transform: scale(1);\n opacity: 0.72;\n }\n\n 50% {\n transform: scale(1.25);\n opacity: 1;\n }\n }\n\n @keyframes blinq-blur-in {\n 0% {\n opacity: 0;\n filter: blur(8px);\n transform: translateY(4px);\n }\n\n 100% {\n opacity: 1;\n filter: blur(0);\n transform: translateY(0);\n }\n }\n\n .blinq-input::placeholder {\n color: var(--blinq-text-muted);\n }\n\n @media (max-width: 720px) {\n .blinq-shell {\n bottom: 12px;\n left: 12px;\n right: 12px;\n width: auto;\n max-width: none;\n align-items: stretch;\n }\n\n .blinq-shell[data-side=\"left\"],\n .blinq-shell[data-side=\"right\"] {\n left: 12px;\n right: 12px;\n align-items: stretch;\n }\n\n .blinq-panel,\n .blinq-launcher {\n max-width: none;\n width: 100%;\n }\n\n .blinq-workspace {\n grid-template-columns: 1fr;\n }\n\n .blinq-sidebar {\n border-right: none;\n border-bottom: 1px solid var(--blinq-border);\n }\n\n .blinq-sidebar-group {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .blinq-tab-trigger {\n min-width: 116px;\n }\n\n .blinq-context-grid {\n grid-template-columns: 1fr;\n }\n }\n`\n","import {\n type BlinqWidgetInitOptions,\n type BlinqWidgetConfigFile,\n BlinqWidget,\n init,\n initFromConfig,\n} from \"./index\"\nimport { EMBED_WIDGET_STYLES } from \"./embed-styles\"\n\ndeclare global {\n interface Window {\n BlinqWidget?: {\n init: typeof init\n initFromConfig: typeof initFromConfig\n }\n }\n}\n\nconst EMBED_TAG_NAME = \"blinq-widget\"\n\nfunction shadowRootStyles() {\n return EMBED_WIDGET_STYLES\n}\n\nclass BlinqWidgetElement extends HTMLElement {\n private widget: BlinqWidget | null = null\n private widgetPromise: Promise<BlinqWidget> | null = null\n private mountEl: HTMLDivElement | null = null\n\n connectedCallback() {\n if (this.widget || this.widgetPromise) {\n return\n }\n\n const publicToken = this.getAttribute(\"public-token\")?.trim()\n if (!publicToken) {\n console.error(\"Blinq widget: missing required public-token attribute.\")\n return\n }\n\n const root = this.shadowRoot ?? this.attachShadow({ mode: \"open\" })\n root.replaceChildren()\n\n const style = document.createElement(\"style\")\n style.textContent = shadowRootStyles()\n\n const mount = document.createElement(\"div\")\n mount.dataset.blinqMount = \"true\"\n root.append(style, mount)\n this.mountEl = mount\n\n const options: BlinqWidgetInitOptions = {\n publicToken,\n apiBaseUrl: this.getAttribute(\"api-base-url\")?.trim() || undefined,\n mcpEndpoint: this.getAttribute(\"mcp-endpoint\")?.trim() || undefined,\n mount,\n }\n\n this.widgetPromise = init(options)\n .then((widget) => {\n this.widget = widget\n return widget\n })\n .catch((error) => {\n console.error(\"Blinq widget failed to initialize.\", error)\n throw error\n })\n .finally(() => {\n this.widgetPromise = null\n })\n }\n\n disconnectedCallback() {\n this.widget?.destroy()\n void this.widget?.endSession()\n this.widget = null\n this.widgetPromise = null\n this.mountEl = null\n }\n}\n\nfunction defineBlinqWidgetElement() {\n if (typeof window === \"undefined\" || typeof customElements === \"undefined\") {\n return\n }\n\n if (!customElements.get(EMBED_TAG_NAME)) {\n customElements.define(EMBED_TAG_NAME, BlinqWidgetElement)\n }\n}\n\nif (typeof window !== \"undefined\") {\n defineBlinqWidgetElement()\n window.BlinqWidget = {\n init,\n initFromConfig,\n }\n}\n\nexport { init, initFromConfig, BlinqWidgetElement }\nexport type { BlinqWidgetConfigFile, BlinqWidgetInitOptions }\n"],"mappings":";;;;;;AAAO,IAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/browser.ts"],"sourcesContent":["import {\n type BlinqWidgetInitOptions,\n type BlinqWidgetConfigFile,\n BlinqWidget,\n init,\n initFromConfig,\n} from \"./index\"\nimport { EMBED_WIDGET_STYLES } from \"./embed-styles\"\nimport {\n PageToolRegistry,\n collectNormalizedPageContext,\n detectNativeWebMcpSupport,\n} from \"./page-tools\"\n\ndeclare global {\n interface Window {\n BlinqWidget?: {\n init: typeof init\n initFromConfig: typeof initFromConfig\n }\n __blinqTrainerBridgeInstalled?: boolean\n }\n}\n\nconst EMBED_TAG_NAME = \"blinq-widget\"\nconst TRAINER_PARAM = \"blinqTrainer\"\n\nfunction isTrainerMode() {\n if (typeof window === \"undefined\") {\n return false\n }\n return new URLSearchParams(window.location.search).get(TRAINER_PARAM) === \"1\"\n}\n\nfunction trainerParentOrigin() {\n if (typeof window === \"undefined\") {\n return \"*\"\n }\n if (!document.referrer) {\n return window.location.origin\n }\n try {\n return new URL(document.referrer).origin\n } catch {\n return window.location.origin\n }\n}\n\nfunction isLikelyAuthRoute(pathname: string) {\n const normalized = pathname.toLowerCase()\n return (\n normalized.includes(\"/login\") ||\n normalized.includes(\"/signin\") ||\n normalized.includes(\"/sign-in\") ||\n normalized.includes(\"/signup\") ||\n normalized.includes(\"/sign-up\") ||\n normalized.includes(\"/auth\")\n )\n}\n\nfunction postTrainerEvent(eventType: string, payload: Record<string, unknown>) {\n if (typeof window === \"undefined\" || window.parent === window) {\n return\n }\n window.parent.postMessage(\n {\n source: \"blinq-trainer\",\n kind: \"event\",\n event_type: eventType,\n payload,\n },\n trainerParentOrigin()\n )\n}\n\nfunction defineGenericTrainerBridge() {\n if (\n typeof window === \"undefined\" ||\n window.parent === window ||\n !isTrainerMode() ||\n window.__blinqTrainerBridgeInstalled\n ) {\n return\n }\n\n window.__blinqTrainerBridgeInstalled = true\n\n let cancelled = false\n const registry = new PageToolRegistry(async () => false)\n registry.setActionPolicy({\n actions_enabled: true,\n action_mode: \"execute_with_confirmation\",\n pointer_overlay_enabled: true,\n })\n let nativeRegistered = false\n\n const parentOrigin = trainerParentOrigin()\n\n const sendReady = async () => {\n nativeRegistered = await registry.registerNativeTools().catch(() => false)\n postTrainerEvent(\"runner_ready\", {\n url: window.location.href,\n secure_context: window.isSecureContext,\n native_webmcp_supported: detectNativeWebMcpSupport(),\n native_webmcp_registered: nativeRegistered,\n runtime_mode: nativeRegistered ? \"native-webmcp-active\" : \"read-only-fallback\",\n })\n }\n\n const handleCommand = (event: MessageEvent) => {\n if (event.origin !== parentOrigin) {\n return\n }\n const data = event.data as {\n source?: string\n type?: string\n name?: string\n payload?: Record<string, unknown>\n }\n if (data?.source !== \"blinq-suggestions\" || data?.type !== \"command\" || !data.name) {\n return\n }\n\n if (data.name === \"collect_context\") {\n postTrainerEvent(\"page_context\", {\n url: window.location.href,\n authenticated: !isLikelyAuthRoute(window.location.pathname),\n secure_context: window.isSecureContext,\n native_webmcp_supported: detectNativeWebMcpSupport(),\n native_webmcp_registered: nativeRegistered,\n page_context: collectNormalizedPageContext(),\n })\n return\n }\n\n if (data.name === \"execute_tool\") {\n const toolName = typeof data.payload?.tool_name === \"string\" ? data.payload.tool_name : \"\"\n const displayName =\n typeof data.payload?.display_name === \"string\" ? data.payload.display_name : undefined\n const targetSummary =\n typeof data.payload?.target_summary === \"string\" ? data.payload.target_summary : undefined\n const requiresConfirmation = Boolean(data.payload?.requires_confirmation)\n const argumentsPayload =\n data.payload?.arguments && typeof data.payload.arguments === \"object\" && !Array.isArray(data.payload.arguments)\n ? (data.payload.arguments as Record<string, unknown>)\n : {}\n if (!toolName) {\n postTrainerEvent(\"tool_result\", {\n status: \"error\",\n error: \"Не передан tool_name для тренировки.\",\n current_url: window.location.href,\n })\n return\n }\n\n void (async () => {\n const outcome = await registry.executeTool({\n tool_name: toolName,\n display_name: displayName,\n target_summary: targetSummary,\n requires_confirmation: requiresConfirmation,\n arguments: argumentsPayload,\n })\n const result =\n outcome.status === \"success\" && outcome.result && typeof outcome.result === \"object\"\n ? outcome.result\n : null\n postTrainerEvent(\"tool_result\", {\n status: outcome.status,\n result,\n error: outcome.error,\n current_url: window.location.href,\n page_context:\n result && typeof result === \"object\" && result.deferred_navigation\n ? null\n : collectNormalizedPageContext(),\n })\n\n if (\n outcome.status === \"success\" &&\n result &&\n typeof result === \"object\" &&\n result.deferred_navigation &&\n typeof result.href === \"string\" &&\n result.href.trim()\n ) {\n window.setTimeout(() => {\n window.location.href = result.href as string\n }, 40)\n }\n })()\n return\n }\n\n if (data.name !== \"preview_targets\") {\n return\n }\n\n const rawTargets = Array.isArray(data.payload?.targets) ? data.payload.targets : []\n const targets: Array<{ selector: string; label?: string }> = []\n for (const target of rawTargets) {\n if (!target || typeof target !== \"object\") {\n continue\n }\n const selector = typeof target.selector === \"string\" ? target.selector.trim() : \"\"\n const label = typeof target.label === \"string\" ? target.label.trim() : undefined\n if (!selector) {\n continue\n }\n targets.push({ selector, label: label || undefined })\n }\n\n void (async () => {\n for (const target of targets) {\n if (cancelled) {\n return\n }\n registry.highlightTargets([target], {\n interaction: \"explain\",\n durationMs: 1500,\n })\n await new Promise((resolve) => window.setTimeout(resolve, 1120))\n }\n if (cancelled) {\n return\n }\n postTrainerEvent(\"preview_complete\", {\n url: window.location.href,\n })\n })()\n }\n\n sendReady()\n window.setTimeout(() => void sendReady(), 180)\n window.setTimeout(() => void sendReady(), 560)\n window.addEventListener(\"message\", handleCommand)\n window.addEventListener(\n \"beforeunload\",\n () => {\n cancelled = true\n registry.destroy()\n },\n { once: true }\n )\n}\n\nfunction shadowRootStyles() {\n return EMBED_WIDGET_STYLES\n}\n\nclass BlinqWidgetElement extends HTMLElement {\n private widget: BlinqWidget | null = null\n private widgetPromise: Promise<BlinqWidget> | null = null\n private mountEl: HTMLDivElement | null = null\n\n connectedCallback() {\n if (this.widget || this.widgetPromise) {\n return\n }\n\n if (isTrainerMode()) {\n this.style.display = \"none\"\n return\n }\n\n const publicToken = this.getAttribute(\"public-token\")?.trim()\n if (!publicToken) {\n console.error(\"Blinq widget: missing required public-token attribute.\")\n return\n }\n\n const root = this.shadowRoot ?? this.attachShadow({ mode: \"open\" })\n root.replaceChildren()\n\n const style = document.createElement(\"style\")\n style.textContent = shadowRootStyles()\n\n const mount = document.createElement(\"div\")\n mount.dataset.blinqMount = \"true\"\n root.append(style, mount)\n this.mountEl = mount\n\n const options: BlinqWidgetInitOptions = {\n publicToken,\n apiBaseUrl: this.getAttribute(\"api-base-url\")?.trim() || undefined,\n mcpEndpoint: this.getAttribute(\"mcp-endpoint\")?.trim() || undefined,\n mount,\n }\n\n this.widgetPromise = init(options)\n .then((widget) => {\n this.widget = widget\n return widget\n })\n .catch((error) => {\n console.error(\"Blinq widget failed to initialize.\", error)\n throw error\n })\n .finally(() => {\n this.widgetPromise = null\n })\n }\n\n disconnectedCallback() {\n this.widget?.destroy()\n void this.widget?.endSession()\n this.widget = null\n this.widgetPromise = null\n this.mountEl = null\n }\n}\n\nfunction defineBlinqWidgetElement() {\n if (typeof window === \"undefined\" || typeof customElements === \"undefined\") {\n return\n }\n\n if (!customElements.get(EMBED_TAG_NAME)) {\n customElements.define(EMBED_TAG_NAME, BlinqWidgetElement)\n }\n}\n\nif (typeof window !== \"undefined\") {\n defineBlinqWidgetElement()\n defineGenericTrainerBridge()\n window.BlinqWidget = {\n init,\n initFromConfig,\n }\n}\n\nexport { init, initFromConfig, BlinqWidgetElement }\nexport type { BlinqWidgetConfigFile, BlinqWidgetInitOptions }\n"],"mappings":"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","names":[]}
|