@mcp-elements/core 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -100,7 +100,10 @@ declare function createAccordion(items: AccordionItemConfig[], config?: Accordio
100
100
  id: string;
101
101
  disabled: boolean;
102
102
  onClick: () => void;
103
- onKeyDown: (e: KeyboardEvent) => void;
103
+ onKeyDown: (e: {
104
+ key: string;
105
+ preventDefault: () => void;
106
+ }) => void;
104
107
  };
105
108
  getContentProps: (value: string, expandedValues: string[]) => {
106
109
  role: "region";
package/dist/index.js CHANGED
@@ -39,18 +39,18 @@ function createClickOutsideHandler(element, callback) {
39
39
  return () => document.removeEventListener("mousedown", handler);
40
40
  }
41
41
  function lockScroll() {
42
- const scrollY = window.scrollY;
43
42
  const body = document.body;
44
- body.style.position = "fixed";
45
- body.style.top = `-${scrollY}px`;
46
- body.style.width = "100%";
43
+ const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
44
+ const prevOverflow = body.style.overflow;
45
+ const prevPaddingRight = body.style.paddingRight;
47
46
  body.style.overflow = "hidden";
47
+ if (scrollbarWidth > 0) {
48
+ const currentPad = parseFloat(getComputedStyle(body).paddingRight) || 0;
49
+ body.style.paddingRight = `${currentPad + scrollbarWidth}px`;
50
+ }
48
51
  return () => {
49
- body.style.position = "";
50
- body.style.top = "";
51
- body.style.width = "";
52
- body.style.overflow = "";
53
- window.scrollTo(0, scrollY);
52
+ body.style.overflow = prevOverflow;
53
+ body.style.paddingRight = prevPaddingRight;
54
54
  };
55
55
  }
56
56
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/cn.ts","../src/utils/dom.ts","../src/utils/keyboard.ts","../src/dialog.ts","../src/tabs.ts","../src/accordion.ts","../src/select.ts","../src/tooltip.ts","../src/popover.ts","../src/toast.ts","../src/drawer.ts","../src/dropdown-menu.ts","../src/switch.ts","../src/mcp/scope.ts","../src/mcp/tool-state.ts","../src/mcp/schema-form.ts","../src/mcp/oauth.ts","../src/mcp/app-bridge.ts"],"sourcesContent":["export function cn(...inputs: (string | undefined | null | false)[]): string {\n return inputs.filter(Boolean).join(' ')\n}\n","export function getFocusableElements(container: HTMLElement): HTMLElement[] {\n const elements = container.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n )\n return Array.from(elements)\n}\n\nexport function trapFocus(container: HTMLElement, event: KeyboardEvent) {\n const focusable = getFocusableElements(container)\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault()\n last.focus()\n }\n } else {\n if (document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n }\n}\n\nexport function createClickOutsideHandler(\n element: HTMLElement,\n callback: () => void\n): () => void {\n const handler = (event: MouseEvent) => {\n if (!element.contains(event.target as Node)) {\n callback()\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n}\n\nexport function lockScroll(): () => void {\n const scrollY = window.scrollY\n const body = document.body\n body.style.position = 'fixed'\n body.style.top = `-${scrollY}px`\n body.style.width = '100%'\n body.style.overflow = 'hidden'\n\n return () => {\n body.style.position = ''\n body.style.top = ''\n body.style.width = ''\n body.style.overflow = ''\n window.scrollTo(0, scrollY)\n }\n}\n","export const Keys = {\n Enter: 'Enter',\n Space: ' ',\n Escape: 'Escape',\n ArrowUp: 'ArrowUp',\n ArrowDown: 'ArrowDown',\n ArrowLeft: 'ArrowLeft',\n ArrowRight: 'ArrowRight',\n Home: 'Home',\n End: 'End',\n Tab: 'Tab',\n} as const\n\nexport type KeyboardDirection = 'horizontal' | 'vertical' | 'both'\n\nexport function getNextIndex(\n current: number,\n total: number,\n direction: 'next' | 'prev',\n loop = true\n): number {\n if (direction === 'next') {\n const next = current + 1\n return next >= total ? (loop ? 0 : current) : next\n }\n const prev = current - 1\n return prev < 0 ? (loop ? total - 1 : current) : prev\n}\n\nexport function handleArrowNavigation(\n event: KeyboardEvent,\n currentIndex: number,\n totalItems: number,\n orientation: KeyboardDirection,\n onIndexChange: (index: number) => void,\n loop = true\n): void {\n const nextKeys = orientation === 'horizontal' ? [Keys.ArrowRight] : orientation === 'vertical' ? [Keys.ArrowDown] : [Keys.ArrowRight, Keys.ArrowDown]\n const prevKeys = orientation === 'horizontal' ? [Keys.ArrowLeft] : orientation === 'vertical' ? [Keys.ArrowUp] : [Keys.ArrowLeft, Keys.ArrowUp]\n\n if (nextKeys.includes(event.key as any)) {\n event.preventDefault()\n onIndexChange(getNextIndex(currentIndex, totalItems, 'next', loop))\n } else if (prevKeys.includes(event.key as any)) {\n event.preventDefault()\n onIndexChange(getNextIndex(currentIndex, totalItems, 'prev', loop))\n } else if (event.key === Keys.Home) {\n event.preventDefault()\n onIndexChange(0)\n } else if (event.key === Keys.End) {\n event.preventDefault()\n onIndexChange(totalItems - 1)\n }\n}\n","export interface DialogConfig {\n modal?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nlet dialogCounter = 0\n\nexport function createDialog(config: DialogConfig = {}) {\n const { modal = true, onOpenChange } = config\n const id = `mcpe-dialog-${++dialogCounter}`\n\n return {\n id,\n getTriggerProps: (isOpen: boolean) => ({\n 'aria-haspopup': 'dialog' as const,\n 'aria-expanded': isOpen,\n onClick: () => onOpenChange?.(!isOpen),\n }),\n getContentProps: (isOpen: boolean) => ({\n role: 'dialog' as const,\n 'aria-modal': modal,\n 'aria-labelledby': `${id}-title`,\n 'aria-describedby': `${id}-description`,\n hidden: !isOpen ? true : undefined,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Escape') onOpenChange?.(false)\n },\n }),\n getOverlayProps: () => ({\n 'aria-hidden': true as const,\n onClick: () => onOpenChange?.(false),\n }),\n getCloseProps: () => ({\n 'aria-label': 'Close',\n onClick: () => onOpenChange?.(false),\n }),\n }\n}\n","import { handleArrowNavigation } from './utils/keyboard'\n\nexport interface TabsConfig {\n defaultValue?: string\n onValueChange?: (value: string) => void\n}\n\nexport interface TabItem {\n value: string\n disabled?: boolean\n}\n\nexport function createTabs(items: TabItem[], config: TabsConfig = {}) {\n const { onValueChange } = config\n\n return {\n getListProps: () => ({\n role: 'tablist' as const,\n }),\n getTriggerProps: (value: string, activeValue: string) => {\n const index = items.findIndex(item => item.value === value)\n const isActive = value === activeValue\n const item = items[index]\n\n return {\n role: 'tab' as const,\n 'aria-selected': isActive,\n 'aria-controls': `tabpanel-${value}`,\n id: `tab-${value}`,\n tabIndex: isActive ? 0 : -1,\n disabled: item?.disabled || false,\n onClick: () => {\n if (!item?.disabled) onValueChange?.(value)\n },\n onKeyDown: (e: KeyboardEvent) => {\n const enabledItems = items.filter(i => !i.disabled)\n const currentEnabledIndex = enabledItems.findIndex(i => i.value === value)\n handleArrowNavigation(\n e,\n currentEnabledIndex,\n enabledItems.length,\n 'horizontal',\n (newIndex) => {\n const newItem = enabledItems[newIndex]\n onValueChange?.(newItem.value)\n }\n )\n },\n }\n },\n getPanelProps: (value: string, activeValue: string) => ({\n role: 'tabpanel' as const,\n id: `tabpanel-${value}`,\n 'aria-labelledby': `tab-${value}`,\n hidden: value !== activeValue || undefined,\n tabIndex: 0,\n }),\n }\n}\n","import { Keys } from './utils/keyboard'\n\nexport interface AccordionConfig {\n type?: 'single' | 'multiple'\n collapsible?: boolean\n onValueChange?: (value: string[]) => void\n}\n\nexport interface AccordionItemConfig {\n value: string\n disabled?: boolean\n}\n\nexport function createAccordion(items: AccordionItemConfig[], config: AccordionConfig = {}) {\n const { type = 'single', collapsible = false, onValueChange } = config\n\n function toggle(value: string, expandedValues: string[]) {\n const isExpanded = expandedValues.includes(value)\n\n if (type === 'single') {\n if (isExpanded && collapsible) {\n onValueChange?.([])\n } else if (!isExpanded) {\n onValueChange?.([value])\n }\n } else {\n if (isExpanded) {\n onValueChange?.(expandedValues.filter(v => v !== value))\n } else {\n onValueChange?.([...expandedValues, value])\n }\n }\n }\n\n return {\n getItemProps: (value: string) => ({\n 'data-value': value,\n }),\n getTriggerProps: (value: string, expandedValues: string[]) => {\n const isExpanded = expandedValues.includes(value)\n const item = items.find(i => i.value === value)\n\n return {\n 'aria-expanded': isExpanded,\n 'aria-controls': `accordion-content-${value}`,\n id: `accordion-trigger-${value}`,\n disabled: item?.disabled || false,\n onClick: () => {\n if (!item?.disabled) toggle(value, expandedValues)\n },\n onKeyDown: (e: KeyboardEvent) => {\n const enabledItems = items.filter(i => !i.disabled)\n const currentEnabledIndex = enabledItems.findIndex(i => i.value === value)\n\n if (e.key === Keys.ArrowDown) {\n e.preventDefault()\n const next = currentEnabledIndex + 1\n if (next < enabledItems.length) {\n const el = document.getElementById(`accordion-trigger-${enabledItems[next].value}`)\n el?.focus()\n }\n } else if (e.key === Keys.ArrowUp) {\n e.preventDefault()\n const prev = currentEnabledIndex - 1\n if (prev >= 0) {\n const el = document.getElementById(`accordion-trigger-${enabledItems[prev].value}`)\n el?.focus()\n }\n } else if (e.key === Keys.Home) {\n e.preventDefault()\n const el = document.getElementById(`accordion-trigger-${enabledItems[0].value}`)\n el?.focus()\n } else if (e.key === Keys.End) {\n e.preventDefault()\n const el = document.getElementById(`accordion-trigger-${enabledItems[enabledItems.length - 1].value}`)\n el?.focus()\n }\n },\n }\n },\n getContentProps: (value: string, expandedValues: string[]) => {\n const isExpanded = expandedValues.includes(value)\n return {\n role: 'region' as const,\n id: `accordion-content-${value}`,\n 'aria-labelledby': `accordion-trigger-${value}`,\n hidden: !isExpanded ? true : undefined,\n }\n },\n }\n}\n","import { Keys, getNextIndex } from './utils/keyboard'\n\nexport interface SelectConfig {\n onValueChange?: (value: string) => void\n onOpenChange?: (open: boolean) => void\n}\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport function createSelect(options: SelectOption[], config: SelectConfig = {}) {\n const { onValueChange, onOpenChange } = config\n\n return {\n getTriggerProps: (isOpen: boolean, selectedValue: string | null, highlightedIndex?: number) => {\n const selectedOption = options.find(o => o.value === selectedValue)\n const highlightedOption = highlightedIndex != null ? options[highlightedIndex] : undefined\n return {\n role: 'combobox' as const,\n 'aria-expanded': isOpen,\n 'aria-haspopup': 'listbox' as const,\n 'aria-label': selectedOption?.label || 'Select an option',\n 'aria-activedescendant': isOpen && highlightedOption ? `select-option-${highlightedOption.value}` : undefined,\n onClick: () => onOpenChange?.(!isOpen),\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === Keys.Enter || e.key === Keys.Space) {\n e.preventDefault()\n onOpenChange?.(!isOpen)\n } else if (e.key === Keys.ArrowDown) {\n e.preventDefault()\n onOpenChange?.(true)\n }\n },\n }\n },\n getListProps: () => ({\n role: 'listbox' as const,\n }),\n getOptionProps: (\n option: SelectOption,\n isHighlighted: boolean,\n selectedValue: string | null,\n _highlightedIndex: number\n ) => ({\n role: 'option' as const,\n 'aria-selected': option.value === selectedValue,\n 'aria-disabled': option.disabled || undefined,\n 'data-highlighted': isHighlighted || undefined,\n id: `select-option-${option.value}`,\n onClick: () => {\n if (!option.disabled) {\n onValueChange?.(option.value)\n onOpenChange?.(false)\n }\n },\n }),\n getContentProps: (isOpen: boolean) => ({\n hidden: !isOpen ? true : undefined,\n }),\n handleKeyDown: (\n e: KeyboardEvent,\n isOpen: boolean,\n highlightedIndex: number,\n onHighlightChange: (index: number) => void\n ) => {\n if (!isOpen) return\n\n const enabledOptions = options.filter(o => !o.disabled)\n\n if (e.key === Keys.ArrowDown) {\n e.preventDefault()\n const next = getNextIndex(highlightedIndex, enabledOptions.length, 'next')\n onHighlightChange(next)\n } else if (e.key === Keys.ArrowUp) {\n e.preventDefault()\n const prev = getNextIndex(highlightedIndex, enabledOptions.length, 'prev')\n onHighlightChange(prev)\n } else if (e.key === Keys.Enter || e.key === Keys.Space) {\n e.preventDefault()\n const option = enabledOptions[highlightedIndex]\n if (option) {\n onValueChange?.(option.value)\n onOpenChange?.(false)\n }\n } else if (e.key === Keys.Escape) {\n e.preventDefault()\n onOpenChange?.(false)\n } else if (e.key === Keys.Home) {\n e.preventDefault()\n onHighlightChange(0)\n } else if (e.key === Keys.End) {\n e.preventDefault()\n onHighlightChange(enabledOptions.length - 1)\n }\n },\n }\n}\n","export interface TooltipConfig {\n delay?: number\n onOpenChange?: (open: boolean) => void\n}\n\nlet tooltipCounter = 0\n\nexport function createTooltip(config: TooltipConfig = {}) {\n const { delay = 700, onOpenChange } = config\n const id = `mcpe-tooltip-${++tooltipCounter}`\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n\n function clearDelay() {\n if (timeoutId !== null) {\n clearTimeout(timeoutId)\n timeoutId = null\n }\n }\n\n function openWithDelay() {\n clearDelay()\n timeoutId = setTimeout(() => {\n onOpenChange?.(true)\n }, delay)\n }\n\n function close() {\n clearDelay()\n onOpenChange?.(false)\n }\n\n return {\n getTriggerProps: () => ({\n 'aria-describedby': id,\n onMouseEnter: () => openWithDelay(),\n onMouseLeave: () => close(),\n onFocus: () => openWithDelay(),\n onBlur: () => close(),\n }),\n getContentProps: (isOpen: boolean) => ({\n id,\n role: 'tooltip' as const,\n hidden: !isOpen ? true : undefined,\n }),\n destroy: () => clearDelay(),\n }\n}\n","export interface PopoverConfig {\n onOpenChange?: (open: boolean) => void\n}\n\nexport function createPopover(config: PopoverConfig = {}) {\n const { onOpenChange } = config\n\n return {\n getTriggerProps: (isOpen: boolean) => ({\n 'aria-haspopup': true as const,\n 'aria-expanded': isOpen,\n onClick: () => onOpenChange?.(!isOpen),\n }),\n getContentProps: (isOpen: boolean) => ({\n role: 'dialog' as const,\n hidden: !isOpen || undefined,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Escape') onOpenChange?.(false)\n },\n }),\n }\n}\n","export interface ToastConfig {\n duration?: number\n}\n\nexport interface Toast {\n id: string\n title?: string\n description?: string\n variant?: 'default' | 'destructive' | 'success'\n duration?: number\n action?: {\n label: string\n onClick: () => void\n }\n}\n\nexport interface ToastState {\n toasts: Toast[]\n}\n\nlet toastCounter = 0\n\nexport function createToastManager(config: ToastConfig = {}) {\n const { duration: defaultDuration = 5000 } = config\n const listeners = new Set<(state: ToastState) => void>()\n let state: ToastState = { toasts: [] }\n\n function notify() {\n for (const listener of listeners) {\n listener(state)\n }\n }\n\n function addToast(toast: Omit<Toast, 'id'>): string {\n const id = `toast-${++toastCounter}`\n const newToast: Toast = { id, ...toast }\n state = { toasts: [...state.toasts, newToast] }\n notify()\n\n const dur = toast.duration ?? defaultDuration\n if (dur > 0) {\n setTimeout(() => removeToast(id), dur)\n }\n\n return id\n }\n\n function removeToast(id: string) {\n state = { toasts: state.toasts.filter(t => t.id !== id) }\n notify()\n }\n\n function subscribe(listener: (state: ToastState) => void): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n }\n\n return {\n addToast,\n removeToast,\n subscribe,\n getState: () => state,\n }\n}\n\n// Singleton for simple usage\nconst defaultManager = createToastManager()\n\nexport const toast = {\n default: (title: string, description?: string) =>\n defaultManager.addToast({ title, description, variant: 'default' }),\n success: (title: string, description?: string) =>\n defaultManager.addToast({ title, description, variant: 'success' }),\n destructive: (title: string, description?: string) =>\n defaultManager.addToast({ title, description, variant: 'destructive' }),\n custom: (t: Omit<Toast, 'id'>) => defaultManager.addToast(t),\n dismiss: (id: string) => defaultManager.removeToast(id),\n subscribe: defaultManager.subscribe,\n getState: defaultManager.getState,\n}\n","export interface DrawerConfig {\n side?: 'left' | 'right' | 'top' | 'bottom'\n onOpenChange?: (open: boolean) => void\n}\n\nexport function createDrawer(config: DrawerConfig = {}) {\n const { side = 'right', onOpenChange } = config\n\n return {\n getOverlayProps: () => ({\n 'aria-hidden': true as const,\n onClick: () => onOpenChange?.(false),\n }),\n getContentProps: (isOpen: boolean) => ({\n role: 'dialog' as const,\n 'aria-modal': true,\n hidden: !isOpen ? true : undefined,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Escape') onOpenChange?.(false)\n },\n }),\n getCloseProps: () => ({\n 'aria-label': 'Close',\n onClick: () => onOpenChange?.(false),\n }),\n side,\n }\n}\n","import { Keys, getNextIndex } from './utils/keyboard'\n\nexport interface DropdownMenuConfig {\n onOpenChange?: (open: boolean) => void\n}\n\nexport interface DropdownMenuItem {\n id: string\n label: string\n disabled?: boolean\n type?: 'item' | 'separator' | 'label'\n shortcut?: string\n onSelect?: () => void\n}\n\nexport function createDropdownMenu(items: DropdownMenuItem[], config: DropdownMenuConfig = {}) {\n const { onOpenChange } = config\n const actionItems = items.filter(i => i.type !== 'separator' && i.type !== 'label' && !i.disabled)\n\n return {\n getTriggerProps: (isOpen: boolean) => ({\n 'aria-haspopup': 'menu' as const,\n 'aria-expanded': isOpen,\n onClick: () => onOpenChange?.(!isOpen),\n }),\n getContentProps: (isOpen: boolean) => ({\n role: 'menu' as const,\n hidden: !isOpen || undefined,\n }),\n getItemProps: (item: DropdownMenuItem, isHighlighted: boolean) => ({\n role: 'menuitem' as const,\n 'aria-disabled': item.disabled || undefined,\n 'data-highlighted': isHighlighted || undefined,\n tabIndex: -1,\n onClick: () => {\n if (!item.disabled && item.type !== 'separator' && item.type !== 'label') {\n item.onSelect?.()\n onOpenChange?.(false)\n }\n },\n }),\n handleKeyDown: (\n e: KeyboardEvent,\n isOpen: boolean,\n highlightedIndex: number,\n onHighlightChange: (index: number) => void\n ) => {\n if (!isOpen) return\n\n if (e.key === Keys.ArrowDown) {\n e.preventDefault()\n onHighlightChange(getNextIndex(highlightedIndex, actionItems.length, 'next'))\n } else if (e.key === Keys.ArrowUp) {\n e.preventDefault()\n onHighlightChange(getNextIndex(highlightedIndex, actionItems.length, 'prev'))\n } else if (e.key === Keys.Enter || e.key === Keys.Space) {\n e.preventDefault()\n const item = actionItems[highlightedIndex]\n if (item) {\n item.onSelect?.()\n onOpenChange?.(false)\n }\n } else if (e.key === Keys.Escape) {\n e.preventDefault()\n onOpenChange?.(false)\n } else if (e.key === Keys.Home) {\n e.preventDefault()\n onHighlightChange(0)\n } else if (e.key === Keys.End) {\n e.preventDefault()\n onHighlightChange(actionItems.length - 1)\n }\n },\n }\n}\n","export interface SwitchConfig {\n onCheckedChange?: (checked: boolean) => void\n}\n\nexport function createSwitch(config: SwitchConfig = {}) {\n const { onCheckedChange } = config\n\n return {\n getSwitchProps: (checked: boolean, disabled = false) => ({\n role: 'switch' as const,\n 'aria-checked': checked,\n 'aria-disabled': disabled || undefined,\n tabIndex: disabled ? -1 : 0,\n onClick: () => {\n if (!disabled) onCheckedChange?.(!checked)\n },\n onKeyDown: (e: KeyboardEvent) => {\n if (disabled) return\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n onCheckedChange?.(!checked)\n }\n },\n }),\n }\n}\n","// packages/core/src/mcp/scope.ts\nimport type { ScopeDescriptor } from './types'\n\nexport function parseScope(raw: string): ScopeDescriptor {\n const trimmed = raw.trim()\n const colonIdx = trimmed.indexOf(':')\n if (colonIdx === -1) {\n return { raw, resource: trimmed, permissions: ['access'] }\n }\n const resource = trimmed.slice(0, colonIdx)\n const permsStr = trimmed.slice(colonIdx + 1)\n const permissions = permsStr.split(',').map((p) => p.trim()).filter(Boolean)\n return { raw, resource, permissions: permissions.length > 0 ? permissions : ['access'] }\n}\n\nexport function parseScopes(scopeString: string): ScopeDescriptor[] {\n return scopeString\n .split(/\\s+/)\n .filter(Boolean)\n .map(parseScope)\n}\n","// packages/core/src/mcp/tool-state.ts\nimport type { CallToolResult, ToolCallStatus } from './types'\n\nexport interface ToolStateSnapshot {\n status: ToolCallStatus\n tool?: string\n args?: Record<string, unknown>\n result?: CallToolResult\n error?: Error\n startedAt?: number\n endedAt?: number\n}\n\nexport interface ToolStateApi extends Readonly<ToolStateSnapshot> {\n start(input: { tool: string; args: Record<string, unknown> }): void\n markRunning(): void\n markDone(result: CallToolResult): void\n markError(error: Error): void\n cancel(): void\n reset(): void\n subscribe(fn: (snapshot: ToolStateSnapshot) => void): () => void\n}\n\nconst VALID_TRANSITIONS: Record<ToolCallStatus, ToolCallStatus[]> = {\n idle: ['pending'],\n pending: ['running', 'cancelled'],\n running: ['done', 'error', 'cancelled'],\n done: ['idle'],\n error: ['idle'],\n cancelled: ['idle'],\n}\n\nexport function createToolState(): ToolStateApi {\n let snapshot: ToolStateSnapshot = { status: 'idle' }\n const listeners = new Set<(s: ToolStateSnapshot) => void>()\n\n function transition(to: ToolCallStatus, patch: Partial<ToolStateSnapshot> = {}) {\n const allowed = VALID_TRANSITIONS[snapshot.status]\n if (!allowed.includes(to)) {\n throw new Error(`Invalid tool-state transition: ${snapshot.status} → ${to}`)\n }\n snapshot = { ...snapshot, ...patch, status: to }\n let firstError: unknown\n for (const fn of listeners) {\n try { fn(snapshot) } catch (e) { if (firstError === undefined) firstError = e }\n }\n if (firstError !== undefined) throw firstError\n }\n\n return {\n get status() { return snapshot.status },\n get tool() { return snapshot.tool },\n get args() { return snapshot.args },\n get result() { return snapshot.result },\n get error() { return snapshot.error },\n get startedAt() { return snapshot.startedAt },\n get endedAt() { return snapshot.endedAt },\n start({ tool, args }) {\n transition('pending', { tool, args, startedAt: Date.now() })\n },\n markRunning() {\n transition('running')\n },\n markDone(result) {\n transition('done', { result, endedAt: Date.now() })\n },\n markError(error) {\n transition('error', { error, endedAt: Date.now() })\n },\n cancel() {\n transition('cancelled', { endedAt: Date.now() })\n },\n reset() {\n if (snapshot.status === 'idle') return\n snapshot = { status: 'idle' }\n let firstError: unknown\n for (const fn of listeners) {\n try { fn(snapshot) } catch (e) { if (firstError === undefined) firstError = e }\n }\n if (firstError !== undefined) throw firstError\n },\n subscribe(fn) {\n listeners.add(fn)\n return () => listeners.delete(fn)\n },\n }\n}\n","// packages/core/src/mcp/schema-form.ts\nimport type { JsonSchema } from './types'\n\nexport type FieldKind =\n | 'text'\n | 'textarea'\n | 'email'\n | 'url'\n | 'date'\n | 'number'\n | 'switch'\n | 'select'\n | 'multiselect'\n | 'unknown'\n\nexport interface FieldDescriptor {\n key: string\n kind: FieldKind\n label: string\n help?: string\n required: boolean\n defaultValue?: unknown\n options?: Array<{ value: string; label: string }>\n min?: number\n max?: number\n minLength?: number\n maxLength?: number\n pattern?: string\n}\n\nexport function schemaToFields(schema: JsonSchema): FieldDescriptor[] {\n if (schema.type !== 'object' || !schema.properties) return []\n const required = new Set(schema.required ?? [])\n const fields: FieldDescriptor[] = []\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n fields.push(fieldFromProperty(key, propSchema, required.has(key)))\n }\n return fields\n}\n\nfunction fieldFromProperty(key: string, schema: JsonSchema, required: boolean): FieldDescriptor {\n const base = {\n key,\n label: schema.title ?? key,\n help: schema.description,\n required,\n defaultValue: schema.default,\n }\n\n if (schema.enum && schema.enum.length > 0) {\n return {\n ...base,\n kind: 'select',\n options: schema.enum.map((v) => ({ value: String(v), label: String(v) })),\n }\n }\n\n switch (schema.type) {\n case 'string': {\n if (schema.format === 'email') return { ...base, kind: 'email' }\n if (schema.format === 'uri' || schema.format === 'url') return { ...base, kind: 'url' }\n if (schema.format === 'date' || schema.format === 'date-time') return { ...base, kind: 'date' }\n if ((schema.maxLength ?? 0) > 200) {\n return {\n ...base,\n kind: 'textarea',\n minLength: schema.minLength,\n maxLength: schema.maxLength,\n pattern: schema.pattern,\n }\n }\n return {\n ...base,\n kind: 'text',\n minLength: schema.minLength,\n maxLength: schema.maxLength,\n pattern: schema.pattern,\n }\n }\n case 'number':\n case 'integer':\n return { ...base, kind: 'number', min: schema.minimum, max: schema.maximum }\n case 'boolean':\n return { ...base, kind: 'switch' }\n case 'array':\n if (schema.items?.type === 'string') return { ...base, kind: 'multiselect' }\n return { ...base, kind: 'unknown' }\n case 'null':\n return { ...base, kind: 'unknown' }\n default:\n return { ...base, kind: 'unknown' }\n }\n}\n","// OAuth 2.1 + PKCE helpers and state machine for MCP flows.\n\nexport interface PkcePair {\n codeVerifier: string\n codeChallenge: string\n codeChallengeMethod: 'S256'\n}\n\nfunction randomBytes(n: number): Uint8Array {\n const arr = new Uint8Array(n)\n globalThis.crypto.getRandomValues(arr)\n return arr\n}\n\nfunction base64urlEncode(bytes: Uint8Array): string {\n let s = ''\n for (const b of bytes) s += String.fromCharCode(b)\n return btoa(s).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n\nexport async function generatePkcePair(): Promise<PkcePair> {\n const verifierBytes = randomBytes(64) // 64 bytes → 86 chars base64url, within 43-128 range\n const codeVerifier = base64urlEncode(verifierBytes)\n const verifierBuf = new TextEncoder().encode(codeVerifier)\n const hashBuf = await globalThis.crypto.subtle.digest('SHA-256', verifierBuf)\n const codeChallenge = base64urlEncode(new Uint8Array(hashBuf))\n return { codeVerifier, codeChallenge, codeChallengeMethod: 'S256' }\n}\n\nexport interface AuthUrlInput {\n authorizationEndpoint: string\n clientId: string\n redirectUri: string\n scope: string\n codeChallenge: string\n state: string\n resource?: string // RFC 8707 — MCP-required for token binding\n}\n\nexport function buildAuthUrl(input: AuthUrlInput): string {\n const u = new URL(input.authorizationEndpoint)\n u.searchParams.set('response_type', 'code')\n u.searchParams.set('client_id', input.clientId)\n u.searchParams.set('redirect_uri', input.redirectUri)\n u.searchParams.set('scope', input.scope)\n u.searchParams.set('code_challenge', input.codeChallenge)\n u.searchParams.set('code_challenge_method', 'S256')\n u.searchParams.set('state', input.state)\n if (input.resource) u.searchParams.set('resource', input.resource)\n return u.toString()\n}\n\nexport interface TokenExchangeInput {\n clientId: string\n code: string\n redirectUri: string\n codeVerifier: string\n}\n\nexport function buildTokenExchangeBody(input: TokenExchangeInput): string {\n const body = new URLSearchParams()\n body.set('grant_type', 'authorization_code')\n body.set('client_id', input.clientId)\n body.set('code', input.code)\n body.set('redirect_uri', input.redirectUri)\n body.set('code_verifier', input.codeVerifier)\n return body.toString()\n}\n\nexport interface TokenRefreshInput {\n clientId: string\n refreshToken: string\n scope?: string\n}\n\nexport function buildTokenRefreshBody(input: TokenRefreshInput): string {\n const body = new URLSearchParams()\n body.set('grant_type', 'refresh_token')\n body.set('client_id', input.clientId)\n body.set('refresh_token', input.refreshToken)\n if (input.scope) body.set('scope', input.scope)\n return body.toString()\n}\n\nexport type OAuthStatus = 'idle' | 'authorizing' | 'authorized' | 'denied' | 'error'\n\nexport interface OAuthTokens {\n accessToken: string\n tokenType: string\n expiresIn?: number\n refreshToken?: string\n scope?: string\n}\n\nexport interface OAuthFlowSnapshot {\n status: OAuthStatus\n verifier?: string\n state?: string\n tokens?: OAuthTokens\n error?: { code: string; message?: string; originalError?: Error }\n}\n\nexport interface OAuthFlowApi extends Readonly<OAuthFlowSnapshot> {\n start(input: { verifier: string; state: string }): void\n markAuthorized(tokens: OAuthTokens): void\n markDenied(code: string, message?: string): void\n markError(error: Error): void\n reset(): void\n subscribe(fn: (s: OAuthFlowSnapshot) => void): () => void\n}\n\nconst OAUTH_TRANSITIONS: Record<OAuthStatus, OAuthStatus[]> = {\n idle: ['authorizing'],\n authorizing: ['authorized', 'denied', 'error'],\n authorized: ['idle'],\n denied: ['idle'],\n error: ['idle'],\n}\n\nexport function createOAuthFlow(): OAuthFlowApi {\n let snap: OAuthFlowSnapshot = { status: 'idle' }\n const listeners = new Set<(s: OAuthFlowSnapshot) => void>()\n\n function notify() {\n let firstError: unknown\n for (const fn of listeners) {\n try {\n fn(snap)\n } catch (e) {\n if (firstError === undefined) firstError = e\n }\n }\n if (firstError !== undefined) throw firstError\n }\n\n function transition(to: OAuthStatus, patch: Partial<OAuthFlowSnapshot> = {}) {\n const allowed = OAUTH_TRANSITIONS[snap.status]\n if (!allowed.includes(to)) {\n throw new Error(`Invalid oauth transition: ${snap.status} → ${to}`)\n }\n snap = { ...snap, ...patch, status: to }\n notify()\n }\n\n return {\n get status() {\n return snap.status\n },\n get verifier() {\n return snap.verifier\n },\n get state() {\n return snap.state\n },\n get tokens() {\n return snap.tokens\n },\n get error() {\n return snap.error\n },\n start({ verifier, state }) {\n transition('authorizing', { verifier, state })\n },\n markAuthorized(tokens) {\n transition('authorized', { tokens })\n },\n markDenied(code, message) {\n transition('denied', { error: { code, message } })\n },\n markError(error) {\n transition('error', { error: { code: 'unknown', message: error.message, originalError: error } })\n },\n reset() {\n if (snap.status === 'idle') return\n snap = { status: 'idle' }\n notify()\n },\n subscribe(fn) {\n listeners.add(fn)\n return () => listeners.delete(fn)\n },\n }\n}\n","// packages/core/src/mcp/app-bridge.ts\n\nexport interface AppMessageEnvelope {\n id: string\n type: string\n payload?: unknown\n}\n\nexport function encodeEnvelope(env: AppMessageEnvelope): AppMessageEnvelope {\n return { id: env.id, type: env.type, payload: env.payload }\n}\n\nexport function decodeEnvelope(raw: unknown): AppMessageEnvelope | null {\n if (raw === null || Array.isArray(raw) || typeof raw !== 'object') return null\n const o = raw as Record<string, unknown>\n if (typeof o.id !== 'string') return null\n if (typeof o.type !== 'string') return null\n return { id: o.id, type: o.type, payload: o.payload }\n}\n\nexport interface AppBridgeConfig {\n postMessage: (env: AppMessageEnvelope) => void\n}\n\nexport interface AppBridge {\n send(env: AppMessageEnvelope): void\n receive(raw: unknown): void\n onMessage(fn: (env: AppMessageEnvelope) => void): () => void\n}\n\nexport function createAppBridge(config: AppBridgeConfig): AppBridge {\n const listeners = new Set<(env: AppMessageEnvelope) => void>()\n\n function dispatch(env: AppMessageEnvelope) {\n let firstError: unknown\n for (const fn of listeners) {\n try { fn(env) } catch (e) { if (firstError === undefined) firstError = e }\n }\n if (firstError !== undefined) throw firstError\n }\n\n return {\n send(env) {\n config.postMessage(encodeEnvelope(env))\n },\n receive(raw) {\n const env = decodeEnvelope(raw)\n if (!env) return\n dispatch(env)\n },\n onMessage(fn) {\n listeners.add(fn)\n return () => listeners.delete(fn)\n },\n }\n}\n"],"mappings":"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","names":["item","toast"]}
1
+ {"version":3,"sources":["../src/utils/cn.ts","../src/utils/dom.ts","../src/utils/keyboard.ts","../src/dialog.ts","../src/tabs.ts","../src/accordion.ts","../src/select.ts","../src/tooltip.ts","../src/popover.ts","../src/toast.ts","../src/drawer.ts","../src/dropdown-menu.ts","../src/switch.ts","../src/mcp/scope.ts","../src/mcp/tool-state.ts","../src/mcp/schema-form.ts","../src/mcp/oauth.ts","../src/mcp/app-bridge.ts"],"sourcesContent":["export function cn(...inputs: (string | undefined | null | false)[]): string {\n return inputs.filter(Boolean).join(' ')\n}\n","export function getFocusableElements(container: HTMLElement): HTMLElement[] {\n const elements = container.querySelectorAll<HTMLElement>(\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n )\n return Array.from(elements)\n}\n\nexport function trapFocus(container: HTMLElement, event: KeyboardEvent) {\n const focusable = getFocusableElements(container)\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault()\n last.focus()\n }\n } else {\n if (document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n }\n}\n\nexport function createClickOutsideHandler(\n element: HTMLElement,\n callback: () => void\n): () => void {\n const handler = (event: MouseEvent) => {\n if (!element.contains(event.target as Node)) {\n callback()\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n}\n\nexport function lockScroll(): () => void {\n const body = document.body\n // Compensate for the scrollbar disappearing so centered/fixed content\n // doesn't shift (\"shake\") the moment the overlay opens.\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n const prevOverflow = body.style.overflow\n const prevPaddingRight = body.style.paddingRight\n\n body.style.overflow = 'hidden'\n if (scrollbarWidth > 0) {\n const currentPad = parseFloat(getComputedStyle(body).paddingRight) || 0\n body.style.paddingRight = `${currentPad + scrollbarWidth}px`\n }\n\n return () => {\n body.style.overflow = prevOverflow\n body.style.paddingRight = prevPaddingRight\n }\n}\n","export const Keys = {\n Enter: 'Enter',\n Space: ' ',\n Escape: 'Escape',\n ArrowUp: 'ArrowUp',\n ArrowDown: 'ArrowDown',\n ArrowLeft: 'ArrowLeft',\n ArrowRight: 'ArrowRight',\n Home: 'Home',\n End: 'End',\n Tab: 'Tab',\n} as const\n\nexport type KeyboardDirection = 'horizontal' | 'vertical' | 'both'\n\nexport function getNextIndex(\n current: number,\n total: number,\n direction: 'next' | 'prev',\n loop = true\n): number {\n if (direction === 'next') {\n const next = current + 1\n return next >= total ? (loop ? 0 : current) : next\n }\n const prev = current - 1\n return prev < 0 ? (loop ? total - 1 : current) : prev\n}\n\nexport function handleArrowNavigation(\n event: KeyboardEvent,\n currentIndex: number,\n totalItems: number,\n orientation: KeyboardDirection,\n onIndexChange: (index: number) => void,\n loop = true\n): void {\n const nextKeys = orientation === 'horizontal' ? [Keys.ArrowRight] : orientation === 'vertical' ? [Keys.ArrowDown] : [Keys.ArrowRight, Keys.ArrowDown]\n const prevKeys = orientation === 'horizontal' ? [Keys.ArrowLeft] : orientation === 'vertical' ? [Keys.ArrowUp] : [Keys.ArrowLeft, Keys.ArrowUp]\n\n if (nextKeys.includes(event.key as any)) {\n event.preventDefault()\n onIndexChange(getNextIndex(currentIndex, totalItems, 'next', loop))\n } else if (prevKeys.includes(event.key as any)) {\n event.preventDefault()\n onIndexChange(getNextIndex(currentIndex, totalItems, 'prev', loop))\n } else if (event.key === Keys.Home) {\n event.preventDefault()\n onIndexChange(0)\n } else if (event.key === Keys.End) {\n event.preventDefault()\n onIndexChange(totalItems - 1)\n }\n}\n","export interface DialogConfig {\n modal?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nlet dialogCounter = 0\n\nexport function createDialog(config: DialogConfig = {}) {\n const { modal = true, onOpenChange } = config\n const id = `mcpe-dialog-${++dialogCounter}`\n\n return {\n id,\n getTriggerProps: (isOpen: boolean) => ({\n 'aria-haspopup': 'dialog' as const,\n 'aria-expanded': isOpen,\n onClick: () => onOpenChange?.(!isOpen),\n }),\n getContentProps: (isOpen: boolean) => ({\n role: 'dialog' as const,\n 'aria-modal': modal,\n 'aria-labelledby': `${id}-title`,\n 'aria-describedby': `${id}-description`,\n hidden: !isOpen ? true : undefined,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Escape') onOpenChange?.(false)\n },\n }),\n getOverlayProps: () => ({\n 'aria-hidden': true as const,\n onClick: () => onOpenChange?.(false),\n }),\n getCloseProps: () => ({\n 'aria-label': 'Close',\n onClick: () => onOpenChange?.(false),\n }),\n }\n}\n","import { handleArrowNavigation } from './utils/keyboard'\n\nexport interface TabsConfig {\n defaultValue?: string\n onValueChange?: (value: string) => void\n}\n\nexport interface TabItem {\n value: string\n disabled?: boolean\n}\n\nexport function createTabs(items: TabItem[], config: TabsConfig = {}) {\n const { onValueChange } = config\n\n return {\n getListProps: () => ({\n role: 'tablist' as const,\n }),\n getTriggerProps: (value: string, activeValue: string) => {\n const index = items.findIndex(item => item.value === value)\n const isActive = value === activeValue\n const item = items[index]\n\n return {\n role: 'tab' as const,\n 'aria-selected': isActive,\n 'aria-controls': `tabpanel-${value}`,\n id: `tab-${value}`,\n tabIndex: isActive ? 0 : -1,\n disabled: item?.disabled || false,\n onClick: () => {\n if (!item?.disabled) onValueChange?.(value)\n },\n onKeyDown: (e: KeyboardEvent) => {\n const enabledItems = items.filter(i => !i.disabled)\n const currentEnabledIndex = enabledItems.findIndex(i => i.value === value)\n handleArrowNavigation(\n e,\n currentEnabledIndex,\n enabledItems.length,\n 'horizontal',\n (newIndex) => {\n const newItem = enabledItems[newIndex]\n onValueChange?.(newItem.value)\n }\n )\n },\n }\n },\n getPanelProps: (value: string, activeValue: string) => ({\n role: 'tabpanel' as const,\n id: `tabpanel-${value}`,\n 'aria-labelledby': `tab-${value}`,\n hidden: value !== activeValue || undefined,\n tabIndex: 0,\n }),\n }\n}\n","import { Keys } from './utils/keyboard'\n\nexport interface AccordionConfig {\n type?: 'single' | 'multiple'\n collapsible?: boolean\n onValueChange?: (value: string[]) => void\n}\n\nexport interface AccordionItemConfig {\n value: string\n disabled?: boolean\n}\n\nexport function createAccordion(items: AccordionItemConfig[], config: AccordionConfig = {}) {\n const { type = 'single', collapsible = false, onValueChange } = config\n\n function toggle(value: string, expandedValues: string[]) {\n const isExpanded = expandedValues.includes(value)\n\n if (type === 'single') {\n if (isExpanded && collapsible) {\n onValueChange?.([])\n } else if (!isExpanded) {\n onValueChange?.([value])\n }\n } else {\n if (isExpanded) {\n onValueChange?.(expandedValues.filter(v => v !== value))\n } else {\n onValueChange?.([...expandedValues, value])\n }\n }\n }\n\n return {\n getItemProps: (value: string) => ({\n 'data-value': value,\n }),\n getTriggerProps: (value: string, expandedValues: string[]) => {\n const isExpanded = expandedValues.includes(value)\n const item = items.find(i => i.value === value)\n\n return {\n 'aria-expanded': isExpanded,\n 'aria-controls': `accordion-content-${value}`,\n id: `accordion-trigger-${value}`,\n disabled: item?.disabled || false,\n onClick: () => {\n if (!item?.disabled) toggle(value, expandedValues)\n },\n onKeyDown: (e: { key: string; preventDefault: () => void }) => {\n const enabledItems = items.filter(i => !i.disabled)\n const currentEnabledIndex = enabledItems.findIndex(i => i.value === value)\n\n if (e.key === Keys.ArrowDown) {\n e.preventDefault()\n const next = currentEnabledIndex + 1\n if (next < enabledItems.length) {\n const el = document.getElementById(`accordion-trigger-${enabledItems[next].value}`)\n el?.focus()\n }\n } else if (e.key === Keys.ArrowUp) {\n e.preventDefault()\n const prev = currentEnabledIndex - 1\n if (prev >= 0) {\n const el = document.getElementById(`accordion-trigger-${enabledItems[prev].value}`)\n el?.focus()\n }\n } else if (e.key === Keys.Home) {\n e.preventDefault()\n const el = document.getElementById(`accordion-trigger-${enabledItems[0].value}`)\n el?.focus()\n } else if (e.key === Keys.End) {\n e.preventDefault()\n const el = document.getElementById(`accordion-trigger-${enabledItems[enabledItems.length - 1].value}`)\n el?.focus()\n }\n },\n }\n },\n getContentProps: (value: string, expandedValues: string[]) => {\n const isExpanded = expandedValues.includes(value)\n return {\n role: 'region' as const,\n id: `accordion-content-${value}`,\n 'aria-labelledby': `accordion-trigger-${value}`,\n hidden: !isExpanded ? true : undefined,\n }\n },\n }\n}\n","import { Keys, getNextIndex } from './utils/keyboard'\n\nexport interface SelectConfig {\n onValueChange?: (value: string) => void\n onOpenChange?: (open: boolean) => void\n}\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport function createSelect(options: SelectOption[], config: SelectConfig = {}) {\n const { onValueChange, onOpenChange } = config\n\n return {\n getTriggerProps: (isOpen: boolean, selectedValue: string | null, highlightedIndex?: number) => {\n const selectedOption = options.find(o => o.value === selectedValue)\n const highlightedOption = highlightedIndex != null ? options[highlightedIndex] : undefined\n return {\n role: 'combobox' as const,\n 'aria-expanded': isOpen,\n 'aria-haspopup': 'listbox' as const,\n 'aria-label': selectedOption?.label || 'Select an option',\n 'aria-activedescendant': isOpen && highlightedOption ? `select-option-${highlightedOption.value}` : undefined,\n onClick: () => onOpenChange?.(!isOpen),\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === Keys.Enter || e.key === Keys.Space) {\n e.preventDefault()\n onOpenChange?.(!isOpen)\n } else if (e.key === Keys.ArrowDown) {\n e.preventDefault()\n onOpenChange?.(true)\n }\n },\n }\n },\n getListProps: () => ({\n role: 'listbox' as const,\n }),\n getOptionProps: (\n option: SelectOption,\n isHighlighted: boolean,\n selectedValue: string | null,\n _highlightedIndex: number\n ) => ({\n role: 'option' as const,\n 'aria-selected': option.value === selectedValue,\n 'aria-disabled': option.disabled || undefined,\n 'data-highlighted': isHighlighted || undefined,\n id: `select-option-${option.value}`,\n onClick: () => {\n if (!option.disabled) {\n onValueChange?.(option.value)\n onOpenChange?.(false)\n }\n },\n }),\n getContentProps: (isOpen: boolean) => ({\n hidden: !isOpen ? true : undefined,\n }),\n handleKeyDown: (\n e: KeyboardEvent,\n isOpen: boolean,\n highlightedIndex: number,\n onHighlightChange: (index: number) => void\n ) => {\n if (!isOpen) return\n\n const enabledOptions = options.filter(o => !o.disabled)\n\n if (e.key === Keys.ArrowDown) {\n e.preventDefault()\n const next = getNextIndex(highlightedIndex, enabledOptions.length, 'next')\n onHighlightChange(next)\n } else if (e.key === Keys.ArrowUp) {\n e.preventDefault()\n const prev = getNextIndex(highlightedIndex, enabledOptions.length, 'prev')\n onHighlightChange(prev)\n } else if (e.key === Keys.Enter || e.key === Keys.Space) {\n e.preventDefault()\n const option = enabledOptions[highlightedIndex]\n if (option) {\n onValueChange?.(option.value)\n onOpenChange?.(false)\n }\n } else if (e.key === Keys.Escape) {\n e.preventDefault()\n onOpenChange?.(false)\n } else if (e.key === Keys.Home) {\n e.preventDefault()\n onHighlightChange(0)\n } else if (e.key === Keys.End) {\n e.preventDefault()\n onHighlightChange(enabledOptions.length - 1)\n }\n },\n }\n}\n","export interface TooltipConfig {\n delay?: number\n onOpenChange?: (open: boolean) => void\n}\n\nlet tooltipCounter = 0\n\nexport function createTooltip(config: TooltipConfig = {}) {\n const { delay = 700, onOpenChange } = config\n const id = `mcpe-tooltip-${++tooltipCounter}`\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n\n function clearDelay() {\n if (timeoutId !== null) {\n clearTimeout(timeoutId)\n timeoutId = null\n }\n }\n\n function openWithDelay() {\n clearDelay()\n timeoutId = setTimeout(() => {\n onOpenChange?.(true)\n }, delay)\n }\n\n function close() {\n clearDelay()\n onOpenChange?.(false)\n }\n\n return {\n getTriggerProps: () => ({\n 'aria-describedby': id,\n onMouseEnter: () => openWithDelay(),\n onMouseLeave: () => close(),\n onFocus: () => openWithDelay(),\n onBlur: () => close(),\n }),\n getContentProps: (isOpen: boolean) => ({\n id,\n role: 'tooltip' as const,\n hidden: !isOpen ? true : undefined,\n }),\n destroy: () => clearDelay(),\n }\n}\n","export interface PopoverConfig {\n onOpenChange?: (open: boolean) => void\n}\n\nexport function createPopover(config: PopoverConfig = {}) {\n const { onOpenChange } = config\n\n return {\n getTriggerProps: (isOpen: boolean) => ({\n 'aria-haspopup': true as const,\n 'aria-expanded': isOpen,\n onClick: () => onOpenChange?.(!isOpen),\n }),\n getContentProps: (isOpen: boolean) => ({\n role: 'dialog' as const,\n hidden: !isOpen || undefined,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Escape') onOpenChange?.(false)\n },\n }),\n }\n}\n","export interface ToastConfig {\n duration?: number\n}\n\nexport interface Toast {\n id: string\n title?: string\n description?: string\n variant?: 'default' | 'destructive' | 'success'\n duration?: number\n action?: {\n label: string\n onClick: () => void\n }\n}\n\nexport interface ToastState {\n toasts: Toast[]\n}\n\nlet toastCounter = 0\n\nexport function createToastManager(config: ToastConfig = {}) {\n const { duration: defaultDuration = 5000 } = config\n const listeners = new Set<(state: ToastState) => void>()\n let state: ToastState = { toasts: [] }\n\n function notify() {\n for (const listener of listeners) {\n listener(state)\n }\n }\n\n function addToast(toast: Omit<Toast, 'id'>): string {\n const id = `toast-${++toastCounter}`\n const newToast: Toast = { id, ...toast }\n state = { toasts: [...state.toasts, newToast] }\n notify()\n\n const dur = toast.duration ?? defaultDuration\n if (dur > 0) {\n setTimeout(() => removeToast(id), dur)\n }\n\n return id\n }\n\n function removeToast(id: string) {\n state = { toasts: state.toasts.filter(t => t.id !== id) }\n notify()\n }\n\n function subscribe(listener: (state: ToastState) => void): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n }\n\n return {\n addToast,\n removeToast,\n subscribe,\n getState: () => state,\n }\n}\n\n// Singleton for simple usage\nconst defaultManager = createToastManager()\n\nexport const toast = {\n default: (title: string, description?: string) =>\n defaultManager.addToast({ title, description, variant: 'default' }),\n success: (title: string, description?: string) =>\n defaultManager.addToast({ title, description, variant: 'success' }),\n destructive: (title: string, description?: string) =>\n defaultManager.addToast({ title, description, variant: 'destructive' }),\n custom: (t: Omit<Toast, 'id'>) => defaultManager.addToast(t),\n dismiss: (id: string) => defaultManager.removeToast(id),\n subscribe: defaultManager.subscribe,\n getState: defaultManager.getState,\n}\n","export interface DrawerConfig {\n side?: 'left' | 'right' | 'top' | 'bottom'\n onOpenChange?: (open: boolean) => void\n}\n\nexport function createDrawer(config: DrawerConfig = {}) {\n const { side = 'right', onOpenChange } = config\n\n return {\n getOverlayProps: () => ({\n 'aria-hidden': true as const,\n onClick: () => onOpenChange?.(false),\n }),\n getContentProps: (isOpen: boolean) => ({\n role: 'dialog' as const,\n 'aria-modal': true,\n hidden: !isOpen ? true : undefined,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Escape') onOpenChange?.(false)\n },\n }),\n getCloseProps: () => ({\n 'aria-label': 'Close',\n onClick: () => onOpenChange?.(false),\n }),\n side,\n }\n}\n","import { Keys, getNextIndex } from './utils/keyboard'\n\nexport interface DropdownMenuConfig {\n onOpenChange?: (open: boolean) => void\n}\n\nexport interface DropdownMenuItem {\n id: string\n label: string\n disabled?: boolean\n type?: 'item' | 'separator' | 'label'\n shortcut?: string\n onSelect?: () => void\n}\n\nexport function createDropdownMenu(items: DropdownMenuItem[], config: DropdownMenuConfig = {}) {\n const { onOpenChange } = config\n const actionItems = items.filter(i => i.type !== 'separator' && i.type !== 'label' && !i.disabled)\n\n return {\n getTriggerProps: (isOpen: boolean) => ({\n 'aria-haspopup': 'menu' as const,\n 'aria-expanded': isOpen,\n onClick: () => onOpenChange?.(!isOpen),\n }),\n getContentProps: (isOpen: boolean) => ({\n role: 'menu' as const,\n hidden: !isOpen || undefined,\n }),\n getItemProps: (item: DropdownMenuItem, isHighlighted: boolean) => ({\n role: 'menuitem' as const,\n 'aria-disabled': item.disabled || undefined,\n 'data-highlighted': isHighlighted || undefined,\n tabIndex: -1,\n onClick: () => {\n if (!item.disabled && item.type !== 'separator' && item.type !== 'label') {\n item.onSelect?.()\n onOpenChange?.(false)\n }\n },\n }),\n handleKeyDown: (\n e: KeyboardEvent,\n isOpen: boolean,\n highlightedIndex: number,\n onHighlightChange: (index: number) => void\n ) => {\n if (!isOpen) return\n\n if (e.key === Keys.ArrowDown) {\n e.preventDefault()\n onHighlightChange(getNextIndex(highlightedIndex, actionItems.length, 'next'))\n } else if (e.key === Keys.ArrowUp) {\n e.preventDefault()\n onHighlightChange(getNextIndex(highlightedIndex, actionItems.length, 'prev'))\n } else if (e.key === Keys.Enter || e.key === Keys.Space) {\n e.preventDefault()\n const item = actionItems[highlightedIndex]\n if (item) {\n item.onSelect?.()\n onOpenChange?.(false)\n }\n } else if (e.key === Keys.Escape) {\n e.preventDefault()\n onOpenChange?.(false)\n } else if (e.key === Keys.Home) {\n e.preventDefault()\n onHighlightChange(0)\n } else if (e.key === Keys.End) {\n e.preventDefault()\n onHighlightChange(actionItems.length - 1)\n }\n },\n }\n}\n","export interface SwitchConfig {\n onCheckedChange?: (checked: boolean) => void\n}\n\nexport function createSwitch(config: SwitchConfig = {}) {\n const { onCheckedChange } = config\n\n return {\n getSwitchProps: (checked: boolean, disabled = false) => ({\n role: 'switch' as const,\n 'aria-checked': checked,\n 'aria-disabled': disabled || undefined,\n tabIndex: disabled ? -1 : 0,\n onClick: () => {\n if (!disabled) onCheckedChange?.(!checked)\n },\n onKeyDown: (e: KeyboardEvent) => {\n if (disabled) return\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n onCheckedChange?.(!checked)\n }\n },\n }),\n }\n}\n","// packages/core/src/mcp/scope.ts\nimport type { ScopeDescriptor } from './types'\n\nexport function parseScope(raw: string): ScopeDescriptor {\n const trimmed = raw.trim()\n const colonIdx = trimmed.indexOf(':')\n if (colonIdx === -1) {\n return { raw, resource: trimmed, permissions: ['access'] }\n }\n const resource = trimmed.slice(0, colonIdx)\n const permsStr = trimmed.slice(colonIdx + 1)\n const permissions = permsStr.split(',').map((p) => p.trim()).filter(Boolean)\n return { raw, resource, permissions: permissions.length > 0 ? permissions : ['access'] }\n}\n\nexport function parseScopes(scopeString: string): ScopeDescriptor[] {\n return scopeString\n .split(/\\s+/)\n .filter(Boolean)\n .map(parseScope)\n}\n","// packages/core/src/mcp/tool-state.ts\nimport type { CallToolResult, ToolCallStatus } from './types'\n\nexport interface ToolStateSnapshot {\n status: ToolCallStatus\n tool?: string\n args?: Record<string, unknown>\n result?: CallToolResult\n error?: Error\n startedAt?: number\n endedAt?: number\n}\n\nexport interface ToolStateApi extends Readonly<ToolStateSnapshot> {\n start(input: { tool: string; args: Record<string, unknown> }): void\n markRunning(): void\n markDone(result: CallToolResult): void\n markError(error: Error): void\n cancel(): void\n reset(): void\n subscribe(fn: (snapshot: ToolStateSnapshot) => void): () => void\n}\n\nconst VALID_TRANSITIONS: Record<ToolCallStatus, ToolCallStatus[]> = {\n idle: ['pending'],\n pending: ['running', 'cancelled'],\n running: ['done', 'error', 'cancelled'],\n done: ['idle'],\n error: ['idle'],\n cancelled: ['idle'],\n}\n\nexport function createToolState(): ToolStateApi {\n let snapshot: ToolStateSnapshot = { status: 'idle' }\n const listeners = new Set<(s: ToolStateSnapshot) => void>()\n\n function transition(to: ToolCallStatus, patch: Partial<ToolStateSnapshot> = {}) {\n const allowed = VALID_TRANSITIONS[snapshot.status]\n if (!allowed.includes(to)) {\n throw new Error(`Invalid tool-state transition: ${snapshot.status} → ${to}`)\n }\n snapshot = { ...snapshot, ...patch, status: to }\n let firstError: unknown\n for (const fn of listeners) {\n try { fn(snapshot) } catch (e) { if (firstError === undefined) firstError = e }\n }\n if (firstError !== undefined) throw firstError\n }\n\n return {\n get status() { return snapshot.status },\n get tool() { return snapshot.tool },\n get args() { return snapshot.args },\n get result() { return snapshot.result },\n get error() { return snapshot.error },\n get startedAt() { return snapshot.startedAt },\n get endedAt() { return snapshot.endedAt },\n start({ tool, args }) {\n transition('pending', { tool, args, startedAt: Date.now() })\n },\n markRunning() {\n transition('running')\n },\n markDone(result) {\n transition('done', { result, endedAt: Date.now() })\n },\n markError(error) {\n transition('error', { error, endedAt: Date.now() })\n },\n cancel() {\n transition('cancelled', { endedAt: Date.now() })\n },\n reset() {\n if (snapshot.status === 'idle') return\n snapshot = { status: 'idle' }\n let firstError: unknown\n for (const fn of listeners) {\n try { fn(snapshot) } catch (e) { if (firstError === undefined) firstError = e }\n }\n if (firstError !== undefined) throw firstError\n },\n subscribe(fn) {\n listeners.add(fn)\n return () => listeners.delete(fn)\n },\n }\n}\n","// packages/core/src/mcp/schema-form.ts\nimport type { JsonSchema } from './types'\n\nexport type FieldKind =\n | 'text'\n | 'textarea'\n | 'email'\n | 'url'\n | 'date'\n | 'number'\n | 'switch'\n | 'select'\n | 'multiselect'\n | 'unknown'\n\nexport interface FieldDescriptor {\n key: string\n kind: FieldKind\n label: string\n help?: string\n required: boolean\n defaultValue?: unknown\n options?: Array<{ value: string; label: string }>\n min?: number\n max?: number\n minLength?: number\n maxLength?: number\n pattern?: string\n}\n\nexport function schemaToFields(schema: JsonSchema): FieldDescriptor[] {\n if (schema.type !== 'object' || !schema.properties) return []\n const required = new Set(schema.required ?? [])\n const fields: FieldDescriptor[] = []\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n fields.push(fieldFromProperty(key, propSchema, required.has(key)))\n }\n return fields\n}\n\nfunction fieldFromProperty(key: string, schema: JsonSchema, required: boolean): FieldDescriptor {\n const base = {\n key,\n label: schema.title ?? key,\n help: schema.description,\n required,\n defaultValue: schema.default,\n }\n\n if (schema.enum && schema.enum.length > 0) {\n return {\n ...base,\n kind: 'select',\n options: schema.enum.map((v) => ({ value: String(v), label: String(v) })),\n }\n }\n\n switch (schema.type) {\n case 'string': {\n if (schema.format === 'email') return { ...base, kind: 'email' }\n if (schema.format === 'uri' || schema.format === 'url') return { ...base, kind: 'url' }\n if (schema.format === 'date' || schema.format === 'date-time') return { ...base, kind: 'date' }\n if ((schema.maxLength ?? 0) > 200) {\n return {\n ...base,\n kind: 'textarea',\n minLength: schema.minLength,\n maxLength: schema.maxLength,\n pattern: schema.pattern,\n }\n }\n return {\n ...base,\n kind: 'text',\n minLength: schema.minLength,\n maxLength: schema.maxLength,\n pattern: schema.pattern,\n }\n }\n case 'number':\n case 'integer':\n return { ...base, kind: 'number', min: schema.minimum, max: schema.maximum }\n case 'boolean':\n return { ...base, kind: 'switch' }\n case 'array':\n if (schema.items?.type === 'string') return { ...base, kind: 'multiselect' }\n return { ...base, kind: 'unknown' }\n case 'null':\n return { ...base, kind: 'unknown' }\n default:\n return { ...base, kind: 'unknown' }\n }\n}\n","// OAuth 2.1 + PKCE helpers and state machine for MCP flows.\n\nexport interface PkcePair {\n codeVerifier: string\n codeChallenge: string\n codeChallengeMethod: 'S256'\n}\n\nfunction randomBytes(n: number): Uint8Array {\n const arr = new Uint8Array(n)\n globalThis.crypto.getRandomValues(arr)\n return arr\n}\n\nfunction base64urlEncode(bytes: Uint8Array): string {\n let s = ''\n for (const b of bytes) s += String.fromCharCode(b)\n return btoa(s).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n\nexport async function generatePkcePair(): Promise<PkcePair> {\n const verifierBytes = randomBytes(64) // 64 bytes → 86 chars base64url, within 43-128 range\n const codeVerifier = base64urlEncode(verifierBytes)\n const verifierBuf = new TextEncoder().encode(codeVerifier)\n const hashBuf = await globalThis.crypto.subtle.digest('SHA-256', verifierBuf)\n const codeChallenge = base64urlEncode(new Uint8Array(hashBuf))\n return { codeVerifier, codeChallenge, codeChallengeMethod: 'S256' }\n}\n\nexport interface AuthUrlInput {\n authorizationEndpoint: string\n clientId: string\n redirectUri: string\n scope: string\n codeChallenge: string\n state: string\n resource?: string // RFC 8707 — MCP-required for token binding\n}\n\nexport function buildAuthUrl(input: AuthUrlInput): string {\n const u = new URL(input.authorizationEndpoint)\n u.searchParams.set('response_type', 'code')\n u.searchParams.set('client_id', input.clientId)\n u.searchParams.set('redirect_uri', input.redirectUri)\n u.searchParams.set('scope', input.scope)\n u.searchParams.set('code_challenge', input.codeChallenge)\n u.searchParams.set('code_challenge_method', 'S256')\n u.searchParams.set('state', input.state)\n if (input.resource) u.searchParams.set('resource', input.resource)\n return u.toString()\n}\n\nexport interface TokenExchangeInput {\n clientId: string\n code: string\n redirectUri: string\n codeVerifier: string\n}\n\nexport function buildTokenExchangeBody(input: TokenExchangeInput): string {\n const body = new URLSearchParams()\n body.set('grant_type', 'authorization_code')\n body.set('client_id', input.clientId)\n body.set('code', input.code)\n body.set('redirect_uri', input.redirectUri)\n body.set('code_verifier', input.codeVerifier)\n return body.toString()\n}\n\nexport interface TokenRefreshInput {\n clientId: string\n refreshToken: string\n scope?: string\n}\n\nexport function buildTokenRefreshBody(input: TokenRefreshInput): string {\n const body = new URLSearchParams()\n body.set('grant_type', 'refresh_token')\n body.set('client_id', input.clientId)\n body.set('refresh_token', input.refreshToken)\n if (input.scope) body.set('scope', input.scope)\n return body.toString()\n}\n\nexport type OAuthStatus = 'idle' | 'authorizing' | 'authorized' | 'denied' | 'error'\n\nexport interface OAuthTokens {\n accessToken: string\n tokenType: string\n expiresIn?: number\n refreshToken?: string\n scope?: string\n}\n\nexport interface OAuthFlowSnapshot {\n status: OAuthStatus\n verifier?: string\n state?: string\n tokens?: OAuthTokens\n error?: { code: string; message?: string; originalError?: Error }\n}\n\nexport interface OAuthFlowApi extends Readonly<OAuthFlowSnapshot> {\n start(input: { verifier: string; state: string }): void\n markAuthorized(tokens: OAuthTokens): void\n markDenied(code: string, message?: string): void\n markError(error: Error): void\n reset(): void\n subscribe(fn: (s: OAuthFlowSnapshot) => void): () => void\n}\n\nconst OAUTH_TRANSITIONS: Record<OAuthStatus, OAuthStatus[]> = {\n idle: ['authorizing'],\n authorizing: ['authorized', 'denied', 'error'],\n authorized: ['idle'],\n denied: ['idle'],\n error: ['idle'],\n}\n\nexport function createOAuthFlow(): OAuthFlowApi {\n let snap: OAuthFlowSnapshot = { status: 'idle' }\n const listeners = new Set<(s: OAuthFlowSnapshot) => void>()\n\n function notify() {\n let firstError: unknown\n for (const fn of listeners) {\n try {\n fn(snap)\n } catch (e) {\n if (firstError === undefined) firstError = e\n }\n }\n if (firstError !== undefined) throw firstError\n }\n\n function transition(to: OAuthStatus, patch: Partial<OAuthFlowSnapshot> = {}) {\n const allowed = OAUTH_TRANSITIONS[snap.status]\n if (!allowed.includes(to)) {\n throw new Error(`Invalid oauth transition: ${snap.status} → ${to}`)\n }\n snap = { ...snap, ...patch, status: to }\n notify()\n }\n\n return {\n get status() {\n return snap.status\n },\n get verifier() {\n return snap.verifier\n },\n get state() {\n return snap.state\n },\n get tokens() {\n return snap.tokens\n },\n get error() {\n return snap.error\n },\n start({ verifier, state }) {\n transition('authorizing', { verifier, state })\n },\n markAuthorized(tokens) {\n transition('authorized', { tokens })\n },\n markDenied(code, message) {\n transition('denied', { error: { code, message } })\n },\n markError(error) {\n transition('error', { error: { code: 'unknown', message: error.message, originalError: error } })\n },\n reset() {\n if (snap.status === 'idle') return\n snap = { status: 'idle' }\n notify()\n },\n subscribe(fn) {\n listeners.add(fn)\n return () => listeners.delete(fn)\n },\n }\n}\n","// packages/core/src/mcp/app-bridge.ts\n\nexport interface AppMessageEnvelope {\n id: string\n type: string\n payload?: unknown\n}\n\nexport function encodeEnvelope(env: AppMessageEnvelope): AppMessageEnvelope {\n return { id: env.id, type: env.type, payload: env.payload }\n}\n\nexport function decodeEnvelope(raw: unknown): AppMessageEnvelope | null {\n if (raw === null || Array.isArray(raw) || typeof raw !== 'object') return null\n const o = raw as Record<string, unknown>\n if (typeof o.id !== 'string') return null\n if (typeof o.type !== 'string') return null\n return { id: o.id, type: o.type, payload: o.payload }\n}\n\nexport interface AppBridgeConfig {\n postMessage: (env: AppMessageEnvelope) => void\n}\n\nexport interface AppBridge {\n send(env: AppMessageEnvelope): void\n receive(raw: unknown): void\n onMessage(fn: (env: AppMessageEnvelope) => void): () => void\n}\n\nexport function createAppBridge(config: AppBridgeConfig): AppBridge {\n const listeners = new Set<(env: AppMessageEnvelope) => void>()\n\n function dispatch(env: AppMessageEnvelope) {\n let firstError: unknown\n for (const fn of listeners) {\n try { fn(env) } catch (e) { if (firstError === undefined) firstError = e }\n }\n if (firstError !== undefined) throw firstError\n }\n\n return {\n send(env) {\n config.postMessage(encodeEnvelope(env))\n },\n receive(raw) {\n const env = decodeEnvelope(raw)\n if (!env) return\n dispatch(env)\n },\n onMessage(fn) {\n listeners.add(fn)\n return () => listeners.delete(fn)\n },\n }\n}\n"],"mappings":";AAAO,SAAS,MAAM,QAAuD;AAC3E,SAAO,OAAO,OAAO,OAAO,EAAE,KAAK,GAAG;AACxC;;;ACFO,SAAS,qBAAqB,WAAuC;AAC1E,QAAM,WAAW,UAAU;AAAA,IACzB;AAAA,EACF;AACA,SAAO,MAAM,KAAK,QAAQ;AAC5B;AAEO,SAAS,UAAU,WAAwB,OAAsB;AACtE,QAAM,YAAY,qBAAqB,SAAS;AAChD,MAAI,UAAU,WAAW,EAAG;AAE5B,QAAM,QAAQ,UAAU,CAAC;AACzB,QAAM,OAAO,UAAU,UAAU,SAAS,CAAC;AAE3C,MAAI,MAAM,QAAQ,OAAO;AACvB,QAAI,MAAM,UAAU;AAClB,UAAI,SAAS,kBAAkB,OAAO;AACpC,cAAM,eAAe;AACrB,aAAK,MAAM;AAAA,MACb;AAAA,IACF,OAAO;AACL,UAAI,SAAS,kBAAkB,MAAM;AACnC,cAAM,eAAe;AACrB,cAAM,MAAM;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,0BACd,SACA,UACY;AACZ,QAAM,UAAU,CAAC,UAAsB;AACrC,QAAI,CAAC,QAAQ,SAAS,MAAM,MAAc,GAAG;AAC3C,eAAS;AAAA,IACX;AAAA,EACF;AACA,WAAS,iBAAiB,aAAa,OAAO;AAC9C,SAAO,MAAM,SAAS,oBAAoB,aAAa,OAAO;AAChE;AAEO,SAAS,aAAyB;AACvC,QAAM,OAAO,SAAS;AAGtB,QAAM,iBAAiB,OAAO,aAAa,SAAS,gBAAgB;AACpE,QAAM,eAAe,KAAK,MAAM;AAChC,QAAM,mBAAmB,KAAK,MAAM;AAEpC,OAAK,MAAM,WAAW;AACtB,MAAI,iBAAiB,GAAG;AACtB,UAAM,aAAa,WAAW,iBAAiB,IAAI,EAAE,YAAY,KAAK;AACtE,SAAK,MAAM,eAAe,GAAG,aAAa,cAAc;AAAA,EAC1D;AAEA,SAAO,MAAM;AACX,SAAK,MAAM,WAAW;AACtB,SAAK,MAAM,eAAe;AAAA,EAC5B;AACF;;;AC5DO,IAAM,OAAO;AAAA,EAClB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AACP;AAIO,SAAS,aACd,SACA,OACA,WACA,OAAO,MACC;AACR,MAAI,cAAc,QAAQ;AACxB,UAAM,OAAO,UAAU;AACvB,WAAO,QAAQ,QAAS,OAAO,IAAI,UAAW;AAAA,EAChD;AACA,QAAM,OAAO,UAAU;AACvB,SAAO,OAAO,IAAK,OAAO,QAAQ,IAAI,UAAW;AACnD;AAEO,SAAS,sBACd,OACA,cACA,YACA,aACA,eACA,OAAO,MACD;AACN,QAAM,WAAW,gBAAgB,eAAe,CAAC,KAAK,UAAU,IAAI,gBAAgB,aAAa,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,YAAY,KAAK,SAAS;AACpJ,QAAM,WAAW,gBAAgB,eAAe,CAAC,KAAK,SAAS,IAAI,gBAAgB,aAAa,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,WAAW,KAAK,OAAO;AAE9I,MAAI,SAAS,SAAS,MAAM,GAAU,GAAG;AACvC,UAAM,eAAe;AACrB,kBAAc,aAAa,cAAc,YAAY,QAAQ,IAAI,CAAC;AAAA,EACpE,WAAW,SAAS,SAAS,MAAM,GAAU,GAAG;AAC9C,UAAM,eAAe;AACrB,kBAAc,aAAa,cAAc,YAAY,QAAQ,IAAI,CAAC;AAAA,EACpE,WAAW,MAAM,QAAQ,KAAK,MAAM;AAClC,UAAM,eAAe;AACrB,kBAAc,CAAC;AAAA,EACjB,WAAW,MAAM,QAAQ,KAAK,KAAK;AACjC,UAAM,eAAe;AACrB,kBAAc,aAAa,CAAC;AAAA,EAC9B;AACF;;;AChDA,IAAI,gBAAgB;AAEb,SAAS,aAAa,SAAuB,CAAC,GAAG;AACtD,QAAM,EAAE,QAAQ,MAAM,aAAa,IAAI;AACvC,QAAM,KAAK,eAAe,EAAE,aAAa;AAEzC,SAAO;AAAA,IACL;AAAA,IACA,iBAAiB,CAAC,YAAqB;AAAA,MACrC,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,SAAS,MAAM,eAAe,CAAC,MAAM;AAAA,IACvC;AAAA,IACA,iBAAiB,CAAC,YAAqB;AAAA,MACrC,MAAM;AAAA,MACN,cAAc;AAAA,MACd,mBAAmB,GAAG,EAAE;AAAA,MACxB,oBAAoB,GAAG,EAAE;AAAA,MACzB,QAAQ,CAAC,SAAS,OAAO;AAAA,MACzB,WAAW,CAAC,MAAqB;AAC/B,YAAI,EAAE,QAAQ,SAAU,gBAAe,KAAK;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,iBAAiB,OAAO;AAAA,MACtB,eAAe;AAAA,MACf,SAAS,MAAM,eAAe,KAAK;AAAA,IACrC;AAAA,IACA,eAAe,OAAO;AAAA,MACpB,cAAc;AAAA,MACd,SAAS,MAAM,eAAe,KAAK;AAAA,IACrC;AAAA,EACF;AACF;;;ACzBO,SAAS,WAAW,OAAkB,SAAqB,CAAC,GAAG;AACpE,QAAM,EAAE,cAAc,IAAI;AAE1B,SAAO;AAAA,IACL,cAAc,OAAO;AAAA,MACnB,MAAM;AAAA,IACR;AAAA,IACA,iBAAiB,CAAC,OAAe,gBAAwB;AACvD,YAAM,QAAQ,MAAM,UAAU,CAAAA,UAAQA,MAAK,UAAU,KAAK;AAC1D,YAAM,WAAW,UAAU;AAC3B,YAAM,OAAO,MAAM,KAAK;AAExB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,iBAAiB;AAAA,QACjB,iBAAiB,YAAY,KAAK;AAAA,QAClC,IAAI,OAAO,KAAK;AAAA,QAChB,UAAU,WAAW,IAAI;AAAA,QACzB,UAAU,MAAM,YAAY;AAAA,QAC5B,SAAS,MAAM;AACb,cAAI,CAAC,MAAM,SAAU,iBAAgB,KAAK;AAAA,QAC5C;AAAA,QACA,WAAW,CAAC,MAAqB;AAC/B,gBAAM,eAAe,MAAM,OAAO,OAAK,CAAC,EAAE,QAAQ;AAClD,gBAAM,sBAAsB,aAAa,UAAU,OAAK,EAAE,UAAU,KAAK;AACzE;AAAA,YACE;AAAA,YACA;AAAA,YACA,aAAa;AAAA,YACb;AAAA,YACA,CAAC,aAAa;AACZ,oBAAM,UAAU,aAAa,QAAQ;AACrC,8BAAgB,QAAQ,KAAK;AAAA,YAC/B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,CAAC,OAAe,iBAAyB;AAAA,MACtD,MAAM;AAAA,MACN,IAAI,YAAY,KAAK;AAAA,MACrB,mBAAmB,OAAO,KAAK;AAAA,MAC/B,QAAQ,UAAU,eAAe;AAAA,MACjC,UAAU;AAAA,IACZ;AAAA,EACF;AACF;;;AC7CO,SAAS,gBAAgB,OAA8B,SAA0B,CAAC,GAAG;AAC1F,QAAM,EAAE,OAAO,UAAU,cAAc,OAAO,cAAc,IAAI;AAEhE,WAAS,OAAO,OAAe,gBAA0B;AACvD,UAAM,aAAa,eAAe,SAAS,KAAK;AAEhD,QAAI,SAAS,UAAU;AACrB,UAAI,cAAc,aAAa;AAC7B,wBAAgB,CAAC,CAAC;AAAA,MACpB,WAAW,CAAC,YAAY;AACtB,wBAAgB,CAAC,KAAK,CAAC;AAAA,MACzB;AAAA,IACF,OAAO;AACL,UAAI,YAAY;AACd,wBAAgB,eAAe,OAAO,OAAK,MAAM,KAAK,CAAC;AAAA,MACzD,OAAO;AACL,wBAAgB,CAAC,GAAG,gBAAgB,KAAK,CAAC;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cAAc,CAAC,WAAmB;AAAA,MAChC,cAAc;AAAA,IAChB;AAAA,IACA,iBAAiB,CAAC,OAAe,mBAA6B;AAC5D,YAAM,aAAa,eAAe,SAAS,KAAK;AAChD,YAAM,OAAO,MAAM,KAAK,OAAK,EAAE,UAAU,KAAK;AAE9C,aAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,iBAAiB,qBAAqB,KAAK;AAAA,QAC3C,IAAI,qBAAqB,KAAK;AAAA,QAC9B,UAAU,MAAM,YAAY;AAAA,QAC5B,SAAS,MAAM;AACb,cAAI,CAAC,MAAM,SAAU,QAAO,OAAO,cAAc;AAAA,QACnD;AAAA,QACA,WAAW,CAAC,MAAmD;AAC7D,gBAAM,eAAe,MAAM,OAAO,OAAK,CAAC,EAAE,QAAQ;AAClD,gBAAM,sBAAsB,aAAa,UAAU,OAAK,EAAE,UAAU,KAAK;AAEzE,cAAI,EAAE,QAAQ,KAAK,WAAW;AAC5B,cAAE,eAAe;AACjB,kBAAM,OAAO,sBAAsB;AACnC,gBAAI,OAAO,aAAa,QAAQ;AAC9B,oBAAM,KAAK,SAAS,eAAe,qBAAqB,aAAa,IAAI,EAAE,KAAK,EAAE;AAClF,kBAAI,MAAM;AAAA,YACZ;AAAA,UACF,WAAW,EAAE,QAAQ,KAAK,SAAS;AACjC,cAAE,eAAe;AACjB,kBAAM,OAAO,sBAAsB;AACnC,gBAAI,QAAQ,GAAG;AACb,oBAAM,KAAK,SAAS,eAAe,qBAAqB,aAAa,IAAI,EAAE,KAAK,EAAE;AAClF,kBAAI,MAAM;AAAA,YACZ;AAAA,UACF,WAAW,EAAE,QAAQ,KAAK,MAAM;AAC9B,cAAE,eAAe;AACjB,kBAAM,KAAK,SAAS,eAAe,qBAAqB,aAAa,CAAC,EAAE,KAAK,EAAE;AAC/E,gBAAI,MAAM;AAAA,UACZ,WAAW,EAAE,QAAQ,KAAK,KAAK;AAC7B,cAAE,eAAe;AACjB,kBAAM,KAAK,SAAS,eAAe,qBAAqB,aAAa,aAAa,SAAS,CAAC,EAAE,KAAK,EAAE;AACrG,gBAAI,MAAM;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,CAAC,OAAe,mBAA6B;AAC5D,YAAM,aAAa,eAAe,SAAS,KAAK;AAChD,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,qBAAqB,KAAK;AAAA,QAC9B,mBAAmB,qBAAqB,KAAK;AAAA,QAC7C,QAAQ,CAAC,aAAa,OAAO;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;;;AC7EO,SAAS,aAAa,SAAyB,SAAuB,CAAC,GAAG;AAC/E,QAAM,EAAE,eAAe,aAAa,IAAI;AAExC,SAAO;AAAA,IACL,iBAAiB,CAAC,QAAiB,eAA8B,qBAA8B;AAC7F,YAAM,iBAAiB,QAAQ,KAAK,OAAK,EAAE,UAAU,aAAa;AAClE,YAAM,oBAAoB,oBAAoB,OAAO,QAAQ,gBAAgB,IAAI;AACjF,aAAO;AAAA,QACL,MAAM;AAAA,QACN,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,cAAc,gBAAgB,SAAS;AAAA,QACvC,yBAAyB,UAAU,oBAAoB,iBAAiB,kBAAkB,KAAK,KAAK;AAAA,QACpG,SAAS,MAAM,eAAe,CAAC,MAAM;AAAA,QACrC,WAAW,CAAC,MAAqB;AAC/B,cAAI,EAAE,QAAQ,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAO;AAChD,cAAE,eAAe;AACjB,2BAAe,CAAC,MAAM;AAAA,UACxB,WAAW,EAAE,QAAQ,KAAK,WAAW;AACnC,cAAE,eAAe;AACjB,2BAAe,IAAI;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,OAAO;AAAA,MACnB,MAAM;AAAA,IACR;AAAA,IACA,gBAAgB,CACd,QACA,eACA,eACA,uBACI;AAAA,MACJ,MAAM;AAAA,MACN,iBAAiB,OAAO,UAAU;AAAA,MAClC,iBAAiB,OAAO,YAAY;AAAA,MACpC,oBAAoB,iBAAiB;AAAA,MACrC,IAAI,iBAAiB,OAAO,KAAK;AAAA,MACjC,SAAS,MAAM;AACb,YAAI,CAAC,OAAO,UAAU;AACpB,0BAAgB,OAAO,KAAK;AAC5B,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,CAAC,YAAqB;AAAA,MACrC,QAAQ,CAAC,SAAS,OAAO;AAAA,IAC3B;AAAA,IACA,eAAe,CACb,GACA,QACA,kBACA,sBACG;AACH,UAAI,CAAC,OAAQ;AAEb,YAAM,iBAAiB,QAAQ,OAAO,OAAK,CAAC,EAAE,QAAQ;AAEtD,UAAI,EAAE,QAAQ,KAAK,WAAW;AAC5B,UAAE,eAAe;AACjB,cAAM,OAAO,aAAa,kBAAkB,eAAe,QAAQ,MAAM;AACzE,0BAAkB,IAAI;AAAA,MACxB,WAAW,EAAE,QAAQ,KAAK,SAAS;AACjC,UAAE,eAAe;AACjB,cAAM,OAAO,aAAa,kBAAkB,eAAe,QAAQ,MAAM;AACzE,0BAAkB,IAAI;AAAA,MACxB,WAAW,EAAE,QAAQ,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAO;AACvD,UAAE,eAAe;AACjB,cAAM,SAAS,eAAe,gBAAgB;AAC9C,YAAI,QAAQ;AACV,0BAAgB,OAAO,KAAK;AAC5B,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF,WAAW,EAAE,QAAQ,KAAK,QAAQ;AAChC,UAAE,eAAe;AACjB,uBAAe,KAAK;AAAA,MACtB,WAAW,EAAE,QAAQ,KAAK,MAAM;AAC9B,UAAE,eAAe;AACjB,0BAAkB,CAAC;AAAA,MACrB,WAAW,EAAE,QAAQ,KAAK,KAAK;AAC7B,UAAE,eAAe;AACjB,0BAAkB,eAAe,SAAS,CAAC;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACF;;;AC9FA,IAAI,iBAAiB;AAEd,SAAS,cAAc,SAAwB,CAAC,GAAG;AACxD,QAAM,EAAE,QAAQ,KAAK,aAAa,IAAI;AACtC,QAAM,KAAK,gBAAgB,EAAE,cAAc;AAC3C,MAAI,YAAkD;AAEtD,WAAS,aAAa;AACpB,QAAI,cAAc,MAAM;AACtB,mBAAa,SAAS;AACtB,kBAAY;AAAA,IACd;AAAA,EACF;AAEA,WAAS,gBAAgB;AACvB,eAAW;AACX,gBAAY,WAAW,MAAM;AAC3B,qBAAe,IAAI;AAAA,IACrB,GAAG,KAAK;AAAA,EACV;AAEA,WAAS,QAAQ;AACf,eAAW;AACX,mBAAe,KAAK;AAAA,EACtB;AAEA,SAAO;AAAA,IACL,iBAAiB,OAAO;AAAA,MACtB,oBAAoB;AAAA,MACpB,cAAc,MAAM,cAAc;AAAA,MAClC,cAAc,MAAM,MAAM;AAAA,MAC1B,SAAS,MAAM,cAAc;AAAA,MAC7B,QAAQ,MAAM,MAAM;AAAA,IACtB;AAAA,IACA,iBAAiB,CAAC,YAAqB;AAAA,MACrC;AAAA,MACA,MAAM;AAAA,MACN,QAAQ,CAAC,SAAS,OAAO;AAAA,IAC3B;AAAA,IACA,SAAS,MAAM,WAAW;AAAA,EAC5B;AACF;;;AC1CO,SAAS,cAAc,SAAwB,CAAC,GAAG;AACxD,QAAM,EAAE,aAAa,IAAI;AAEzB,SAAO;AAAA,IACL,iBAAiB,CAAC,YAAqB;AAAA,MACrC,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,SAAS,MAAM,eAAe,CAAC,MAAM;AAAA,IACvC;AAAA,IACA,iBAAiB,CAAC,YAAqB;AAAA,MACrC,MAAM;AAAA,MACN,QAAQ,CAAC,UAAU;AAAA,MACnB,WAAW,CAAC,MAAqB;AAC/B,YAAI,EAAE,QAAQ,SAAU,gBAAe,KAAK;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACF;;;ACDA,IAAI,eAAe;AAEZ,SAAS,mBAAmB,SAAsB,CAAC,GAAG;AAC3D,QAAM,EAAE,UAAU,kBAAkB,IAAK,IAAI;AAC7C,QAAM,YAAY,oBAAI,IAAiC;AACvD,MAAI,QAAoB,EAAE,QAAQ,CAAC,EAAE;AAErC,WAAS,SAAS;AAChB,eAAW,YAAY,WAAW;AAChC,eAAS,KAAK;AAAA,IAChB;AAAA,EACF;AAEA,WAAS,SAASC,QAAkC;AAClD,UAAM,KAAK,SAAS,EAAE,YAAY;AAClC,UAAM,WAAkB,EAAE,IAAI,GAAGA,OAAM;AACvC,YAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,QAAQ,QAAQ,EAAE;AAC9C,WAAO;AAEP,UAAM,MAAMA,OAAM,YAAY;AAC9B,QAAI,MAAM,GAAG;AACX,iBAAW,MAAM,YAAY,EAAE,GAAG,GAAG;AAAA,IACvC;AAEA,WAAO;AAAA,EACT;AAEA,WAAS,YAAY,IAAY;AAC/B,YAAQ,EAAE,QAAQ,MAAM,OAAO,OAAO,OAAK,EAAE,OAAO,EAAE,EAAE;AACxD,WAAO;AAAA,EACT;AAEA,WAAS,UAAU,UAAmD;AACpE,cAAU,IAAI,QAAQ;AACtB,WAAO,MAAM,UAAU,OAAO,QAAQ;AAAA,EACxC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,MAAM;AAAA,EAClB;AACF;AAGA,IAAM,iBAAiB,mBAAmB;AAEnC,IAAM,QAAQ;AAAA,EACnB,SAAS,CAAC,OAAe,gBACvB,eAAe,SAAS,EAAE,OAAO,aAAa,SAAS,UAAU,CAAC;AAAA,EACpE,SAAS,CAAC,OAAe,gBACvB,eAAe,SAAS,EAAE,OAAO,aAAa,SAAS,UAAU,CAAC;AAAA,EACpE,aAAa,CAAC,OAAe,gBAC3B,eAAe,SAAS,EAAE,OAAO,aAAa,SAAS,cAAc,CAAC;AAAA,EACxE,QAAQ,CAAC,MAAyB,eAAe,SAAS,CAAC;AAAA,EAC3D,SAAS,CAAC,OAAe,eAAe,YAAY,EAAE;AAAA,EACtD,WAAW,eAAe;AAAA,EAC1B,UAAU,eAAe;AAC3B;;;AC1EO,SAAS,aAAa,SAAuB,CAAC,GAAG;AACtD,QAAM,EAAE,OAAO,SAAS,aAAa,IAAI;AAEzC,SAAO;AAAA,IACL,iBAAiB,OAAO;AAAA,MACtB,eAAe;AAAA,MACf,SAAS,MAAM,eAAe,KAAK;AAAA,IACrC;AAAA,IACA,iBAAiB,CAAC,YAAqB;AAAA,MACrC,MAAM;AAAA,MACN,cAAc;AAAA,MACd,QAAQ,CAAC,SAAS,OAAO;AAAA,MACzB,WAAW,CAAC,MAAqB;AAC/B,YAAI,EAAE,QAAQ,SAAU,gBAAe,KAAK;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,eAAe,OAAO;AAAA,MACpB,cAAc;AAAA,MACd,SAAS,MAAM,eAAe,KAAK;AAAA,IACrC;AAAA,IACA;AAAA,EACF;AACF;;;ACZO,SAAS,mBAAmB,OAA2B,SAA6B,CAAC,GAAG;AAC7F,QAAM,EAAE,aAAa,IAAI;AACzB,QAAM,cAAc,MAAM,OAAO,OAAK,EAAE,SAAS,eAAe,EAAE,SAAS,WAAW,CAAC,EAAE,QAAQ;AAEjG,SAAO;AAAA,IACL,iBAAiB,CAAC,YAAqB;AAAA,MACrC,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,SAAS,MAAM,eAAe,CAAC,MAAM;AAAA,IACvC;AAAA,IACA,iBAAiB,CAAC,YAAqB;AAAA,MACrC,MAAM;AAAA,MACN,QAAQ,CAAC,UAAU;AAAA,IACrB;AAAA,IACA,cAAc,CAAC,MAAwB,mBAA4B;AAAA,MACjE,MAAM;AAAA,MACN,iBAAiB,KAAK,YAAY;AAAA,MAClC,oBAAoB,iBAAiB;AAAA,MACrC,UAAU;AAAA,MACV,SAAS,MAAM;AACb,YAAI,CAAC,KAAK,YAAY,KAAK,SAAS,eAAe,KAAK,SAAS,SAAS;AACxE,eAAK,WAAW;AAChB,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAe,CACb,GACA,QACA,kBACA,sBACG;AACH,UAAI,CAAC,OAAQ;AAEb,UAAI,EAAE,QAAQ,KAAK,WAAW;AAC5B,UAAE,eAAe;AACjB,0BAAkB,aAAa,kBAAkB,YAAY,QAAQ,MAAM,CAAC;AAAA,MAC9E,WAAW,EAAE,QAAQ,KAAK,SAAS;AACjC,UAAE,eAAe;AACjB,0BAAkB,aAAa,kBAAkB,YAAY,QAAQ,MAAM,CAAC;AAAA,MAC9E,WAAW,EAAE,QAAQ,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAO;AACvD,UAAE,eAAe;AACjB,cAAM,OAAO,YAAY,gBAAgB;AACzC,YAAI,MAAM;AACR,eAAK,WAAW;AAChB,yBAAe,KAAK;AAAA,QACtB;AAAA,MACF,WAAW,EAAE,QAAQ,KAAK,QAAQ;AAChC,UAAE,eAAe;AACjB,uBAAe,KAAK;AAAA,MACtB,WAAW,EAAE,QAAQ,KAAK,MAAM;AAC9B,UAAE,eAAe;AACjB,0BAAkB,CAAC;AAAA,MACrB,WAAW,EAAE,QAAQ,KAAK,KAAK;AAC7B,UAAE,eAAe;AACjB,0BAAkB,YAAY,SAAS,CAAC;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AACF;;;ACtEO,SAAS,aAAa,SAAuB,CAAC,GAAG;AACtD,QAAM,EAAE,gBAAgB,IAAI;AAE5B,SAAO;AAAA,IACL,gBAAgB,CAAC,SAAkB,WAAW,WAAW;AAAA,MACvD,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,iBAAiB,YAAY;AAAA,MAC7B,UAAU,WAAW,KAAK;AAAA,MAC1B,SAAS,MAAM;AACb,YAAI,CAAC,SAAU,mBAAkB,CAAC,OAAO;AAAA,MAC3C;AAAA,MACA,WAAW,CAAC,MAAqB;AAC/B,YAAI,SAAU;AACd,YAAI,EAAE,QAAQ,OAAO,EAAE,QAAQ,SAAS;AACtC,YAAE,eAAe;AACjB,4BAAkB,CAAC,OAAO;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACtBO,SAAS,WAAW,KAA8B;AACvD,QAAM,UAAU,IAAI,KAAK;AACzB,QAAM,WAAW,QAAQ,QAAQ,GAAG;AACpC,MAAI,aAAa,IAAI;AACnB,WAAO,EAAE,KAAK,UAAU,SAAS,aAAa,CAAC,QAAQ,EAAE;AAAA,EAC3D;AACA,QAAM,WAAW,QAAQ,MAAM,GAAG,QAAQ;AAC1C,QAAM,WAAW,QAAQ,MAAM,WAAW,CAAC;AAC3C,QAAM,cAAc,SAAS,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAC3E,SAAO,EAAE,KAAK,UAAU,aAAa,YAAY,SAAS,IAAI,cAAc,CAAC,QAAQ,EAAE;AACzF;AAEO,SAAS,YAAY,aAAwC;AAClE,SAAO,YACJ,MAAM,KAAK,EACX,OAAO,OAAO,EACd,IAAI,UAAU;AACnB;;;ACGA,IAAM,oBAA8D;AAAA,EAClE,MAAM,CAAC,SAAS;AAAA,EAChB,SAAS,CAAC,WAAW,WAAW;AAAA,EAChC,SAAS,CAAC,QAAQ,SAAS,WAAW;AAAA,EACtC,MAAM,CAAC,MAAM;AAAA,EACb,OAAO,CAAC,MAAM;AAAA,EACd,WAAW,CAAC,MAAM;AACpB;AAEO,SAAS,kBAAgC;AAC9C,MAAI,WAA8B,EAAE,QAAQ,OAAO;AACnD,QAAM,YAAY,oBAAI,IAAoC;AAE1D,WAAS,WAAW,IAAoB,QAAoC,CAAC,GAAG;AAC9E,UAAM,UAAU,kBAAkB,SAAS,MAAM;AACjD,QAAI,CAAC,QAAQ,SAAS,EAAE,GAAG;AACzB,YAAM,IAAI,MAAM,kCAAkC,SAAS,MAAM,WAAM,EAAE,EAAE;AAAA,IAC7E;AACA,eAAW,EAAE,GAAG,UAAU,GAAG,OAAO,QAAQ,GAAG;AAC/C,QAAI;AACJ,eAAW,MAAM,WAAW;AAC1B,UAAI;AAAE,WAAG,QAAQ;AAAA,MAAE,SAAS,GAAG;AAAE,YAAI,eAAe,OAAW,cAAa;AAAA,MAAE;AAAA,IAChF;AACA,QAAI,eAAe,OAAW,OAAM;AAAA,EACtC;AAEA,SAAO;AAAA,IACL,IAAI,SAAS;AAAE,aAAO,SAAS;AAAA,IAAO;AAAA,IACtC,IAAI,OAAO;AAAE,aAAO,SAAS;AAAA,IAAK;AAAA,IAClC,IAAI,OAAO;AAAE,aAAO,SAAS;AAAA,IAAK;AAAA,IAClC,IAAI,SAAS;AAAE,aAAO,SAAS;AAAA,IAAO;AAAA,IACtC,IAAI,QAAQ;AAAE,aAAO,SAAS;AAAA,IAAM;AAAA,IACpC,IAAI,YAAY;AAAE,aAAO,SAAS;AAAA,IAAU;AAAA,IAC5C,IAAI,UAAU;AAAE,aAAO,SAAS;AAAA,IAAQ;AAAA,IACxC,MAAM,EAAE,MAAM,KAAK,GAAG;AACpB,iBAAW,WAAW,EAAE,MAAM,MAAM,WAAW,KAAK,IAAI,EAAE,CAAC;AAAA,IAC7D;AAAA,IACA,cAAc;AACZ,iBAAW,SAAS;AAAA,IACtB;AAAA,IACA,SAAS,QAAQ;AACf,iBAAW,QAAQ,EAAE,QAAQ,SAAS,KAAK,IAAI,EAAE,CAAC;AAAA,IACpD;AAAA,IACA,UAAU,OAAO;AACf,iBAAW,SAAS,EAAE,OAAO,SAAS,KAAK,IAAI,EAAE,CAAC;AAAA,IACpD;AAAA,IACA,SAAS;AACP,iBAAW,aAAa,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC;AAAA,IACjD;AAAA,IACA,QAAQ;AACN,UAAI,SAAS,WAAW,OAAQ;AAChC,iBAAW,EAAE,QAAQ,OAAO;AAC5B,UAAI;AACJ,iBAAW,MAAM,WAAW;AAC1B,YAAI;AAAE,aAAG,QAAQ;AAAA,QAAE,SAAS,GAAG;AAAE,cAAI,eAAe,OAAW,cAAa;AAAA,QAAE;AAAA,MAChF;AACA,UAAI,eAAe,OAAW,OAAM;AAAA,IACtC;AAAA,IACA,UAAU,IAAI;AACZ,gBAAU,IAAI,EAAE;AAChB,aAAO,MAAM,UAAU,OAAO,EAAE;AAAA,IAClC;AAAA,EACF;AACF;;;ACxDO,SAAS,eAAe,QAAuC;AACpE,MAAI,OAAO,SAAS,YAAY,CAAC,OAAO,WAAY,QAAO,CAAC;AAC5D,QAAM,WAAW,IAAI,IAAI,OAAO,YAAY,CAAC,CAAC;AAC9C,QAAM,SAA4B,CAAC;AACnC,aAAW,CAAC,KAAK,UAAU,KAAK,OAAO,QAAQ,OAAO,UAAU,GAAG;AACjE,WAAO,KAAK,kBAAkB,KAAK,YAAY,SAAS,IAAI,GAAG,CAAC,CAAC;AAAA,EACnE;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,KAAa,QAAoB,UAAoC;AAC9F,QAAM,OAAO;AAAA,IACX;AAAA,IACA,OAAO,OAAO,SAAS;AAAA,IACvB,MAAM,OAAO;AAAA,IACb;AAAA,IACA,cAAc,OAAO;AAAA,EACvB;AAEA,MAAI,OAAO,QAAQ,OAAO,KAAK,SAAS,GAAG;AACzC,WAAO;AAAA,MACL,GAAG;AAAA,MACH,MAAM;AAAA,MACN,SAAS,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE,EAAE;AAAA,IAC1E;AAAA,EACF;AAEA,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,UAAU;AACb,UAAI,OAAO,WAAW,QAAS,QAAO,EAAE,GAAG,MAAM,MAAM,QAAQ;AAC/D,UAAI,OAAO,WAAW,SAAS,OAAO,WAAW,MAAO,QAAO,EAAE,GAAG,MAAM,MAAM,MAAM;AACtF,UAAI,OAAO,WAAW,UAAU,OAAO,WAAW,YAAa,QAAO,EAAE,GAAG,MAAM,MAAM,OAAO;AAC9F,WAAK,OAAO,aAAa,KAAK,KAAK;AACjC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,MAAM;AAAA,UACN,WAAW,OAAO;AAAA,UAClB,WAAW,OAAO;AAAA,UAClB,SAAS,OAAO;AAAA,QAClB;AAAA,MACF;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,MAAM;AAAA,QACN,WAAW,OAAO;AAAA,QAClB,WAAW,OAAO;AAAA,QAClB,SAAS,OAAO;AAAA,MAClB;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,UAAU,KAAK,OAAO,SAAS,KAAK,OAAO,QAAQ;AAAA,IAC7E,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,SAAS;AAAA,IACnC,KAAK;AACH,UAAI,OAAO,OAAO,SAAS,SAAU,QAAO,EAAE,GAAG,MAAM,MAAM,cAAc;AAC3E,aAAO,EAAE,GAAG,MAAM,MAAM,UAAU;AAAA,IACpC,KAAK;AACH,aAAO,EAAE,GAAG,MAAM,MAAM,UAAU;AAAA,IACpC;AACE,aAAO,EAAE,GAAG,MAAM,MAAM,UAAU;AAAA,EACtC;AACF;;;ACpFA,SAAS,YAAY,GAAuB;AAC1C,QAAM,MAAM,IAAI,WAAW,CAAC;AAC5B,aAAW,OAAO,gBAAgB,GAAG;AACrC,SAAO;AACT;AAEA,SAAS,gBAAgB,OAA2B;AAClD,MAAI,IAAI;AACR,aAAW,KAAK,MAAO,MAAK,OAAO,aAAa,CAAC;AACjD,SAAO,KAAK,CAAC,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,EAAE;AAC1E;AAEA,eAAsB,mBAAsC;AAC1D,QAAM,gBAAgB,YAAY,EAAE;AACpC,QAAM,eAAe,gBAAgB,aAAa;AAClD,QAAM,cAAc,IAAI,YAAY,EAAE,OAAO,YAAY;AACzD,QAAM,UAAU,MAAM,WAAW,OAAO,OAAO,OAAO,WAAW,WAAW;AAC5E,QAAM,gBAAgB,gBAAgB,IAAI,WAAW,OAAO,CAAC;AAC7D,SAAO,EAAE,cAAc,eAAe,qBAAqB,OAAO;AACpE;AAYO,SAAS,aAAa,OAA6B;AACxD,QAAM,IAAI,IAAI,IAAI,MAAM,qBAAqB;AAC7C,IAAE,aAAa,IAAI,iBAAiB,MAAM;AAC1C,IAAE,aAAa,IAAI,aAAa,MAAM,QAAQ;AAC9C,IAAE,aAAa,IAAI,gBAAgB,MAAM,WAAW;AACpD,IAAE,aAAa,IAAI,SAAS,MAAM,KAAK;AACvC,IAAE,aAAa,IAAI,kBAAkB,MAAM,aAAa;AACxD,IAAE,aAAa,IAAI,yBAAyB,MAAM;AAClD,IAAE,aAAa,IAAI,SAAS,MAAM,KAAK;AACvC,MAAI,MAAM,SAAU,GAAE,aAAa,IAAI,YAAY,MAAM,QAAQ;AACjE,SAAO,EAAE,SAAS;AACpB;AASO,SAAS,uBAAuB,OAAmC;AACxE,QAAM,OAAO,IAAI,gBAAgB;AACjC,OAAK,IAAI,cAAc,oBAAoB;AAC3C,OAAK,IAAI,aAAa,MAAM,QAAQ;AACpC,OAAK,IAAI,QAAQ,MAAM,IAAI;AAC3B,OAAK,IAAI,gBAAgB,MAAM,WAAW;AAC1C,OAAK,IAAI,iBAAiB,MAAM,YAAY;AAC5C,SAAO,KAAK,SAAS;AACvB;AAQO,SAAS,sBAAsB,OAAkC;AACtE,QAAM,OAAO,IAAI,gBAAgB;AACjC,OAAK,IAAI,cAAc,eAAe;AACtC,OAAK,IAAI,aAAa,MAAM,QAAQ;AACpC,OAAK,IAAI,iBAAiB,MAAM,YAAY;AAC5C,MAAI,MAAM,MAAO,MAAK,IAAI,SAAS,MAAM,KAAK;AAC9C,SAAO,KAAK,SAAS;AACvB;AA6BA,IAAM,oBAAwD;AAAA,EAC5D,MAAM,CAAC,aAAa;AAAA,EACpB,aAAa,CAAC,cAAc,UAAU,OAAO;AAAA,EAC7C,YAAY,CAAC,MAAM;AAAA,EACnB,QAAQ,CAAC,MAAM;AAAA,EACf,OAAO,CAAC,MAAM;AAChB;AAEO,SAAS,kBAAgC;AAC9C,MAAI,OAA0B,EAAE,QAAQ,OAAO;AAC/C,QAAM,YAAY,oBAAI,IAAoC;AAE1D,WAAS,SAAS;AAChB,QAAI;AACJ,eAAW,MAAM,WAAW;AAC1B,UAAI;AACF,WAAG,IAAI;AAAA,MACT,SAAS,GAAG;AACV,YAAI,eAAe,OAAW,cAAa;AAAA,MAC7C;AAAA,IACF;AACA,QAAI,eAAe,OAAW,OAAM;AAAA,EACtC;AAEA,WAAS,WAAW,IAAiB,QAAoC,CAAC,GAAG;AAC3E,UAAM,UAAU,kBAAkB,KAAK,MAAM;AAC7C,QAAI,CAAC,QAAQ,SAAS,EAAE,GAAG;AACzB,YAAM,IAAI,MAAM,6BAA6B,KAAK,MAAM,WAAM,EAAE,EAAE;AAAA,IACpE;AACA,WAAO,EAAE,GAAG,MAAM,GAAG,OAAO,QAAQ,GAAG;AACvC,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,IAAI,SAAS;AACX,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,WAAW;AACb,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,QAAQ;AACV,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,SAAS;AACX,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,QAAQ;AACV,aAAO,KAAK;AAAA,IACd;AAAA,IACA,MAAM,EAAE,UAAU,MAAM,GAAG;AACzB,iBAAW,eAAe,EAAE,UAAU,MAAM,CAAC;AAAA,IAC/C;AAAA,IACA,eAAe,QAAQ;AACrB,iBAAW,cAAc,EAAE,OAAO,CAAC;AAAA,IACrC;AAAA,IACA,WAAW,MAAM,SAAS;AACxB,iBAAW,UAAU,EAAE,OAAO,EAAE,MAAM,QAAQ,EAAE,CAAC;AAAA,IACnD;AAAA,IACA,UAAU,OAAO;AACf,iBAAW,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,SAAS,MAAM,SAAS,eAAe,MAAM,EAAE,CAAC;AAAA,IAClG;AAAA,IACA,QAAQ;AACN,UAAI,KAAK,WAAW,OAAQ;AAC5B,aAAO,EAAE,QAAQ,OAAO;AACxB,aAAO;AAAA,IACT;AAAA,IACA,UAAU,IAAI;AACZ,gBAAU,IAAI,EAAE;AAChB,aAAO,MAAM,UAAU,OAAO,EAAE;AAAA,IAClC;AAAA,EACF;AACF;;;AC9KO,SAAS,eAAe,KAA6C;AAC1E,SAAO,EAAE,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,SAAS,IAAI,QAAQ;AAC5D;AAEO,SAAS,eAAe,KAAyC;AACtE,MAAI,QAAQ,QAAQ,MAAM,QAAQ,GAAG,KAAK,OAAO,QAAQ,SAAU,QAAO;AAC1E,QAAM,IAAI;AACV,MAAI,OAAO,EAAE,OAAO,SAAU,QAAO;AACrC,MAAI,OAAO,EAAE,SAAS,SAAU,QAAO;AACvC,SAAO,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,MAAM,SAAS,EAAE,QAAQ;AACtD;AAYO,SAAS,gBAAgB,QAAoC;AAClE,QAAM,YAAY,oBAAI,IAAuC;AAE7D,WAAS,SAAS,KAAyB;AACzC,QAAI;AACJ,eAAW,MAAM,WAAW;AAC1B,UAAI;AAAE,WAAG,GAAG;AAAA,MAAE,SAAS,GAAG;AAAE,YAAI,eAAe,OAAW,cAAa;AAAA,MAAE;AAAA,IAC3E;AACA,QAAI,eAAe,OAAW,OAAM;AAAA,EACtC;AAEA,SAAO;AAAA,IACL,KAAK,KAAK;AACR,aAAO,YAAY,eAAe,GAAG,CAAC;AAAA,IACxC;AAAA,IACA,QAAQ,KAAK;AACX,YAAM,MAAM,eAAe,GAAG;AAC9B,UAAI,CAAC,IAAK;AACV,eAAS,GAAG;AAAA,IACd;AAAA,IACA,UAAU,IAAI;AACZ,gBAAU,IAAI,EAAE;AAChB,aAAO,MAAM,UAAU,OAAO,EAAE;AAAA,IAClC;AAAA,EACF;AACF;","names":["item","toast"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-elements/core",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",