@syntrologie/adapt-nav 2.36.0 → 2.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ContactCardLit.d.ts +53 -0
- package/dist/ContactCardLit.d.ts.map +1 -0
- package/dist/ContactCardLit.test.d.ts +2 -0
- package/dist/ContactCardLit.test.d.ts.map +1 -0
- package/dist/cdn.d.ts +12 -2
- package/dist/cdn.d.ts.map +1 -1
- package/dist/cdn.js +1 -1
- package/dist/{chunk-VG3E3ALH.js → chunk-7EYZLIUR.js} +24 -1
- package/dist/{chunk-VG3E3ALH.js.map → chunk-7EYZLIUR.js.map} +2 -2
- package/dist/runtime.d.ts +20 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +3 -1
- package/dist/schema.d.ts +80 -80
- package/package.json +1 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptive Nav — ContactCardLit (`<syntro-contact-card>`)
|
|
3
|
+
*
|
|
4
|
+
* The human-handoff tile (iGlow, 2026-08-13): when a site's own chat widget
|
|
5
|
+
* is suppressed for the concierge audience, this card replaces its FUNCTION —
|
|
6
|
+
* an always-reachable escape hatch to a real person. One deck card: heading,
|
|
7
|
+
* model-authorable framing line, and a grid of one-tap channel pills.
|
|
8
|
+
*
|
|
9
|
+
* Trust contract: `channels` are ADMIN-PINNED config facts (real phone /
|
|
10
|
+
* booking page from the customer's own site). The model may author only
|
|
11
|
+
* `heading`/`framing` — never a destination. Device-action values (tel:,
|
|
12
|
+
* sms:, mailto:) fire a real anchor click so the OS dialer/composer opens
|
|
13
|
+
* with the destination VISIBLE; `book`/path values navigate same-origin via
|
|
14
|
+
* pushState like every nav link. Anything else is dropped at render.
|
|
15
|
+
*
|
|
16
|
+
* Light DOM (like NavWidgetLit) so --sc-* theme tokens flow in without a
|
|
17
|
+
* shadow boundary; styling via styleMap objects resolving from tokens with
|
|
18
|
+
* px fallbacks only (host rem-base immunity, 2026-08-12). The canvas owns
|
|
19
|
+
* the design vocabulary — every visual value here rides a --sc-* var.
|
|
20
|
+
*/
|
|
21
|
+
import { LitElement, nothing } from 'lit';
|
|
22
|
+
export interface ContactChannel {
|
|
23
|
+
kind: string;
|
|
24
|
+
label: string;
|
|
25
|
+
value: string;
|
|
26
|
+
}
|
|
27
|
+
export declare class ContactCardLit extends LitElement {
|
|
28
|
+
static properties: {
|
|
29
|
+
heading: {
|
|
30
|
+
type: StringConstructor;
|
|
31
|
+
};
|
|
32
|
+
framing: {
|
|
33
|
+
type: StringConstructor;
|
|
34
|
+
};
|
|
35
|
+
channels: {
|
|
36
|
+
type: ArrayConstructor;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
heading: string;
|
|
40
|
+
framing: string;
|
|
41
|
+
channels: ContactChannel[];
|
|
42
|
+
/**
|
|
43
|
+
* Same-origin navigation seam. Framework-aware (Next/Nuxt/Angular routers)
|
|
44
|
+
* with a FULL location.assign fallback — never bare pushState: on a
|
|
45
|
+
* non-SPA host (WordPress — iglow) pushState changes the URL bar and loads
|
|
46
|
+
* nothing. Injectable for tests.
|
|
47
|
+
*/
|
|
48
|
+
navigate: (url: string) => void;
|
|
49
|
+
createRenderRoot(): HTMLElement;
|
|
50
|
+
private _activate;
|
|
51
|
+
render(): import("lit-html").TemplateResult<1> | typeof nothing;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=ContactCardLit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactCardLit.d.ts","sourceRoot":"","sources":["../src/ContactCardLit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAQ,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAOhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAuED,qBAAa,cAAe,SAAQ,UAAU;IAC5C,OAAgB,UAAU;;;;;;;;;;MAIxB;IAEF,OAAO,SAAsB;IAC7B,OAAO,SAAM;IACb,QAAQ,EAAE,cAAc,EAAE,CAAM;IAEhC;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAI7B;IAGO,gBAAgB,IAAI,WAAW;IAIxC,OAAO,CAAC,SAAS,CAYf;IAEO,MAAM;CAoChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactCardLit.test.d.ts","sourceRoot":"","sources":["../src/ContactCardLit.test.ts"],"names":[],"mappings":"AAYA,OAAO,kBAAkB,CAAC"}
|
package/dist/cdn.d.ts
CHANGED
|
@@ -22,7 +22,17 @@ export declare const manifest: {
|
|
|
22
22
|
kind: "navigation:scrollTo" | "navigation:navigate";
|
|
23
23
|
executor: import("packages/sdk-contracts/dist").ActionExecutor<import("./types").ScrollToAction> | import("packages/sdk-contracts/dist").ActionExecutor<import("./types").NavigateAction>;
|
|
24
24
|
}[];
|
|
25
|
-
widgets: {
|
|
25
|
+
widgets: ({
|
|
26
|
+
id: string;
|
|
27
|
+
component: {
|
|
28
|
+
mount(container: HTMLElement, config?: (Record<string, unknown> & import("packages/sdk-contracts/dist").MountPlumbing) | null): () => void;
|
|
29
|
+
};
|
|
30
|
+
metadata: {
|
|
31
|
+
name: string;
|
|
32
|
+
description: string;
|
|
33
|
+
icon: string;
|
|
34
|
+
};
|
|
35
|
+
} | {
|
|
26
36
|
id: string;
|
|
27
37
|
component: {
|
|
28
38
|
mount(container: HTMLElement, config?: (import("./types").NavConfig & import("packages/sdk-contracts/dist").MountPlumbing & {
|
|
@@ -34,7 +44,7 @@ export declare const manifest: {
|
|
|
34
44
|
description: string;
|
|
35
45
|
icon: string;
|
|
36
46
|
};
|
|
37
|
-
}[];
|
|
47
|
+
})[];
|
|
38
48
|
notifyWatchers: unknown;
|
|
39
49
|
events: unknown;
|
|
40
50
|
};
|
package/dist/cdn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdn.d.ts","sourceRoot":"","sources":["../src/cdn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"cdn.d.ts","sourceRoot":"","sources":["../src/cdn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;2BAkCwsL,CAAC;;;;;;;;;;;;;;;CApB7tL,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,KAAK,CAAC,EAAE;YACN,WAAW,CAAC,EAAE;gBACZ,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;aACjC,CAAC;SACH,CAAC;KACH;CACF;AASD,eAAe,QAAQ,CAAC"}
|
package/dist/cdn.js
CHANGED
|
@@ -589,6 +589,19 @@ var DEFAULT_NAV_CONFIG = {
|
|
|
589
589
|
theme: "auto",
|
|
590
590
|
actions: []
|
|
591
591
|
};
|
|
592
|
+
var ContactCardMountable = {
|
|
593
|
+
mount(container, config) {
|
|
594
|
+
const el = document.createElement("syntro-contact-card");
|
|
595
|
+
const stripped = stripMountPlumbing(config ?? null) ?? {};
|
|
596
|
+
Object.assign(el, {
|
|
597
|
+
heading: stripped.heading ?? "Talk to a person",
|
|
598
|
+
framing: stripped.framing ?? "",
|
|
599
|
+
channels: stripped.channels ?? []
|
|
600
|
+
});
|
|
601
|
+
container.appendChild(el);
|
|
602
|
+
return () => el.remove();
|
|
603
|
+
}
|
|
604
|
+
};
|
|
592
605
|
var NavWidgetLitMountable = {
|
|
593
606
|
mount(container, config) {
|
|
594
607
|
registerNavWidgetLit();
|
|
@@ -624,6 +637,15 @@ var runtime = {
|
|
|
624
637
|
* Widget definitions for the runtime's WidgetRegistry.
|
|
625
638
|
*/
|
|
626
639
|
widgets: [
|
|
640
|
+
{
|
|
641
|
+
id: "adaptive-nav:contact-card",
|
|
642
|
+
component: ContactCardMountable,
|
|
643
|
+
metadata: {
|
|
644
|
+
name: "Contact Card",
|
|
645
|
+
description: "Human-handoff card: admin-pinned contact channels (text/call/email/book) as one-tap pills, with a model-authorable framing line",
|
|
646
|
+
icon: "\u{1F4DE}"
|
|
647
|
+
}
|
|
648
|
+
},
|
|
627
649
|
{
|
|
628
650
|
id: "adaptive-nav:tips",
|
|
629
651
|
component: NavWidgetLitMountable,
|
|
@@ -660,9 +682,10 @@ export {
|
|
|
660
682
|
executeScrollTo,
|
|
661
683
|
navigateWithFrameworkRouter,
|
|
662
684
|
executeNavigate,
|
|
685
|
+
ContactCardMountable,
|
|
663
686
|
NavWidgetLitMountable,
|
|
664
687
|
executors,
|
|
665
688
|
runtime,
|
|
666
689
|
runtime_default
|
|
667
690
|
};
|
|
668
|
-
//# sourceMappingURL=chunk-
|
|
691
|
+
//# sourceMappingURL=chunk-7EYZLIUR.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/NavWidgetLit.ts", "../src/resolveNavTarget.ts", "../src/runtime.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Adaptive Nav - NavWidgetLit Web Component\n *\n * Lit web component equivalent of NavWidget.tsx. Renders a collapsible\n * navigation tips accordion with per-item conditional visibility, framework-aware\n * navigation, and CSS variable theming.\n *\n * Decorator-free: uses `static override properties` (tsconfig has no\n * experimentalDecorators).\n *\n * Uses light DOM (createRenderRoot returns this) so host-page CSS variables\n * (--sc-*) are inherited without crossing a shadow boundary.\n */\n\nimport {\n normalizeRoute,\n renderIcon as renderEmojiIcon,\n routesMatch,\n} from '@syntrologie/sdk-contracts';\nimport { html, LitElement, nothing } from 'lit';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\n\nimport { detectIsIframe, resolveNavTarget } from './resolveNavTarget';\nimport { navigateWithFrameworkRouter } from './runtime';\nimport type { NavConfig, NavTipAction, NavWidgetRuntime } from './types';\n\n// ============================================================================\n// Design system token fallbacks (inlined to avoid bundling @syntro/design-system\n// as a hard dep for this file; values match packages/design-system/src/tokens/colors.ts)\n// ============================================================================\n\nconst TOKEN_PURPLE_4 = '#6a59ce';\nconst TOKEN_SLATE_GREY_7 = '#677384';\nconst TOKEN_SLATE_GREY_8 = '#87919f';\n\n// ============================================================================\n// Emoji \u2192 Lucide SVG mapping is centralized in @syntrologie/sdk-contracts.\n// To add a new emoji, edit that package's icons.ts \u2014 every adaptive picks it\n// up automatically.\n// ============================================================================\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction renderIcon(emoji: string): string {\n return renderEmojiIcon(emoji) || escapeHtml(emoji);\n}\n\n// (resolveNavTarget extracted to ./resolveNavTarget \u2014 also consumed by\n// NavWidget.tsx so both Lit and React variants share the routing decision)\n\n// ============================================================================\n// Route matching helper\n// ============================================================================\n\nfunction routeMatchesCurrent(routes: string[]): boolean {\n if (typeof window === 'undefined') return false;\n let canonicalCurrent: string;\n try {\n canonicalCurrent = normalizeRoute(window.location.pathname);\n } catch {\n return false;\n }\n return routes.some((route) => {\n // Preserve the existing `/**` prefix-match semantics. The literal\n // prefix portion goes through normalizeRoute so trailing slash,\n // query, hash, and case are handled the same as the current URL.\n if (route.endsWith('/**')) {\n const prefix = route.slice(0, -3);\n try {\n const canonicalPrefix = prefix ? normalizeRoute(prefix) : '';\n return canonicalCurrent.toLowerCase().startsWith(canonicalPrefix.toLowerCase());\n } catch {\n return false;\n }\n }\n try {\n return routesMatch(normalizeRoute(route), canonicalCurrent);\n } catch {\n return false;\n }\n });\n}\n\n// ============================================================================\n// Pulse animation helper\n// ============================================================================\n\nfunction pulseElement(el: HTMLElement): void {\n const keyframes: Keyframe[] = [\n { boxShadow: '0 0 0 0 rgba(13, 148, 136, 0.5)' },\n { boxShadow: '0 0 0 8px rgba(13, 148, 136, 0)' },\n ];\n el.animate(keyframes, { duration: 600, iterations: 3, easing: 'ease-out' });\n}\n\n// ============================================================================\n// Theme helpers\n// ============================================================================\n\ntype ResolvedTheme = 'light' | 'dark';\n\nfunction resolveTheme(theme: string | undefined): ResolvedTheme {\n if (theme === 'dark') return 'dark';\n if (theme === 'light') return 'light';\n // auto or undefined: detect system preference\n if (typeof window !== 'undefined') {\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n}\n\n// ============================================================================\n// AnchorId type (matches sdk-contracts shape used in NavWidget.tsx)\n// ============================================================================\n\ninterface AnchorId {\n route: string | string[];\n selector: string;\n}\n\n/** Browser side effects used by navigation clicks. Injectable for host adapters and tests. */\nexport interface NavNavigationPort {\n open(url: string): void;\n fullNavigate(url: string): void;\n pushState(url: string): void;\n}\n\nconst browserNavigationPort: NavNavigationPort = {\n open(url) {\n window.open(url, '_blank', 'noopener,noreferrer');\n },\n fullNavigate(url) {\n window.location.href = url;\n },\n pushState(url) {\n window.history.pushState(null, '', url);\n window.dispatchEvent(new PopStateEvent('popstate'));\n },\n};\n\n// ============================================================================\n// NavWidgetLit \u2014 LitElement\n// ============================================================================\n\nexport class NavWidgetLit extends LitElement {\n // ---------- No shadow DOM \u2014 inherit host CSS variables --------------------\n\n override createRenderRoot() {\n return this;\n }\n\n // ---------- Reactive properties (no decorators) --------------------------\n\n static override properties = {\n // Public inputs\n config: { attribute: false },\n runtime: { attribute: false },\n instanceId: { type: String },\n\n // Internal reactive state\n _expandedIds: { state: true },\n _renderTick: { state: true },\n _hoveredId: { state: true },\n };\n\n // ---------- Public properties --------------------------------------------\n\n config: NavConfig = { expandBehavior: 'single', theme: 'auto', actions: [] };\n runtime: NavWidgetRuntime | undefined = undefined;\n instanceId: string = 'nav-widget';\n navigationPort: NavNavigationPort = browserNavigationPort;\n\n // ---------- Internal state -----------------------------------------------\n\n /** @internal */ _expandedIds: Set<string> = new Set();\n /** @internal */ _renderTick = 0;\n /** @internal */ _hoveredId: string | null = null;\n\n // ---------- Private subscriptions ----------------------------------------\n\n #contextUnsub: (() => void) | null = null;\n #accumulatorUnsub: (() => void) | null = null;\n\n // ---------- Lifecycle: connectedCallback ---------------------------------\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#subscribeRuntime();\n }\n\n // ---------- Lifecycle: disconnectedCallback ------------------------------\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unsubscribeRuntime();\n }\n\n // ---------- Lifecycle: updated -------------------------------------------\n\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('runtime')) {\n this.#unsubscribeRuntime();\n this.#subscribeRuntime();\n }\n }\n\n // ---------- Runtime subscriptions ----------------------------------------\n\n #subscribeRuntime(): void {\n if (!this.runtime) return;\n\n this.#contextUnsub = this.runtime.context.subscribe(() => {\n this._renderTick += 1;\n });\n\n if (this.runtime.accumulator?.subscribe) {\n this.#accumulatorUnsub = this.runtime.accumulator.subscribe(() => {\n this._renderTick += 1;\n });\n }\n }\n\n #unsubscribeRuntime(): void {\n this.#contextUnsub?.();\n this.#contextUnsub = null;\n this.#accumulatorUnsub?.();\n this.#accumulatorUnsub = null;\n }\n\n // ---------- Computed helpers (called on each render) ---------------------\n\n #getVisibleTips(): NavTipAction[] {\n // _renderTick is read here to ensure this re-runs when context/accumulator\n // notify (same pattern as useMemo with renderTick dep in React version).\n void this._renderTick;\n\n if (!this.runtime) return this.config.actions;\n\n return this.config.actions.filter((tip) => {\n if (!tip.triggerWhen) return true;\n try {\n const result = this.runtime!.evaluateSync<boolean>(tip.triggerWhen);\n return result.value;\n } catch {\n // Fail-closed: hide tip when strategy evaluation throws\n return false;\n }\n });\n }\n\n #getResolvedTheme(): ResolvedTheme {\n return resolveTheme(this.config.theme);\n }\n\n // ---------- Event handlers -----------------------------------------------\n\n #handleToggle(id: string): void {\n const wasExpanded = this._expandedIds.has(id);\n\n let next: Set<string>;\n if (this.config.expandBehavior === 'single') {\n // Emit collapse events for previously-expanded tips (single mode)\n for (const prevId of this._expandedIds) {\n if (prevId !== id) {\n this.#publishEvent('nav:toggled', {\n tipId: prevId,\n expanded: false,\n });\n }\n }\n next = wasExpanded ? new Set() : new Set([id]);\n } else {\n next = new Set(this._expandedIds);\n if (wasExpanded) {\n next.delete(id);\n } else {\n next.add(id);\n }\n }\n\n this.#publishEvent('nav:toggled', {\n tipId: id,\n expanded: !wasExpanded,\n });\n\n this._expandedIds = next;\n }\n\n #handleNavigate(href: string, external: boolean): void {\n // Reject dangerous URIs\n const normalized = href.trim().toLowerCase();\n if (normalized.startsWith('javascript:') || normalized.startsWith('data:')) return;\n\n this.#publishEvent('nav:tip_clicked', { href, external });\n\n // Also fire a standard custom event for host-page listeners\n this.dispatchEvent(\n new CustomEvent('nav-tip-clicked', {\n bubbles: true,\n detail: { href, external, instanceId: this.instanceId },\n })\n );\n\n // Routing decision is in resolveNavTarget (a pure helper). When mounted\n // in an iframe (canvas surface, partner embed, etc.), every nav escapes\n // via window.open \u2014 sandbox `allow-popups` lets it pop out to the user's\n // main browser. On the customer site (top-level window), normal cross-/\n // same-origin handling applies.\n const target = resolveNavTarget({\n href,\n external,\n windowOrigin: typeof window !== 'undefined' ? window.location.origin : '',\n isIframe: detectIsIframe(),\n });\n\n if (target.kind === 'open') {\n this.navigationPort.open(target.url);\n return;\n }\n if (target.kind === 'fullnav') {\n this.navigationPort.fullNavigate(target.url);\n return;\n }\n // kind === 'spa'\n target.url.search = window.location.search;\n if (!navigateWithFrameworkRouter(target.url.toString())) {\n this.navigationPort.pushState(target.url.toString());\n }\n }\n\n #handleFocusAnchor(anchor: AnchorId): void {\n const el = document.querySelector(anchor.selector);\n if (!(el instanceof HTMLElement)) return;\n\n this.#publishEvent('nav:tip_focused', {\n selector: anchor.selector,\n route: anchor.route,\n });\n\n this.dispatchEvent(\n new CustomEvent('nav-tip-focused', {\n bubbles: true,\n detail: { selector: anchor.selector, instanceId: this.instanceId },\n })\n );\n\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n pulseElement(el);\n setTimeout(() => el.focus(), 400);\n }\n\n #publishEvent(name: string, props: Record<string, unknown>): void {\n this.runtime?.events.publish(name, {\n instanceId: this.instanceId,\n timestamp: Date.now(),\n ...props,\n });\n }\n\n // ---------- Tip item rendering -------------------------------------------\n\n #renderTipItem(tip: NavTipAction, index: number, total: number) {\n const { id, title, description, href, icon, external, anchor, category: _cat } = tip.config;\n const isExpanded = this._expandedIds.has(id);\n const isLast = index === total - 1;\n const isHovered = this._hoveredId === id;\n const theme = this.#getResolvedTheme();\n\n // Determine the effective href from anchor or legacy href\n const effectiveHref = anchor\n ? Array.isArray(anchor.route)\n ? anchor.route[0]\n : anchor.route\n : href;\n\n // Same-page check\n const isSamePage = anchor\n ? routeMatchesCurrent(Array.isArray(anchor.route) ? anchor.route : [anchor.route])\n : effectiveHref\n ? routeMatchesCurrent([effectiveHref])\n : false;\n const hasSelector = anchor?.selector && anchor.selector !== '*';\n const isFocusAction = isSamePage && hasSelector;\n const hasAction = !!effectiveHref || isFocusAction;\n\n const ctaLabel = isFocusAction ? 'Focus \\u2192' : external ? 'Go \\u2197' : 'Go \\u2192';\n\n // Item container styles\n const itemStyle = styleMap({\n borderRadius: 'var(--sc-content-border-radius, 8px)',\n overflow: 'hidden',\n transition: 'box-shadow 0.2s ease',\n backgroundColor: 'var(--sc-content-background)',\n border: 'var(--sc-content-border)',\n ...(isExpanded\n ? {\n boxShadow:\n theme === 'dark'\n ? '0 4px 12px rgba(0, 0, 0, 0.15)'\n : '0 4px 12px rgba(0, 0, 0, 0.08)',\n }\n : {}),\n ...(!isLast ? { borderBottom: 'var(--sc-content-item-divider, none)' } : {}),\n });\n\n // Header styles\n const headerStyle = styleMap({\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: 'var(--sc-content-item-padding, 12px 16px)',\n border: 'none',\n cursor: 'pointer',\n fontSize: 'var(--sc-content-item-font-size, 15px)',\n fontWeight: '500',\n fontFamily: 'inherit',\n textAlign: 'left',\n transition: 'background-color 0.15s ease',\n backgroundColor: isHovered ? 'var(--sc-content-background-hover)' : 'transparent',\n color: 'var(--sc-content-text-color)',\n });\n\n // Chevron styles\n const chevronStyle = styleMap({\n fontSize: '20px',\n transition: 'transform 0.2s ease',\n marginLeft: 'auto',\n flexShrink: '0',\n color: 'var(--sc-content-chevron-color, currentColor)',\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n });\n\n // Body styles\n const bodyStyle = styleMap({\n overflow: 'hidden',\n transition: 'max-height 0.25s ease, padding-bottom 0.25s ease',\n padding: 'var(--sc-content-body-padding, 0 16px 12px 16px)',\n color: 'var(--sc-content-text-secondary-color)',\n maxHeight: isExpanded ? '500px' : '0',\n paddingBottom: isExpanded ? '16px' : '0',\n });\n\n // Description styles\n const descriptionStyle = styleMap({\n fontSize: 'var(--sc-content-body-font-size, 14px)',\n lineHeight: '1.5',\n margin: '0',\n });\n\n // CTA / link button styles\n const linkButtonStyle = styleMap({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n marginTop: '10px',\n padding: '6px 12px',\n borderRadius: '6px',\n textDecoration: 'none',\n fontSize: '13px',\n fontWeight: '500',\n cursor: 'pointer',\n border: 'none',\n transition: 'background-color 0.15s ease',\n backgroundColor: `var(--sc-color-primary, ${TOKEN_PURPLE_4})`,\n color: '#ffffff',\n });\n\n // Icon styles\n const iconStyle = styleMap({\n fontSize: '16px',\n flexShrink: '0',\n });\n\n // Anchor click handler\n const onLinkClick = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n if (isFocusAction && anchor) {\n this.#handleFocusAnchor(anchor);\n } else if (effectiveHref) {\n this.#handleNavigate(effectiveHref, external ?? false);\n }\n };\n\n return html`\n <div\n style=${itemStyle}\n data-nav-tip-id=${id}\n >\n <button\n type=\"button\"\n style=${headerStyle}\n aria-expanded=${isExpanded}\n @click=${() => this.#handleToggle(id)}\n @mouseenter=${() => {\n this._hoveredId = id;\n }}\n @mouseleave=${() => {\n this._hoveredId = null;\n }}\n >\n ${icon ? html`<span style=${iconStyle}>${unsafeHTML(renderIcon(icon))}</span>` : nothing}\n <span>${title}</span>\n <span style=${chevronStyle}>${'\\u203A'}</span>\n </button>\n <div style=${bodyStyle} aria-hidden=${!isExpanded}>\n <p style=${descriptionStyle}>${description}</p>\n ${\n hasAction\n ? html`\n <a\n href=${effectiveHref || '#'}\n style=${linkButtonStyle}\n target=${external ? '_blank' : nothing}\n rel=${external ? 'noopener noreferrer' : nothing}\n @click=${onLinkClick}\n >${ctaLabel}</a>\n `\n : nothing\n }\n </div>\n </div>\n `;\n }\n\n // ---------- Render --------------------------------------------------------\n\n override render() {\n const visibleTips = this.#getVisibleTips();\n const theme = this.#getResolvedTheme();\n\n const containerStyle = styleMap({\n fontFamily: 'var(--sc-font-family, system-ui, -apple-system, sans-serif)',\n maxWidth: '100%',\n overflow: 'hidden',\n backgroundColor: 'transparent',\n color: 'inherit',\n });\n\n const accordionStyle = styleMap({\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--sc-content-item-gap, 6px)',\n });\n\n const categoryHeaderStyle = styleMap({\n fontSize: 'var(--sc-content-category-font-size, 12px)',\n fontWeight: '600',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n padding: 'var(--sc-content-category-padding, 8px 4px 4px 4px)',\n color: theme === 'dark' ? TOKEN_SLATE_GREY_8 : TOKEN_SLATE_GREY_7,\n });\n\n const emptyStateStyle = styleMap({\n fontSize: '13px',\n padding: '16px',\n textAlign: 'center',\n color: theme === 'dark' ? TOKEN_SLATE_GREY_7 : TOKEN_SLATE_GREY_8,\n });\n\n // Empty state\n if (visibleTips.length === 0) {\n return html`\n <div\n style=${containerStyle}\n data-adaptive-id=${this.instanceId}\n data-adaptive-type=\"adaptive-nav\"\n >\n <div style=${emptyStateStyle}>\n You're all set for now! We'll share helpful tips here when they're relevant to what\n you're doing.\n </div>\n </div>\n `;\n }\n\n // Group by category\n const categoryGroups = new Map<string | undefined, NavTipAction[]>();\n for (const tip of visibleTips) {\n const cat = tip.config.category;\n if (!categoryGroups.has(cat)) {\n categoryGroups.set(cat, []);\n }\n categoryGroups.get(cat)!.push(tip);\n }\n\n const hasCategories = visibleTips.some((t) => t.config.category);\n\n return html`\n <div\n style=${containerStyle}\n data-adaptive-id=${this.instanceId}\n data-adaptive-type=\"adaptive-nav\"\n >\n <div style=${accordionStyle}>\n ${\n hasCategories\n ? Array.from(categoryGroups.entries()).map(\n ([category, items]) => html`\n ${\n category\n ? html`<div style=${categoryHeaderStyle} data-category-header=${category}>${category}</div>`\n : nothing\n }\n ${items.map((tip, idx) => this.#renderTipItem(tip, idx, items.length))}\n `\n )\n : visibleTips.map((tip, idx) => this.#renderTipItem(tip, idx, visibleTips.length))\n }\n </div>\n </div>\n `;\n }\n}\n\n// ============================================================================\n// Custom element registration\n// ============================================================================\n\nconst TAG_NAME = 'syntro-nav-tips';\n\nexport function registerNavWidgetLit(): void {\n if (typeof window === 'undefined') return;\n if (!customElements.get(TAG_NAME)) {\n customElements.define(TAG_NAME, NavWidgetLit);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'syntro-nav-tips': NavWidgetLit;\n }\n}\n", "/**\n * Pure decision function for nav-tip click routing.\n *\n * Given an href, an `external` flag, the current window's origin, and whether\n * the SDK is mounted inside an iframe, returns the navigation action to take.\n *\n * Extracted from NavWidgetLit so both the Lit and React widget variants\n * share one decision matrix and so the routing logic can be unit-tested\n * without mutating window.location (jsdom doesn't allow redefining\n * origin/href).\n */\n\nexport type NavTarget =\n | { kind: 'open'; url: string }\n | { kind: 'fullnav'; url: string }\n | { kind: 'spa'; url: URL };\n\nexport interface ResolveNavTargetArgs {\n href: string;\n external: boolean;\n windowOrigin: string;\n /**\n * True when the SDK is mounted inside an iframe (window !== window.top, or\n * window.top access threw cross-origin). When true, every nav escapes via\n * window.open \u2014 the parent page's sandbox `allow-popups` lets the new\n * window pop out to the user's main browser.\n */\n isIframe: boolean;\n}\n\n/**\n * Decide what to do with a nav-tip click.\n *\n * Routing branches (in order):\n *\n * 1. **Iframe context** (`isIframe=true` OR opaque origin \"null\"):\n * always `window.open` the href as-is. Action-plan authors who want\n * cross-iframe nav must use absolute URLs (any host \u2014 customer's,\n * partner's, doesn't matter). The sandbox's `allow-popups` lets the\n * open() call escape to the user's main browser.\n *\n * 2. **Explicit external** (`external=true`): always opens in `_blank`.\n *\n * 3. **Cross-origin absolute href** (no iframe; URL parses to a different\n * origin): full `window.location.href` navigation.\n *\n * 4. **Same-origin** (most common \u2014 SDK on customer site, internal route):\n * SPA-style `pushState` (caller falls back to framework router).\n *\n * 5. **Parse failure**: full-nav fallback; browser does its best.\n */\nexport function resolveNavTarget(args: ResolveNavTargetArgs): NavTarget {\n const { href, external, windowOrigin, isIframe } = args;\n\n const isOpaqueOrigin = windowOrigin === 'null';\n if (isIframe || isOpaqueOrigin) {\n return { kind: 'open', url: href };\n }\n\n if (external) {\n return { kind: 'open', url: href };\n }\n\n let url: URL;\n try {\n url = new URL(href, windowOrigin);\n } catch {\n return { kind: 'fullnav', url: href };\n }\n\n if (url.origin !== windowOrigin) {\n return { kind: 'fullnav', url: url.toString() };\n }\n\n return { kind: 'spa', url };\n}\n\n/**\n * Helper: detect whether the current window is mounted in an iframe.\n * Cross-origin parent access can throw \u2014 treat that as \"in iframe.\"\n */\nexport function detectIsIframe(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return window !== window.top;\n } catch {\n return true;\n }\n}\n", "/**\n * Adaptive Nav - Runtime Module\n *\n * Runtime manifest for the navigation tips accordion adaptive.\n * Mounts the `<syntro-nav-tips>` Lit web component.\n * Includes widget-based nav tips and navigation action executors\n * (scrollTo, navigate) previously in adaptive-navigation.\n */\n\nimport { type MountPlumbing, stripMountPlumbing } from '@syntrologie/sdk-contracts';\nimport { registerNavWidgetLit } from './NavWidgetLit';\nimport type {\n ActionExecutor,\n ExecutorResult,\n NavConfig,\n NavigateAction,\n NavTipAction,\n NavWidgetRuntime,\n ScrollToAction,\n} from './types';\n\n// ============================================================================\n// Navigation Action Executors (merged from adaptive-navigation)\n// ============================================================================\n\n/**\n * Execute a scrollTo action\n */\nexport const executeScrollTo: ActionExecutor<ScrollToAction> = async (\n action,\n context\n): Promise<ExecutorResult> => {\n const anchorEl = context.resolveAnchor(action.anchorId);\n if (!anchorEl) {\n console.error(\n `[adaptive-nav] Anchor not found for scrollTo, skipping: ${action.anchorId.selector}`\n );\n return { cleanup: () => {} };\n }\n\n // Scroll to element\n anchorEl.scrollIntoView({\n behavior: action.behavior ?? 'smooth',\n block: action.block ?? 'center',\n inline: action.inline ?? 'nearest',\n });\n\n context.publishEvent('action.applied', {\n id: context.generateId(),\n kind: 'navigation:scrollTo',\n anchorId: action.anchorId,\n behavior: action.behavior ?? 'smooth',\n });\n\n // Auto-pulse the landing target unless the caller explicitly opts\n // out. A scroll without a visual landing cue leaves the visitor\n // wondering \"what just changed?\" \u2014 the pulse gives the destination\n // a brief glow so it reads as deliberate guidance. Same anchor; the\n // ActionEngine routes overlays:pulse to whichever adaptive owns it\n // (adaptive-overlays). Best-effort: if the runtime doesn't have the\n // overlays adaptive registered we silently skip, scroll still wins.\n if (action.pulse !== false && typeof context.applyAction === 'function') {\n void context\n .applyAction({\n kind: 'overlays:pulse',\n anchorId: action.anchorId,\n })\n .catch(() => {\n // pulse failure shouldn't fail the scroll\n });\n }\n\n return {\n cleanup: () => {\n // Optionally restore scroll position on revert\n },\n };\n};\n\n/**\n * Try to navigate using the host framework's native router.\n * Returns true if a framework router handled the navigation,\n * false if no framework was detected (caller should use pushState or location.href).\n *\n * Using the native router preserves SPA behavior (no full reload),\n * layout state, scroll position, and framework-specific features\n * (RSC streaming, view transitions, etc.).\n */\nexport function navigateWithFrameworkRouter(url: string): boolean {\n if (typeof window === 'undefined') return false;\n const w = window as any;\n\n // Next.js \u2014 window.next.router.push() triggers App Router navigation\n // with RSC fetch, layout preservation, and loading states\n try {\n const nextRouter = w.next?.router;\n if (nextRouter?.push) {\n nextRouter.push(url);\n return true;\n }\n } catch {\n /* fall through */\n }\n\n // Nuxt 3 \u2014 useRouter() isn't accessible from outside Vue, but\n // $nuxt.$router (Nuxt 2) or window.__NUXT__?.hooks (Nuxt 3) + navigateTo\n // aren't reliably exposed. Nuxt 2 exposes $nuxt.$router.push().\n try {\n if (w.$nuxt?.$router?.push) {\n w.$nuxt.$router.push(url);\n return true;\n }\n } catch {\n /* fall through */\n }\n\n // Angular \u2014 Angular Router isn't exposed on window by default.\n // The most reliable approach is to detect Angular and use location.href.\n if (w.ng || w.getAllAngularRootElements || document.querySelector('[ng-version]')) {\n window.location.href = url;\n return true;\n }\n\n // SvelteKit \u2014 goto() isn't on window, but __SVELTEKIT_DATA__ confirms the framework.\n if (w.__SVELTEKIT_DATA__ || document.body?.hasAttribute('data-sveltekit')) {\n window.location.href = url;\n return true;\n }\n\n // Astro (View Transitions) \u2014 no client-side router API exposed\n if (document.querySelector('[data-astro-transition-fallback]')) {\n window.location.href = url;\n return true;\n }\n\n return false;\n}\n\n/**\n * Check if a URL is same-origin as the current page.\n * Relative URLs (e.g. \"/dashboard\") are always same-origin.\n */\nfunction isSameOrigin(url: string): boolean {\n try {\n const parsed = new URL(url, window.location.origin);\n return parsed.origin === window.location.origin;\n } catch {\n // If URL parsing fails, fall back to full navigation\n return false;\n }\n}\n\n/**\n * Execute a navigate action\n */\nexport const executeNavigate: ActionExecutor<NavigateAction> = async (\n action,\n context\n): Promise<ExecutorResult> => {\n // Validate URL to prevent javascript: URLs\n const url = action.url.trim();\n if (url.toLowerCase().startsWith('javascript:')) {\n throw new Error('javascript: URLs are not allowed');\n }\n\n const target = action.target ?? '_self';\n\n context.publishEvent('action.applied', {\n id: context.generateId(),\n kind: 'navigation:navigate',\n url: action.url,\n target,\n });\n\n if (target === '_blank') {\n // Open in new tab\n window.open(url, '_blank', 'noopener,noreferrer');\n } else if (!action.forceFullNavigation && isSameOrigin(url)) {\n // Try the host framework's native router first (Next.js, Nuxt, Angular, etc.)\n // Falls back to pushState for vanilla SPAs, or location.href as last resort.\n if (!navigateWithFrameworkRouter(url)) {\n window.history.pushState(null, '', url);\n window.dispatchEvent(new PopStateEvent('popstate'));\n }\n } else {\n // Full navigation for cross-origin URLs or when explicitly requested\n window.location.href = url;\n }\n\n return {\n cleanup: () => {\n // Navigation cannot be reverted\n },\n };\n};\n\n// ============================================================================\n// Lit Mountable Widget\n// ============================================================================\n\n/**\n * NavWidgetLitMountable \u2014 Mounts the `<syntro-nav-tips>` Lit web component.\n * Self-registers the custom element on first use.\n */\nconst DEFAULT_NAV_CONFIG: NavConfig = {\n expandBehavior: 'single',\n theme: 'auto',\n actions: [],\n};\n\nexport const NavWidgetLitMountable = {\n mount(\n container: HTMLElement,\n config?: (NavConfig & MountPlumbing & { runtime?: NavWidgetRuntime }) | null\n ) {\n registerNavWidgetLit();\n\n const el = document.createElement('syntro-nav-tips');\n\n const incoming = config ?? null;\n const stripped = stripMountPlumbing<NavConfig & { runtime?: NavWidgetRuntime }>(incoming);\n const runtime = incoming?.runtime as NavWidgetRuntime | undefined;\n const instanceId = incoming?.instanceId ?? 'nav-widget';\n const navConfig: NavConfig = incoming ? (stripped as NavConfig) : { ...DEFAULT_NAV_CONFIG };\n\n // Assign structured props as JS properties (not HTML attributes)\n Object.assign(el, {\n config: navConfig,\n runtime,\n instanceId,\n });\n\n container.appendChild(el);\n\n return () => el.remove();\n },\n};\n\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n\n/**\n * All executors provided by this app.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executors = [\n { kind: 'navigation:scrollTo', executor: executeScrollTo },\n { kind: 'navigation:navigate', executor: executeNavigate },\n] as const;\n\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n\n/**\n * Runtime manifest for adaptive-nav.\n *\n * Provides:\n * - Navigation action executors (scrollTo, navigate)\n * - Widget-based nav tips accordion using the Lit web component\n */\nexport const runtime = {\n id: 'adaptive-nav',\n version: '2.0.0',\n name: 'Navigation Tips',\n description: 'Navigation actions and accordion-based tips with per-item conditional visibility',\n\n /**\n * Navigation action executors (scrollTo, navigate).\n */\n executors,\n\n /**\n * Widget definitions for the runtime's WidgetRegistry.\n */\n widgets: [\n {\n id: 'adaptive-nav:tips',\n component: NavWidgetLitMountable,\n metadata: {\n name: 'Navigation Tips',\n description: 'Accordion of contextual navigation tips with per-item visibility',\n icon: '\\u{1F9ED}',\n },\n },\n ],\n\n /**\n * Extract notify watcher entries from tile config props.\n * The runtime evaluates these continuously (even with drawer closed)\n * and publishes nav:tip_revealed when triggerWhen transitions false \u2192 true.\n */\n notifyWatchers(props: Record<string, unknown>) {\n const actions = (props.actions ?? []) as NavTipAction[];\n return actions\n .filter((a) => a.notify && a.triggerWhen)\n .map((a) => ({\n id: `nav:${a.config.id}`,\n strategy: a.triggerWhen!,\n eventName: 'nav:tip_revealed',\n eventProps: {\n tipId: a.config.id,\n title: a.notify!.title,\n body: a.notify!.body,\n icon: a.notify!.icon,\n },\n }));\n },\n};\n\nexport default runtime;\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * Adaptive Nav - NavWidgetLit Web Component\n *\n * Lit web component equivalent of NavWidget.tsx. Renders a collapsible\n * navigation tips accordion with per-item conditional visibility, framework-aware\n * navigation, and CSS variable theming.\n *\n * Decorator-free: uses `static override properties` (tsconfig has no\n * experimentalDecorators).\n *\n * Uses light DOM (createRenderRoot returns this) so host-page CSS variables\n * (--sc-*) are inherited without crossing a shadow boundary.\n */\n\nimport {\n normalizeRoute,\n renderIcon as renderEmojiIcon,\n routesMatch,\n} from '@syntrologie/sdk-contracts';\nimport { html, LitElement, nothing } from 'lit';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\n\nimport { detectIsIframe, resolveNavTarget } from './resolveNavTarget';\nimport { navigateWithFrameworkRouter } from './runtime';\nimport type { NavConfig, NavTipAction, NavWidgetRuntime } from './types';\n\n// ============================================================================\n// Design system token fallbacks (inlined to avoid bundling @syntro/design-system\n// as a hard dep for this file; values match packages/design-system/src/tokens/colors.ts)\n// ============================================================================\n\nconst TOKEN_PURPLE_4 = '#6a59ce';\nconst TOKEN_SLATE_GREY_7 = '#677384';\nconst TOKEN_SLATE_GREY_8 = '#87919f';\n\n// ============================================================================\n// Emoji \u2192 Lucide SVG mapping is centralized in @syntrologie/sdk-contracts.\n// To add a new emoji, edit that package's icons.ts \u2014 every adaptive picks it\n// up automatically.\n// ============================================================================\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction renderIcon(emoji: string): string {\n return renderEmojiIcon(emoji) || escapeHtml(emoji);\n}\n\n// (resolveNavTarget extracted to ./resolveNavTarget \u2014 also consumed by\n// NavWidget.tsx so both Lit and React variants share the routing decision)\n\n// ============================================================================\n// Route matching helper\n// ============================================================================\n\nfunction routeMatchesCurrent(routes: string[]): boolean {\n if (typeof window === 'undefined') return false;\n let canonicalCurrent: string;\n try {\n canonicalCurrent = normalizeRoute(window.location.pathname);\n } catch {\n return false;\n }\n return routes.some((route) => {\n // Preserve the existing `/**` prefix-match semantics. The literal\n // prefix portion goes through normalizeRoute so trailing slash,\n // query, hash, and case are handled the same as the current URL.\n if (route.endsWith('/**')) {\n const prefix = route.slice(0, -3);\n try {\n const canonicalPrefix = prefix ? normalizeRoute(prefix) : '';\n return canonicalCurrent.toLowerCase().startsWith(canonicalPrefix.toLowerCase());\n } catch {\n return false;\n }\n }\n try {\n return routesMatch(normalizeRoute(route), canonicalCurrent);\n } catch {\n return false;\n }\n });\n}\n\n// ============================================================================\n// Pulse animation helper\n// ============================================================================\n\nfunction pulseElement(el: HTMLElement): void {\n const keyframes: Keyframe[] = [\n { boxShadow: '0 0 0 0 rgba(13, 148, 136, 0.5)' },\n { boxShadow: '0 0 0 8px rgba(13, 148, 136, 0)' },\n ];\n el.animate(keyframes, { duration: 600, iterations: 3, easing: 'ease-out' });\n}\n\n// ============================================================================\n// Theme helpers\n// ============================================================================\n\ntype ResolvedTheme = 'light' | 'dark';\n\nfunction resolveTheme(theme: string | undefined): ResolvedTheme {\n if (theme === 'dark') return 'dark';\n if (theme === 'light') return 'light';\n // auto or undefined: detect system preference\n if (typeof window !== 'undefined') {\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n}\n\n// ============================================================================\n// AnchorId type (matches sdk-contracts shape used in NavWidget.tsx)\n// ============================================================================\n\ninterface AnchorId {\n route: string | string[];\n selector: string;\n}\n\n/** Browser side effects used by navigation clicks. Injectable for host adapters and tests. */\nexport interface NavNavigationPort {\n open(url: string): void;\n fullNavigate(url: string): void;\n pushState(url: string): void;\n}\n\nconst browserNavigationPort: NavNavigationPort = {\n open(url) {\n window.open(url, '_blank', 'noopener,noreferrer');\n },\n fullNavigate(url) {\n window.location.href = url;\n },\n pushState(url) {\n window.history.pushState(null, '', url);\n window.dispatchEvent(new PopStateEvent('popstate'));\n },\n};\n\n// ============================================================================\n// NavWidgetLit \u2014 LitElement\n// ============================================================================\n\nexport class NavWidgetLit extends LitElement {\n // ---------- No shadow DOM \u2014 inherit host CSS variables --------------------\n\n override createRenderRoot() {\n return this;\n }\n\n // ---------- Reactive properties (no decorators) --------------------------\n\n static override properties = {\n // Public inputs\n config: { attribute: false },\n runtime: { attribute: false },\n instanceId: { type: String },\n\n // Internal reactive state\n _expandedIds: { state: true },\n _renderTick: { state: true },\n _hoveredId: { state: true },\n };\n\n // ---------- Public properties --------------------------------------------\n\n config: NavConfig = { expandBehavior: 'single', theme: 'auto', actions: [] };\n runtime: NavWidgetRuntime | undefined = undefined;\n instanceId: string = 'nav-widget';\n navigationPort: NavNavigationPort = browserNavigationPort;\n\n // ---------- Internal state -----------------------------------------------\n\n /** @internal */ _expandedIds: Set<string> = new Set();\n /** @internal */ _renderTick = 0;\n /** @internal */ _hoveredId: string | null = null;\n\n // ---------- Private subscriptions ----------------------------------------\n\n #contextUnsub: (() => void) | null = null;\n #accumulatorUnsub: (() => void) | null = null;\n\n // ---------- Lifecycle: connectedCallback ---------------------------------\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#subscribeRuntime();\n }\n\n // ---------- Lifecycle: disconnectedCallback ------------------------------\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unsubscribeRuntime();\n }\n\n // ---------- Lifecycle: updated -------------------------------------------\n\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('runtime')) {\n this.#unsubscribeRuntime();\n this.#subscribeRuntime();\n }\n }\n\n // ---------- Runtime subscriptions ----------------------------------------\n\n #subscribeRuntime(): void {\n if (!this.runtime) return;\n\n this.#contextUnsub = this.runtime.context.subscribe(() => {\n this._renderTick += 1;\n });\n\n if (this.runtime.accumulator?.subscribe) {\n this.#accumulatorUnsub = this.runtime.accumulator.subscribe(() => {\n this._renderTick += 1;\n });\n }\n }\n\n #unsubscribeRuntime(): void {\n this.#contextUnsub?.();\n this.#contextUnsub = null;\n this.#accumulatorUnsub?.();\n this.#accumulatorUnsub = null;\n }\n\n // ---------- Computed helpers (called on each render) ---------------------\n\n #getVisibleTips(): NavTipAction[] {\n // _renderTick is read here to ensure this re-runs when context/accumulator\n // notify (same pattern as useMemo with renderTick dep in React version).\n void this._renderTick;\n\n if (!this.runtime) return this.config.actions;\n\n return this.config.actions.filter((tip) => {\n if (!tip.triggerWhen) return true;\n try {\n const result = this.runtime!.evaluateSync<boolean>(tip.triggerWhen);\n return result.value;\n } catch {\n // Fail-closed: hide tip when strategy evaluation throws\n return false;\n }\n });\n }\n\n #getResolvedTheme(): ResolvedTheme {\n return resolveTheme(this.config.theme);\n }\n\n // ---------- Event handlers -----------------------------------------------\n\n #handleToggle(id: string): void {\n const wasExpanded = this._expandedIds.has(id);\n\n let next: Set<string>;\n if (this.config.expandBehavior === 'single') {\n // Emit collapse events for previously-expanded tips (single mode)\n for (const prevId of this._expandedIds) {\n if (prevId !== id) {\n this.#publishEvent('nav:toggled', {\n tipId: prevId,\n expanded: false,\n });\n }\n }\n next = wasExpanded ? new Set() : new Set([id]);\n } else {\n next = new Set(this._expandedIds);\n if (wasExpanded) {\n next.delete(id);\n } else {\n next.add(id);\n }\n }\n\n this.#publishEvent('nav:toggled', {\n tipId: id,\n expanded: !wasExpanded,\n });\n\n this._expandedIds = next;\n }\n\n #handleNavigate(href: string, external: boolean): void {\n // Reject dangerous URIs\n const normalized = href.trim().toLowerCase();\n if (normalized.startsWith('javascript:') || normalized.startsWith('data:')) return;\n\n this.#publishEvent('nav:tip_clicked', { href, external });\n\n // Also fire a standard custom event for host-page listeners\n this.dispatchEvent(\n new CustomEvent('nav-tip-clicked', {\n bubbles: true,\n detail: { href, external, instanceId: this.instanceId },\n })\n );\n\n // Routing decision is in resolveNavTarget (a pure helper). When mounted\n // in an iframe (canvas surface, partner embed, etc.), every nav escapes\n // via window.open \u2014 sandbox `allow-popups` lets it pop out to the user's\n // main browser. On the customer site (top-level window), normal cross-/\n // same-origin handling applies.\n const target = resolveNavTarget({\n href,\n external,\n windowOrigin: typeof window !== 'undefined' ? window.location.origin : '',\n isIframe: detectIsIframe(),\n });\n\n if (target.kind === 'open') {\n this.navigationPort.open(target.url);\n return;\n }\n if (target.kind === 'fullnav') {\n this.navigationPort.fullNavigate(target.url);\n return;\n }\n // kind === 'spa'\n target.url.search = window.location.search;\n if (!navigateWithFrameworkRouter(target.url.toString())) {\n this.navigationPort.pushState(target.url.toString());\n }\n }\n\n #handleFocusAnchor(anchor: AnchorId): void {\n const el = document.querySelector(anchor.selector);\n if (!(el instanceof HTMLElement)) return;\n\n this.#publishEvent('nav:tip_focused', {\n selector: anchor.selector,\n route: anchor.route,\n });\n\n this.dispatchEvent(\n new CustomEvent('nav-tip-focused', {\n bubbles: true,\n detail: { selector: anchor.selector, instanceId: this.instanceId },\n })\n );\n\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n pulseElement(el);\n setTimeout(() => el.focus(), 400);\n }\n\n #publishEvent(name: string, props: Record<string, unknown>): void {\n this.runtime?.events.publish(name, {\n instanceId: this.instanceId,\n timestamp: Date.now(),\n ...props,\n });\n }\n\n // ---------- Tip item rendering -------------------------------------------\n\n #renderTipItem(tip: NavTipAction, index: number, total: number) {\n const { id, title, description, href, icon, external, anchor, category: _cat } = tip.config;\n const isExpanded = this._expandedIds.has(id);\n const isLast = index === total - 1;\n const isHovered = this._hoveredId === id;\n const theme = this.#getResolvedTheme();\n\n // Determine the effective href from anchor or legacy href\n const effectiveHref = anchor\n ? Array.isArray(anchor.route)\n ? anchor.route[0]\n : anchor.route\n : href;\n\n // Same-page check\n const isSamePage = anchor\n ? routeMatchesCurrent(Array.isArray(anchor.route) ? anchor.route : [anchor.route])\n : effectiveHref\n ? routeMatchesCurrent([effectiveHref])\n : false;\n const hasSelector = anchor?.selector && anchor.selector !== '*';\n const isFocusAction = isSamePage && hasSelector;\n const hasAction = !!effectiveHref || isFocusAction;\n\n const ctaLabel = isFocusAction ? 'Focus \\u2192' : external ? 'Go \\u2197' : 'Go \\u2192';\n\n // Item container styles\n const itemStyle = styleMap({\n borderRadius: 'var(--sc-content-border-radius, 8px)',\n overflow: 'hidden',\n transition: 'box-shadow 0.2s ease',\n backgroundColor: 'var(--sc-content-background)',\n border: 'var(--sc-content-border)',\n ...(isExpanded\n ? {\n boxShadow:\n theme === 'dark'\n ? '0 4px 12px rgba(0, 0, 0, 0.15)'\n : '0 4px 12px rgba(0, 0, 0, 0.08)',\n }\n : {}),\n ...(!isLast ? { borderBottom: 'var(--sc-content-item-divider, none)' } : {}),\n });\n\n // Header styles\n const headerStyle = styleMap({\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: 'var(--sc-content-item-padding, 12px 16px)',\n border: 'none',\n cursor: 'pointer',\n fontSize: 'var(--sc-content-item-font-size, 15px)',\n fontWeight: '500',\n fontFamily: 'inherit',\n textAlign: 'left',\n transition: 'background-color 0.15s ease',\n backgroundColor: isHovered ? 'var(--sc-content-background-hover)' : 'transparent',\n color: 'var(--sc-content-text-color)',\n });\n\n // Chevron styles\n const chevronStyle = styleMap({\n fontSize: '20px',\n transition: 'transform 0.2s ease',\n marginLeft: 'auto',\n flexShrink: '0',\n color: 'var(--sc-content-chevron-color, currentColor)',\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n });\n\n // Body styles\n const bodyStyle = styleMap({\n overflow: 'hidden',\n transition: 'max-height 0.25s ease, padding-bottom 0.25s ease',\n padding: 'var(--sc-content-body-padding, 0 16px 12px 16px)',\n color: 'var(--sc-content-text-secondary-color)',\n maxHeight: isExpanded ? '500px' : '0',\n paddingBottom: isExpanded ? '16px' : '0',\n });\n\n // Description styles\n const descriptionStyle = styleMap({\n fontSize: 'var(--sc-content-body-font-size, 14px)',\n lineHeight: '1.5',\n margin: '0',\n });\n\n // CTA / link button styles\n const linkButtonStyle = styleMap({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n marginTop: '10px',\n padding: '6px 12px',\n borderRadius: '6px',\n textDecoration: 'none',\n fontSize: '13px',\n fontWeight: '500',\n cursor: 'pointer',\n border: 'none',\n transition: 'background-color 0.15s ease',\n backgroundColor: `var(--sc-color-primary, ${TOKEN_PURPLE_4})`,\n color: '#ffffff',\n });\n\n // Icon styles\n const iconStyle = styleMap({\n fontSize: '16px',\n flexShrink: '0',\n });\n\n // Anchor click handler\n const onLinkClick = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n if (isFocusAction && anchor) {\n this.#handleFocusAnchor(anchor);\n } else if (effectiveHref) {\n this.#handleNavigate(effectiveHref, external ?? false);\n }\n };\n\n return html`\n <div\n style=${itemStyle}\n data-nav-tip-id=${id}\n >\n <button\n type=\"button\"\n style=${headerStyle}\n aria-expanded=${isExpanded}\n @click=${() => this.#handleToggle(id)}\n @mouseenter=${() => {\n this._hoveredId = id;\n }}\n @mouseleave=${() => {\n this._hoveredId = null;\n }}\n >\n ${icon ? html`<span style=${iconStyle}>${unsafeHTML(renderIcon(icon))}</span>` : nothing}\n <span>${title}</span>\n <span style=${chevronStyle}>${'\\u203A'}</span>\n </button>\n <div style=${bodyStyle} aria-hidden=${!isExpanded}>\n <p style=${descriptionStyle}>${description}</p>\n ${\n hasAction\n ? html`\n <a\n href=${effectiveHref || '#'}\n style=${linkButtonStyle}\n target=${external ? '_blank' : nothing}\n rel=${external ? 'noopener noreferrer' : nothing}\n @click=${onLinkClick}\n >${ctaLabel}</a>\n `\n : nothing\n }\n </div>\n </div>\n `;\n }\n\n // ---------- Render --------------------------------------------------------\n\n override render() {\n const visibleTips = this.#getVisibleTips();\n const theme = this.#getResolvedTheme();\n\n const containerStyle = styleMap({\n fontFamily: 'var(--sc-font-family, system-ui, -apple-system, sans-serif)',\n maxWidth: '100%',\n overflow: 'hidden',\n backgroundColor: 'transparent',\n color: 'inherit',\n });\n\n const accordionStyle = styleMap({\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--sc-content-item-gap, 6px)',\n });\n\n const categoryHeaderStyle = styleMap({\n fontSize: 'var(--sc-content-category-font-size, 12px)',\n fontWeight: '600',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n padding: 'var(--sc-content-category-padding, 8px 4px 4px 4px)',\n color: theme === 'dark' ? TOKEN_SLATE_GREY_8 : TOKEN_SLATE_GREY_7,\n });\n\n const emptyStateStyle = styleMap({\n fontSize: '13px',\n padding: '16px',\n textAlign: 'center',\n color: theme === 'dark' ? TOKEN_SLATE_GREY_7 : TOKEN_SLATE_GREY_8,\n });\n\n // Empty state\n if (visibleTips.length === 0) {\n return html`\n <div\n style=${containerStyle}\n data-adaptive-id=${this.instanceId}\n data-adaptive-type=\"adaptive-nav\"\n >\n <div style=${emptyStateStyle}>\n You're all set for now! We'll share helpful tips here when they're relevant to what\n you're doing.\n </div>\n </div>\n `;\n }\n\n // Group by category\n const categoryGroups = new Map<string | undefined, NavTipAction[]>();\n for (const tip of visibleTips) {\n const cat = tip.config.category;\n if (!categoryGroups.has(cat)) {\n categoryGroups.set(cat, []);\n }\n categoryGroups.get(cat)!.push(tip);\n }\n\n const hasCategories = visibleTips.some((t) => t.config.category);\n\n return html`\n <div\n style=${containerStyle}\n data-adaptive-id=${this.instanceId}\n data-adaptive-type=\"adaptive-nav\"\n >\n <div style=${accordionStyle}>\n ${\n hasCategories\n ? Array.from(categoryGroups.entries()).map(\n ([category, items]) => html`\n ${\n category\n ? html`<div style=${categoryHeaderStyle} data-category-header=${category}>${category}</div>`\n : nothing\n }\n ${items.map((tip, idx) => this.#renderTipItem(tip, idx, items.length))}\n `\n )\n : visibleTips.map((tip, idx) => this.#renderTipItem(tip, idx, visibleTips.length))\n }\n </div>\n </div>\n `;\n }\n}\n\n// ============================================================================\n// Custom element registration\n// ============================================================================\n\nconst TAG_NAME = 'syntro-nav-tips';\n\nexport function registerNavWidgetLit(): void {\n if (typeof window === 'undefined') return;\n if (!customElements.get(TAG_NAME)) {\n customElements.define(TAG_NAME, NavWidgetLit);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'syntro-nav-tips': NavWidgetLit;\n }\n}\n", "/**\n * Pure decision function for nav-tip click routing.\n *\n * Given an href, an `external` flag, the current window's origin, and whether\n * the SDK is mounted inside an iframe, returns the navigation action to take.\n *\n * Extracted from NavWidgetLit so both the Lit and React widget variants\n * share one decision matrix and so the routing logic can be unit-tested\n * without mutating window.location (jsdom doesn't allow redefining\n * origin/href).\n */\n\nexport type NavTarget =\n | { kind: 'open'; url: string }\n | { kind: 'fullnav'; url: string }\n | { kind: 'spa'; url: URL };\n\nexport interface ResolveNavTargetArgs {\n href: string;\n external: boolean;\n windowOrigin: string;\n /**\n * True when the SDK is mounted inside an iframe (window !== window.top, or\n * window.top access threw cross-origin). When true, every nav escapes via\n * window.open \u2014 the parent page's sandbox `allow-popups` lets the new\n * window pop out to the user's main browser.\n */\n isIframe: boolean;\n}\n\n/**\n * Decide what to do with a nav-tip click.\n *\n * Routing branches (in order):\n *\n * 1. **Iframe context** (`isIframe=true` OR opaque origin \"null\"):\n * always `window.open` the href as-is. Action-plan authors who want\n * cross-iframe nav must use absolute URLs (any host \u2014 customer's,\n * partner's, doesn't matter). The sandbox's `allow-popups` lets the\n * open() call escape to the user's main browser.\n *\n * 2. **Explicit external** (`external=true`): always opens in `_blank`.\n *\n * 3. **Cross-origin absolute href** (no iframe; URL parses to a different\n * origin): full `window.location.href` navigation.\n *\n * 4. **Same-origin** (most common \u2014 SDK on customer site, internal route):\n * SPA-style `pushState` (caller falls back to framework router).\n *\n * 5. **Parse failure**: full-nav fallback; browser does its best.\n */\nexport function resolveNavTarget(args: ResolveNavTargetArgs): NavTarget {\n const { href, external, windowOrigin, isIframe } = args;\n\n const isOpaqueOrigin = windowOrigin === 'null';\n if (isIframe || isOpaqueOrigin) {\n return { kind: 'open', url: href };\n }\n\n if (external) {\n return { kind: 'open', url: href };\n }\n\n let url: URL;\n try {\n url = new URL(href, windowOrigin);\n } catch {\n return { kind: 'fullnav', url: href };\n }\n\n if (url.origin !== windowOrigin) {\n return { kind: 'fullnav', url: url.toString() };\n }\n\n return { kind: 'spa', url };\n}\n\n/**\n * Helper: detect whether the current window is mounted in an iframe.\n * Cross-origin parent access can throw \u2014 treat that as \"in iframe.\"\n */\nexport function detectIsIframe(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return window !== window.top;\n } catch {\n return true;\n }\n}\n", "/**\n * Adaptive Nav - Runtime Module\n *\n * Runtime manifest for the navigation tips accordion adaptive.\n * Mounts the `<syntro-nav-tips>` Lit web component.\n * Includes widget-based nav tips and navigation action executors\n * (scrollTo, navigate) previously in adaptive-navigation.\n */\n\nimport { type MountPlumbing, stripMountPlumbing } from '@syntrologie/sdk-contracts';\nimport { registerNavWidgetLit } from './NavWidgetLit';\nimport type {\n ActionExecutor,\n ExecutorResult,\n NavConfig,\n NavigateAction,\n NavTipAction,\n NavWidgetRuntime,\n ScrollToAction,\n} from './types';\n\n// ============================================================================\n// Navigation Action Executors (merged from adaptive-navigation)\n// ============================================================================\n\n/**\n * Execute a scrollTo action\n */\nexport const executeScrollTo: ActionExecutor<ScrollToAction> = async (\n action,\n context\n): Promise<ExecutorResult> => {\n const anchorEl = context.resolveAnchor(action.anchorId);\n if (!anchorEl) {\n console.error(\n `[adaptive-nav] Anchor not found for scrollTo, skipping: ${action.anchorId.selector}`\n );\n return { cleanup: () => {} };\n }\n\n // Scroll to element\n anchorEl.scrollIntoView({\n behavior: action.behavior ?? 'smooth',\n block: action.block ?? 'center',\n inline: action.inline ?? 'nearest',\n });\n\n context.publishEvent('action.applied', {\n id: context.generateId(),\n kind: 'navigation:scrollTo',\n anchorId: action.anchorId,\n behavior: action.behavior ?? 'smooth',\n });\n\n // Auto-pulse the landing target unless the caller explicitly opts\n // out. A scroll without a visual landing cue leaves the visitor\n // wondering \"what just changed?\" \u2014 the pulse gives the destination\n // a brief glow so it reads as deliberate guidance. Same anchor; the\n // ActionEngine routes overlays:pulse to whichever adaptive owns it\n // (adaptive-overlays). Best-effort: if the runtime doesn't have the\n // overlays adaptive registered we silently skip, scroll still wins.\n if (action.pulse !== false && typeof context.applyAction === 'function') {\n void context\n .applyAction({\n kind: 'overlays:pulse',\n anchorId: action.anchorId,\n })\n .catch(() => {\n // pulse failure shouldn't fail the scroll\n });\n }\n\n return {\n cleanup: () => {\n // Optionally restore scroll position on revert\n },\n };\n};\n\n/**\n * Try to navigate using the host framework's native router.\n * Returns true if a framework router handled the navigation,\n * false if no framework was detected (caller should use pushState or location.href).\n *\n * Using the native router preserves SPA behavior (no full reload),\n * layout state, scroll position, and framework-specific features\n * (RSC streaming, view transitions, etc.).\n */\nexport function navigateWithFrameworkRouter(url: string): boolean {\n if (typeof window === 'undefined') return false;\n const w = window as any;\n\n // Next.js \u2014 window.next.router.push() triggers App Router navigation\n // with RSC fetch, layout preservation, and loading states\n try {\n const nextRouter = w.next?.router;\n if (nextRouter?.push) {\n nextRouter.push(url);\n return true;\n }\n } catch {\n /* fall through */\n }\n\n // Nuxt 3 \u2014 useRouter() isn't accessible from outside Vue, but\n // $nuxt.$router (Nuxt 2) or window.__NUXT__?.hooks (Nuxt 3) + navigateTo\n // aren't reliably exposed. Nuxt 2 exposes $nuxt.$router.push().\n try {\n if (w.$nuxt?.$router?.push) {\n w.$nuxt.$router.push(url);\n return true;\n }\n } catch {\n /* fall through */\n }\n\n // Angular \u2014 Angular Router isn't exposed on window by default.\n // The most reliable approach is to detect Angular and use location.href.\n if (w.ng || w.getAllAngularRootElements || document.querySelector('[ng-version]')) {\n window.location.href = url;\n return true;\n }\n\n // SvelteKit \u2014 goto() isn't on window, but __SVELTEKIT_DATA__ confirms the framework.\n if (w.__SVELTEKIT_DATA__ || document.body?.hasAttribute('data-sveltekit')) {\n window.location.href = url;\n return true;\n }\n\n // Astro (View Transitions) \u2014 no client-side router API exposed\n if (document.querySelector('[data-astro-transition-fallback]')) {\n window.location.href = url;\n return true;\n }\n\n return false;\n}\n\n/**\n * Check if a URL is same-origin as the current page.\n * Relative URLs (e.g. \"/dashboard\") are always same-origin.\n */\nfunction isSameOrigin(url: string): boolean {\n try {\n const parsed = new URL(url, window.location.origin);\n return parsed.origin === window.location.origin;\n } catch {\n // If URL parsing fails, fall back to full navigation\n return false;\n }\n}\n\n/**\n * Execute a navigate action\n */\nexport const executeNavigate: ActionExecutor<NavigateAction> = async (\n action,\n context\n): Promise<ExecutorResult> => {\n // Validate URL to prevent javascript: URLs\n const url = action.url.trim();\n if (url.toLowerCase().startsWith('javascript:')) {\n throw new Error('javascript: URLs are not allowed');\n }\n\n const target = action.target ?? '_self';\n\n context.publishEvent('action.applied', {\n id: context.generateId(),\n kind: 'navigation:navigate',\n url: action.url,\n target,\n });\n\n if (target === '_blank') {\n // Open in new tab\n window.open(url, '_blank', 'noopener,noreferrer');\n } else if (!action.forceFullNavigation && isSameOrigin(url)) {\n // Try the host framework's native router first (Next.js, Nuxt, Angular, etc.)\n // Falls back to pushState for vanilla SPAs, or location.href as last resort.\n if (!navigateWithFrameworkRouter(url)) {\n window.history.pushState(null, '', url);\n window.dispatchEvent(new PopStateEvent('popstate'));\n }\n } else {\n // Full navigation for cross-origin URLs or when explicitly requested\n window.location.href = url;\n }\n\n return {\n cleanup: () => {\n // Navigation cannot be reverted\n },\n };\n};\n\n// ============================================================================\n// Lit Mountable Widget\n// ============================================================================\n\n/**\n * NavWidgetLitMountable \u2014 Mounts the `<syntro-nav-tips>` Lit web component.\n * Self-registers the custom element on first use.\n */\nconst DEFAULT_NAV_CONFIG: NavConfig = {\n expandBehavior: 'single',\n theme: 'auto',\n actions: [],\n};\n\n/**\n * ContactCardMountable \u2014 mounts `<syntro-contact-card>` (adaptive-nav:contact-card).\n * The human-handoff tile: admin-pinned contact channels + model-authorable\n * heading/framing. See ContactCardLit for the trust contract.\n */\nexport const ContactCardMountable = {\n mount(container: HTMLElement, config?: (Record<string, unknown> & MountPlumbing) | null) {\n const el = document.createElement('syntro-contact-card') as HTMLElement & {\n heading?: string;\n framing?: string;\n channels?: unknown;\n };\n const stripped = stripMountPlumbing<Record<string, unknown>>(config ?? null) ?? {};\n Object.assign(el, {\n heading: (stripped.heading as string) ?? 'Talk to a person',\n framing: (stripped.framing as string) ?? '',\n channels: stripped.channels ?? [],\n });\n container.appendChild(el);\n return () => el.remove();\n },\n};\n\nexport const NavWidgetLitMountable = {\n mount(\n container: HTMLElement,\n config?: (NavConfig & MountPlumbing & { runtime?: NavWidgetRuntime }) | null\n ) {\n registerNavWidgetLit();\n\n const el = document.createElement('syntro-nav-tips');\n\n const incoming = config ?? null;\n const stripped = stripMountPlumbing<NavConfig & { runtime?: NavWidgetRuntime }>(incoming);\n const runtime = incoming?.runtime as NavWidgetRuntime | undefined;\n const instanceId = incoming?.instanceId ?? 'nav-widget';\n const navConfig: NavConfig = incoming ? (stripped as NavConfig) : { ...DEFAULT_NAV_CONFIG };\n\n // Assign structured props as JS properties (not HTML attributes)\n Object.assign(el, {\n config: navConfig,\n runtime,\n instanceId,\n });\n\n container.appendChild(el);\n\n return () => el.remove();\n },\n};\n\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n\n/**\n * All executors provided by this app.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executors = [\n { kind: 'navigation:scrollTo', executor: executeScrollTo },\n { kind: 'navigation:navigate', executor: executeNavigate },\n] as const;\n\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n\n/**\n * Runtime manifest for adaptive-nav.\n *\n * Provides:\n * - Navigation action executors (scrollTo, navigate)\n * - Widget-based nav tips accordion using the Lit web component\n */\nexport const runtime = {\n id: 'adaptive-nav',\n version: '2.0.0',\n name: 'Navigation Tips',\n description: 'Navigation actions and accordion-based tips with per-item conditional visibility',\n\n /**\n * Navigation action executors (scrollTo, navigate).\n */\n executors,\n\n /**\n * Widget definitions for the runtime's WidgetRegistry.\n */\n widgets: [\n {\n id: 'adaptive-nav:contact-card',\n component: ContactCardMountable,\n metadata: {\n name: 'Contact Card',\n description:\n 'Human-handoff card: admin-pinned contact channels (text/call/email/book) as one-tap pills, with a model-authorable framing line',\n icon: '\\u{1F4DE}',\n },\n },\n {\n id: 'adaptive-nav:tips',\n component: NavWidgetLitMountable,\n metadata: {\n name: 'Navigation Tips',\n description: 'Accordion of contextual navigation tips with per-item visibility',\n icon: '\\u{1F9ED}',\n },\n },\n ],\n\n /**\n * Extract notify watcher entries from tile config props.\n * The runtime evaluates these continuously (even with drawer closed)\n * and publishes nav:tip_revealed when triggerWhen transitions false \u2192 true.\n */\n notifyWatchers(props: Record<string, unknown>) {\n const actions = (props.actions ?? []) as NavTipAction[];\n return actions\n .filter((a) => a.notify && a.triggerWhen)\n .map((a) => ({\n id: `nav:${a.config.id}`,\n strategy: a.triggerWhen!,\n eventName: 'nav:tip_revealed',\n eventProps: {\n tipId: a.config.id,\n title: a.notify!.title,\n body: a.notify!.body,\n icon: a.notify!.icon,\n },\n }));\n },\n};\n\nexport default runtime;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["renderIcon", "runtime"]
|
|
7
7
|
}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -26,6 +26,14 @@ export declare function navigateWithFrameworkRouter(url: string): boolean;
|
|
|
26
26
|
* Execute a navigate action
|
|
27
27
|
*/
|
|
28
28
|
export declare const executeNavigate: ActionExecutor<NavigateAction>;
|
|
29
|
+
/**
|
|
30
|
+
* ContactCardMountable — mounts `<syntro-contact-card>` (adaptive-nav:contact-card).
|
|
31
|
+
* The human-handoff tile: admin-pinned contact channels + model-authorable
|
|
32
|
+
* heading/framing. See ContactCardLit for the trust contract.
|
|
33
|
+
*/
|
|
34
|
+
export declare const ContactCardMountable: {
|
|
35
|
+
mount(container: HTMLElement, config?: (Record<string, unknown> & MountPlumbing) | null): () => void;
|
|
36
|
+
};
|
|
29
37
|
export declare const NavWidgetLitMountable: {
|
|
30
38
|
mount(container: HTMLElement, config?: (NavConfig & MountPlumbing & {
|
|
31
39
|
runtime?: NavWidgetRuntime;
|
|
@@ -67,7 +75,17 @@ export declare const runtime: {
|
|
|
67
75
|
/**
|
|
68
76
|
* Widget definitions for the runtime's WidgetRegistry.
|
|
69
77
|
*/
|
|
70
|
-
widgets: {
|
|
78
|
+
widgets: ({
|
|
79
|
+
id: string;
|
|
80
|
+
component: {
|
|
81
|
+
mount(container: HTMLElement, config?: (Record<string, unknown> & MountPlumbing) | null): () => void;
|
|
82
|
+
};
|
|
83
|
+
metadata: {
|
|
84
|
+
name: string;
|
|
85
|
+
description: string;
|
|
86
|
+
icon: string;
|
|
87
|
+
};
|
|
88
|
+
} | {
|
|
71
89
|
id: string;
|
|
72
90
|
component: {
|
|
73
91
|
mount(container: HTMLElement, config?: (NavConfig & MountPlumbing & {
|
|
@@ -79,7 +97,7 @@ export declare const runtime: {
|
|
|
79
97
|
description: string;
|
|
80
98
|
icon: string;
|
|
81
99
|
};
|
|
82
|
-
}[];
|
|
100
|
+
})[];
|
|
83
101
|
/**
|
|
84
102
|
* Extract notify watcher entries from tile config props.
|
|
85
103
|
* The runtime evaluates these continuously (even with drawer closed)
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,4BAA4B,CAAC;AAEpF,OAAO,KAAK,EACV,cAAc,EAEd,SAAS,EACT,cAAc,EAEd,gBAAgB,EAChB,cAAc,EACf,MAAM,SAAS,CAAC;AAMjB;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,cAAc,CAiD1D,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgDhE;AAgBD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,cAAc,CAuC1D,CAAC;AAgBF,eAAO,MAAM,qBAAqB;qBAEnB,WAAW,WACb,CAAC,SAAS,GAAG,aAAa,GAAG;QAAE,OAAO,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC,GAAG,IAAI;CAuB/E,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;EAGZ,CAAC;AAMX;;;;;;GAMG;AACH,eAAO,MAAM,OAAO;;;;;IAMlB;;OAEG;;;;;;;;IAGH;;OAEG;;;;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,4BAA4B,CAAC;AAEpF,OAAO,KAAK,EACV,cAAc,EAEd,SAAS,EACT,cAAc,EAEd,gBAAgB,EAChB,cAAc,EACf,MAAM,SAAS,CAAC;AAMjB;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,cAAc,CAiD1D,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgDhE;AAgBD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,cAAc,CAuC1D,CAAC;AAgBF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;qBACd,WAAW,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,GAAG,IAAI;CAexF,CAAC;AAEF,eAAO,MAAM,qBAAqB;qBAEnB,WAAW,WACb,CAAC,SAAS,GAAG,aAAa,GAAG;QAAE,OAAO,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC,GAAG,IAAI;CAuB/E,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;EAGZ,CAAC;AAMX;;;;;;GAMG;AACH,eAAO,MAAM,OAAO;;;;;IAMlB;;OAEG;;;;;;;;IAGH;;OAEG;;;;6BAlFc,WAAW,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,GAAG,IAAI;;;;;;;;;;6BAmB1E,WAAW,WACb,CAAC,SAAS,GAAG,aAAa,GAAG;gBAAE,OAAO,CAAC,EAAE,gBAAgB,CAAA;aAAE,CAAC,GAAG,IAAI;;;;;;;;IAqF9E;;;;OAIG;0BACmB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;CAgB9C,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
package/dist/runtime.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ContactCardMountable,
|
|
2
3
|
NavWidgetLitMountable,
|
|
3
4
|
executeNavigate,
|
|
4
5
|
executeScrollTo,
|
|
@@ -6,9 +7,10 @@ import {
|
|
|
6
7
|
navigateWithFrameworkRouter,
|
|
7
8
|
runtime,
|
|
8
9
|
runtime_default
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-7EYZLIUR.js";
|
|
10
11
|
import "./chunk-XO4TLMHA.js";
|
|
11
12
|
export {
|
|
13
|
+
ContactCardMountable,
|
|
12
14
|
NavWidgetLitMountable,
|
|
13
15
|
runtime_default as default,
|
|
14
16
|
executeNavigate,
|
package/dist/schema.d.ts
CHANGED
|
@@ -38,8 +38,8 @@ export declare const NavTipSchema: z.ZodEffects<z.ZodObject<{
|
|
|
38
38
|
category: z.ZodOptional<z.ZodString>;
|
|
39
39
|
}, "strip", z.ZodTypeAny, {
|
|
40
40
|
external: boolean;
|
|
41
|
-
title: string;
|
|
42
41
|
id: string;
|
|
42
|
+
title: string;
|
|
43
43
|
description: string;
|
|
44
44
|
href?: string | undefined;
|
|
45
45
|
icon?: string | undefined;
|
|
@@ -49,11 +49,11 @@ export declare const NavTipSchema: z.ZodEffects<z.ZodObject<{
|
|
|
49
49
|
} | undefined;
|
|
50
50
|
category?: string | undefined;
|
|
51
51
|
}, {
|
|
52
|
-
title: string;
|
|
53
52
|
id: string;
|
|
53
|
+
title: string;
|
|
54
54
|
description: string;
|
|
55
|
-
external?: boolean | undefined;
|
|
56
55
|
href?: string | undefined;
|
|
56
|
+
external?: boolean | undefined;
|
|
57
57
|
icon?: string | undefined;
|
|
58
58
|
anchor?: {
|
|
59
59
|
selector: string;
|
|
@@ -586,8 +586,8 @@ export declare const NavTipSchema: z.ZodEffects<z.ZodObject<{
|
|
|
586
586
|
kind: "nav:tip";
|
|
587
587
|
config: {
|
|
588
588
|
external: boolean;
|
|
589
|
-
title: string;
|
|
590
589
|
id: string;
|
|
590
|
+
title: string;
|
|
591
591
|
description: string;
|
|
592
592
|
href?: string | undefined;
|
|
593
593
|
icon?: string | undefined;
|
|
@@ -597,8 +597,8 @@ export declare const NavTipSchema: z.ZodEffects<z.ZodObject<{
|
|
|
597
597
|
} | undefined;
|
|
598
598
|
category?: string | undefined;
|
|
599
599
|
};
|
|
600
|
-
title?: string | undefined;
|
|
601
600
|
id?: string | undefined;
|
|
601
|
+
title?: string | undefined;
|
|
602
602
|
description?: string | undefined;
|
|
603
603
|
triggerWhen?: {
|
|
604
604
|
type: "rules";
|
|
@@ -694,11 +694,11 @@ export declare const NavTipSchema: z.ZodEffects<z.ZodObject<{
|
|
|
694
694
|
}, {
|
|
695
695
|
kind: "nav:tip";
|
|
696
696
|
config: {
|
|
697
|
-
title: string;
|
|
698
697
|
id: string;
|
|
698
|
+
title: string;
|
|
699
699
|
description: string;
|
|
700
|
-
external?: boolean | undefined;
|
|
701
700
|
href?: string | undefined;
|
|
701
|
+
external?: boolean | undefined;
|
|
702
702
|
icon?: string | undefined;
|
|
703
703
|
anchor?: {
|
|
704
704
|
selector: string;
|
|
@@ -706,8 +706,8 @@ export declare const NavTipSchema: z.ZodEffects<z.ZodObject<{
|
|
|
706
706
|
} | undefined;
|
|
707
707
|
category?: string | undefined;
|
|
708
708
|
};
|
|
709
|
-
title?: string | undefined;
|
|
710
709
|
id?: string | undefined;
|
|
710
|
+
title?: string | undefined;
|
|
711
711
|
description?: string | undefined;
|
|
712
712
|
triggerWhen?: {
|
|
713
713
|
type: "rules";
|
|
@@ -804,8 +804,8 @@ export declare const NavTipSchema: z.ZodEffects<z.ZodObject<{
|
|
|
804
804
|
kind: "nav:tip";
|
|
805
805
|
config: {
|
|
806
806
|
external: boolean;
|
|
807
|
-
title: string;
|
|
808
807
|
id: string;
|
|
808
|
+
title: string;
|
|
809
809
|
description: string;
|
|
810
810
|
href?: string | undefined;
|
|
811
811
|
icon?: string | undefined;
|
|
@@ -815,8 +815,8 @@ export declare const NavTipSchema: z.ZodEffects<z.ZodObject<{
|
|
|
815
815
|
} | undefined;
|
|
816
816
|
category?: string | undefined;
|
|
817
817
|
};
|
|
818
|
-
title?: string | undefined;
|
|
819
818
|
id?: string | undefined;
|
|
819
|
+
title?: string | undefined;
|
|
820
820
|
description?: string | undefined;
|
|
821
821
|
triggerWhen?: {
|
|
822
822
|
type: "rules";
|
|
@@ -912,11 +912,11 @@ export declare const NavTipSchema: z.ZodEffects<z.ZodObject<{
|
|
|
912
912
|
}, {
|
|
913
913
|
kind: "nav:tip";
|
|
914
914
|
config: {
|
|
915
|
-
title: string;
|
|
916
915
|
id: string;
|
|
916
|
+
title: string;
|
|
917
917
|
description: string;
|
|
918
|
-
external?: boolean | undefined;
|
|
919
918
|
href?: string | undefined;
|
|
919
|
+
external?: boolean | undefined;
|
|
920
920
|
icon?: string | undefined;
|
|
921
921
|
anchor?: {
|
|
922
922
|
selector: string;
|
|
@@ -924,8 +924,8 @@ export declare const NavTipSchema: z.ZodEffects<z.ZodObject<{
|
|
|
924
924
|
} | undefined;
|
|
925
925
|
category?: string | undefined;
|
|
926
926
|
};
|
|
927
|
-
title?: string | undefined;
|
|
928
927
|
id?: string | undefined;
|
|
928
|
+
title?: string | undefined;
|
|
929
929
|
description?: string | undefined;
|
|
930
930
|
triggerWhen?: {
|
|
931
931
|
type: "rules";
|
|
@@ -1051,8 +1051,8 @@ export declare const NavLinkSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1051
1051
|
category: z.ZodOptional<z.ZodString>;
|
|
1052
1052
|
}, "strip", z.ZodTypeAny, {
|
|
1053
1053
|
external: boolean;
|
|
1054
|
-
title: string;
|
|
1055
1054
|
id: string;
|
|
1055
|
+
title: string;
|
|
1056
1056
|
description: string;
|
|
1057
1057
|
href?: string | undefined;
|
|
1058
1058
|
icon?: string | undefined;
|
|
@@ -1062,11 +1062,11 @@ export declare const NavLinkSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1062
1062
|
} | undefined;
|
|
1063
1063
|
category?: string | undefined;
|
|
1064
1064
|
}, {
|
|
1065
|
-
title: string;
|
|
1066
1065
|
id: string;
|
|
1066
|
+
title: string;
|
|
1067
1067
|
description: string;
|
|
1068
|
-
external?: boolean | undefined;
|
|
1069
1068
|
href?: string | undefined;
|
|
1069
|
+
external?: boolean | undefined;
|
|
1070
1070
|
icon?: string | undefined;
|
|
1071
1071
|
anchor?: {
|
|
1072
1072
|
selector: string;
|
|
@@ -1599,8 +1599,8 @@ export declare const NavLinkSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1599
1599
|
kind: "nav:tip";
|
|
1600
1600
|
config: {
|
|
1601
1601
|
external: boolean;
|
|
1602
|
-
title: string;
|
|
1603
1602
|
id: string;
|
|
1603
|
+
title: string;
|
|
1604
1604
|
description: string;
|
|
1605
1605
|
href?: string | undefined;
|
|
1606
1606
|
icon?: string | undefined;
|
|
@@ -1610,8 +1610,8 @@ export declare const NavLinkSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1610
1610
|
} | undefined;
|
|
1611
1611
|
category?: string | undefined;
|
|
1612
1612
|
};
|
|
1613
|
-
title?: string | undefined;
|
|
1614
1613
|
id?: string | undefined;
|
|
1614
|
+
title?: string | undefined;
|
|
1615
1615
|
description?: string | undefined;
|
|
1616
1616
|
triggerWhen?: {
|
|
1617
1617
|
type: "rules";
|
|
@@ -1707,11 +1707,11 @@ export declare const NavLinkSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1707
1707
|
}, {
|
|
1708
1708
|
kind: "nav:tip";
|
|
1709
1709
|
config: {
|
|
1710
|
-
title: string;
|
|
1711
1710
|
id: string;
|
|
1711
|
+
title: string;
|
|
1712
1712
|
description: string;
|
|
1713
|
-
external?: boolean | undefined;
|
|
1714
1713
|
href?: string | undefined;
|
|
1714
|
+
external?: boolean | undefined;
|
|
1715
1715
|
icon?: string | undefined;
|
|
1716
1716
|
anchor?: {
|
|
1717
1717
|
selector: string;
|
|
@@ -1719,8 +1719,8 @@ export declare const NavLinkSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1719
1719
|
} | undefined;
|
|
1720
1720
|
category?: string | undefined;
|
|
1721
1721
|
};
|
|
1722
|
-
title?: string | undefined;
|
|
1723
1722
|
id?: string | undefined;
|
|
1723
|
+
title?: string | undefined;
|
|
1724
1724
|
description?: string | undefined;
|
|
1725
1725
|
triggerWhen?: {
|
|
1726
1726
|
type: "rules";
|
|
@@ -1817,8 +1817,8 @@ export declare const NavLinkSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1817
1817
|
kind: "nav:tip";
|
|
1818
1818
|
config: {
|
|
1819
1819
|
external: boolean;
|
|
1820
|
-
title: string;
|
|
1821
1820
|
id: string;
|
|
1821
|
+
title: string;
|
|
1822
1822
|
description: string;
|
|
1823
1823
|
href?: string | undefined;
|
|
1824
1824
|
icon?: string | undefined;
|
|
@@ -1828,8 +1828,8 @@ export declare const NavLinkSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1828
1828
|
} | undefined;
|
|
1829
1829
|
category?: string | undefined;
|
|
1830
1830
|
};
|
|
1831
|
-
title?: string | undefined;
|
|
1832
1831
|
id?: string | undefined;
|
|
1832
|
+
title?: string | undefined;
|
|
1833
1833
|
description?: string | undefined;
|
|
1834
1834
|
triggerWhen?: {
|
|
1835
1835
|
type: "rules";
|
|
@@ -1925,11 +1925,11 @@ export declare const NavLinkSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1925
1925
|
}, {
|
|
1926
1926
|
kind: "nav:tip";
|
|
1927
1927
|
config: {
|
|
1928
|
-
title: string;
|
|
1929
1928
|
id: string;
|
|
1929
|
+
title: string;
|
|
1930
1930
|
description: string;
|
|
1931
|
-
external?: boolean | undefined;
|
|
1932
1931
|
href?: string | undefined;
|
|
1932
|
+
external?: boolean | undefined;
|
|
1933
1933
|
icon?: string | undefined;
|
|
1934
1934
|
anchor?: {
|
|
1935
1935
|
selector: string;
|
|
@@ -1937,8 +1937,8 @@ export declare const NavLinkSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1937
1937
|
} | undefined;
|
|
1938
1938
|
category?: string | undefined;
|
|
1939
1939
|
};
|
|
1940
|
-
title?: string | undefined;
|
|
1941
1940
|
id?: string | undefined;
|
|
1941
|
+
title?: string | undefined;
|
|
1942
1942
|
description?: string | undefined;
|
|
1943
1943
|
triggerWhen?: {
|
|
1944
1944
|
type: "rules";
|
|
@@ -2074,8 +2074,8 @@ export declare const configSchema: z.ZodObject<{
|
|
|
2074
2074
|
category: z.ZodOptional<z.ZodString>;
|
|
2075
2075
|
}, "strip", z.ZodTypeAny, {
|
|
2076
2076
|
external: boolean;
|
|
2077
|
-
title: string;
|
|
2078
2077
|
id: string;
|
|
2078
|
+
title: string;
|
|
2079
2079
|
description: string;
|
|
2080
2080
|
href?: string | undefined;
|
|
2081
2081
|
icon?: string | undefined;
|
|
@@ -2085,11 +2085,11 @@ export declare const configSchema: z.ZodObject<{
|
|
|
2085
2085
|
} | undefined;
|
|
2086
2086
|
category?: string | undefined;
|
|
2087
2087
|
}, {
|
|
2088
|
-
title: string;
|
|
2089
2088
|
id: string;
|
|
2089
|
+
title: string;
|
|
2090
2090
|
description: string;
|
|
2091
|
-
external?: boolean | undefined;
|
|
2092
2091
|
href?: string | undefined;
|
|
2092
|
+
external?: boolean | undefined;
|
|
2093
2093
|
icon?: string | undefined;
|
|
2094
2094
|
anchor?: {
|
|
2095
2095
|
selector: string;
|
|
@@ -2622,8 +2622,8 @@ export declare const configSchema: z.ZodObject<{
|
|
|
2622
2622
|
kind: "nav:tip";
|
|
2623
2623
|
config: {
|
|
2624
2624
|
external: boolean;
|
|
2625
|
-
title: string;
|
|
2626
2625
|
id: string;
|
|
2626
|
+
title: string;
|
|
2627
2627
|
description: string;
|
|
2628
2628
|
href?: string | undefined;
|
|
2629
2629
|
icon?: string | undefined;
|
|
@@ -2633,8 +2633,8 @@ export declare const configSchema: z.ZodObject<{
|
|
|
2633
2633
|
} | undefined;
|
|
2634
2634
|
category?: string | undefined;
|
|
2635
2635
|
};
|
|
2636
|
-
title?: string | undefined;
|
|
2637
2636
|
id?: string | undefined;
|
|
2637
|
+
title?: string | undefined;
|
|
2638
2638
|
description?: string | undefined;
|
|
2639
2639
|
triggerWhen?: {
|
|
2640
2640
|
type: "rules";
|
|
@@ -2730,11 +2730,11 @@ export declare const configSchema: z.ZodObject<{
|
|
|
2730
2730
|
}, {
|
|
2731
2731
|
kind: "nav:tip";
|
|
2732
2732
|
config: {
|
|
2733
|
-
title: string;
|
|
2734
2733
|
id: string;
|
|
2734
|
+
title: string;
|
|
2735
2735
|
description: string;
|
|
2736
|
-
external?: boolean | undefined;
|
|
2737
2736
|
href?: string | undefined;
|
|
2737
|
+
external?: boolean | undefined;
|
|
2738
2738
|
icon?: string | undefined;
|
|
2739
2739
|
anchor?: {
|
|
2740
2740
|
selector: string;
|
|
@@ -2742,8 +2742,8 @@ export declare const configSchema: z.ZodObject<{
|
|
|
2742
2742
|
} | undefined;
|
|
2743
2743
|
category?: string | undefined;
|
|
2744
2744
|
};
|
|
2745
|
-
title?: string | undefined;
|
|
2746
2745
|
id?: string | undefined;
|
|
2746
|
+
title?: string | undefined;
|
|
2747
2747
|
description?: string | undefined;
|
|
2748
2748
|
triggerWhen?: {
|
|
2749
2749
|
type: "rules";
|
|
@@ -2840,8 +2840,8 @@ export declare const configSchema: z.ZodObject<{
|
|
|
2840
2840
|
kind: "nav:tip";
|
|
2841
2841
|
config: {
|
|
2842
2842
|
external: boolean;
|
|
2843
|
-
title: string;
|
|
2844
2843
|
id: string;
|
|
2844
|
+
title: string;
|
|
2845
2845
|
description: string;
|
|
2846
2846
|
href?: string | undefined;
|
|
2847
2847
|
icon?: string | undefined;
|
|
@@ -2851,8 +2851,8 @@ export declare const configSchema: z.ZodObject<{
|
|
|
2851
2851
|
} | undefined;
|
|
2852
2852
|
category?: string | undefined;
|
|
2853
2853
|
};
|
|
2854
|
-
title?: string | undefined;
|
|
2855
2854
|
id?: string | undefined;
|
|
2855
|
+
title?: string | undefined;
|
|
2856
2856
|
description?: string | undefined;
|
|
2857
2857
|
triggerWhen?: {
|
|
2858
2858
|
type: "rules";
|
|
@@ -2948,11 +2948,11 @@ export declare const configSchema: z.ZodObject<{
|
|
|
2948
2948
|
}, {
|
|
2949
2949
|
kind: "nav:tip";
|
|
2950
2950
|
config: {
|
|
2951
|
-
title: string;
|
|
2952
2951
|
id: string;
|
|
2952
|
+
title: string;
|
|
2953
2953
|
description: string;
|
|
2954
|
-
external?: boolean | undefined;
|
|
2955
2954
|
href?: string | undefined;
|
|
2955
|
+
external?: boolean | undefined;
|
|
2956
2956
|
icon?: string | undefined;
|
|
2957
2957
|
anchor?: {
|
|
2958
2958
|
selector: string;
|
|
@@ -2960,8 +2960,8 @@ export declare const configSchema: z.ZodObject<{
|
|
|
2960
2960
|
} | undefined;
|
|
2961
2961
|
category?: string | undefined;
|
|
2962
2962
|
};
|
|
2963
|
-
title?: string | undefined;
|
|
2964
2963
|
id?: string | undefined;
|
|
2964
|
+
title?: string | undefined;
|
|
2965
2965
|
description?: string | undefined;
|
|
2966
2966
|
triggerWhen?: {
|
|
2967
2967
|
type: "rules";
|
|
@@ -3062,8 +3062,8 @@ export declare const configSchema: z.ZodObject<{
|
|
|
3062
3062
|
kind: "nav:tip";
|
|
3063
3063
|
config: {
|
|
3064
3064
|
external: boolean;
|
|
3065
|
-
title: string;
|
|
3066
3065
|
id: string;
|
|
3066
|
+
title: string;
|
|
3067
3067
|
description: string;
|
|
3068
3068
|
href?: string | undefined;
|
|
3069
3069
|
icon?: string | undefined;
|
|
@@ -3073,8 +3073,8 @@ export declare const configSchema: z.ZodObject<{
|
|
|
3073
3073
|
} | undefined;
|
|
3074
3074
|
category?: string | undefined;
|
|
3075
3075
|
};
|
|
3076
|
-
title?: string | undefined;
|
|
3077
3076
|
id?: string | undefined;
|
|
3077
|
+
title?: string | undefined;
|
|
3078
3078
|
description?: string | undefined;
|
|
3079
3079
|
triggerWhen?: {
|
|
3080
3080
|
type: "rules";
|
|
@@ -3176,11 +3176,11 @@ export declare const configSchema: z.ZodObject<{
|
|
|
3176
3176
|
actions?: {
|
|
3177
3177
|
kind: "nav:tip";
|
|
3178
3178
|
config: {
|
|
3179
|
-
title: string;
|
|
3180
3179
|
id: string;
|
|
3180
|
+
title: string;
|
|
3181
3181
|
description: string;
|
|
3182
|
-
external?: boolean | undefined;
|
|
3183
3182
|
href?: string | undefined;
|
|
3183
|
+
external?: boolean | undefined;
|
|
3184
3184
|
icon?: string | undefined;
|
|
3185
3185
|
anchor?: {
|
|
3186
3186
|
selector: string;
|
|
@@ -3188,8 +3188,8 @@ export declare const configSchema: z.ZodObject<{
|
|
|
3188
3188
|
} | undefined;
|
|
3189
3189
|
category?: string | undefined;
|
|
3190
3190
|
};
|
|
3191
|
-
title?: string | undefined;
|
|
3192
3191
|
id?: string | undefined;
|
|
3192
|
+
title?: string | undefined;
|
|
3193
3193
|
description?: string | undefined;
|
|
3194
3194
|
triggerWhen?: {
|
|
3195
3195
|
type: "rules";
|
|
@@ -3341,11 +3341,11 @@ export declare const navigationTargetsSchema: z.ZodOptional<z.ZodArray<z.ZodObje
|
|
|
3341
3341
|
export declare function validateNavTip(data: unknown): z.SafeParseReturnType<{
|
|
3342
3342
|
kind: "nav:tip";
|
|
3343
3343
|
config: {
|
|
3344
|
-
title: string;
|
|
3345
3344
|
id: string;
|
|
3345
|
+
title: string;
|
|
3346
3346
|
description: string;
|
|
3347
|
-
external?: boolean | undefined;
|
|
3348
3347
|
href?: string | undefined;
|
|
3348
|
+
external?: boolean | undefined;
|
|
3349
3349
|
icon?: string | undefined;
|
|
3350
3350
|
anchor?: {
|
|
3351
3351
|
selector: string;
|
|
@@ -3353,8 +3353,8 @@ export declare function validateNavTip(data: unknown): z.SafeParseReturnType<{
|
|
|
3353
3353
|
} | undefined;
|
|
3354
3354
|
category?: string | undefined;
|
|
3355
3355
|
};
|
|
3356
|
-
title?: string | undefined;
|
|
3357
3356
|
id?: string | undefined;
|
|
3357
|
+
title?: string | undefined;
|
|
3358
3358
|
description?: string | undefined;
|
|
3359
3359
|
triggerWhen?: {
|
|
3360
3360
|
type: "rules";
|
|
@@ -3451,8 +3451,8 @@ export declare function validateNavTip(data: unknown): z.SafeParseReturnType<{
|
|
|
3451
3451
|
kind: "nav:tip";
|
|
3452
3452
|
config: {
|
|
3453
3453
|
external: boolean;
|
|
3454
|
-
title: string;
|
|
3455
3454
|
id: string;
|
|
3455
|
+
title: string;
|
|
3456
3456
|
description: string;
|
|
3457
3457
|
href?: string | undefined;
|
|
3458
3458
|
icon?: string | undefined;
|
|
@@ -3462,8 +3462,8 @@ export declare function validateNavTip(data: unknown): z.SafeParseReturnType<{
|
|
|
3462
3462
|
} | undefined;
|
|
3463
3463
|
category?: string | undefined;
|
|
3464
3464
|
};
|
|
3465
|
-
title?: string | undefined;
|
|
3466
3465
|
id?: string | undefined;
|
|
3466
|
+
title?: string | undefined;
|
|
3467
3467
|
description?: string | undefined;
|
|
3468
3468
|
triggerWhen?: {
|
|
3469
3469
|
type: "rules";
|
|
@@ -3569,11 +3569,11 @@ export declare function validateNavConfig(data: unknown): z.SafeParseReturnType<
|
|
|
3569
3569
|
actions?: {
|
|
3570
3570
|
kind: "nav:tip";
|
|
3571
3571
|
config: {
|
|
3572
|
-
title: string;
|
|
3573
3572
|
id: string;
|
|
3573
|
+
title: string;
|
|
3574
3574
|
description: string;
|
|
3575
|
-
external?: boolean | undefined;
|
|
3576
3575
|
href?: string | undefined;
|
|
3576
|
+
external?: boolean | undefined;
|
|
3577
3577
|
icon?: string | undefined;
|
|
3578
3578
|
anchor?: {
|
|
3579
3579
|
selector: string;
|
|
@@ -3581,8 +3581,8 @@ export declare function validateNavConfig(data: unknown): z.SafeParseReturnType<
|
|
|
3581
3581
|
} | undefined;
|
|
3582
3582
|
category?: string | undefined;
|
|
3583
3583
|
};
|
|
3584
|
-
title?: string | undefined;
|
|
3585
3584
|
id?: string | undefined;
|
|
3585
|
+
title?: string | undefined;
|
|
3586
3586
|
description?: string | undefined;
|
|
3587
3587
|
triggerWhen?: {
|
|
3588
3588
|
type: "rules";
|
|
@@ -3683,8 +3683,8 @@ export declare function validateNavConfig(data: unknown): z.SafeParseReturnType<
|
|
|
3683
3683
|
kind: "nav:tip";
|
|
3684
3684
|
config: {
|
|
3685
3685
|
external: boolean;
|
|
3686
|
-
title: string;
|
|
3687
3686
|
id: string;
|
|
3687
|
+
title: string;
|
|
3688
3688
|
description: string;
|
|
3689
3689
|
href?: string | undefined;
|
|
3690
3690
|
icon?: string | undefined;
|
|
@@ -3694,8 +3694,8 @@ export declare function validateNavConfig(data: unknown): z.SafeParseReturnType<
|
|
|
3694
3694
|
} | undefined;
|
|
3695
3695
|
category?: string | undefined;
|
|
3696
3696
|
};
|
|
3697
|
-
title?: string | undefined;
|
|
3698
3697
|
id?: string | undefined;
|
|
3698
|
+
title?: string | undefined;
|
|
3699
3699
|
description?: string | undefined;
|
|
3700
3700
|
triggerWhen?: {
|
|
3701
3701
|
type: "rules";
|
|
@@ -3828,8 +3828,8 @@ export declare const actionStepSchemas: {
|
|
|
3828
3828
|
category: z.ZodOptional<z.ZodString>;
|
|
3829
3829
|
}, "strip", z.ZodTypeAny, {
|
|
3830
3830
|
external: boolean;
|
|
3831
|
-
title: string;
|
|
3832
3831
|
id: string;
|
|
3832
|
+
title: string;
|
|
3833
3833
|
description: string;
|
|
3834
3834
|
href?: string | undefined;
|
|
3835
3835
|
icon?: string | undefined;
|
|
@@ -3839,11 +3839,11 @@ export declare const actionStepSchemas: {
|
|
|
3839
3839
|
} | undefined;
|
|
3840
3840
|
category?: string | undefined;
|
|
3841
3841
|
}, {
|
|
3842
|
-
title: string;
|
|
3843
3842
|
id: string;
|
|
3843
|
+
title: string;
|
|
3844
3844
|
description: string;
|
|
3845
|
-
external?: boolean | undefined;
|
|
3846
3845
|
href?: string | undefined;
|
|
3846
|
+
external?: boolean | undefined;
|
|
3847
3847
|
icon?: string | undefined;
|
|
3848
3848
|
anchor?: {
|
|
3849
3849
|
selector: string;
|
|
@@ -4376,8 +4376,8 @@ export declare const actionStepSchemas: {
|
|
|
4376
4376
|
kind: "nav:tip";
|
|
4377
4377
|
config: {
|
|
4378
4378
|
external: boolean;
|
|
4379
|
-
title: string;
|
|
4380
4379
|
id: string;
|
|
4380
|
+
title: string;
|
|
4381
4381
|
description: string;
|
|
4382
4382
|
href?: string | undefined;
|
|
4383
4383
|
icon?: string | undefined;
|
|
@@ -4387,8 +4387,8 @@ export declare const actionStepSchemas: {
|
|
|
4387
4387
|
} | undefined;
|
|
4388
4388
|
category?: string | undefined;
|
|
4389
4389
|
};
|
|
4390
|
-
title?: string | undefined;
|
|
4391
4390
|
id?: string | undefined;
|
|
4391
|
+
title?: string | undefined;
|
|
4392
4392
|
description?: string | undefined;
|
|
4393
4393
|
triggerWhen?: {
|
|
4394
4394
|
type: "rules";
|
|
@@ -4484,11 +4484,11 @@ export declare const actionStepSchemas: {
|
|
|
4484
4484
|
}, {
|
|
4485
4485
|
kind: "nav:tip";
|
|
4486
4486
|
config: {
|
|
4487
|
-
title: string;
|
|
4488
4487
|
id: string;
|
|
4488
|
+
title: string;
|
|
4489
4489
|
description: string;
|
|
4490
|
-
external?: boolean | undefined;
|
|
4491
4490
|
href?: string | undefined;
|
|
4491
|
+
external?: boolean | undefined;
|
|
4492
4492
|
icon?: string | undefined;
|
|
4493
4493
|
anchor?: {
|
|
4494
4494
|
selector: string;
|
|
@@ -4496,8 +4496,8 @@ export declare const actionStepSchemas: {
|
|
|
4496
4496
|
} | undefined;
|
|
4497
4497
|
category?: string | undefined;
|
|
4498
4498
|
};
|
|
4499
|
-
title?: string | undefined;
|
|
4500
4499
|
id?: string | undefined;
|
|
4500
|
+
title?: string | undefined;
|
|
4501
4501
|
description?: string | undefined;
|
|
4502
4502
|
triggerWhen?: {
|
|
4503
4503
|
type: "rules";
|
|
@@ -4638,8 +4638,8 @@ export declare const tileWidgets: {
|
|
|
4638
4638
|
category: z.ZodOptional<z.ZodString>;
|
|
4639
4639
|
}, "strip", z.ZodTypeAny, {
|
|
4640
4640
|
external: boolean;
|
|
4641
|
-
title: string;
|
|
4642
4641
|
id: string;
|
|
4642
|
+
title: string;
|
|
4643
4643
|
description: string;
|
|
4644
4644
|
href?: string | undefined;
|
|
4645
4645
|
icon?: string | undefined;
|
|
@@ -4649,11 +4649,11 @@ export declare const tileWidgets: {
|
|
|
4649
4649
|
} | undefined;
|
|
4650
4650
|
category?: string | undefined;
|
|
4651
4651
|
}, {
|
|
4652
|
-
title: string;
|
|
4653
4652
|
id: string;
|
|
4653
|
+
title: string;
|
|
4654
4654
|
description: string;
|
|
4655
|
-
external?: boolean | undefined;
|
|
4656
4655
|
href?: string | undefined;
|
|
4656
|
+
external?: boolean | undefined;
|
|
4657
4657
|
icon?: string | undefined;
|
|
4658
4658
|
anchor?: {
|
|
4659
4659
|
selector: string;
|
|
@@ -5186,8 +5186,8 @@ export declare const tileWidgets: {
|
|
|
5186
5186
|
kind: "nav:tip";
|
|
5187
5187
|
config: {
|
|
5188
5188
|
external: boolean;
|
|
5189
|
-
title: string;
|
|
5190
5189
|
id: string;
|
|
5190
|
+
title: string;
|
|
5191
5191
|
description: string;
|
|
5192
5192
|
href?: string | undefined;
|
|
5193
5193
|
icon?: string | undefined;
|
|
@@ -5197,8 +5197,8 @@ export declare const tileWidgets: {
|
|
|
5197
5197
|
} | undefined;
|
|
5198
5198
|
category?: string | undefined;
|
|
5199
5199
|
};
|
|
5200
|
-
title?: string | undefined;
|
|
5201
5200
|
id?: string | undefined;
|
|
5201
|
+
title?: string | undefined;
|
|
5202
5202
|
description?: string | undefined;
|
|
5203
5203
|
triggerWhen?: {
|
|
5204
5204
|
type: "rules";
|
|
@@ -5294,11 +5294,11 @@ export declare const tileWidgets: {
|
|
|
5294
5294
|
}, {
|
|
5295
5295
|
kind: "nav:tip";
|
|
5296
5296
|
config: {
|
|
5297
|
-
title: string;
|
|
5298
5297
|
id: string;
|
|
5298
|
+
title: string;
|
|
5299
5299
|
description: string;
|
|
5300
|
-
external?: boolean | undefined;
|
|
5301
5300
|
href?: string | undefined;
|
|
5301
|
+
external?: boolean | undefined;
|
|
5302
5302
|
icon?: string | undefined;
|
|
5303
5303
|
anchor?: {
|
|
5304
5304
|
selector: string;
|
|
@@ -5306,8 +5306,8 @@ export declare const tileWidgets: {
|
|
|
5306
5306
|
} | undefined;
|
|
5307
5307
|
category?: string | undefined;
|
|
5308
5308
|
};
|
|
5309
|
-
title?: string | undefined;
|
|
5310
5309
|
id?: string | undefined;
|
|
5310
|
+
title?: string | undefined;
|
|
5311
5311
|
description?: string | undefined;
|
|
5312
5312
|
triggerWhen?: {
|
|
5313
5313
|
type: "rules";
|
|
@@ -5404,8 +5404,8 @@ export declare const tileWidgets: {
|
|
|
5404
5404
|
kind: "nav:tip";
|
|
5405
5405
|
config: {
|
|
5406
5406
|
external: boolean;
|
|
5407
|
-
title: string;
|
|
5408
5407
|
id: string;
|
|
5408
|
+
title: string;
|
|
5409
5409
|
description: string;
|
|
5410
5410
|
href?: string | undefined;
|
|
5411
5411
|
icon?: string | undefined;
|
|
@@ -5415,8 +5415,8 @@ export declare const tileWidgets: {
|
|
|
5415
5415
|
} | undefined;
|
|
5416
5416
|
category?: string | undefined;
|
|
5417
5417
|
};
|
|
5418
|
-
title?: string | undefined;
|
|
5419
5418
|
id?: string | undefined;
|
|
5419
|
+
title?: string | undefined;
|
|
5420
5420
|
description?: string | undefined;
|
|
5421
5421
|
triggerWhen?: {
|
|
5422
5422
|
type: "rules";
|
|
@@ -5512,11 +5512,11 @@ export declare const tileWidgets: {
|
|
|
5512
5512
|
}, {
|
|
5513
5513
|
kind: "nav:tip";
|
|
5514
5514
|
config: {
|
|
5515
|
-
title: string;
|
|
5516
5515
|
id: string;
|
|
5516
|
+
title: string;
|
|
5517
5517
|
description: string;
|
|
5518
|
-
external?: boolean | undefined;
|
|
5519
5518
|
href?: string | undefined;
|
|
5519
|
+
external?: boolean | undefined;
|
|
5520
5520
|
icon?: string | undefined;
|
|
5521
5521
|
anchor?: {
|
|
5522
5522
|
selector: string;
|
|
@@ -5524,8 +5524,8 @@ export declare const tileWidgets: {
|
|
|
5524
5524
|
} | undefined;
|
|
5525
5525
|
category?: string | undefined;
|
|
5526
5526
|
};
|
|
5527
|
-
title?: string | undefined;
|
|
5528
5527
|
id?: string | undefined;
|
|
5528
|
+
title?: string | undefined;
|
|
5529
5529
|
description?: string | undefined;
|
|
5530
5530
|
triggerWhen?: {
|
|
5531
5531
|
type: "rules";
|
|
@@ -5626,8 +5626,8 @@ export declare const tileWidgets: {
|
|
|
5626
5626
|
kind: "nav:tip";
|
|
5627
5627
|
config: {
|
|
5628
5628
|
external: boolean;
|
|
5629
|
-
title: string;
|
|
5630
5629
|
id: string;
|
|
5630
|
+
title: string;
|
|
5631
5631
|
description: string;
|
|
5632
5632
|
href?: string | undefined;
|
|
5633
5633
|
icon?: string | undefined;
|
|
@@ -5637,8 +5637,8 @@ export declare const tileWidgets: {
|
|
|
5637
5637
|
} | undefined;
|
|
5638
5638
|
category?: string | undefined;
|
|
5639
5639
|
};
|
|
5640
|
-
title?: string | undefined;
|
|
5641
5640
|
id?: string | undefined;
|
|
5641
|
+
title?: string | undefined;
|
|
5642
5642
|
description?: string | undefined;
|
|
5643
5643
|
triggerWhen?: {
|
|
5644
5644
|
type: "rules";
|
|
@@ -5740,11 +5740,11 @@ export declare const tileWidgets: {
|
|
|
5740
5740
|
actions?: {
|
|
5741
5741
|
kind: "nav:tip";
|
|
5742
5742
|
config: {
|
|
5743
|
-
title: string;
|
|
5744
5743
|
id: string;
|
|
5744
|
+
title: string;
|
|
5745
5745
|
description: string;
|
|
5746
|
-
external?: boolean | undefined;
|
|
5747
5746
|
href?: string | undefined;
|
|
5747
|
+
external?: boolean | undefined;
|
|
5748
5748
|
icon?: string | undefined;
|
|
5749
5749
|
anchor?: {
|
|
5750
5750
|
selector: string;
|
|
@@ -5752,8 +5752,8 @@ export declare const tileWidgets: {
|
|
|
5752
5752
|
} | undefined;
|
|
5753
5753
|
category?: string | undefined;
|
|
5754
5754
|
};
|
|
5755
|
-
title?: string | undefined;
|
|
5756
5755
|
id?: string | undefined;
|
|
5756
|
+
title?: string | undefined;
|
|
5757
5757
|
description?: string | undefined;
|
|
5758
5758
|
triggerWhen?: {
|
|
5759
5759
|
type: "rules";
|