@clusterenvision/ui-framework 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +295 -0
- package/dist/ai-assistant-Db002XYC.d.ts +92 -0
- package/dist/ai-assistant-EobSUV70.d.cts +92 -0
- package/dist/browser-DnHpnWwE.d.cts +354 -0
- package/dist/browser-Dx4oKf5e.d.ts +354 -0
- package/dist/browser-signals-07qodpYT.d.cts +66 -0
- package/dist/browser-signals-07qodpYT.d.ts +66 -0
- package/dist/browser-signals.cjs +32 -0
- package/dist/browser-signals.cjs.map +1 -0
- package/dist/browser-signals.d.cts +1 -0
- package/dist/browser-signals.d.ts +1 -0
- package/dist/browser-signals.js +3 -0
- package/dist/browser-signals.js.map +1 -0
- package/dist/browser.cjs +197 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.cts +13 -0
- package/dist/browser.d.ts +13 -0
- package/dist/browser.js +12 -0
- package/dist/browser.js.map +1 -0
- package/dist/chunk-22HQL2Y4.js +568 -0
- package/dist/chunk-22HQL2Y4.js.map +1 -0
- package/dist/chunk-3ZBRNFEE.js +1525 -0
- package/dist/chunk-3ZBRNFEE.js.map +1 -0
- package/dist/chunk-4HRORR2Q.js +1953 -0
- package/dist/chunk-4HRORR2Q.js.map +1 -0
- package/dist/chunk-4L3UXVL5.cjs +68 -0
- package/dist/chunk-4L3UXVL5.cjs.map +1 -0
- package/dist/chunk-6BYWFGQY.cjs +226 -0
- package/dist/chunk-6BYWFGQY.cjs.map +1 -0
- package/dist/chunk-7SCIB5HP.js +57 -0
- package/dist/chunk-7SCIB5HP.js.map +1 -0
- package/dist/chunk-BBAUALNU.js +888 -0
- package/dist/chunk-BBAUALNU.js.map +1 -0
- package/dist/chunk-CHLDE4JQ.js +715 -0
- package/dist/chunk-CHLDE4JQ.js.map +1 -0
- package/dist/chunk-CXTAUXLG.cjs +71 -0
- package/dist/chunk-CXTAUXLG.cjs.map +1 -0
- package/dist/chunk-D2USIT6V.js +121 -0
- package/dist/chunk-D2USIT6V.js.map +1 -0
- package/dist/chunk-D3H5CGVD.js +36 -0
- package/dist/chunk-D3H5CGVD.js.map +1 -0
- package/dist/chunk-DQBX75NJ.js +92 -0
- package/dist/chunk-DQBX75NJ.js.map +1 -0
- package/dist/chunk-DRPG2DFX.js +208 -0
- package/dist/chunk-DRPG2DFX.js.map +1 -0
- package/dist/chunk-EFOOXCY7.cjs +41 -0
- package/dist/chunk-EFOOXCY7.cjs.map +1 -0
- package/dist/chunk-FFCZSYC7.cjs +906 -0
- package/dist/chunk-FFCZSYC7.cjs.map +1 -0
- package/dist/chunk-FNXIYAET.cjs +1593 -0
- package/dist/chunk-FNXIYAET.cjs.map +1 -0
- package/dist/chunk-I6GNUM3P.cjs +63 -0
- package/dist/chunk-I6GNUM3P.cjs.map +1 -0
- package/dist/chunk-IHAMVLRY.js +129 -0
- package/dist/chunk-IHAMVLRY.js.map +1 -0
- package/dist/chunk-IRBUKIRF.cjs +133 -0
- package/dist/chunk-IRBUKIRF.cjs.map +1 -0
- package/dist/chunk-KPG5HAHK.cjs +97 -0
- package/dist/chunk-KPG5HAHK.cjs.map +1 -0
- package/dist/chunk-N7Q2ESLG.cjs +130 -0
- package/dist/chunk-N7Q2ESLG.cjs.map +1 -0
- package/dist/chunk-PFBEIFVS.js +180 -0
- package/dist/chunk-PFBEIFVS.js.map +1 -0
- package/dist/chunk-PVZVFICK.cjs +318 -0
- package/dist/chunk-PVZVFICK.cjs.map +1 -0
- package/dist/chunk-Q3KH6HMU.js +305 -0
- package/dist/chunk-Q3KH6HMU.js.map +1 -0
- package/dist/chunk-QPAAV32J.cjs +1985 -0
- package/dist/chunk-QPAAV32J.cjs.map +1 -0
- package/dist/chunk-R6XQUMWT.cjs +61 -0
- package/dist/chunk-R6XQUMWT.cjs.map +1 -0
- package/dist/chunk-SA5UD5B6.js +92 -0
- package/dist/chunk-SA5UD5B6.js.map +1 -0
- package/dist/chunk-SM35JOYD.cjs +211 -0
- package/dist/chunk-SM35JOYD.cjs.map +1 -0
- package/dist/chunk-SZQNIMYI.cjs +592 -0
- package/dist/chunk-SZQNIMYI.cjs.map +1 -0
- package/dist/chunk-T6T7QE4J.js +224 -0
- package/dist/chunk-T6T7QE4J.js.map +1 -0
- package/dist/chunk-TIF372DZ.js +65 -0
- package/dist/chunk-TIF372DZ.js.map +1 -0
- package/dist/chunk-V6JCOBGY.js +69 -0
- package/dist/chunk-V6JCOBGY.js.map +1 -0
- package/dist/chunk-VHUXNDW2.cjs +189 -0
- package/dist/chunk-VHUXNDW2.cjs.map +1 -0
- package/dist/chunk-W3LNNY3U.cjs +729 -0
- package/dist/chunk-W3LNNY3U.cjs.map +1 -0
- package/dist/chunk-ZUWSU4OA.js +61 -0
- package/dist/chunk-ZUWSU4OA.js.map +1 -0
- package/dist/chunk-ZWUA2LPB.cjs +103 -0
- package/dist/chunk-ZWUA2LPB.cjs.map +1 -0
- package/dist/cli/index.cjs +566 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +558 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/compiler/index.cjs +80 -0
- package/dist/compiler/index.cjs.map +1 -0
- package/dist/compiler/index.d.cts +130 -0
- package/dist/compiler/index.d.ts +130 -0
- package/dist/compiler/index.js +3 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/component-BVzvepw9.d.cts +90 -0
- package/dist/component-wTxZ2BPD.d.ts +90 -0
- package/dist/index-CpxDa60m.d.cts +644 -0
- package/dist/index-CpxDa60m.d.ts +644 -0
- package/dist/index.cjs +1356 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +165 -0
- package/dist/index.d.ts +165 -0
- package/dist/index.js +772 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/dom.cjs +102 -0
- package/dist/lib/dom.cjs.map +1 -0
- package/dist/lib/dom.d.cts +373 -0
- package/dist/lib/dom.d.ts +373 -0
- package/dist/lib/dom.js +3 -0
- package/dist/lib/dom.js.map +1 -0
- package/dist/lib/icons.cjs +20 -0
- package/dist/lib/icons.cjs.map +1 -0
- package/dist/lib/icons.d.cts +64 -0
- package/dist/lib/icons.d.ts +64 -0
- package/dist/lib/icons.js +3 -0
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/index.cjs +247 -0
- package/dist/lib/index.cjs.map +1 -0
- package/dist/lib/index.d.cts +30 -0
- package/dist/lib/index.d.ts +30 -0
- package/dist/lib/index.js +92 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/theme.cjs +56 -0
- package/dist/lib/theme.cjs.map +1 -0
- package/dist/lib/theme.d.cts +27 -0
- package/dist/lib/theme.d.ts +27 -0
- package/dist/lib/theme.js +3 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/router-B9kms5XQ.d.ts +124 -0
- package/dist/router-YnpW_sIK.d.cts +124 -0
- package/dist/runtime/adapters/angular.cjs +48 -0
- package/dist/runtime/adapters/angular.cjs.map +1 -0
- package/dist/runtime/adapters/angular.d.cts +38 -0
- package/dist/runtime/adapters/angular.d.ts +38 -0
- package/dist/runtime/adapters/angular.js +46 -0
- package/dist/runtime/adapters/angular.js.map +1 -0
- package/dist/runtime/adapters/react.cjs +41 -0
- package/dist/runtime/adapters/react.cjs.map +1 -0
- package/dist/runtime/adapters/react.d.cts +26 -0
- package/dist/runtime/adapters/react.d.ts +26 -0
- package/dist/runtime/adapters/react.js +39 -0
- package/dist/runtime/adapters/react.js.map +1 -0
- package/dist/runtime/adapters/vue.cjs +44 -0
- package/dist/runtime/adapters/vue.cjs.map +1 -0
- package/dist/runtime/adapters/vue.d.cts +37 -0
- package/dist/runtime/adapters/vue.d.ts +37 -0
- package/dist/runtime/adapters/vue.js +42 -0
- package/dist/runtime/adapters/vue.js.map +1 -0
- package/dist/runtime/components/ai-assistant.cjs +18 -0
- package/dist/runtime/components/ai-assistant.cjs.map +1 -0
- package/dist/runtime/components/ai-assistant.d.cts +8 -0
- package/dist/runtime/components/ai-assistant.d.ts +8 -0
- package/dist/runtime/components/ai-assistant.js +9 -0
- package/dist/runtime/components/ai-assistant.js.map +1 -0
- package/dist/runtime/components/ai-summary-card.cjs +18 -0
- package/dist/runtime/components/ai-summary-card.cjs.map +1 -0
- package/dist/runtime/components/ai-summary-card.d.cts +19 -0
- package/dist/runtime/components/ai-summary-card.d.ts +19 -0
- package/dist/runtime/components/ai-summary-card.js +9 -0
- package/dist/runtime/components/ai-summary-card.js.map +1 -0
- package/dist/runtime/router.cjs +429 -0
- package/dist/runtime/router.cjs.map +1 -0
- package/dist/runtime/router.d.cts +2 -0
- package/dist/runtime/router.d.ts +2 -0
- package/dist/runtime/router.js +421 -0
- package/dist/runtime/router.js.map +1 -0
- package/dist/runtime/server.cjs +125 -0
- package/dist/runtime/server.cjs.map +1 -0
- package/dist/runtime/server.d.cts +27 -0
- package/dist/runtime/server.d.ts +27 -0
- package/dist/runtime/server.js +117 -0
- package/dist/runtime/server.js.map +1 -0
- package/dist/runtime/workflow/index.cjs +282 -0
- package/dist/runtime/workflow/index.cjs.map +1 -0
- package/dist/runtime/workflow/index.d.cts +1 -0
- package/dist/runtime/workflow/index.d.ts +1 -0
- package/dist/runtime/workflow/index.js +5 -0
- package/dist/runtime/workflow/index.js.map +1 -0
- package/dist/tracing-DGdvMCEl.d.cts +109 -0
- package/dist/tracing-DGdvMCEl.d.ts +109 -0
- package/dist/types-C4RXXKfk.d.cts +76 -0
- package/dist/types-C4RXXKfk.d.ts +76 -0
- package/package.json +166 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/dom.ts"],"names":["store"],"mappings":"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","file":"chunk-SZQNIMYI.cjs","sourcesContent":["/**\n * @fileoverview CE DOM Utilities\n * @description Comprehensive DOM manipulation library for TypeScript projects\n * @author ClusterEnvision\n * @version 2.0.0\n *\n * Provides a jQuery-like chainable API with full type safety, optimized for\n * modern browsers and production use. Includes performance optimizations,\n * error handling, and extensive utility functions.\n *\n * @example\n * ```typescript\n * import { $, create, delegate } from '@app/lib/dom';\n *\n * // Select and manipulate\n * $('.button').addClass('active').on('click', handler);\n *\n * // Create elements\n * const btn = create('button', {\n * text: 'Click me',\n * className: 'btn primary',\n * on: { click: () => console.log('clicked') }\n * });\n *\n * // Event delegation\n * delegate('click', '.dynamic-btn', (e, target) => {\n * console.log('Delegated click', target);\n * });\n * ```\n */\n\n// ============================================================================\n// CONSTANTS & CONFIGURATION\n// ============================================================================\n\nconst DOM_CONFIG: { DEBUG: boolean; ENABLE_CACHE: boolean; CACHE_SIZE: number } = {\n /** Enable debug logging */\n DEBUG: false,\n /** Cache selector results (experimental) */\n ENABLE_CACHE: false,\n /** Maximum cached selectors */\n CACHE_SIZE: 100,\n};\n\n/** Enable/disable debug mode */\nexport function setDebugMode(enabled: boolean): void {\n DOM_CONFIG.DEBUG = enabled;\n}\n\n// ============================================================================\n// TYPES & INTERFACES\n// ============================================================================\n\nexport type ElementInput = string | HTMLElement | null | undefined;\nexport type ElementsInput = string | HTMLElement[] | NodeListOf<Element>;\nexport type EventHandler<T extends Event = Event> = (event: T) => void;\nexport type DelegateHandler = (event: Event, target: HTMLElement) => void;\n\n/**\n * Options for creating elements\n * @template K - HTML element tag name type\n */\nexport interface CreateElementOptions {\n /** CSS class name */\n className?: string;\n /** Array of CSS classes */\n classes?: string[];\n /** Element ID */\n id?: string;\n /** Text content */\n text?: string;\n /** HTML content */\n html?: string;\n /** HTML attributes */\n attrs?: Record<string, string | number | boolean>;\n /** Data attributes (without 'data-' prefix) */\n data?: Record<string, string | number | boolean>;\n /** Inline styles */\n styles?: Record<string, string | number>;\n /** Event listeners */\n on?: Record<string, EventListener>;\n /** Child elements or text nodes */\n children?: (HTMLElement | string)[];\n}\n\n/**\n * Chainable DOM element wrapper\n * Provides jQuery-like API for DOM manipulation\n */\nexport interface DOMElement {\n /** The underlying HTMLElement */\n readonly el: HTMLElement | null;\n\n // Class manipulation\n addClass(...classes: string[]): DOMElement;\n removeClass(...classes: string[]): DOMElement;\n toggleClass(className: string, force?: boolean): DOMElement;\n hasClass(className: string): boolean;\n\n // Attributes\n attr(name: string): string | null;\n attr(name: string, value: string | number | boolean): DOMElement;\n removeAttr(name: string): DOMElement;\n data(key: string): string | null;\n data(key: string, value: string | number | boolean): DOMElement;\n\n // Content\n html(): string;\n html(content: string): DOMElement;\n text(): string;\n text(content: string): DOMElement;\n val(): string;\n val(value: string): DOMElement;\n\n // Events\n on(event: string, handler: EventListener, options?: AddEventListenerOptions): DOMElement;\n off(event: string, handler: EventListener): DOMElement;\n once(event: string, handler: EventListener): DOMElement;\n trigger(event: string, detail?: unknown): DOMElement;\n\n // DOM manipulation\n append(content: string | HTMLElement | HTMLElement[]): DOMElement;\n prepend(content: string | HTMLElement | HTMLElement[]): DOMElement;\n before(content: string | HTMLElement): DOMElement;\n after(content: string | HTMLElement): DOMElement;\n remove(): void;\n empty(): DOMElement;\n replace(newContent: string | HTMLElement): void;\n\n // Traversal\n parent(): DOMElement;\n children(): HTMLElement[];\n siblings(): HTMLElement[];\n find(selector: string): DOMElement;\n findAll(selector: string): HTMLElement[];\n closest(selector: string): DOMElement;\n next(): DOMElement;\n prev(): DOMElement;\n\n // Styles\n css(property: string): string;\n css(property: string, value: string | number): DOMElement;\n css(properties: Record<string, string | number>): DOMElement;\n show(): DOMElement;\n hide(): DOMElement;\n toggle(force?: boolean): DOMElement;\n\n // Dimensions\n width(): number;\n height(): number;\n offset(): { top: number; left: number };\n scrollTop(): number;\n scrollTop(value: number): DOMElement;\n\n // State\n isVisible(): boolean;\n isHidden(): boolean;\n exists(): boolean;\n\n // Focus\n focus(): DOMElement;\n blur(): DOMElement;\n}\n\n// ============================================================================\n// UTILITY FUNCTIONS\n// ============================================================================\n\n/**\n * Internal logging utility\n * @internal\n */\nfunction log(message: string, ...args: unknown[]): void {\n if (DOM_CONFIG.DEBUG) {\n console.log(`[DOM] ${message}`, ...args);\n }\n}\n\n/**\n * Safe selector query with error handling\n * @internal\n */\nfunction safeQuerySelector(selector: string, context: ParentNode = document): HTMLElement | null {\n try {\n const found = context.querySelector(selector);\n return found instanceof HTMLElement ? found : null;\n } catch (error) {\n log(`Invalid selector: ${selector}`, error);\n return null;\n }\n}\n\n/**\n * Safe querySelectorAll with error handling\n * @internal\n */\nfunction safeQuerySelectorAll(selector: string, context: ParentNode = document): HTMLElement[] {\n try {\n return Array.from(context.querySelectorAll(selector)).filter(\n (node): node is HTMLElement => node instanceof HTMLElement,\n );\n } catch (error) {\n log(`Invalid selector: ${selector}`, error);\n return [];\n }\n}\n\n// ============================================================================\n// CHAINABLE DOM ELEMENT IMPLEMENTATION\n// ============================================================================\n\n/**\n * Implementation of DOMElement interface\n * @internal\n */\nclass DOMElementImpl implements DOMElement {\n readonly el: HTMLElement | null;\n\n constructor(element: HTMLElement | null) {\n this.el = element;\n }\n\n // Class manipulation\n addClass(...classes: string[]): DOMElement {\n this.el?.classList.add(...classes.filter(Boolean));\n return this;\n }\n\n removeClass(...classes: string[]): DOMElement {\n this.el?.classList.remove(...classes.filter(Boolean));\n return this;\n }\n\n toggleClass(className: string, force?: boolean): DOMElement {\n if (force === undefined) {\n this.el?.classList.toggle(className);\n } else {\n this.el?.classList.toggle(className, force);\n }\n return this;\n }\n\n hasClass(className: string): boolean {\n return this.el?.classList.contains(className) ?? false;\n }\n\n // Attributes\n attr(name: string): string | null;\n attr(name: string, value: string | number | boolean): DOMElement;\n attr(name: string, value?: string | number | boolean): string | null | DOMElement {\n if (value === undefined) {\n return this.el?.getAttribute(name) ?? null;\n }\n this.el?.setAttribute(name, String(value));\n return this;\n }\n\n removeAttr(name: string): DOMElement {\n this.el?.removeAttribute(name);\n return this;\n }\n\n data(key: string): string | null;\n data(key: string, value: string | number | boolean): DOMElement;\n data(key: string, value?: string | number | boolean): string | null | DOMElement {\n const dataKey = `data-${key}`;\n if (value === undefined) {\n return this.el?.getAttribute(dataKey) ?? null;\n }\n this.el?.setAttribute(dataKey, String(value));\n return this;\n }\n\n // Content\n html(): string;\n html(content: string): DOMElement;\n html(content?: string): string | DOMElement {\n if (content === undefined) {\n return this.el?.innerHTML ?? '';\n }\n if (this.el) this.el.innerHTML = content;\n return this;\n }\n\n text(): string;\n text(content: string): DOMElement;\n text(content?: string): string | DOMElement {\n if (content === undefined) {\n return this.el?.textContent ?? '';\n }\n if (this.el) this.el.textContent = content;\n return this;\n }\n\n val(): string;\n val(value: string): DOMElement;\n val(value?: string): string | DOMElement {\n if (!(this.el instanceof HTMLInputElement || this.el instanceof HTMLTextAreaElement || this.el instanceof HTMLSelectElement)) {\n return '';\n }\n if (value === undefined) {\n return this.el.value;\n }\n this.el.value = value;\n return this;\n }\n\n // Events\n on(event: string, handler: EventListener, options?: AddEventListenerOptions): DOMElement {\n this.el?.addEventListener(event, handler, options);\n return this;\n }\n\n off(event: string, handler: EventListener): DOMElement {\n this.el?.removeEventListener(event, handler);\n return this;\n }\n\n once(event: string, handler: EventListener): DOMElement {\n this.el?.addEventListener(event, handler, { once: true });\n return this;\n }\n\n trigger(event: string, detail?: unknown): DOMElement {\n if (this.el) {\n const customEvent = new CustomEvent(event, { detail, bubbles: true, cancelable: true });\n this.el.dispatchEvent(customEvent);\n }\n return this;\n }\n\n // DOM manipulation\n append(content: string | HTMLElement | HTMLElement[]): DOMElement {\n const el = this.el;\n if (!el) return this;\n if (typeof content === 'string') {\n el.insertAdjacentHTML('beforeend', content);\n } else if (Array.isArray(content)) {\n content.forEach(node => el.appendChild(node));\n } else {\n el.appendChild(content);\n }\n return this;\n }\n\n prepend(content: string | HTMLElement | HTMLElement[]): DOMElement {\n const el = this.el;\n if (!el) return this;\n if (typeof content === 'string') {\n el.insertAdjacentHTML('afterbegin', content);\n } else if (Array.isArray(content)) {\n content.reverse().forEach(node => el.insertBefore(node, el.firstChild));\n } else {\n el.insertBefore(content, el.firstChild);\n }\n return this;\n }\n\n before(content: string | HTMLElement): DOMElement {\n if (!this.el) return this;\n if (typeof content === 'string') {\n this.el.insertAdjacentHTML('beforebegin', content);\n } else {\n this.el.parentElement?.insertBefore(content, this.el);\n }\n return this;\n }\n\n after(content: string | HTMLElement): DOMElement {\n if (!this.el) return this;\n if (typeof content === 'string') {\n this.el.insertAdjacentHTML('afterend', content);\n } else {\n this.el.parentElement?.insertBefore(content, this.el.nextSibling);\n }\n return this;\n }\n\n remove(): void {\n this.el?.remove();\n }\n\n empty(): DOMElement {\n if (this.el) this.el.innerHTML = '';\n return this;\n }\n\n replace(newContent: string | HTMLElement): void {\n if (!this.el) return;\n if (typeof newContent === 'string') {\n this.el.outerHTML = newContent;\n } else {\n this.el.parentElement?.replaceChild(newContent, this.el);\n }\n }\n\n // Traversal\n parent(): DOMElement {\n const el = this.el;\n return new DOMElementImpl(el ? el.parentElement : null);\n }\n\n children(): HTMLElement[] {\n const el = this.el;\n return el ? Array.from(el.children).filter((child): child is HTMLElement => child instanceof HTMLElement) : [];\n }\n\n siblings(): HTMLElement[] {\n const el = this.el;\n if (!el?.parentElement) return [];\n return Array.from(el.parentElement.children).filter(child => child !== el) as HTMLElement[];\n }\n\n find(selector: string): DOMElement {\n const el = this.el;\n if (!el) return new DOMElementImpl(null);\n const found = el.querySelector(selector);\n return new DOMElementImpl(found instanceof HTMLElement ? found : null);\n }\n\n findAll(selector: string): HTMLElement[] {\n const el = this.el;\n return el\n ? Array.from(el.querySelectorAll(selector)).filter((node): node is HTMLElement => node instanceof HTMLElement)\n : [];\n }\n\n closest(selector: string): DOMElement {\n const el = this.el;\n if (!el) return new DOMElementImpl(null);\n const found = el.closest(selector);\n return new DOMElementImpl(found instanceof HTMLElement ? found : null);\n }\n\n next(): DOMElement {\n const el = this.el?.nextElementSibling;\n return new DOMElementImpl(el instanceof HTMLElement ? el : null);\n }\n\n prev(): DOMElement {\n const el = this.el?.previousElementSibling;\n return new DOMElementImpl(el instanceof HTMLElement ? el : null);\n }\n\n // Styles\n css(property: string): string;\n css(property: string, value: string | number): DOMElement;\n css(properties: Record<string, string | number>): DOMElement;\n css(propertyOrProperties: string | Record<string, string | number>, value?: string | number): string | DOMElement {\n const el = this.el;\n if (!el) return typeof propertyOrProperties === 'string' ? '' : this;\n\n if (typeof propertyOrProperties === 'string') {\n if (value === undefined) {\n return window.getComputedStyle(el).getPropertyValue(propertyOrProperties);\n }\n el.style.setProperty(propertyOrProperties, String(value));\n return this;\n }\n\n Object.entries(propertyOrProperties).forEach(([prop, val]) => {\n el.style.setProperty(prop, String(val));\n });\n return this;\n }\n\n show(): DOMElement {\n if (this.el) this.el.style.display = '';\n return this;\n }\n\n hide(): DOMElement {\n if (this.el) this.el.style.display = 'none';\n return this;\n }\n\n toggle(force?: boolean): DOMElement {\n if (!this.el) return this;\n const shouldShow = force ?? this.isHidden();\n return shouldShow ? this.show() : this.hide();\n }\n\n // Dimensions\n width(): number {\n return this.el?.offsetWidth ?? 0;\n }\n\n height(): number {\n return this.el?.offsetHeight ?? 0;\n }\n\n offset(): { top: number; left: number } {\n if (!this.el) return { top: 0, left: 0 };\n const rect = this.el.getBoundingClientRect();\n return {\n top: rect.top + window.scrollY,\n left: rect.left + window.scrollX\n };\n }\n\n scrollTop(): number;\n scrollTop(value: number): DOMElement;\n scrollTop(value?: number): number | DOMElement {\n if (!this.el) return value === undefined ? 0 : this;\n if (value === undefined) {\n return this.el.scrollTop;\n }\n this.el.scrollTop = value;\n return this;\n }\n\n // State\n isVisible(): boolean {\n if (!this.el) return false;\n return this.el.offsetParent !== null && window.getComputedStyle(this.el).display !== 'none';\n }\n\n isHidden(): boolean {\n return !this.isVisible();\n }\n\n exists(): boolean {\n return this.el !== null;\n }\n\n // Focus\n focus(): DOMElement {\n this.el?.focus();\n return this;\n }\n\n blur(): DOMElement {\n this.el?.blur();\n return this;\n }\n}\n\n// ============================================================================\n// CORE SELECTORS\n// ============================================================================\n\n/**\n * Select a single element (jQuery-like $)\n *\n * @param selector - CSS selector string or HTMLElement\n * @returns DOMElement wrapper for chainable operations\n *\n * @example\n * ```typescript\n * // Select by CSS selector\n * $('button').addClass('active').on('click', handler);\n *\n * // Wrap existing element\n * const el = document.getElementById('app');\n * $(el).css('color', 'red');\n *\n * // Null-safe\n * $('.non-existent').addClass('foo'); // No error\n * ```\n */\nexport function $(selector: ElementInput): DOMElement {\n if (!selector) return new DOMElementImpl(null);\n\n if (typeof selector === 'string') {\n return new DOMElementImpl(safeQuerySelector(selector));\n }\n\n return new DOMElementImpl(selector);\n}\n\n/**\n * Select multiple elements\n *\n * @param selector - CSS selector string\n * @returns Array of HTMLElements (not wrapped)\n *\n * @example\n * ```typescript\n * // Get all matching elements\n * $$('.items').forEach(el => $(el).addClass('processed'));\n *\n * // Map and filter\n * const visible = $$('.item').filter(el => $(el).isVisible());\n * ```\n */\nexport function $$(selector: string): HTMLElement[] {\n return safeQuerySelectorAll(selector);\n}\n\n/**\n * Select by ID (faster than querySelector)\n *\n * @param id - Element ID (without # prefix)\n * @returns DOMElement wrapper\n *\n * @example\n * ```typescript\n * $id('app').html('<h1>Hello</h1>');\n * $id('sidebar').addClass('collapsed');\n * ```\n */\nexport function $id(id: string): DOMElement {\n return new DOMElementImpl(document.getElementById(id));\n}\n\n// ============================================================================\n// ELEMENT CREATION\n// ============================================================================\n\n/**\n * Create a new element with comprehensive options\n *\n * @template K - HTML element tag name type\n * @param tag - HTML tag name (e.g., 'div', 'button', 'input')\n * @param options - Configuration options for the element\n * @returns Created HTMLElement of the specified type\n *\n * @example\n * ```typescript\n * // Simple button\n * const btn = create('button', {\n * className: 'btn btn-primary',\n * text: 'Click me'\n * });\n *\n * // Complex form input\n * const input = create('input', {\n * classes: ['form-control', 'input-lg'],\n * attrs: { type: 'email', placeholder: 'Enter email', required: true },\n * data: { validation: 'email', maxLength: '255' },\n * on: {\n * input: (e) => console.log('Input changed:', e.target.value),\n * blur: validateEmail\n * }\n * });\n *\n * // Container with children\n * const card = create('div', {\n * className: 'card',\n * children: [\n * create('h3', { text: 'Card Title' }),\n * create('p', { text: 'Card content goes here' }),\n * create('button', { text: 'Action', className: 'btn' })\n * ]\n * });\n * ```\n */\nexport function create<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n options?: CreateElementOptions\n): HTMLElementTagNameMap[K] {\n const el = document.createElement(tag);\n\n if (!options) return el;\n\n // Set className (single string)\n if (options.className) el.className = options.className;\n\n // Add classes (array of strings)\n if (options.classes) {\n const validClasses = options.classes.filter(Boolean);\n if (validClasses.length > 0) {\n el.classList.add(...validClasses);\n }\n }\n\n // Set ID\n if (options.id) el.id = options.id;\n\n // Set text content (safe, no HTML injection)\n if (options.text !== undefined) el.textContent = options.text;\n\n // Set HTML content (use with caution)\n if (options.html !== undefined) {\n log(`Setting innerHTML on ${tag} element`);\n el.innerHTML = options.html;\n }\n\n // Set HTML attributes\n if (options.attrs) {\n Object.entries(options.attrs).forEach(([key, value]) => {\n el.setAttribute(key, String(value));\n });\n }\n\n // Set data attributes (automatically prefixed with 'data-')\n if (options.data) {\n Object.entries(options.data).forEach(([key, value]) => {\n el.setAttribute(`data-${key}`, String(value));\n });\n }\n\n // Apply inline styles\n if (options.styles) {\n Object.entries(options.styles).forEach(([key, value]) => {\n el.style.setProperty(key, String(value));\n });\n }\n\n // Attach event listeners\n if (options.on) {\n Object.entries(options.on).forEach(([event, handler]) => {\n el.addEventListener(event, handler);\n });\n }\n\n // Append children\n if (options.children) {\n options.children.forEach(child => {\n if (typeof child === 'string') {\n el.appendChild(document.createTextNode(child));\n return;\n }\n el.appendChild(child);\n });\n }\n\n return el;\n}\n\n/**\n * Create a document fragment from HTML string\n *\n * @param html - HTML string to parse\n * @returns DocumentFragment containing parsed elements\n *\n * @example\n * ```typescript\n * const frag = fragment(`\n * <div class=\"card\">\n * <h3>Title</h3>\n * <p>Content</p>\n * </div>\n * `);\n * document.body.appendChild(frag);\n * ```\n */\nexport function fragment(html: string): DocumentFragment {\n const template = document.createElement('template');\n template.innerHTML = html.trim();\n return template.content;\n}\n\n// ============================================================================\n// EVENT DELEGATION\n// ============================================================================\n\n/**\n * Event delegation helper for dynamic elements\n *\n * Attaches a single event listener to a root element and handles events\n * from matching child elements, even if they're added dynamically after\n * the listener is attached.\n *\n * @param event - Event type (e.g., 'click', 'input', 'change')\n * @param selector - CSS selector for target elements\n * @param handler - Callback function receiving event and matched target\n * @param root - Root element or document to attach listener to\n * @returns Cleanup function to remove the delegated listener\n *\n * @example\n * ```typescript\n * // Handle clicks on dynamically added buttons\n * const cleanup = delegate('click', '.btn-delete', (e, target) => {\n * const id = target.dataset.id;\n * deleteItem(id);\n * });\n *\n * // With custom root\n * delegate('click', '.item', handleClick, myContainer);\n *\n * // Clean up when done\n * cleanup();\n * ```\n */\nexport function delegate(\n event: string,\n selector: string,\n handler: DelegateHandler,\n root: HTMLElement | Document = document\n): () => void {\n const delegatedHandler = (e: Event) => {\n const origin = e.target;\n if (!(origin instanceof Element)) {\n return;\n }\n const target = origin.closest(selector);\n if (target instanceof HTMLElement) {\n handler(e, target);\n }\n };\n\n root.addEventListener(event, delegatedHandler);\n log(`Delegated ${event} on ${selector}`);\n\n // Return cleanup function\n return () => {\n root.removeEventListener(event, delegatedHandler);\n log(`Removed delegation for ${event} on ${selector}`);\n };\n}\n\n// ============================================================================\n// DOM READY\n// ============================================================================\n\n/**\n * Execute callback when DOM is ready\n *\n * Safely runs code when the DOM is fully loaded. If DOM is already ready,\n * executes callback immediately.\n *\n * @param callback - Function to execute when DOM is ready\n *\n * @example\n * ```typescript\n * ready(() => {\n * console.log('DOM is ready!');\n * initApp();\n * setupEventListeners();\n * });\n *\n * // Or with arrow function\n * ready(() => $('#app').html('<h1>Loaded</h1>'));\n * ```\n */\nexport function ready(callback: () => void): void {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', callback);\n } else {\n callback();\n }\n}\n\n// ============================================================================\n// UTILITY FUNCTIONS\n// ============================================================================\n\n/**\n * Clone an element deeply\n */\nexport function clone(element: HTMLElement, deep = true): HTMLElement {\n return element.cloneNode(deep) as HTMLElement;\n}\n\n/**\n * Check if element matches selector\n */\nexport function matches(element: HTMLElement, selector: string): boolean {\n return element.matches(selector);\n}\n\n/**\n * Get or set custom data on element (uses WeakMap for non-serializable data)\n */\nconst dataStore = new WeakMap<HTMLElement, Record<string, unknown>>();\n\nexport function elementData<T = unknown>(element: HTMLElement, key: string, value?: T): T | undefined {\n if (value === undefined) {\n const store = dataStore.get(element);\n return store?.[key] as T | undefined;\n }\n\n let store = dataStore.get(element);\n if (!store) {\n store = {};\n dataStore.set(element, store);\n }\n store[key] = value;\n}\n\n/**\n * Serialize form data to object\n */\nexport function serializeForm(form: HTMLFormElement): Record<string, string> {\n const formData = new FormData(form);\n const data: Record<string, string> = {};\n formData.forEach((value, key) => {\n data[key] = value instanceof File ? value.name : value;\n });\n return data;\n}\n\n/**\n * Get all form values including nested objects\n */\ntype FormValue = FormDataEntryValue | FormDataEntryValue[];\nconst ARRAY_KEY = /^([^\\[]+)\\[([^\\]]*)\\]$/;\n\nexport function getFormValues(form: HTMLFormElement): Record<string, FormValue> {\n const formData = new FormData(form);\n const result: Record<string, FormValue> = {};\n\n formData.forEach((value, key) => {\n // Handle array notation like \"items[0]\"\n const arrayMatch = ARRAY_KEY.exec(key);\n if (arrayMatch) {\n const [, name, index] = arrayMatch;\n const existing = result[name];\n const list = Array.isArray(existing) ? existing : [];\n if (!Array.isArray(existing)) {\n result[name] = list;\n }\n if (index) {\n list[Number.parseInt(index, 10)] = value;\n } else {\n list.push(value);\n }\n return;\n }\n\n result[key] = value;\n });\n\n return result;\n}\n\n/**\n * Debounce function for performance\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout> | null = null;\n\n return function(this: ThisParameterType<T>, ...args: Parameters<T>) {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => func.apply(this, args), wait);\n };\n}\n\n/**\n * Throttle function for performance\n */\nexport function throttle<T extends (...args: unknown[]) => unknown>(\n func: T,\n limit: number\n): (...args: Parameters<T>) => void {\n let inThrottle = false;\n\n return function(this: ThisParameterType<T>, ...args: Parameters<T>) {\n if (!inThrottle) {\n func.apply(this, args);\n inThrottle = true;\n setTimeout(() => {\n inThrottle = false;\n }, limit);\n }\n };\n}\n\n/**\n * Wait for an element to appear in DOM\n */\nexport function waitForElement(selector: string, timeout = 5000): Promise<HTMLElement> {\n return new Promise((resolve, reject) => {\n const element = document.querySelector(selector);\n if (element instanceof HTMLElement) {\n resolve(element);\n return;\n }\n\n const observer = new MutationObserver(() => {\n const observed = document.querySelector(selector);\n if (observed instanceof HTMLElement) {\n observer.disconnect();\n clearTimeout(timeoutId);\n resolve(observed);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n\n const timeoutId = setTimeout(() => {\n observer.disconnect();\n reject(new Error(`Element \"${selector}\" not found within ${String(timeout)}ms`));\n }, timeout);\n });\n}\n\n/**\n * Execute callback when element becomes visible (intersection observer)\n */\nexport function onVisible(\n element: HTMLElement,\n callback: (entry: IntersectionObserverEntry) => void,\n options?: IntersectionObserverInit\n): () => void {\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n callback(entry);\n }\n });\n }, options);\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n}\n\n/**\n * Animate element with CSS transitions\n */\nexport function animate(\n element: HTMLElement,\n properties: Record<string, string>,\n duration = 300,\n easing = 'ease'\n): Promise<void> {\n return new Promise((resolve) => {\n const originalTransition = element.style.transition;\n element.style.transition = `all ${String(duration)}ms ${easing}`;\n\n Object.entries(properties).forEach(([prop, value]) => {\n element.style.setProperty(prop, value);\n });\n\n setTimeout(() => {\n element.style.transition = originalTransition;\n resolve();\n }, duration);\n });\n}\n\n/**\n * Fade in element\n */\nexport function fadeIn(element: HTMLElement, duration = 300): Promise<void> {\n element.style.opacity = '0';\n element.style.display = '';\n return animate(element, { opacity: '1' }, duration);\n}\n\n/**\n * Fade out element\n */\nexport function fadeOut(element: HTMLElement, duration = 300): Promise<void> {\n return animate(element, { opacity: '0' }, duration).then(() => {\n element.style.display = 'none';\n });\n}\n\n/**\n * Slide down (show) element\n */\nexport function slideDown(element: HTMLElement, duration = 300): Promise<void> {\n element.style.display = 'block';\n const height = element.scrollHeight;\n element.style.height = '0';\n element.style.overflow = 'hidden';\n return animate(element, { height: `${String(height)}px` }, duration).then(() => {\n element.style.height = '';\n element.style.overflow = '';\n });\n}\n\n/**\n * Slide up (hide) element\n */\nexport function slideUp(element: HTMLElement, duration = 300): Promise<void> {\n const height = element.scrollHeight;\n element.style.height = `${String(height)}px`;\n element.style.overflow = 'hidden';\n return animate(element, { height: '0' }, duration).then(() => {\n element.style.display = 'none';\n element.style.height = '';\n element.style.overflow = '';\n });\n}\n\n// ============================================================================\n// EXPORTS & API\n// ============================================================================\n\n/**\n * Complete DOM utilities API\n *\n * @example\n * ```typescript\n * // Named imports (recommended)\n * import { $, create, delegate } from '@app/lib/dom';\n *\n * // Default import\n * import DOM from '@app/lib/dom';\n * DOM.$('.button').addClass('active');\n * ```\n */\nconst DOMApi = {\n // Version\n version: '2.0.0',\n\n // Core selectors\n $,\n $$,\n $id,\n\n // Element creation\n create,\n fragment,\n\n // Event handling\n delegate,\n ready,\n\n // Utilities\n clone,\n matches,\n elementData,\n\n // Form helpers\n serializeForm,\n getFormValues,\n\n // Performance\n debounce,\n throttle,\n\n // Async utilities\n waitForElement,\n onVisible,\n\n // Animations\n animate,\n fadeIn,\n fadeOut,\n slideDown,\n slideUp,\n\n // Configuration\n setDebugMode,\n};\n\nexport default DOMApi;\n"]}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { defineComponent } from './chunk-CHLDE4JQ.js';
|
|
2
|
+
import { signal } from './chunk-PFBEIFVS.js';
|
|
3
|
+
|
|
4
|
+
// src/runtime/components/ai-assistant.ts
|
|
5
|
+
var PANEL_STYLES = `
|
|
6
|
+
.ai-panel {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
gap: 1.5rem;
|
|
10
|
+
}
|
|
11
|
+
.ai-panel__body {
|
|
12
|
+
max-height: 420px;
|
|
13
|
+
overflow-y: auto;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
gap: 1rem;
|
|
17
|
+
}
|
|
18
|
+
.ai-panel__messages {
|
|
19
|
+
list-style: none;
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
gap: 0.75rem;
|
|
23
|
+
margin: 0;
|
|
24
|
+
padding: 0;
|
|
25
|
+
}
|
|
26
|
+
.ai-panel__message {
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
gap: 0.35rem;
|
|
30
|
+
}
|
|
31
|
+
.ai-panel__bubble {
|
|
32
|
+
background: var(--ce-surface-muted, #f8fafc);
|
|
33
|
+
border-radius: 1rem;
|
|
34
|
+
padding: 0.75rem 1rem;
|
|
35
|
+
border: 1px solid var(--ce-border, rgba(15, 23, 42, 0.08));
|
|
36
|
+
}
|
|
37
|
+
.ai-panel__message[data-role="assistant"] .ai-panel__bubble {
|
|
38
|
+
background: var(--ce-surface, #ffffff);
|
|
39
|
+
border-color: rgba(56, 189, 248, 0.35);
|
|
40
|
+
}
|
|
41
|
+
.ai-panel__author {
|
|
42
|
+
font-size: 0.75rem;
|
|
43
|
+
text-transform: uppercase;
|
|
44
|
+
letter-spacing: 0.08em;
|
|
45
|
+
color: var(--ce-text-subtle, #475569);
|
|
46
|
+
}
|
|
47
|
+
.ai-panel__bubble p {
|
|
48
|
+
margin: 0.25rem 0;
|
|
49
|
+
white-space: pre-wrap;
|
|
50
|
+
}
|
|
51
|
+
.ai-panel__bubble small {
|
|
52
|
+
color: var(--ce-text-subtle, #94a3b8);
|
|
53
|
+
font-size: 0.7rem;
|
|
54
|
+
}
|
|
55
|
+
.ai-panel__empty {
|
|
56
|
+
font-size: 0.9rem;
|
|
57
|
+
color: var(--ce-text-subtle, #94a3b8);
|
|
58
|
+
}
|
|
59
|
+
.ai-panel__error {
|
|
60
|
+
border-radius: 0.75rem;
|
|
61
|
+
border: 1px solid rgba(248, 113, 113, 0.5);
|
|
62
|
+
background: rgba(248, 113, 113, 0.08);
|
|
63
|
+
padding: 0.75rem 1rem;
|
|
64
|
+
color: var(--ce-danger, #b91c1c);
|
|
65
|
+
}
|
|
66
|
+
.ai-panel__form {
|
|
67
|
+
display: flex;
|
|
68
|
+
flex-direction: column;
|
|
69
|
+
gap: 0.5rem;
|
|
70
|
+
}
|
|
71
|
+
.ai-panel__input {
|
|
72
|
+
width: 100%;
|
|
73
|
+
min-height: 120px;
|
|
74
|
+
border-radius: 0.75rem;
|
|
75
|
+
border: 1px solid var(--ce-border, rgba(15, 23, 42, 0.1));
|
|
76
|
+
padding: 0.75rem 1rem;
|
|
77
|
+
font: inherit;
|
|
78
|
+
resize: vertical;
|
|
79
|
+
background: var(--ce-surface, #ffffff);
|
|
80
|
+
}
|
|
81
|
+
.ai-panel__actions {
|
|
82
|
+
display: flex;
|
|
83
|
+
gap: 0.75rem;
|
|
84
|
+
flex-wrap: wrap;
|
|
85
|
+
}
|
|
86
|
+
.ai-panel__suggestions {
|
|
87
|
+
margin-top: 1rem;
|
|
88
|
+
}
|
|
89
|
+
.ai-panel__chip-row {
|
|
90
|
+
display: flex;
|
|
91
|
+
flex-wrap: wrap;
|
|
92
|
+
gap: 0.5rem;
|
|
93
|
+
}
|
|
94
|
+
.ai-panel__chip {
|
|
95
|
+
border: 1px dashed var(--ce-border, rgba(15, 23, 42, 0.25));
|
|
96
|
+
border-radius: 999px;
|
|
97
|
+
padding: 0.35rem 0.85rem;
|
|
98
|
+
font-size: 0.85rem;
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
var AiAssistantPanel = defineComponent({
|
|
102
|
+
name: "ce-ai-assistant-panel",
|
|
103
|
+
template: `
|
|
104
|
+
<section class="card card--shadow ai-panel" role="region" aria-live="polite">
|
|
105
|
+
<header class="card__header">
|
|
106
|
+
<div>
|
|
107
|
+
<p class="badge badge--primary">AI Assistant</p>
|
|
108
|
+
<h3>{{ props.title ?? 'Strategy copilot' }}</h3>
|
|
109
|
+
<p>{{ props.description ?? 'Ask the model to summarize milestones, risks, and delivery plans.' }}</p>
|
|
110
|
+
</div>
|
|
111
|
+
<span class="badge badge--warning" ce:if="isBusy()">{{ props.busyLabel ?? 'Working' }}</span>
|
|
112
|
+
</header>
|
|
113
|
+
<div class="card__body ai-panel__body">
|
|
114
|
+
<ul class="ai-panel__messages" aria-live="polite">
|
|
115
|
+
<li ce:for="message in props.messages" track="message.id" class="ai-panel__message" data-role="{{ message.role }}">
|
|
116
|
+
<div class="ai-panel__bubble">
|
|
117
|
+
<span class="ai-panel__author">{{ formatRole(message.role) }}</span>
|
|
118
|
+
<p>{{ message.content }}</p>
|
|
119
|
+
<small>{{ formatTimestamp(message) }}</small>
|
|
120
|
+
</div>
|
|
121
|
+
</li>
|
|
122
|
+
<li ce:if="!props.messages.length" class="ai-panel__empty">No prompts yet \u2014 start with one of the suggestions below.</li>
|
|
123
|
+
</ul>
|
|
124
|
+
<div class="ai-panel__error" ce:if="hasError()">
|
|
125
|
+
<p>{{ props.error ?? 'The assistant could not finish this request.' }}</p>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
<footer class="card__footer ai-panel__footer">
|
|
129
|
+
<form class="ai-panel__form" on:submit="submit" novalidate>
|
|
130
|
+
<label class="ai-panel__label" for="ce-ai-assistant-input">Prompt</label>
|
|
131
|
+
<textarea
|
|
132
|
+
id="ce-ai-assistant-input"
|
|
133
|
+
class="ai-panel__input"
|
|
134
|
+
rows="3"
|
|
135
|
+
placeholder="{{ props.placeholder ?? 'Ask anything about your CE UI adoption plan\u2026' }}"
|
|
136
|
+
value="{{ prompt() }}"
|
|
137
|
+
on:input="handleInput"
|
|
138
|
+
required
|
|
139
|
+
aria-label="AI prompt input"
|
|
140
|
+
></textarea>
|
|
141
|
+
<div class="ai-panel__actions">
|
|
142
|
+
<button type="submit" class="button button--primary" disabled="{{ props.disabled || isBusy() ? 'true' : 'false' }}">{{ sendLabel() }}</button>
|
|
143
|
+
<button type="button" class="button button--secondary" on:click="reset">{{ props.resetLabel ?? 'Reset' }}</button>
|
|
144
|
+
</div>
|
|
145
|
+
</form>
|
|
146
|
+
<section class="ai-panel__suggestions" ce:if="props.suggestions?.length">
|
|
147
|
+
<p>Suggestions</p>
|
|
148
|
+
<div class="ai-panel__chip-row">
|
|
149
|
+
<button
|
|
150
|
+
ce:for="suggestion in props.suggestions"
|
|
151
|
+
track="suggestion"
|
|
152
|
+
type="button"
|
|
153
|
+
class="button button--ghost ai-panel__chip"
|
|
154
|
+
on:click="useSuggestion(suggestion)"
|
|
155
|
+
>
|
|
156
|
+
{{ suggestion }}
|
|
157
|
+
</button>
|
|
158
|
+
</div>
|
|
159
|
+
</section>
|
|
160
|
+
</footer>
|
|
161
|
+
</section>
|
|
162
|
+
`,
|
|
163
|
+
styles: [PANEL_STYLES],
|
|
164
|
+
setup({ emit, props }) {
|
|
165
|
+
const prompt = signal("");
|
|
166
|
+
const formatter = new Intl.DateTimeFormat("en-US", { hour: "2-digit", minute: "2-digit" });
|
|
167
|
+
const handleInput = (event) => {
|
|
168
|
+
const value = event.target?.value ?? "";
|
|
169
|
+
prompt.set(value);
|
|
170
|
+
};
|
|
171
|
+
const submit = (event) => {
|
|
172
|
+
event.preventDefault();
|
|
173
|
+
if (props.disabled || props.status === "processing") {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const value = prompt().trim();
|
|
177
|
+
if (!value) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
emit("send", { prompt: value });
|
|
181
|
+
prompt.set("");
|
|
182
|
+
};
|
|
183
|
+
const reset = () => {
|
|
184
|
+
prompt.set("");
|
|
185
|
+
emit("reset");
|
|
186
|
+
};
|
|
187
|
+
const useSuggestion = (suggestion) => {
|
|
188
|
+
prompt.set(suggestion);
|
|
189
|
+
emit("prefill", { prompt: suggestion });
|
|
190
|
+
};
|
|
191
|
+
const hasError = () => Boolean(props.error);
|
|
192
|
+
const isBusy = () => props.status === "processing";
|
|
193
|
+
const sendLabel = () => isBusy() ? props.busyLabel ?? "Thinking\u2026" : props.sendLabel ?? "Send";
|
|
194
|
+
const formatTimestamp = (message) => formatter.format(new Date(message.createdAt));
|
|
195
|
+
const formatRole = (role) => {
|
|
196
|
+
switch (role) {
|
|
197
|
+
case "assistant":
|
|
198
|
+
return "Assistant";
|
|
199
|
+
case "system":
|
|
200
|
+
return "System";
|
|
201
|
+
case "tool":
|
|
202
|
+
return "Tool";
|
|
203
|
+
default:
|
|
204
|
+
return "You";
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
return {
|
|
208
|
+
prompt,
|
|
209
|
+
handleInput,
|
|
210
|
+
submit,
|
|
211
|
+
reset,
|
|
212
|
+
useSuggestion,
|
|
213
|
+
hasError,
|
|
214
|
+
isBusy,
|
|
215
|
+
sendLabel,
|
|
216
|
+
formatTimestamp,
|
|
217
|
+
formatRole
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
export { AiAssistantPanel };
|
|
223
|
+
//# sourceMappingURL=chunk-T6T7QE4J.js.map
|
|
224
|
+
//# sourceMappingURL=chunk-T6T7QE4J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/components/ai-assistant.ts"],"names":[],"mappings":"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","file":"chunk-T6T7QE4J.js","sourcesContent":["import { defineComponent } from '../component.js';\nimport { signal } from '../signals.js';\nimport type { AiMessage, AiRole, AiSessionStatus } from '../ai.js';\n\nexport interface AiAssistantPanelProps extends Record<string, unknown> {\n title?: string;\n description?: string;\n messages: AiMessage[];\n suggestions?: string[];\n status?: AiSessionStatus;\n error?: string | null;\n placeholder?: string;\n sendLabel?: string;\n resetLabel?: string;\n busyLabel?: string;\n disabled?: boolean;\n}\n\nconst PANEL_STYLES = `\n .ai-panel {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n }\n .ai-panel__body {\n max-height: 420px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n .ai-panel__messages {\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n margin: 0;\n padding: 0;\n }\n .ai-panel__message {\n display: flex;\n flex-direction: column;\n gap: 0.35rem;\n }\n .ai-panel__bubble {\n background: var(--ce-surface-muted, #f8fafc);\n border-radius: 1rem;\n padding: 0.75rem 1rem;\n border: 1px solid var(--ce-border, rgba(15, 23, 42, 0.08));\n }\n .ai-panel__message[data-role=\"assistant\"] .ai-panel__bubble {\n background: var(--ce-surface, #ffffff);\n border-color: rgba(56, 189, 248, 0.35);\n }\n .ai-panel__author {\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--ce-text-subtle, #475569);\n }\n .ai-panel__bubble p {\n margin: 0.25rem 0;\n white-space: pre-wrap;\n }\n .ai-panel__bubble small {\n color: var(--ce-text-subtle, #94a3b8);\n font-size: 0.7rem;\n }\n .ai-panel__empty {\n font-size: 0.9rem;\n color: var(--ce-text-subtle, #94a3b8);\n }\n .ai-panel__error {\n border-radius: 0.75rem;\n border: 1px solid rgba(248, 113, 113, 0.5);\n background: rgba(248, 113, 113, 0.08);\n padding: 0.75rem 1rem;\n color: var(--ce-danger, #b91c1c);\n }\n .ai-panel__form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n .ai-panel__input {\n width: 100%;\n min-height: 120px;\n border-radius: 0.75rem;\n border: 1px solid var(--ce-border, rgba(15, 23, 42, 0.1));\n padding: 0.75rem 1rem;\n font: inherit;\n resize: vertical;\n background: var(--ce-surface, #ffffff);\n }\n .ai-panel__actions {\n display: flex;\n gap: 0.75rem;\n flex-wrap: wrap;\n }\n .ai-panel__suggestions {\n margin-top: 1rem;\n }\n .ai-panel__chip-row {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .ai-panel__chip {\n border: 1px dashed var(--ce-border, rgba(15, 23, 42, 0.25));\n border-radius: 999px;\n padding: 0.35rem 0.85rem;\n font-size: 0.85rem;\n }\n`;\n\nexport const AiAssistantPanel = defineComponent<AiAssistantPanelProps>({\n name: 'ce-ai-assistant-panel',\n template: `\n <section class=\"card card--shadow ai-panel\" role=\"region\" aria-live=\"polite\">\n <header class=\"card__header\">\n <div>\n <p class=\"badge badge--primary\">AI Assistant</p>\n <h3>{{ props.title ?? 'Strategy copilot' }}</h3>\n <p>{{ props.description ?? 'Ask the model to summarize milestones, risks, and delivery plans.' }}</p>\n </div>\n <span class=\"badge badge--warning\" ce:if=\"isBusy()\">{{ props.busyLabel ?? 'Working' }}</span>\n </header>\n <div class=\"card__body ai-panel__body\">\n <ul class=\"ai-panel__messages\" aria-live=\"polite\">\n <li ce:for=\"message in props.messages\" track=\"message.id\" class=\"ai-panel__message\" data-role=\"{{ message.role }}\">\n <div class=\"ai-panel__bubble\">\n <span class=\"ai-panel__author\">{{ formatRole(message.role) }}</span>\n <p>{{ message.content }}</p>\n <small>{{ formatTimestamp(message) }}</small>\n </div>\n </li>\n <li ce:if=\"!props.messages.length\" class=\"ai-panel__empty\">No prompts yet — start with one of the suggestions below.</li>\n </ul>\n <div class=\"ai-panel__error\" ce:if=\"hasError()\">\n <p>{{ props.error ?? 'The assistant could not finish this request.' }}</p>\n </div>\n </div>\n <footer class=\"card__footer ai-panel__footer\">\n <form class=\"ai-panel__form\" on:submit=\"submit\" novalidate>\n <label class=\"ai-panel__label\" for=\"ce-ai-assistant-input\">Prompt</label>\n <textarea\n id=\"ce-ai-assistant-input\"\n class=\"ai-panel__input\"\n rows=\"3\"\n placeholder=\"{{ props.placeholder ?? 'Ask anything about your CE UI adoption plan…' }}\"\n value=\"{{ prompt() }}\"\n on:input=\"handleInput\"\n required\n aria-label=\"AI prompt input\"\n ></textarea>\n <div class=\"ai-panel__actions\">\n <button type=\"submit\" class=\"button button--primary\" disabled=\"{{ props.disabled || isBusy() ? 'true' : 'false' }}\">{{ sendLabel() }}</button>\n <button type=\"button\" class=\"button button--secondary\" on:click=\"reset\">{{ props.resetLabel ?? 'Reset' }}</button>\n </div>\n </form>\n <section class=\"ai-panel__suggestions\" ce:if=\"props.suggestions?.length\">\n <p>Suggestions</p>\n <div class=\"ai-panel__chip-row\">\n <button\n ce:for=\"suggestion in props.suggestions\"\n track=\"suggestion\"\n type=\"button\"\n class=\"button button--ghost ai-panel__chip\"\n on:click=\"useSuggestion(suggestion)\"\n >\n {{ suggestion }}\n </button>\n </div>\n </section>\n </footer>\n </section>\n `,\n styles: [PANEL_STYLES],\n setup({ emit, props }) {\n const prompt = signal('');\n const formatter = new Intl.DateTimeFormat('en-US', { hour: '2-digit', minute: '2-digit' });\n\n const handleInput = (event: Event) => {\n const value = (event.target as HTMLTextAreaElement | null)?.value ?? '';\n prompt.set(value);\n };\n\n const submit = (event: Event) => {\n event.preventDefault();\n if (props.disabled || props.status === 'processing') {\n return;\n }\n const value = prompt().trim();\n if (!value) {\n return;\n }\n emit('send', { prompt: value });\n prompt.set('');\n };\n\n const reset = () => {\n prompt.set('');\n emit('reset');\n };\n\n const useSuggestion = (suggestion: string) => {\n prompt.set(suggestion);\n emit('prefill', { prompt: suggestion });\n };\n\n const hasError = () => Boolean(props.error);\n const isBusy = () => props.status === 'processing';\n const sendLabel = () => (isBusy() ? props.busyLabel ?? 'Thinking…' : props.sendLabel ?? 'Send');\n\n const formatTimestamp = (message: AiMessage) => formatter.format(new Date(message.createdAt));\n const formatRole = (role: AiRole) => {\n switch (role) {\n case 'assistant':\n return 'Assistant';\n case 'system':\n return 'System';\n case 'tool':\n return 'Tool';\n default:\n return 'You';\n }\n };\n\n return {\n prompt,\n handleInput,\n submit,\n reset,\n useSuggestion,\n hasError,\n isBusy,\n sendLabel,\n formatTimestamp,\n formatRole,\n };\n },\n});\n"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// src/runtime/workflow/timeline.js
|
|
2
|
+
function toChromeTraceEvents(events, options = {}) {
|
|
3
|
+
const { processId = "workflow", threadId = "runtime", category = "workflow" } = options;
|
|
4
|
+
return events.map((event) => {
|
|
5
|
+
const args = buildArgs(event);
|
|
6
|
+
const timestamp = event.timestamp instanceof Date ? event.timestamp : new Date(event.timestamp);
|
|
7
|
+
const base = {
|
|
8
|
+
name: event.type,
|
|
9
|
+
cat: category,
|
|
10
|
+
ts: timestamp.getTime() * 1e3,
|
|
11
|
+
pid: `${processId}:${event.workflowId}`,
|
|
12
|
+
tid: `${threadId}:${event.instanceId}`,
|
|
13
|
+
args
|
|
14
|
+
};
|
|
15
|
+
if (event.durationMs && event.durationMs > 0) {
|
|
16
|
+
return { ...base, ph: "X", dur: event.durationMs * 1e3 };
|
|
17
|
+
}
|
|
18
|
+
return { ...base, ph: "i", s: "t" };
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function buildChromeTraceDocument(events, options) {
|
|
22
|
+
return {
|
|
23
|
+
traceEvents: toChromeTraceEvents(events, options),
|
|
24
|
+
displayTimeUnit: "ns"
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function buildArgs(event) {
|
|
28
|
+
const args = {
|
|
29
|
+
workflowId: event.workflowId,
|
|
30
|
+
workflowVersion: event.workflowVersion,
|
|
31
|
+
instanceId: event.instanceId
|
|
32
|
+
};
|
|
33
|
+
if (event.stepId) {
|
|
34
|
+
args.stepId = event.stepId;
|
|
35
|
+
}
|
|
36
|
+
if (event.runId) {
|
|
37
|
+
args.runId = event.runId;
|
|
38
|
+
}
|
|
39
|
+
if (typeof event.attempt === "number") {
|
|
40
|
+
args.attempt = event.attempt;
|
|
41
|
+
}
|
|
42
|
+
if (event.gateId) {
|
|
43
|
+
args.gateId = event.gateId;
|
|
44
|
+
}
|
|
45
|
+
if (event.approvalStatus) {
|
|
46
|
+
args.approvalStatus = event.approvalStatus;
|
|
47
|
+
}
|
|
48
|
+
if (typeof event.delayMs === "number") {
|
|
49
|
+
args.delayMs = event.delayMs;
|
|
50
|
+
}
|
|
51
|
+
if (typeof event.durationMs === "number") {
|
|
52
|
+
args.durationMs = event.durationMs;
|
|
53
|
+
}
|
|
54
|
+
if (event.actorId) {
|
|
55
|
+
args.actorId = event.actorId;
|
|
56
|
+
}
|
|
57
|
+
if (event.attributes) {
|
|
58
|
+
Object.assign(args, event.attributes);
|
|
59
|
+
}
|
|
60
|
+
return args;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export { buildChromeTraceDocument, toChromeTraceEvents };
|
|
64
|
+
//# sourceMappingURL=chunk-TIF372DZ.js.map
|
|
65
|
+
//# sourceMappingURL=chunk-TIF372DZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/workflow/timeline.js"],"names":[],"mappings":";AAAO,SAAS,mBAAA,CAAoB,MAAA,EAAQ,OAAA,GAAU,EAAC,EAAG;AACtD,EAAA,MAAM,EAAE,SAAA,GAAY,UAAA,EAAY,WAAW,SAAA,EAAW,QAAA,GAAW,YAAW,GAAI,OAAA;AAChF,EAAA,OAAO,MAAA,CAAO,IAAI,CAAA,KAAA,KAAS;AACvB,IAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAA,MAAM,SAAA,GAAY,MAAM,SAAA,YAAqB,IAAA,GAAO,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAC9F,IAAA,MAAM,IAAA,GAAO;AAAA,MACT,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,GAAA,EAAK,QAAA;AAAA,MACL,EAAA,EAAI,SAAA,CAAU,OAAA,EAAQ,GAAI,GAAA;AAAA,MAC1B,GAAA,EAAK,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,MAAM,UAAU,CAAA,CAAA;AAAA,MACrC,GAAA,EAAK,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAM,UAAU,CAAA,CAAA;AAAA,MACpC;AAAA,KACJ;AACA,IAAA,IAAI,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,UAAA,GAAa,CAAA,EAAG;AAC1C,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,EAAA,EAAI,KAAK,GAAA,EAAK,KAAA,CAAM,aAAa,GAAA,EAAK;AAAA,IAC5D;AACA,IAAA,OAAO,EAAE,GAAG,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,EACtC,CAAC,CAAA;AACL;AACO,SAAS,wBAAA,CAAyB,QAAQ,OAAA,EAAS;AACtD,EAAA,OAAO;AAAA,IACH,WAAA,EAAa,mBAAA,CAAoB,MAAA,EAAQ,OAAO,CAAA;AAAA,IAChD,eAAA,EAAiB;AAAA,GACrB;AACJ;AACA,SAAS,UAAU,KAAA,EAAO;AACtB,EAAA,MAAM,IAAA,GAAO;AAAA,IACT,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,iBAAiB,KAAA,CAAM,eAAA;AAAA,IACvB,YAAY,KAAA,CAAM;AAAA,GACtB;AACA,EAAA,IAAI,MAAM,MAAA,EAAQ;AACd,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AAAA,EACxB;AACA,EAAA,IAAI,MAAM,KAAA,EAAO;AACb,IAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA;AAAA,EACvB;AACA,EAAA,IAAI,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,EAAU;AACnC,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA;AAAA,EACzB;AACA,EAAA,IAAI,MAAM,MAAA,EAAQ;AACd,IAAA,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AAAA,EACxB;AACA,EAAA,IAAI,MAAM,cAAA,EAAgB;AACtB,IAAA,IAAA,CAAK,iBAAiB,KAAA,CAAM,cAAA;AAAA,EAChC;AACA,EAAA,IAAI,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,EAAU;AACnC,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA;AAAA,EACzB;AACA,EAAA,IAAI,OAAO,KAAA,CAAM,UAAA,KAAe,QAAA,EAAU;AACtC,IAAA,IAAA,CAAK,aAAa,KAAA,CAAM,UAAA;AAAA,EAC5B;AACA,EAAA,IAAI,MAAM,OAAA,EAAS;AACf,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,OAAA;AAAA,EACzB;AACA,EAAA,IAAI,MAAM,UAAA,EAAY;AAClB,IAAA,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,KAAA,CAAM,UAAU,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,IAAA;AACX","file":"chunk-TIF372DZ.js","sourcesContent":["export function toChromeTraceEvents(events, options = {}) {\n const { processId = 'workflow', threadId = 'runtime', category = 'workflow' } = options;\n return events.map(event => {\n const args = buildArgs(event);\n const timestamp = event.timestamp instanceof Date ? event.timestamp : new Date(event.timestamp);\n const base = {\n name: event.type,\n cat: category,\n ts: timestamp.getTime() * 1000,\n pid: `${processId}:${event.workflowId}`,\n tid: `${threadId}:${event.instanceId}`,\n args,\n };\n if (event.durationMs && event.durationMs > 0) {\n return { ...base, ph: 'X', dur: event.durationMs * 1000 };\n }\n return { ...base, ph: 'i', s: 't' };\n });\n}\nexport function buildChromeTraceDocument(events, options) {\n return {\n traceEvents: toChromeTraceEvents(events, options),\n displayTimeUnit: 'ns',\n };\n}\nfunction buildArgs(event) {\n const args = {\n workflowId: event.workflowId,\n workflowVersion: event.workflowVersion,\n instanceId: event.instanceId,\n };\n if (event.stepId) {\n args.stepId = event.stepId;\n }\n if (event.runId) {\n args.runId = event.runId;\n }\n if (typeof event.attempt === 'number') {\n args.attempt = event.attempt;\n }\n if (event.gateId) {\n args.gateId = event.gateId;\n }\n if (event.approvalStatus) {\n args.approvalStatus = event.approvalStatus;\n }\n if (typeof event.delayMs === 'number') {\n args.delayMs = event.delayMs;\n }\n if (typeof event.durationMs === 'number') {\n args.durationMs = event.durationMs;\n }\n if (event.actorId) {\n args.actorId = event.actorId;\n }\n if (event.attributes) {\n Object.assign(args, event.attributes);\n }\n return args;\n}\n"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { defineComponent } from './chunk-CHLDE4JQ.js';
|
|
2
|
+
|
|
3
|
+
// src/runtime/components/ai-summary-card.ts
|
|
4
|
+
var SUMMARY_STYLES = `
|
|
5
|
+
.ai-summary {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: 1rem;
|
|
9
|
+
}
|
|
10
|
+
.ai-summary__eyebrow {
|
|
11
|
+
text-transform: uppercase;
|
|
12
|
+
font-size: 0.75rem;
|
|
13
|
+
letter-spacing: 0.08em;
|
|
14
|
+
color: var(--ce-text-subtle, #64748b);
|
|
15
|
+
}
|
|
16
|
+
.ai-summary__highlights {
|
|
17
|
+
list-style: disc;
|
|
18
|
+
padding-left: 1.5rem;
|
|
19
|
+
margin: 0;
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
gap: 0.35rem;
|
|
23
|
+
}
|
|
24
|
+
.ai-summary__footer {
|
|
25
|
+
display: flex;
|
|
26
|
+
justify-content: space-between;
|
|
27
|
+
align-items: center;
|
|
28
|
+
font-size: 0.8rem;
|
|
29
|
+
color: var(--ce-text-subtle, #94a3b8);
|
|
30
|
+
}
|
|
31
|
+
.ai-summary .badge[data-tone='critical'] {
|
|
32
|
+
background: var(--ce-danger, #dc2626);
|
|
33
|
+
}
|
|
34
|
+
.ai-summary .badge[data-tone='warning'] {
|
|
35
|
+
background: var(--ce-warning, #f97316);
|
|
36
|
+
}
|
|
37
|
+
.ai-summary .badge[data-tone='positive'] {
|
|
38
|
+
background: var(--ce-success, #10b981);
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
41
|
+
var AiSummaryCard = defineComponent({
|
|
42
|
+
name: "ce-ai-summary-card",
|
|
43
|
+
template: `
|
|
44
|
+
<article class="card card--highlight ai-summary" role="article">
|
|
45
|
+
<header class="card__header">
|
|
46
|
+
<p class="ai-summary__eyebrow">{{ props.eyebrow ?? 'AI summary' }}</p>
|
|
47
|
+
<h3>{{ props.title }}</h3>
|
|
48
|
+
<span class="badge" data-tone="{{ props.sentiment ?? 'positive' }}">
|
|
49
|
+
{{ props.sentiment === 'critical' ? 'Critical' : props.sentiment === 'warning' ? 'Watch' : 'Positive' }}
|
|
50
|
+
</span>
|
|
51
|
+
</header>
|
|
52
|
+
<div class="card__body">
|
|
53
|
+
<p>{{ props.summary }}</p>
|
|
54
|
+
<ul class="ai-summary__highlights" ce:if="props.highlights?.length">
|
|
55
|
+
<li ce:for="highlight in props.highlights" track="highlight">{{ highlight }}</li>
|
|
56
|
+
</ul>
|
|
57
|
+
</div>
|
|
58
|
+
<footer class="card__footer ai-summary__footer">
|
|
59
|
+
<small ce:if="props.updatedAt">Updated {{ props.updatedAt }}</small>
|
|
60
|
+
<slot name="actions"></slot>
|
|
61
|
+
</footer>
|
|
62
|
+
</article>
|
|
63
|
+
`,
|
|
64
|
+
styles: [SUMMARY_STYLES]
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
export { AiSummaryCard };
|
|
68
|
+
//# sourceMappingURL=chunk-V6JCOBGY.js.map
|
|
69
|
+
//# sourceMappingURL=chunk-V6JCOBGY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/components/ai-summary-card.ts"],"names":[],"mappings":";;;AAWA,IAAM,cAAA,GAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAsChB,IAAM,gBAAgB,eAAA,CAAoC;AAAA,EAC/D,IAAA,EAAM,oBAAA;AAAA,EACN,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAqBV,MAAA,EAAQ,CAAC,cAAc;AACzB,CAAC","file":"chunk-V6JCOBGY.js","sourcesContent":["import { defineComponent } from '../component.js';\n\nexport interface AiSummaryCardProps extends Record<string, unknown> {\n eyebrow?: string;\n title: string;\n summary: string;\n highlights?: string[];\n sentiment?: 'positive' | 'warning' | 'critical';\n updatedAt?: string;\n}\n\nconst SUMMARY_STYLES = `\n .ai-summary {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n .ai-summary__eyebrow {\n text-transform: uppercase;\n font-size: 0.75rem;\n letter-spacing: 0.08em;\n color: var(--ce-text-subtle, #64748b);\n }\n .ai-summary__highlights {\n list-style: disc;\n padding-left: 1.5rem;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 0.35rem;\n }\n .ai-summary__footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 0.8rem;\n color: var(--ce-text-subtle, #94a3b8);\n }\n .ai-summary .badge[data-tone='critical'] {\n background: var(--ce-danger, #dc2626);\n }\n .ai-summary .badge[data-tone='warning'] {\n background: var(--ce-warning, #f97316);\n }\n .ai-summary .badge[data-tone='positive'] {\n background: var(--ce-success, #10b981);\n }\n`;\n\nexport const AiSummaryCard = defineComponent<AiSummaryCardProps>({\n name: 'ce-ai-summary-card',\n template: `\n <article class=\"card card--highlight ai-summary\" role=\"article\">\n <header class=\"card__header\">\n <p class=\"ai-summary__eyebrow\">{{ props.eyebrow ?? 'AI summary' }}</p>\n <h3>{{ props.title }}</h3>\n <span class=\"badge\" data-tone=\"{{ props.sentiment ?? 'positive' }}\">\n {{ props.sentiment === 'critical' ? 'Critical' : props.sentiment === 'warning' ? 'Watch' : 'Positive' }}\n </span>\n </header>\n <div class=\"card__body\">\n <p>{{ props.summary }}</p>\n <ul class=\"ai-summary__highlights\" ce:if=\"props.highlights?.length\">\n <li ce:for=\"highlight in props.highlights\" track=\"highlight\">{{ highlight }}</li>\n </ul>\n </div>\n <footer class=\"card__footer ai-summary__footer\">\n <small ce:if=\"props.updatedAt\">Updated {{ props.updatedAt }}</small>\n <slot name=\"actions\"></slot>\n </footer>\n </article>\n `,\n styles: [SUMMARY_STYLES],\n});\n"]}
|