@vizejs/fresco 0.718.0 → 0.720.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.
Files changed (33) hide show
  1. package/dist/{accessibility-DwzT925M.d.mts → accessibility-D7iuITvU.d.mts} +4 -3
  2. package/dist/{accessibility-DwzT925M.d.mts.map → accessibility-D7iuITvU.d.mts.map} +1 -1
  3. package/dist/{app-_QmZ-PoH.d.mts → app-CJh9qfJI.d.mts} +3 -3
  4. package/dist/{app-_QmZ-PoH.d.mts.map → app-CJh9qfJI.d.mts.map} +1 -1
  5. package/dist/{app-C_wFlWSV.mjs → app-CjfLCWic.mjs} +110 -16
  6. package/dist/app-CjfLCWic.mjs.map +1 -0
  7. package/dist/components/index.d.mts +2 -2
  8. package/dist/components/index.mjs +2 -2
  9. package/dist/{components-DzkL-yHj.mjs → components-DgDohiXo.mjs} +348 -79
  10. package/dist/components-DgDohiXo.mjs.map +1 -0
  11. package/dist/composables/index.d.mts +1 -1
  12. package/dist/composables/index.mjs +3 -3
  13. package/dist/{composables-BJeirPSH.mjs → composables-BxxLIBdJ.mjs} +3 -3
  14. package/dist/{composables-BJeirPSH.mjs.map → composables-BxxLIBdJ.mjs.map} +1 -1
  15. package/dist/{index-Ddp2Txtm.d.mts → index-BOV-0YqV.d.mts} +2 -2
  16. package/dist/{index-Ddp2Txtm.d.mts.map → index-BOV-0YqV.d.mts.map} +1 -1
  17. package/dist/{index-B3zQ6E-5.d.mts → index-DAhTRsXN.d.mts} +158 -103
  18. package/dist/index-DAhTRsXN.d.mts.map +1 -0
  19. package/dist/index.d.mts +6 -6
  20. package/dist/index.mjs +5 -5
  21. package/dist/{protocol-DavoeNLn.d.mts → protocol-C1DHP36Z.d.mts} +5 -2
  22. package/dist/protocol-C1DHP36Z.d.mts.map +1 -0
  23. package/dist/testing/index.d.mts +4 -2
  24. package/dist/testing/index.d.mts.map +1 -1
  25. package/dist/testing/index.mjs +2 -1
  26. package/dist/testing/index.mjs.map +1 -1
  27. package/dist/{useBoxMetrics-lF5Myjc7.mjs → useBoxMetrics-BMD1acRU.mjs} +2 -2
  28. package/dist/{useBoxMetrics-lF5Myjc7.mjs.map → useBoxMetrics-BMD1acRU.mjs.map} +1 -1
  29. package/package.json +2 -2
  30. package/dist/app-C_wFlWSV.mjs.map +0 -1
  31. package/dist/components-DzkL-yHj.mjs.map +0 -1
  32. package/dist/index-B3zQ6E-5.d.mts.map +0 -1
  33. package/dist/protocol-DavoeNLn.d.mts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DAhTRsXN.d.mts","names":[],"sources":["../src/components/Box.ts","../src/components/FrescoSpacer.vue","../src/components/layout-primitive-types.ts","../src/components/FrescoDivider.vue","../src/components/FrescoStack.vue","../src/components/FrescoHStack.vue","../src/components/FrescoVStack.vue","../src/components/Grid.ts","../src/components/presentational-primitive-types.ts","../src/components/FrescoCard.vue","../src/components/scroll-types.ts","../src/components/ScrollBox.vue","../src/components/ScrollBar.vue","../src/components/Text.ts","../src/components/text-utility-types.ts","../src/components/FrescoNewline.vue","../src/components/FrescoStatic.vue","../src/components/display-primitive-types.ts","../src/components/FrescoTransform.vue","../src/components/code-types.ts","../src/components/code-buffer.ts","../src/components/Code.ts","../src/components/markdown-types.ts","../src/components/FrescoMarkdown.vue","../src/components/markdown.ts","../src/components/frame-buffer-types.ts","../src/components/FrescoFrameBuffer.vue","../src/components/Diff.ts","../src/components/LineNumber.ts","../src/components/FrescoLink.vue","../src/components/TextInput.ts","../src/components/TextArea.ts","../src/components/Select.ts","../src/components/Checkbox.ts","../src/components/RadioGroup.ts","../src/components/Confirm.ts","../src/components/slider-types.ts","../src/components/FrescoSlider.vue","../src/components/Form.ts","../src/components/FrescoSpinner.vue","../src/components/ProgressBar.ts","../src/components/FrescoAlert.vue","../src/components/FrescoBadge.vue","../src/components/Timer.ts","../src/components/FrescoTooltip.vue","../src/components/List.ts","../src/components/table-types.ts","../src/components/Table.ts","../src/components/Tree.ts","../src/components/Menu.ts","../src/components/Tabs.ts","../src/components/FrescoBreadcrumb.vue","../src/components/Stepper.ts","../src/components/modal-types.ts","../src/components/FrescoModal.vue","../src/components/popover-types.ts","../src/components/FrescoPopover.vue","../src/components/StatusBar.ts","../src/components/FrescoHeader.vue","../src/components/KeyHint.ts","../src/components/FrescoAvatar.vue"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -1,10 +1,10 @@
1
- import { A as InputEvent, C as FrescoRenderNodeKind, D as FrescoStyle, E as FrescoSnakeStyleAliases, F as ResizeEvent, M as KeyEventType, N as MouseEvent, O as FrescoTextRenderNode, P as PasteEvent, S as FrescoRenderNode, T as FrescoRootRenderNode, _ as FrescoModifiers, a as FrescoAlignSelf, b as FrescoPosition, c as FrescoBoxRenderNode, d as FrescoDisplay, f as FrescoFlexDirection, g as FrescoJustifyContent, h as FrescoInputRenderNode, i as FrescoAlignItems, j as KeyEvent, k as FrescoTextWrapMode, l as FrescoCanonicalStyle, m as FrescoInputEvent, n as FocusEvent, o as FrescoAppearance, p as FrescoFlexWrap, r as FrescoAlignContent, s as FrescoBorderStyle, t as CompositionEvent, u as FrescoDimension, v as FrescoMouseEventKind, w as FrescoRenderStyle, x as FrescoRawRenderNode, y as FrescoOverflow } from "./protocol-DavoeNLn.mjs";
2
- import { a as FrescoHostNode, c as FrescoInputEventPhase, d as FrescoNodeUpdateKind, f as FrescoRendererOptions, m as createRenderer, o as FrescoInputDispatchResult, p as FrescoRoutedInputEvent, r as FrescoDeclaredSize, s as FrescoInputEventHandler, u as FrescoNodeLifecycleHooks } from "./accessibility-DwzT925M.mjs";
3
- import { $ as SliderProps, $t as BadgeProps, A as TableRow, An as _default$7, At as MarkdownHeadingBlock, B as _default$2, Bt as MarkdownThematicBreakBlock, C as TreeNode, Cn as CardProps, Ct as defaultMarkdownRenderer, D as TableCellSlotProps, Dn as Grid, Dt as MarkdownBlock, E as TableAlignment, En as TooltipProps, Et as _default$10, F as ListProps, Fn as _default$16, Ft as MarkdownQuoteBlock, G as Form, Gt as CodeDiagnosticSeverity, H as ProgressBar, Ht as createCodeBuffer, I as _default$20, In as Box, It as MarkdownRenderLine, J as FormProps, Jt as CodeSelection, K as FormErrors, Kt as CodePosition, L as Timer, Ln as BoxProps, Lt as MarkdownRenderOptions, M as TableViewportRange, Mn as _default$5, Mt as MarkdownListItem, N as List, Nn as DividerProps, Nt as MarkdownParagraphBlock, O as TableColumn, On as GridProps, Ot as MarkdownBlockProvider, P as ListItem, Pn as StackProps, Pt as MarkdownProps, Q as SliderOrientation, Qt as _default$21, R as TimerMode, Rt as MarkdownRenderer, S as Tree, Sn as BreadcrumbProps, St as FrameBufferProps, T as Table, Tn as TooltipPosition, Tt as renderMarkdown, U as ProgressBarProps, Ut as CodeBuffer, V as _default, Vt as Code, W as _default$17, Wt as CodeDiagnostic, X as FormValues, Xt as CodeSyntaxProvider, Y as FormSlotProps, Yt as CodeSyntaxContext, Z as _default$15, Zt as CodeSyntaxToken, _ as Tabs, _n as _default$4, _t as LineNumberProps, a as _default$8, an as _default$12, at as RadioOption, b as MenuItem, bn as AvatarProps, bt as DiffView, c as StatusBarProps, cn as Text, ct as Select, d as Step, dn as _default$14, dt as TextArea, en as BadgeVariant, et as SliderRange, f as StepStatus, fn as ScrollBarOrientation, ft as TextAreaProps, g as Tab, gn as ScrollBoxProps, gt as LineNumber, h as _default$3, hn as ScrollBoxItemSlot, ht as _default$9, i as KeyHintProps, in as _default$19, it as RadioGroupProps, j as TableSortDirection, jn as _default$18, jt as MarkdownListBlock, k as TableProps, kn as _default$22, kt as MarkdownCodeBlock, l as _default$11, ln as TextProps, lt as SelectOption, m as StepperProps, mn as ScrollBoxExposed, mt as TextInputProps, n as KeyBinding, nn as SpinnerProps, nt as ConfirmProps, o as StatusBar, on as NewlineProps, ot as Checkbox, p as Stepper, pn as ScrollBarProps, pt as TextInput, q as FormField, qt as CodeProps, r as KeyHint, rn as StaticProps, rt as RadioGroup, s as StatusBarItem, sn as TransformProps, st as CheckboxProps, t as _default$1, tn as LinkProps, tt as Confirm, u as ModalProps, un as _default$13, ut as SelectProps, v as TabsProps, vn as AlertProps, vt as Diff, w as TreeProps, wn as HeaderProps, wt as parseMarkdown, x as MenuProps, xn as BreadcrumbItem, xt as _default$6, y as Menu, yn as AlertType, yt as DiffProps, z as TimerProps, zt as MarkdownSpan } from "./index-B3zQ6E-5.mjs";
1
+ import { A as InputEvent, C as FrescoRenderNodeKind, D as FrescoStyle, E as FrescoSnakeStyleAliases, F as ResizeEvent, M as KeyEventType, N as MouseEvent, O as FrescoTextRenderNode, P as PasteEvent, S as FrescoRenderNode, T as FrescoRootRenderNode, _ as FrescoModifiers, a as FrescoAlignSelf, b as FrescoPosition, c as FrescoBoxRenderNode, d as FrescoDisplay, f as FrescoFlexDirection, g as FrescoJustifyContent, h as FrescoInputRenderNode, i as FrescoAlignItems, j as KeyEvent, k as FrescoTextWrapMode, l as FrescoCanonicalStyle, m as FrescoInputEvent, n as FocusEvent, o as FrescoAppearance, p as FrescoFlexWrap, r as FrescoAlignContent, s as FrescoBorderStyle, t as CompositionEvent, u as FrescoDimension, v as FrescoMouseEventKind, w as FrescoRenderStyle, x as FrescoRawRenderNode, y as FrescoOverflow } from "./protocol-C1DHP36Z.mjs";
2
+ import { a as FrescoHostNode, c as FrescoInputEventPhase, d as FrescoNodeUpdateKind, f as FrescoRendererOptions, m as createRenderer, o as FrescoInputDispatchResult, p as FrescoRoutedInputEvent, r as FrescoDeclaredSize, s as FrescoInputEventHandler, u as FrescoNodeLifecycleHooks } from "./accessibility-D7iuITvU.mjs";
3
+ import { $ as FormValues, $t as CodeSyntaxProvider, A as TableCellSlotProps, An as Grid, At as MarkdownBlock, B as Timer, Bn as BoxProps, Bt as MarkdownRenderOptions, C as MenuItem, Cn as AvatarProps, Ct as DiffView, D as TreeProps, Dn as HeaderProps, Dt as parseMarkdown, E as TreeNode, En as CardProps, Et as defaultMarkdownRenderer, F as TableViewportRange, Fn as _default$5, Ft as MarkdownListItem, G as ProgressBar, Gt as createCodeBuffer, H as TimerProps, Ht as MarkdownSpan, I as List, In as DividerProps, It as MarkdownParagraphBlock, J as Form, Jt as CodeDiagnosticSeverity, K as ProgressBarProps, Kt as CodeBuffer, L as ListItem, Ln as StackProps, Lt as MarkdownProps, M as TableProps, Mn as _default$23, Mt as MarkdownCodeBlock, N as TableRow, Nn as _default$7, Nt as MarkdownHeadingBlock, O as Table, On as TooltipPosition, Ot as renderMarkdown, P as TableSortDirection, Pn as _default$19, Pt as MarkdownListBlock, Q as FormSlotProps, Qt as CodeSyntaxContext, R as ListProps, Rn as _default$17, Rt as MarkdownQuoteBlock, S as Menu, Sn as AlertType, St as DiffProps, T as Tree, Tn as BreadcrumbProps, Tt as FrameBufferProps, U as _default$2, Ut as MarkdownThematicBreakBlock, V as TimerMode, Vt as MarkdownRenderer, W as _default, Wt as Code, X as FormField, Xt as CodeProps, Y as FormErrors, Yt as CodePosition, Z as FormProps, Zt as CodeSelection, _ as StepperProps, _n as ScrollBoxExposed, _t as TextInputProps, a as _default$8, an as SpinnerProps, at as ConfirmProps, b as Tabs, bn as _default$4, bt as LineNumberProps, c as StatusBarProps, cn as _default$12, ct as RadioOption, d as PopoverProps, dn as Text, dt as Select, en as CodeSyntaxToken, et as _default$16, f as _default$11, fn as TextProps, ft as SelectOption, g as Stepper, gn as ScrollBarProps, gt as TextInput, h as StepStatus, hn as ScrollBarOrientation, ht as TextAreaProps, i as KeyHintProps, in as LinkProps, it as Confirm, j as TableColumn, jn as GridProps, jt as MarkdownBlockProvider, k as TableAlignment, kn as TooltipProps, kt as _default$10, l as _default$13, ln as NewlineProps, lt as Checkbox, m as Step, mn as _default$15, mt as TextArea, n as KeyBinding, nn as BadgeProps, nt as SliderProps, o as StatusBar, on as StaticProps, ot as RadioGroup, p as ModalProps, pn as _default$14, pt as SelectProps, q as _default$18, qt as CodeDiagnostic, r as KeyHint, rn as BadgeVariant, rt as SliderRange, s as StatusBarItem, sn as _default$20, st as RadioGroupProps, t as _default$1, tn as _default$22, tt as SliderOrientation, u as PopoverPlacement, un as TransformProps, ut as CheckboxProps, v as _default$3, vn as ScrollBoxItemSlot, vt as _default$9, w as MenuProps, wn as BreadcrumbItem, wt as _default$6, x as TabsProps, xn as AlertProps, xt as Diff, y as Tab, yn as ScrollBoxProps, yt as LineNumber, z as _default$21, zn as Box, zt as MarkdownRenderLine } from "./index-DAhTRsXN.mjs";
4
4
  import { a as createVirtualViewport, i as VirtualViewportRange, n as VirtualViewport, o as useVirtualViewport, r as VirtualViewportOptions, t as VirtualScrollAlignment } from "./useVirtualViewport-TxTapifg.mjs";
5
- import { A as ImeManager, B as KeyHandler, C as useWindowSize, D as useStderr, E as UseStdoutReturn, F as useMouse, H as UseInputReturn, I as UsePasteOptions, L as usePaste, M as useIme, N as UseMouseOptions, O as useStdin, P as UseMouseReturn, R as InputHandler, S as WindowSize, T as UseStdinReturn, U as useInput, V as UseInputOptions, W as useKeyPress, _ as AnimationResult, a as KeymapStroke, b as CursorPosition, c as createKeymapResolver, d as useIsScreenReaderEnabled, f as BoxMetrics, g as measureElement, h as DOMElement, i as KeymapResolver, j as UseImeOptions, k as useStdout, l as defineKeymap, m as useBoxMetrics, n as KeymapBinding, o as UseKeymapOptions, p as UseBoxMetricsResult, r as KeymapMatch, s as UseKeymapReturn, t as Keymap, u as useKeymap, v as UseAnimationOptions, w as UseStderrReturn, x as useCursor, y as useAnimation, z as Key } from "./index-Ddp2Txtm.mjs";
5
+ import { A as ImeManager, B as KeyHandler, C as useWindowSize, D as useStderr, E as UseStdoutReturn, F as useMouse, H as UseInputReturn, I as UsePasteOptions, L as usePaste, M as useIme, N as UseMouseOptions, O as useStdin, P as UseMouseReturn, R as InputHandler, S as WindowSize, T as UseStdinReturn, U as useInput, V as UseInputOptions, W as useKeyPress, _ as AnimationResult, a as KeymapStroke, b as CursorPosition, c as createKeymapResolver, d as useIsScreenReaderEnabled, f as BoxMetrics, g as measureElement, h as DOMElement, i as KeymapResolver, j as UseImeOptions, k as useStdout, l as defineKeymap, m as useBoxMetrics, n as KeymapBinding, o as UseKeymapOptions, p as UseBoxMetricsResult, r as KeymapMatch, s as UseKeymapReturn, t as Keymap, u as useKeymap, v as UseAnimationOptions, w as UseStderrReturn, x as useCursor, y as useAnimation, z as Key } from "./index-BOV-0YqV.mjs";
6
6
  import { a as provideFocusScope, i as UseFocusOptions, n as useApp, o as useFocus, r as FocusManager, s as useFocusManager, t as UseAppReturn } from "./useApp-vIRJ5Th3.mjs";
7
- import { A as FrescoTreeInspection, C as FrescoDevtools, D as FrescoDevtoolsSnapshot, E as FrescoDevtoolsRenderMetrics, M as formatFrescoDebugOverlay, N as inspectFrescoTree, O as FrescoLayoutInspection, S as FrescoDebugOverlayOptions, T as FrescoDevtoolsOptions, _ as KittyFlagName, a as RenderMetrics, b as kittyModifiers, c as createApp, d as lastKeyEvent, f as lastMouseEvent, g as renderToString, h as render, i as RenderInstance, j as createFrescoDevtools, k as FrescoNodeInspection, l as lastCompositionEvent, m as lastResizeEvent, n as AppOptions, o as RenderOptions, p as lastPasteEvent, r as Instance, s as RenderToStringOptions, t as App, u as lastFocusEvent, v as KittyKeyboardOptions, w as FrescoDevtoolsEvent, x as resolveKittyFlags, y as kittyFlags } from "./app-_QmZ-PoH.mjs";
7
+ import { A as FrescoTreeInspection, C as FrescoDevtools, D as FrescoDevtoolsSnapshot, E as FrescoDevtoolsRenderMetrics, M as formatFrescoDebugOverlay, N as inspectFrescoTree, O as FrescoLayoutInspection, S as FrescoDebugOverlayOptions, T as FrescoDevtoolsOptions, _ as KittyFlagName, a as RenderMetrics, b as kittyModifiers, c as createApp, d as lastKeyEvent, f as lastMouseEvent, g as renderToString, h as render, i as RenderInstance, j as createFrescoDevtools, k as FrescoNodeInspection, l as lastCompositionEvent, m as lastResizeEvent, n as AppOptions, o as RenderOptions, p as lastPasteEvent, r as Instance, s as RenderToStringOptions, t as App, u as lastFocusEvent, v as KittyKeyboardOptions, w as FrescoDevtoolsEvent, x as resolveKittyFlags, y as kittyFlags } from "./app-CJh9qfJI.mjs";
8
8
  import { App as App$1, Component, InjectionKey, MaybeRefOrGetter, Plugin, Ref } from "vue";
9
9
  import { FlexStyleNapi, ImeStateNapi, InputEventNapi, LayoutResultNapi, ModifiersNapi, RenderNodeNapi, StyleNapi, TerminalInfoNapi, TerminalOptionsNapi } from "@vizejs/fresco-native";
10
10
 
@@ -96,5 +96,5 @@ declare function provideFrescoTheme(override?: MaybeRefOrGetter<FrescoThemeOverr
96
96
  /** Read the nearest resolved theme, falling back to the static defaults. */
97
97
  declare function useFrescoTheme(): Readonly<Ref<FrescoTheme>>;
98
98
  //#endregion
99
- export { _default as Alert, type AlertProps, type AlertType, type AnimationResult, type App, type AppOptions, _default$1 as Avatar, type AvatarProps, _default$2 as Badge, type BadgeProps, type BadgeVariant, Box, type BoxMetrics, type BoxProps, _default$3 as Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, _default$4 as Card, type CardProps, Checkbox, type CheckboxProps, Code, type CodeBuffer, type CodeDiagnostic, type CodeDiagnosticSeverity, type CodePosition, type CodeProps, type CodeSelection, type CodeSyntaxContext, type CodeSyntaxProvider, type CodeSyntaxToken, type CompositionEvent, Confirm, type ConfirmProps, type CursorPosition, type DOMElement, Diff, type DiffProps, type DiffView, _default$5 as Divider, type DividerProps, FRESCO_THEME_KEY, type FlexStyleNapi, type FocusEvent, type FocusManager, Form, type FormErrors, type FormField, type FormProps, type FormSlotProps, type FormValues, _default$6 as FrameBuffer, type FrameBufferProps, type FrescoAlignContent, type FrescoAlignItems, type FrescoAlignSelf, type FrescoAppearance, type FrescoBorderStyle, type FrescoBoxRenderNode, type FrescoCanonicalStyle, type FrescoDebugOverlayOptions, type FrescoDeclaredSize, type FrescoDevtools, type FrescoDevtoolsEvent, type FrescoDevtoolsOptions, type FrescoDevtoolsRenderMetrics, type FrescoDevtoolsSnapshot, type FrescoDimension, type FrescoDisplay, type FrescoFlexDirection, type FrescoFlexWrap, type FrescoHostNode, type FrescoInputDispatchResult, type FrescoInputEvent, type FrescoInputEventHandler, type FrescoInputEventPhase, type FrescoInputRenderNode, type FrescoJustifyContent, type FrescoLayoutInspection, type FrescoModifiers, type FrescoMouseEventKind, type FrescoNodeInspection, type FrescoNodeLifecycleHooks, type FrescoNodeUpdateKind, type FrescoOverflow, type FrescoPluginDefinition, type FrescoPosition, type FrescoProvider, type FrescoRawRenderNode, type FrescoRenderNode, type FrescoRenderNodeKind, type FrescoRenderStyle, type FrescoRendererOptions, type FrescoRootRenderNode, type FrescoRoutedInputEvent, type FrescoSnakeStyleAliases, type FrescoStyle, type FrescoTextRenderNode, type FrescoTextWrapMode, type FrescoTheme, type FrescoThemeBorders, type FrescoThemeColors, type FrescoThemeMotion, type FrescoThemeOverride, type FrescoThemeSpacing, type FrescoTreeInspection, Grid, type GridProps, _default$7 as HStack, _default$8 as Header, type HeaderProps, type ImeManager, type ImeStateNapi, type InputEvent, type InputEventNapi, type InputHandler, type Instance, type Key, type KeyBinding, type KeyEvent, type KeyEventType, type KeyHandler, KeyHint, type KeyHintProps, type Keymap, type KeymapBinding, type KeymapMatch, type KeymapResolver, type KeymapStroke, type KittyFlagName, type KittyKeyboardOptions, type LayoutResultNapi, LineNumber, type LineNumberProps, _default$9 as Link, type LinkProps, List, type ListItem, type ListProps, _default$10 as Markdown, type MarkdownBlock, type MarkdownBlockProvider, type MarkdownCodeBlock, type MarkdownHeadingBlock, type MarkdownListBlock, type MarkdownListItem, type MarkdownParagraphBlock, type MarkdownProps, type MarkdownQuoteBlock, type MarkdownRenderLine, type MarkdownRenderOptions, type MarkdownRenderer, type MarkdownSpan, type MarkdownThematicBreakBlock, Menu, type MenuItem, type MenuProps, _default$11 as Modal, type ModalProps, type ModifiersNapi, type MouseEvent, _default$12 as Newline, type NewlineProps, type PasteEvent, ProgressBar, type ProgressBarProps, RadioGroup, type RadioGroupProps, type RadioOption, type RenderInstance, type RenderMetrics, type RenderNodeNapi, type RenderOptions, type RenderToStringOptions, type ResizeEvent, _default$13 as ScrollBar, type ScrollBarOrientation, type ScrollBarProps, _default$14 as ScrollBox, type ScrollBoxExposed, type ScrollBoxItemSlot, type ScrollBoxProps, Select, type SelectOption, type SelectProps, _default$15 as Slider, type SliderOrientation, type SliderProps, type SliderRange, _default$16 as Spacer, _default$17 as Spinner, type SpinnerProps, _default$18 as Stack, type StackProps, _default$19 as Static, type StaticProps, StatusBar, type StatusBarItem, type StatusBarProps, type Step, type StepStatus, Stepper, type StepperProps, type StyleNapi, type Tab, Table, type TableAlignment, type TableCellSlotProps, type TableColumn, type TableProps, type TableRow, type TableSortDirection, type TableViewportRange, Tabs, type TabsProps, type TerminalInfoNapi, type TerminalOptionsNapi, Text, TextArea, type TextAreaProps, TextInput, type TextInputProps, type TextProps, Timer, type TimerMode, type TimerProps, _default$20 as Tooltip, type TooltipPosition, type TooltipProps, _default$21 as Transform, type TransformProps, Tree, type TreeNode, type TreeProps, type UseAnimationOptions, type UseAppReturn, type UseBoxMetricsResult, type UseFocusOptions, type UseImeOptions, type UseInputOptions, type UseInputReturn, type UseKeymapOptions, type UseKeymapReturn, type UseMouseOptions, type UseMouseReturn, type UsePasteOptions, type UseStderrReturn, type UseStdinReturn, type UseStdoutReturn, _default$22 as VStack, type VirtualScrollAlignment, type VirtualViewport, type VirtualViewportOptions, type VirtualViewportRange, type WindowSize, createApp, createCodeBuffer, createFrescoDevtools, createKeymapResolver, createRenderer, createVirtualViewport, defaultFrescoTheme, defaultMarkdownRenderer, defineFrescoPlugin, defineFrescoProvider, defineKeymap, formatFrescoDebugOverlay, inspectFrescoTree, kittyFlags, kittyModifiers, lastCompositionEvent, lastFocusEvent, lastKeyEvent, lastMouseEvent, lastPasteEvent, lastResizeEvent, measureElement, parseMarkdown, provideFocusScope, provideFrescoTheme, render, renderMarkdown, renderToString, resolveFrescoTheme, resolveKittyFlags, useAnimation, useApp, useBoxMetrics, useCursor, useFocus, useFocusManager, useFrescoTheme, useIme, useInput, useIsScreenReaderEnabled, useKeyPress, useKeymap, useMouse, usePaste, useStderr, useStdin, useStdout, useVirtualViewport, useWindowSize };
99
+ export { _default as Alert, type AlertProps, type AlertType, type AnimationResult, type App, type AppOptions, _default$1 as Avatar, type AvatarProps, _default$2 as Badge, type BadgeProps, type BadgeVariant, Box, type BoxMetrics, type BoxProps, _default$3 as Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, _default$4 as Card, type CardProps, Checkbox, type CheckboxProps, Code, type CodeBuffer, type CodeDiagnostic, type CodeDiagnosticSeverity, type CodePosition, type CodeProps, type CodeSelection, type CodeSyntaxContext, type CodeSyntaxProvider, type CodeSyntaxToken, type CompositionEvent, Confirm, type ConfirmProps, type CursorPosition, type DOMElement, Diff, type DiffProps, type DiffView, _default$5 as Divider, type DividerProps, FRESCO_THEME_KEY, type FlexStyleNapi, type FocusEvent, type FocusManager, Form, type FormErrors, type FormField, type FormProps, type FormSlotProps, type FormValues, _default$6 as FrameBuffer, type FrameBufferProps, type FrescoAlignContent, type FrescoAlignItems, type FrescoAlignSelf, type FrescoAppearance, type FrescoBorderStyle, type FrescoBoxRenderNode, type FrescoCanonicalStyle, type FrescoDebugOverlayOptions, type FrescoDeclaredSize, type FrescoDevtools, type FrescoDevtoolsEvent, type FrescoDevtoolsOptions, type FrescoDevtoolsRenderMetrics, type FrescoDevtoolsSnapshot, type FrescoDimension, type FrescoDisplay, type FrescoFlexDirection, type FrescoFlexWrap, type FrescoHostNode, type FrescoInputDispatchResult, type FrescoInputEvent, type FrescoInputEventHandler, type FrescoInputEventPhase, type FrescoInputRenderNode, type FrescoJustifyContent, type FrescoLayoutInspection, type FrescoModifiers, type FrescoMouseEventKind, type FrescoNodeInspection, type FrescoNodeLifecycleHooks, type FrescoNodeUpdateKind, type FrescoOverflow, type FrescoPluginDefinition, type FrescoPosition, type FrescoProvider, type FrescoRawRenderNode, type FrescoRenderNode, type FrescoRenderNodeKind, type FrescoRenderStyle, type FrescoRendererOptions, type FrescoRootRenderNode, type FrescoRoutedInputEvent, type FrescoSnakeStyleAliases, type FrescoStyle, type FrescoTextRenderNode, type FrescoTextWrapMode, type FrescoTheme, type FrescoThemeBorders, type FrescoThemeColors, type FrescoThemeMotion, type FrescoThemeOverride, type FrescoThemeSpacing, type FrescoTreeInspection, Grid, type GridProps, _default$7 as HStack, _default$8 as Header, type HeaderProps, type ImeManager, type ImeStateNapi, type InputEvent, type InputEventNapi, type InputHandler, type Instance, type Key, type KeyBinding, type KeyEvent, type KeyEventType, type KeyHandler, KeyHint, type KeyHintProps, type Keymap, type KeymapBinding, type KeymapMatch, type KeymapResolver, type KeymapStroke, type KittyFlagName, type KittyKeyboardOptions, type LayoutResultNapi, LineNumber, type LineNumberProps, _default$9 as Link, type LinkProps, List, type ListItem, type ListProps, _default$10 as Markdown, type MarkdownBlock, type MarkdownBlockProvider, type MarkdownCodeBlock, type MarkdownHeadingBlock, type MarkdownListBlock, type MarkdownListItem, type MarkdownParagraphBlock, type MarkdownProps, type MarkdownQuoteBlock, type MarkdownRenderLine, type MarkdownRenderOptions, type MarkdownRenderer, type MarkdownSpan, type MarkdownThematicBreakBlock, Menu, type MenuItem, type MenuProps, _default$11 as Modal, type ModalProps, type ModifiersNapi, type MouseEvent, _default$12 as Newline, type NewlineProps, type PasteEvent, _default$13 as Popover, type PopoverPlacement, type PopoverProps, ProgressBar, type ProgressBarProps, RadioGroup, type RadioGroupProps, type RadioOption, type RenderInstance, type RenderMetrics, type RenderNodeNapi, type RenderOptions, type RenderToStringOptions, type ResizeEvent, _default$14 as ScrollBar, type ScrollBarOrientation, type ScrollBarProps, _default$15 as ScrollBox, type ScrollBoxExposed, type ScrollBoxItemSlot, type ScrollBoxProps, Select, type SelectOption, type SelectProps, _default$16 as Slider, type SliderOrientation, type SliderProps, type SliderRange, _default$17 as Spacer, _default$18 as Spinner, type SpinnerProps, _default$19 as Stack, type StackProps, _default$20 as Static, type StaticProps, StatusBar, type StatusBarItem, type StatusBarProps, type Step, type StepStatus, Stepper, type StepperProps, type StyleNapi, type Tab, Table, type TableAlignment, type TableCellSlotProps, type TableColumn, type TableProps, type TableRow, type TableSortDirection, type TableViewportRange, Tabs, type TabsProps, type TerminalInfoNapi, type TerminalOptionsNapi, Text, TextArea, type TextAreaProps, TextInput, type TextInputProps, type TextProps, Timer, type TimerMode, type TimerProps, _default$21 as Tooltip, type TooltipPosition, type TooltipProps, _default$22 as Transform, type TransformProps, Tree, type TreeNode, type TreeProps, type UseAnimationOptions, type UseAppReturn, type UseBoxMetricsResult, type UseFocusOptions, type UseImeOptions, type UseInputOptions, type UseInputReturn, type UseKeymapOptions, type UseKeymapReturn, type UseMouseOptions, type UseMouseReturn, type UsePasteOptions, type UseStderrReturn, type UseStdinReturn, type UseStdoutReturn, _default$23 as VStack, type VirtualScrollAlignment, type VirtualViewport, type VirtualViewportOptions, type VirtualViewportRange, type WindowSize, createApp, createCodeBuffer, createFrescoDevtools, createKeymapResolver, createRenderer, createVirtualViewport, defaultFrescoTheme, defaultMarkdownRenderer, defineFrescoPlugin, defineFrescoProvider, defineKeymap, formatFrescoDebugOverlay, inspectFrescoTree, kittyFlags, kittyModifiers, lastCompositionEvent, lastFocusEvent, lastKeyEvent, lastMouseEvent, lastPasteEvent, lastResizeEvent, measureElement, parseMarkdown, provideFocusScope, provideFrescoTheme, render, renderMarkdown, renderToString, resolveFrescoTheme, resolveKittyFlags, useAnimation, useApp, useBoxMetrics, useCursor, useFocus, useFocusManager, useFrescoTheme, useIme, useInput, useIsScreenReaderEnabled, useKeyPress, useKeymap, useMouse, usePaste, useStderr, useStdin, useStdout, useVirtualViewport, useWindowSize };
100
100
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
- import { A as useFocusManager, C as useStdin, N as useApp, O as provideFocusScope, S as useStderr, a as lastMouseEvent, c as render, f as createRenderer, h as measureElement, i as lastKeyEvent, k as useFocus, l as renderToString, n as lastCompositionEvent, o as lastPasteEvent, r as lastFocusEvent, s as lastResizeEvent, t as createApp, w as useStdout, y as useCursor } from "./app-C_wFlWSV.mjs";
2
- import { a as useInput, c as useIsScreenReaderEnabled, i as useMouse, n as createVirtualViewport, o as useKeyPress, r as useVirtualViewport, s as usePaste, t as useBoxMetrics } from "./useBoxMetrics-lF5Myjc7.mjs";
3
- import { A as FrescoMarkdown_default, B as ScrollBox_default, C as Checkbox, D as FrescoLink_default, E as TextInput, F as createCodeBuffer, G as FrescoVStack_default, H as Text, I as LineNumber, J as FrescoDivider_default, K as FrescoHStack_default, L as FrescoTransform_default, M as parseMarkdown, N as renderMarkdown, O as Diff, P as Code, R as FrescoStatic_default, S as RadioGroup, T as TextArea, U as FrescoCard_default, V as ScrollBar_default, W as Grid, X as Box, Y as FrescoSpacer_default, _ as ProgressBar, a as FrescoModal_default, b as FrescoSlider_default, c as Tabs, d as Table, f as List, g as FrescoAlert_default, h as FrescoBadge_default, i as StatusBar, j as defaultMarkdownRenderer, k as FrescoFrameBuffer_default, l as Menu, m as Timer, n as KeyHint, o as Stepper, p as FrescoTooltip_default, q as FrescoStack_default, r as FrescoHeader_default, s as FrescoBreadcrumb_default, t as FrescoAvatar_default, u as Tree, v as FrescoSpinner_default, w as Select, x as Confirm, y as Form, z as FrescoNewline_default } from "./components-DzkL-yHj.mjs";
4
- import { a as useWindowSize, i as useAnimation, n as defineKeymap, o as useIme, r as useKeymap, t as createKeymapResolver } from "./composables-BJeirPSH.mjs";
1
+ import { A as useFocusManager, C as useStdin, N as useApp, O as provideFocusScope, S as useStderr, a as lastMouseEvent, c as render, f as createRenderer, h as measureElement, i as lastKeyEvent, k as useFocus, l as renderToString, n as lastCompositionEvent, o as lastPasteEvent, r as lastFocusEvent, s as lastResizeEvent, t as createApp, w as useStdout, y as useCursor } from "./app-CjfLCWic.mjs";
2
+ import { a as useInput, c as useIsScreenReaderEnabled, i as useMouse, n as createVirtualViewport, o as useKeyPress, r as useVirtualViewport, s as usePaste, t as useBoxMetrics } from "./useBoxMetrics-BMD1acRU.mjs";
3
+ import { A as FrescoFrameBuffer_default, B as FrescoNewline_default, C as RadioGroup, D as TextInput, E as TextArea, F as Code, G as Grid, H as ScrollBar_default, I as createCodeBuffer, J as FrescoStack_default, K as FrescoVStack_default, L as LineNumber, M as defaultMarkdownRenderer, N as parseMarkdown, O as FrescoLink_default, P as renderMarkdown, R as FrescoTransform_default, S as Confirm, T as Select, U as Text, V as ScrollBox_default, W as FrescoCard_default, X as FrescoSpacer_default, Y as FrescoDivider_default, Z as Box, _ as FrescoAlert_default, a as FrescoPopover_default, b as Form, c as FrescoBreadcrumb_default, d as Tree, f as Table, g as FrescoBadge_default, h as Timer, i as StatusBar, j as FrescoMarkdown_default, k as Diff, l as Tabs, m as FrescoTooltip_default, n as KeyHint, o as FrescoModal_default, p as List, q as FrescoHStack_default, r as FrescoHeader_default, s as Stepper, t as FrescoAvatar_default, u as Menu, v as ProgressBar, w as Checkbox, x as FrescoSlider_default, y as FrescoSpinner_default, z as FrescoStatic_default } from "./components-DgDohiXo.mjs";
4
+ import { a as useWindowSize, i as useAnimation, n as defineKeymap, o as useIme, r as useKeymap, t as createKeymapResolver } from "./composables-BxxLIBdJ.mjs";
5
5
  import { computed, inject, provide, toValue } from "vue";
6
6
  //#region src/kittyKeyboard.ts
7
7
  /**
@@ -287,6 +287,6 @@ function useFrescoTheme() {
287
287
  return inject(FRESCO_THEME_KEY, void 0) ?? computed(() => defaultFrescoTheme);
288
288
  }
289
289
  //#endregion
290
- export { FrescoAlert_default as Alert, FrescoAvatar_default as Avatar, FrescoBadge_default as Badge, Box, FrescoBreadcrumb_default as Breadcrumb, FrescoCard_default as Card, Checkbox, Code, Confirm, Diff, FrescoDivider_default as Divider, FRESCO_THEME_KEY, Form, FrescoFrameBuffer_default as FrameBuffer, Grid, FrescoHStack_default as HStack, FrescoHeader_default as Header, KeyHint, LineNumber, FrescoLink_default as Link, List, FrescoMarkdown_default as Markdown, Menu, FrescoModal_default as Modal, FrescoNewline_default as Newline, ProgressBar, RadioGroup, ScrollBar_default as ScrollBar, ScrollBox_default as ScrollBox, Select, FrescoSlider_default as Slider, FrescoSpacer_default as Spacer, FrescoSpinner_default as Spinner, FrescoStack_default as Stack, FrescoStatic_default as Static, StatusBar, Stepper, Table, Tabs, Text, TextArea, TextInput, Timer, FrescoTooltip_default as Tooltip, FrescoTransform_default as Transform, Tree, FrescoVStack_default as VStack, createApp, createCodeBuffer, createFrescoDevtools, createKeymapResolver, createRenderer, createVirtualViewport, defaultFrescoTheme, defaultMarkdownRenderer, defineFrescoPlugin, defineFrescoProvider, defineKeymap, formatFrescoDebugOverlay, inspectFrescoTree, kittyFlags, kittyModifiers, lastCompositionEvent, lastFocusEvent, lastKeyEvent, lastMouseEvent, lastPasteEvent, lastResizeEvent, measureElement, parseMarkdown, provideFocusScope, provideFrescoTheme, render, renderMarkdown, renderToString, resolveFrescoTheme, resolveKittyFlags, useAnimation, useApp, useBoxMetrics, useCursor, useFocus, useFocusManager, useFrescoTheme, useIme, useInput, useIsScreenReaderEnabled, useKeyPress, useKeymap, useMouse, usePaste, useStderr, useStdin, useStdout, useVirtualViewport, useWindowSize };
290
+ export { FrescoAlert_default as Alert, FrescoAvatar_default as Avatar, FrescoBadge_default as Badge, Box, FrescoBreadcrumb_default as Breadcrumb, FrescoCard_default as Card, Checkbox, Code, Confirm, Diff, FrescoDivider_default as Divider, FRESCO_THEME_KEY, Form, FrescoFrameBuffer_default as FrameBuffer, Grid, FrescoHStack_default as HStack, FrescoHeader_default as Header, KeyHint, LineNumber, FrescoLink_default as Link, List, FrescoMarkdown_default as Markdown, Menu, FrescoModal_default as Modal, FrescoNewline_default as Newline, FrescoPopover_default as Popover, ProgressBar, RadioGroup, ScrollBar_default as ScrollBar, ScrollBox_default as ScrollBox, Select, FrescoSlider_default as Slider, FrescoSpacer_default as Spacer, FrescoSpinner_default as Spinner, FrescoStack_default as Stack, FrescoStatic_default as Static, StatusBar, Stepper, Table, Tabs, Text, TextArea, TextInput, Timer, FrescoTooltip_default as Tooltip, FrescoTransform_default as Transform, Tree, FrescoVStack_default as VStack, createApp, createCodeBuffer, createFrescoDevtools, createKeymapResolver, createRenderer, createVirtualViewport, defaultFrescoTheme, defaultMarkdownRenderer, defineFrescoPlugin, defineFrescoProvider, defineKeymap, formatFrescoDebugOverlay, inspectFrescoTree, kittyFlags, kittyModifiers, lastCompositionEvent, lastFocusEvent, lastKeyEvent, lastMouseEvent, lastPasteEvent, lastResizeEvent, measureElement, parseMarkdown, provideFocusScope, provideFrescoTheme, render, renderMarkdown, renderToString, resolveFrescoTheme, resolveKittyFlags, useAnimation, useApp, useBoxMetrics, useCursor, useFocus, useFocusManager, useFrescoTheme, useIme, useInput, useIsScreenReaderEnabled, useKeyPress, useKeymap, useMouse, usePaste, useStderr, useStdin, useStdout, useVirtualViewport, useWindowSize };
291
291
 
292
292
  //# sourceMappingURL=index.mjs.map
@@ -26,6 +26,8 @@ type FrescoAlignContent = "flex-start" | "flex-end" | "start" | "end" | "center"
26
26
  interface FrescoCanonicalStyle<Dimension extends FrescoDimension = FrescoDimension> {
27
27
  display?: FrescoDisplay;
28
28
  position?: FrescoPosition;
29
+ /** Signed 32-bit paint and pointer-target order among siblings. Higher values are topmost. @default 0 */
30
+ zIndex?: number;
29
31
  top?: Dimension;
30
32
  right?: Dimension;
31
33
  bottom?: Dimension;
@@ -65,6 +67,7 @@ interface FrescoCanonicalStyle<Dimension extends FrescoDimension = FrescoDimensi
65
67
  }
66
68
  /** Compatibility aliases accepted by intrinsic host-node style bags. */
67
69
  interface FrescoSnakeStyleAliases<Dimension extends FrescoDimension = FrescoDimension> {
70
+ z_index?: number;
68
71
  overflow_x?: FrescoOverflow;
69
72
  overflow_y?: FrescoOverflow;
70
73
  flex_direction?: FrescoFlexDirection;
@@ -192,7 +195,7 @@ interface ResizeEvent {
192
195
  height: number;
193
196
  }
194
197
  /** Mouse transition or scroll direction reported by the terminal. */
195
- type FrescoMouseEventKind = "down" | "up" | "drag" | "moved" | "scroll-up" | "scroll-down" | "scroll-left" | "scroll-right";
198
+ type FrescoMouseEventKind = "down" | "up" | "drag" | "moved" | "enter" | "leave" | "scroll-up" | "scroll-down" | "scroll-left" | "scroll-right";
196
199
  /** Normalized mouse event exposed to components and composables. */
197
200
  interface MouseEvent {
198
201
  type: "mouse";
@@ -219,4 +222,4 @@ type FrescoInputEvent = StrictUnion<KeyEvent | PasteEvent | ResizeEvent | MouseE
219
222
  type InputEvent = FrescoInputEvent;
220
223
  //#endregion
221
224
  export { InputEvent as A, FrescoRenderNodeKind as C, FrescoStyle as D, FrescoSnakeStyleAliases as E, ResizeEvent as F, KeyEventType as M, MouseEvent as N, FrescoTextRenderNode as O, PasteEvent as P, FrescoRenderNode as S, FrescoRootRenderNode as T, FrescoModifiers as _, FrescoAlignSelf as a, FrescoPosition as b, FrescoBoxRenderNode as c, FrescoDisplay as d, FrescoFlexDirection as f, FrescoJustifyContent as g, FrescoInputRenderNode as h, FrescoAlignItems as i, KeyEvent as j, FrescoTextWrapMode as k, FrescoCanonicalStyle as l, FrescoInputEvent as m, FocusEvent as n, FrescoAppearance as o, FrescoFlexWrap as p, FrescoAlignContent as r, FrescoBorderStyle as s, CompositionEvent as t, FrescoDimension as u, FrescoMouseEventKind as v, FrescoRenderStyle as w, FrescoRawRenderNode as x, FrescoOverflow as y };
222
- //# sourceMappingURL=protocol-DavoeNLn.d.mts.map
225
+ //# sourceMappingURL=protocol-C1DHP36Z.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-C1DHP36Z.d.mts","names":[],"sources":["../src/protocol.ts"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { N as MouseEvent, S as FrescoRenderNode, j as KeyEvent } from "../protocol-DavoeNLn.mjs";
2
- import { i as FrescoElement, l as FrescoNode, m as createRenderer$1, n as AriaState, t as AriaRole, u as FrescoNodeLifecycleHooks } from "../accessibility-DwzT925M.mjs";
1
+ import { N as MouseEvent, S as FrescoRenderNode, j as KeyEvent } from "../protocol-C1DHP36Z.mjs";
2
+ import { i as FrescoElement, l as FrescoNode, m as createRenderer$1, n as AriaState, t as AriaRole, u as FrescoNodeLifecycleHooks } from "../accessibility-D7iuITvU.mjs";
3
3
  import { r as FocusManager, t as UseAppReturn } from "../useApp-vIRJ5Th3.mjs";
4
4
  import { App, Component, Ref, VNodeChild } from "vue";
5
5
 
@@ -101,6 +101,8 @@ type MouseInput = Omit<MouseEvent, "type">;
101
101
  interface FrescoFrameSnapshot {
102
102
  /** Plain terminal output projected from the current mounted tree. */
103
103
  output: string;
104
+ /** Deterministic semantic text exposed to assistive technology. */
105
+ screenReaderOutput: string;
104
106
  /** Serializable renderer tree for structural assertions. */
105
107
  tree: FrescoNodeSnapshot;
106
108
  /** Stable native protocol payload for assertions before crossing into Rust. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/testing/mount.ts","../../src/testing/queries.ts","../../src/testing/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/testing/mount.ts","../../src/testing/queries.ts","../../src/testing/index.ts"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { D as createFocusManager, E as FOCUS_KEY, M as createAppContext, P as SCREEN_READER_KEY, _ as CURSOR_KEY, a as lastMouseEvent, b as STREAMS_KEY, d as isStaticNode, f as createRenderer$1, i as lastKeyEvent, j as APP_KEY, n as lastCompositionEvent, o as lastPasteEvent, p as treeToRenderNodes, r as lastFocusEvent, s as lastResizeEvent, u as isStaticItemNode, v as createCursorContext, x as createStreamsContext } from "../app-C_wFlWSV.mjs";
1
+ import { D as createFocusManager, E as FOCUS_KEY, I as treeToScreenReaderString, M as createAppContext, P as SCREEN_READER_KEY, _ as CURSOR_KEY, a as lastMouseEvent, b as STREAMS_KEY, d as isStaticNode, f as createRenderer$1, i as lastKeyEvent, j as APP_KEY, n as lastCompositionEvent, o as lastPasteEvent, p as treeToRenderNodes, r as lastFocusEvent, s as lastResizeEvent, u as isStaticItemNode, v as createCursorContext, x as createStreamsContext } from "../app-CjfLCWic.mjs";
2
2
  import { h, nextTick, ref } from "vue";
3
3
  //#region src/testing/mount.ts
4
4
  /**
@@ -353,6 +353,7 @@ function renderTui(root, options = {}) {
353
353
  staticOutput = appendOutput(staticOutput, captureStaticOutput(mounted.root, renderedStaticItems));
354
354
  const snapshot = {
355
355
  output: renderFrame(mounted.root, staticOutput),
356
+ screenReaderOutput: treeToScreenReaderString(mounted.root),
356
357
  tree: toTreeSnapshot(mounted.root),
357
358
  protocolNodes: protocolSnapshot(mounted.root)
358
359
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["createRenderer"],"sources":["../../src/testing/mount.ts","../../src/testing/queries.ts","../../src/testing/index.ts"],"sourcesContent":["/**\n * Test-only mount harness for the Fresco JS layer.\n *\n * Fresco's renderer is pure JS up to the byte boundary that crosses into the\n * native module: `renderer.ts` imports only types from `@vizejs/fresco-native`,\n * and `app.ts` loads the native binding lazily and only in interactive mode.\n * This harness mounts components through the real custom renderer with the\n * same provide set `createApp`/`renderToString` install, so tests assert the\n * mounted `FrescoNode` output tree without a native build and without mocks.\n *\n * Not exported from the package entry points; `vp pack` does not ship it.\n */\n\nimport {\n h,\n ref,\n nextTick,\n type App as VueApp,\n type Component,\n type Ref,\n type VNodeChild,\n} from \"vue\";\nimport { SCREEN_READER_KEY } from \"../accessibility.js\";\nimport { lastKeyEvent, type KeyEvent } from \"../app.js\";\nimport { APP_KEY, createAppContext, type UseAppReturn } from \"../composables/useApp.js\";\nimport { createCursorContext, CURSOR_KEY } from \"../composables/useCursor.js\";\nimport { createFocusManager, FOCUS_KEY, type FocusManager } from \"../composables/useFocus.js\";\nimport { createStreamsContext, STREAMS_KEY } from \"../composables/useStreams.js\";\nimport {\n createRenderer,\n type FrescoElement,\n type FrescoNode,\n type FrescoNodeLifecycleHooks,\n} from \"../renderer.js\";\n\n/** Options for {@link mountFresco}. */\nexport interface MountFrescoOptions {\n /** Terminal width provided through the app context. Defaults to 80. */\n width?: number;\n /** Terminal height provided through the app context. Defaults to 24. */\n height?: number;\n /** Initial screen reader mode. Defaults to false. */\n screenReader?: boolean;\n /** Observe host-tree mutations that require a native frame. */\n onMutation?: () => void;\n /** Observe host-node lifecycle transitions. */\n lifecycle?: FrescoNodeLifecycleHooks;\n}\n\n/** A mounted Fresco component tree under test. */\nexport interface MountedFresco {\n /** Root element the Vue app mounted into; children form the output tree. */\n root: FrescoElement;\n /** The Vue app instance (for `provide`-level introspection if needed). */\n app: VueApp<FrescoElement>;\n /** App context provided to composables such as `useApp` and `useWindowSize`. */\n appContext: UseAppReturn;\n /** Focus manager provided to the tree, as the real app would. */\n focusManager: FocusManager;\n /** Screen reader flag provided to the tree; writable to flip modes. */\n screenReaderEnabled: Ref<boolean>;\n /** Renderer controls for stable lookup and recursive disposal. */\n renderer: ReturnType<typeof createRenderer>;\n /** Unmount the tree and dispose all component watchers. */\n unmount(): void;\n}\n\n/**\n * Mount a component (or a plain render function) through the Fresco renderer.\n *\n * The returned {@link MountedFresco.root} is live: re-read it after reactive\n * updates plus `await nextTick()` to observe the patched output tree.\n */\nexport function mountFresco(\n root: Component | (() => VNodeChild),\n options: MountFrescoOptions = {},\n): MountedFresco {\n const renderer = createRenderer({\n onMutation: options.onMutation,\n lifecycle: options.lifecycle,\n });\n const { createApp } = renderer;\n const component: Component = typeof root === \"function\" ? { setup: () => root } : root;\n const app = createApp(component);\n\n const focusManager = createFocusManager();\n const screenReaderEnabled = ref(options.screenReader ?? false);\n const noopWrite = () => {};\n const width = options.width ?? 80;\n const height = options.height ?? 24;\n // A detached stdout stand-in keeps createAppContext from attaching resize\n // listeners to the real process.stdout on every mounted test tree.\n const stdout = {\n isTTY: false,\n columns: width,\n rows: height,\n write: () => true,\n } as unknown as NodeJS.WriteStream;\n\n const appContext = createAppContext({ width, height, stdout });\n app.provide(APP_KEY, appContext);\n app.provide(FOCUS_KEY, focusManager);\n app.provide(SCREEN_READER_KEY, screenReaderEnabled);\n app.provide(CURSOR_KEY, createCursorContext(noopWrite));\n app.provide(\n STREAMS_KEY,\n createStreamsContext({\n interactive: false,\n writeToStdout: noopWrite,\n writeToStderr: noopWrite,\n }),\n );\n\n const rootElement: FrescoElement = {\n id: -1,\n type: \"root\",\n props: {},\n children: [],\n parent: null,\n };\n app.mount(rootElement);\n\n return {\n root: rootElement,\n app,\n appContext,\n focusManager,\n screenReaderEnabled,\n renderer,\n unmount: () => app.unmount(),\n };\n}\n\n/**\n * Dispatch a key event through the same `lastKeyEvent` ref the interactive\n * event loop writes, then wait for watchers to flush.\n *\n * Pass `char` for printable input or `key` for named keys (\"left\", \"enter\",\n * \"backspace\", ...). Modifiers default to false.\n */\nexport function dispatchKey(event: Partial<Omit<KeyEvent, \"type\">>): Promise<void> {\n lastKeyEvent.value = {\n type: \"key\",\n ctrl: false,\n alt: false,\n shift: false,\n meta: false,\n super: false,\n hyper: false,\n capsLock: false,\n numLock: false,\n ...event,\n };\n return nextTick();\n}\n\n/** Dispatch a sequence of printable characters via {@link dispatchKey}. */\nexport async function typeChars(text: string): Promise<void> {\n for (const char of text) {\n await dispatchKey({ char });\n }\n}\n\n/**\n * Serializable snapshot of a mounted output tree.\n *\n * Node ids come from a module-global counter and depend on mount order, and\n * `parent` back-references make trees cyclic, so both are omitted. Props are\n * kept only when defined, so snapshots stay inline-sized and deterministic.\n */\nexport interface FrescoNodeSnapshot {\n type: FrescoNode[\"type\"];\n text?: string;\n props?: Record<string, unknown>;\n children?: FrescoNodeSnapshot[];\n}\n\nfunction definedProps(props: Record<string, unknown>): Record<string, unknown> | undefined {\n const entries = Object.entries(props).filter(([, value]) => value !== undefined);\n if (entries.length === 0) return undefined;\n return Object.fromEntries(entries);\n}\n\n/**\n * Convert a mounted node (or the harness root) into a plain snapshot object\n * suitable for `assert.deepEqual` against an inline expected structure.\n */\nexport function toTreeSnapshot(node: FrescoNode): FrescoNodeSnapshot {\n const snapshot: FrescoNodeSnapshot = { type: node.type };\n if (node.text !== undefined) snapshot.text = node.text;\n const props = definedProps(node.props);\n if (props) snapshot.props = props;\n if (node.children.length > 0) {\n snapshot.children = node.children.map((child) => toTreeSnapshot(child));\n }\n return snapshot;\n}\n\n/** Depth-first list of nodes matching a predicate, starting at `node`. */\nexport function findNodes(\n node: FrescoNode,\n predicate: (candidate: FrescoNode) => boolean,\n): FrescoNode[] {\n const matches: FrescoNode[] = [];\n const visit = (current: FrescoNode) => {\n if (predicate(current)) matches.push(current);\n for (const child of current.children) visit(child);\n };\n visit(node);\n return matches;\n}\n\n/** First mounted child under the harness root, asserting it exists. */\nexport function firstChild(mounted: MountedFresco): FrescoNode {\n const child = mounted.root.children[0];\n if (!child) throw new Error(\"expected the mounted tree to have a root child\");\n return child;\n}\n\n/** Convenience wrapper that renders `component` with `h` and mounts it. */\nexport function mountComponent(\n component: Component,\n props: Record<string, unknown> = {},\n slot?: () => VNodeChild,\n options: MountFrescoOptions = {},\n): MountedFresco {\n return mountFresco(() => h(component, props, slot), options);\n}\n","import type { AriaRole, AriaState } from \"../accessibility.js\";\nimport type { FrescoNode } from \"../renderer.js\";\nimport { findNodes } from \"./mount.js\";\n\nexport type FrescoTextMatcher = string | RegExp;\n\nexport interface FrescoRoleQueryOptions {\n readonly name?: FrescoTextMatcher;\n readonly description?: FrescoTextMatcher;\n readonly state?: AriaState;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n return undefined;\n}\n\nfunction ownText(node: FrescoNode): string | undefined {\n if (node.text !== undefined) return node.text;\n const propText = node.props.text ?? node.props.content;\n if (typeof propText === \"string\" || typeof propText === \"number\") return String(propText);\n\n if (node.type === \"input\") {\n const value = node.props.value;\n const placeholder = node.props.placeholder;\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n if (typeof placeholder === \"string\" || typeof placeholder === \"number\")\n return String(placeholder);\n }\n\n return undefined;\n}\n\nfunction accessibleName(node: FrescoNode): string {\n const ariaLabel = stringValue(node.props[\"aria-label\"]);\n if (ariaLabel !== undefined) return ariaLabel;\n\n const text = ownText(node);\n if (text !== undefined) return text;\n\n return node.children\n .map((child) => accessibleName(child))\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction accessibleDescription(node: FrescoNode): string | undefined {\n return stringValue(\n node.props[\"aria-description\"] ?? node.props.ariaDescription ?? node.props.description,\n );\n}\n\nfunction matchesText(text: string, matcher: FrescoTextMatcher): boolean {\n if (typeof matcher === \"string\") return text === matcher;\n matcher.lastIndex = 0;\n return matcher.test(text);\n}\n\nfunction roleOf(node: FrescoNode): AriaRole | undefined {\n return stringValue(node.props[\"aria-role\"]) as AriaRole | undefined;\n}\n\nfunction testIdOf(node: FrescoNode): string | undefined {\n return stringValue(node.props[\"test-id\"] ?? node.props[\"data-testid\"]);\n}\n\nfunction stateOf(node: FrescoNode): AriaState {\n const state = node.props[\"aria-state\"];\n return state && typeof state === \"object\" ? (state as AriaState) : {};\n}\n\nfunction matchesState(node: FrescoNode, expected: AriaState | undefined): boolean {\n if (expected === undefined) return true;\n const actual = stateOf(node);\n return Object.entries(expected).every(([key, value]) => actual[key as keyof AriaState] === value);\n}\n\nfunction describeRole(role: AriaRole, options: FrescoRoleQueryOptions): string {\n const parts = [`role ${JSON.stringify(role)}`];\n if (options.name !== undefined) parts.push(`name ${String(options.name)}`);\n if (options.description !== undefined) parts.push(`description ${String(options.description)}`);\n if (options.state !== undefined) parts.push(`state ${JSON.stringify(options.state)}`);\n return parts.join(\", \");\n}\n\nfunction uniqueNode(nodes: readonly FrescoNode[], description: string): FrescoNode {\n if (nodes.length === 0) throw new Error(`Unable to find Fresco node with ${description}`);\n if (nodes.length > 1) throw new Error(`Found ${nodes.length} Fresco nodes with ${description}`);\n return nodes[0]!;\n}\n\nexport function queryAllByRole(\n root: FrescoNode,\n role: AriaRole,\n options: FrescoRoleQueryOptions = {},\n): FrescoNode[] {\n return findNodes(root, (node) => {\n if (roleOf(node) !== role) return false;\n if (options.name !== undefined && !matchesText(accessibleName(node), options.name))\n return false;\n if (\n options.description !== undefined &&\n !matchesText(accessibleDescription(node) ?? \"\", options.description)\n )\n return false;\n return matchesState(node, options.state);\n });\n}\n\nexport function getByRole(\n root: FrescoNode,\n role: AriaRole,\n options: FrescoRoleQueryOptions = {},\n): FrescoNode {\n return uniqueNode(queryAllByRole(root, role, options), describeRole(role, options));\n}\n\nexport function queryAllByText(root: FrescoNode, text: FrescoTextMatcher): FrescoNode[] {\n return findNodes(root, (node) => {\n const value = ownText(node);\n return value !== undefined && matchesText(value, text);\n });\n}\n\nexport function getByText(root: FrescoNode, text: FrescoTextMatcher): FrescoNode {\n return uniqueNode(queryAllByText(root, text), `text ${String(text)}`);\n}\n\nexport function queryAllByDescription(\n root: FrescoNode,\n description: FrescoTextMatcher,\n): FrescoNode[] {\n return findNodes(root, (node) => {\n const value = accessibleDescription(node);\n return value !== undefined && matchesText(value, description);\n });\n}\n\nexport function getByDescription(root: FrescoNode, description: FrescoTextMatcher): FrescoNode {\n return uniqueNode(queryAllByDescription(root, description), `description ${String(description)}`);\n}\n\nexport function queryAllByTestId(root: FrescoNode, testId: string): FrescoNode[] {\n return findNodes(root, (node) => testIdOf(node) === testId);\n}\n\nexport function getByTestId(root: FrescoNode, testId: string): FrescoNode {\n return uniqueNode(queryAllByTestId(root, testId), `test id ${JSON.stringify(testId)}`);\n}\n","/**\n * Test utilities for Fresco component and app behavior.\n *\n * The harness mounts through the real Vue custom renderer and records frames\n * without loading the native terminal binding, so it is safe in plain Node,\n * Vitest, and `node:test` suites.\n */\n\nimport { nextTick, type Component, type VNodeChild } from \"vue\";\nimport {\n lastCompositionEvent,\n lastFocusEvent,\n lastMouseEvent,\n lastPasteEvent,\n lastResizeEvent,\n type CompositionEvent,\n type FocusEvent,\n type KeyEvent,\n type MouseEvent,\n type PasteEvent,\n type ResizeEvent,\n} from \"../app.js\";\nimport type { FrescoNode } from \"../renderer.js\";\nimport {\n dispatchKey,\n mountFresco,\n toTreeSnapshot,\n type FrescoNodeSnapshot,\n type MountedFresco,\n type MountFrescoOptions,\n} from \"./mount.js\";\nimport { treeToRenderNodes } from \"../renderer.js\";\nimport { isStaticItemNode, isStaticNode } from \"../staticNodes.js\";\nimport type { FrescoRenderNode } from \"../protocol.js\";\n\nexport {\n dispatchKey,\n findNodes,\n firstChild,\n mountComponent,\n mountFresco,\n toTreeSnapshot,\n typeChars,\n type FrescoNodeSnapshot,\n type MountedFresco,\n type MountFrescoOptions,\n} from \"./mount.js\";\nexport {\n getByDescription,\n getByRole,\n getByTestId,\n getByText,\n queryAllByDescription,\n queryAllByRole,\n queryAllByTestId,\n queryAllByText,\n type FrescoRoleQueryOptions,\n type FrescoTextMatcher,\n} from \"./queries.js\";\nexport type { FrescoRenderNode } from \"../protocol.js\";\n\nexport type RenderTuiOptions = MountFrescoOptions;\nexport type RenderTuiRoot = Component | (() => VNodeChild);\nexport type KeyInput = Partial<Omit<KeyEvent, \"type\">>;\nexport type MouseInput = Omit<MouseEvent, \"type\">;\n\n/** A single recorded harness frame. */\nexport interface FrescoFrameSnapshot {\n /** Plain terminal output projected from the current mounted tree. */\n output: string;\n /** Serializable renderer tree for structural assertions. */\n tree: FrescoNodeSnapshot;\n /** Stable native protocol payload for assertions before crossing into Rust. */\n protocolNodes: readonly FrescoRenderNode[];\n}\n\n/** Input driver that injects events through Fresco's public event refs. */\nexport interface FrescoInputDriver {\n /** Dispatch a key event and record the resulting frame. */\n key(event: KeyInput): Promise<FrescoFrameSnapshot>;\n /** Dispatch each printable character and record one frame after the text. */\n text(text: string): Promise<FrescoFrameSnapshot>;\n /** Dispatch a bracketed paste payload and record the resulting frame. */\n paste(text: string): Promise<FrescoFrameSnapshot>;\n /** Update the provided app size, dispatch a resize event, and record a frame. */\n resize(width: number, height: number): Promise<FrescoFrameSnapshot>;\n /** Dispatch a mouse event and record the resulting frame. */\n mouse(event: MouseInput): Promise<FrescoFrameSnapshot>;\n /** Dispatch terminal focus state and record the resulting frame. */\n focus(focused: boolean): Promise<FrescoFrameSnapshot>;\n /** Dispatch a composition start event and record the resulting frame. */\n compositionStart(text?: string, cursor?: number): Promise<FrescoFrameSnapshot>;\n /** Dispatch a composition update event and record the resulting frame. */\n compositionUpdate(text: string, cursor: number): Promise<FrescoFrameSnapshot>;\n /** Dispatch a composition end event and record the resulting frame. */\n compositionEnd(text: string, cursor?: number): Promise<FrescoFrameSnapshot>;\n}\n\n/** Mounted TUI harness with frame history and input helpers. */\nexport interface RenderTuiResult extends MountedFresco {\n /** Recorded plain frames, including the initial mount frame. */\n readonly frames: readonly string[];\n /** Recorded frame snapshots, including the initial mount frame. */\n readonly frameSnapshots: readonly FrescoFrameSnapshot[];\n /** Event injection helpers. */\n readonly input: FrescoInputDriver;\n /** Record and return a fresh snapshot of the current mounted tree. */\n captureFrame(): FrescoFrameSnapshot;\n /** Return the latest recorded plain frame. */\n lastFrame(): string;\n /** Return the latest recorded frame snapshot. */\n frameSnapshot(): FrescoFrameSnapshot;\n}\n\nfunction nodeText(node: FrescoNode): string {\n if (node.text !== undefined) return node.text;\n const propText = node.props.text ?? node.props.content;\n if (typeof propText === \"string\" || typeof propText === \"number\") return String(propText);\n if (node.type !== \"input\") return \"\";\n\n const value = node.props.value;\n const placeholder = node.props.placeholder;\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n if (typeof placeholder === \"string\" || typeof placeholder === \"number\")\n return String(placeholder);\n return \"\";\n}\n\nfunction joinOutput(parts: readonly string[], separator = \"\\n\"): string {\n return parts.filter(Boolean).join(separator);\n}\n\nfunction normalizeOutput(output: string): string {\n return output.endsWith(\"\\n\") ? output.slice(0, -1) : output;\n}\n\nfunction appendOutput(previous: string, next: string): string {\n const normalized = normalizeOutput(next);\n if (!normalized) return previous;\n return previous ? `${previous}\\n${normalized}` : normalized;\n}\n\nfunction treeToFrameOutput(node: FrescoNode, options: { skipStatic?: boolean } = {}): string {\n if (options.skipStatic && isStaticNode(node)) return \"\";\n\n const ownText = nodeText(node);\n const childOutput = node.children.map((child) => treeToFrameOutput(child, options));\n\n if (node.type === \"text\" || node.type === \"input\") {\n return `${ownText}${childOutput.join(\"\")}`;\n }\n\n const style = (node.props.style ?? {}) as Record<string, unknown>;\n const flexDirection = style.flexDirection ?? style.flex_direction;\n const separator = flexDirection === \"column\" ? \"\\n\" : \"\";\n return joinOutput(childOutput, separator);\n}\n\nfunction captureStaticOutput(node: FrescoNode, renderedStaticItems: Map<number, number>): string {\n const output: string[] = [];\n\n const visit = (current: FrescoNode) => {\n if (isStaticNode(current)) {\n const renderedItems = renderedStaticItems.get(current.id) ?? 0;\n const staticItems = current.children.filter(isStaticItemNode);\n const nextItems = staticItems.slice(renderedItems);\n const nextOutput = joinOutput(\n nextItems.map((child) => treeToFrameOutput(child)),\n \"\\n\",\n );\n if (nextOutput) output.push(nextOutput);\n renderedStaticItems.set(current.id, staticItems.length);\n return;\n }\n\n for (const child of current.children) visit(child);\n };\n\n visit(node);\n return joinOutput(output, \"\\n\");\n}\n\nfunction renderFrame(root: FrescoNode, staticOutput: string): string {\n return joinOutput([staticOutput, treeToFrameOutput(root, { skipStatic: true })], \"\\n\");\n}\n\nfunction latestSnapshot(snapshots: readonly FrescoFrameSnapshot[]): FrescoFrameSnapshot {\n const snapshot = snapshots[snapshots.length - 1];\n if (!snapshot) throw new Error(\"expected renderTui to record an initial frame\");\n return snapshot;\n}\n\nfunction protocolSnapshot(root: FrescoNode): FrescoRenderNode[] {\n const nodes = treeToRenderNodes(root);\n const ids = new Map(nodes.map((node, index) => [node.id, index - 1]));\n return nodes.map((node) => {\n const id = ids.get(node.id) ?? node.id;\n const children = node.children?.map((child) => ids.get(child) ?? child);\n return (\n children === undefined ? { ...node, id } : { ...node, id, children }\n ) as FrescoRenderNode;\n });\n}\n\nasync function dispatchPaste(text: string): Promise<void> {\n const event: PasteEvent = { type: \"paste\", text };\n lastPasteEvent.value = event;\n await nextTick();\n}\n\nasync function dispatchMouse(event: MouseInput): Promise<void> {\n lastMouseEvent.value = { type: \"mouse\", ...event };\n await nextTick();\n}\n\nasync function dispatchFocus(focused: boolean): Promise<void> {\n const event: FocusEvent = { type: \"focus\", focused };\n lastFocusEvent.value = event;\n await nextTick();\n}\n\nasync function dispatchComposition(\n type: CompositionEvent[\"type\"],\n text: string,\n cursor: number,\n): Promise<void> {\n lastCompositionEvent.value = { type, text, cursor };\n await nextTick();\n}\n\nasync function dispatchResize(\n mounted: MountedFresco,\n width: number,\n height: number,\n): Promise<void> {\n const event: ResizeEvent = { type: \"resize\", width, height };\n lastResizeEvent.value = event;\n mounted.appContext.width.value = width;\n mounted.appContext.height.value = height;\n await nextTick();\n}\n\n/** Mount a Fresco app for tests with frame snapshots and input injection. */\nexport function renderTui(root: RenderTuiRoot, options: RenderTuiOptions = {}): RenderTuiResult {\n const mounted = mountFresco(root, options);\n const frames: string[] = [];\n const frameSnapshots: FrescoFrameSnapshot[] = [];\n const renderedStaticItems = new Map<number, number>();\n let staticOutput = \"\";\n\n const captureFrame = () => {\n staticOutput = appendOutput(\n staticOutput,\n captureStaticOutput(mounted.root, renderedStaticItems),\n );\n const snapshot: FrescoFrameSnapshot = {\n output: renderFrame(mounted.root, staticOutput),\n tree: toTreeSnapshot(mounted.root),\n protocolNodes: protocolSnapshot(mounted.root),\n };\n frames.push(snapshot.output);\n frameSnapshots.push(snapshot);\n return snapshot;\n };\n\n const recordAfter = async (dispatch: Promise<void>) => {\n await dispatch;\n return captureFrame();\n };\n\n const input: FrescoInputDriver = {\n key: (event) => recordAfter(dispatchKey(event)),\n async text(text) {\n for (const char of text) {\n await dispatchKey({ char });\n }\n return captureFrame();\n },\n paste: (text) => recordAfter(dispatchPaste(text)),\n resize: (width, height) => recordAfter(dispatchResize(mounted, width, height)),\n mouse: (event) => recordAfter(dispatchMouse(event)),\n focus: (focused) => recordAfter(dispatchFocus(focused)),\n compositionStart: (text = \"\", cursor = 0) =>\n recordAfter(dispatchComposition(\"compositionstart\", text, cursor)),\n compositionUpdate: (text, cursor) =>\n recordAfter(dispatchComposition(\"compositionupdate\", text, cursor)),\n compositionEnd: (text, cursor = text.length) =>\n recordAfter(dispatchComposition(\"compositionend\", text, cursor)),\n };\n\n captureFrame();\n\n return {\n ...mounted,\n frames,\n frameSnapshots,\n input,\n captureFrame,\n lastFrame: () => latestSnapshot(frameSnapshots).output,\n frameSnapshot: () => latestSnapshot(frameSnapshots),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["createRenderer"],"sources":["../../src/testing/mount.ts","../../src/testing/queries.ts","../../src/testing/index.ts"],"sourcesContent":["/**\n * Test-only mount harness for the Fresco JS layer.\n *\n * Fresco's renderer is pure JS up to the byte boundary that crosses into the\n * native module: `renderer.ts` imports only types from `@vizejs/fresco-native`,\n * and `app.ts` loads the native binding lazily and only in interactive mode.\n * This harness mounts components through the real custom renderer with the\n * same provide set `createApp`/`renderToString` install, so tests assert the\n * mounted `FrescoNode` output tree without a native build and without mocks.\n *\n * Not exported from the package entry points; `vp pack` does not ship it.\n */\n\nimport {\n h,\n ref,\n nextTick,\n type App as VueApp,\n type Component,\n type Ref,\n type VNodeChild,\n} from \"vue\";\nimport { SCREEN_READER_KEY } from \"../accessibility.js\";\nimport { lastKeyEvent, type KeyEvent } from \"../app.js\";\nimport { APP_KEY, createAppContext, type UseAppReturn } from \"../composables/useApp.js\";\nimport { createCursorContext, CURSOR_KEY } from \"../composables/useCursor.js\";\nimport { createFocusManager, FOCUS_KEY, type FocusManager } from \"../composables/useFocus.js\";\nimport { createStreamsContext, STREAMS_KEY } from \"../composables/useStreams.js\";\nimport {\n createRenderer,\n type FrescoElement,\n type FrescoNode,\n type FrescoNodeLifecycleHooks,\n} from \"../renderer.js\";\n\n/** Options for {@link mountFresco}. */\nexport interface MountFrescoOptions {\n /** Terminal width provided through the app context. Defaults to 80. */\n width?: number;\n /** Terminal height provided through the app context. Defaults to 24. */\n height?: number;\n /** Initial screen reader mode. Defaults to false. */\n screenReader?: boolean;\n /** Observe host-tree mutations that require a native frame. */\n onMutation?: () => void;\n /** Observe host-node lifecycle transitions. */\n lifecycle?: FrescoNodeLifecycleHooks;\n}\n\n/** A mounted Fresco component tree under test. */\nexport interface MountedFresco {\n /** Root element the Vue app mounted into; children form the output tree. */\n root: FrescoElement;\n /** The Vue app instance (for `provide`-level introspection if needed). */\n app: VueApp<FrescoElement>;\n /** App context provided to composables such as `useApp` and `useWindowSize`. */\n appContext: UseAppReturn;\n /** Focus manager provided to the tree, as the real app would. */\n focusManager: FocusManager;\n /** Screen reader flag provided to the tree; writable to flip modes. */\n screenReaderEnabled: Ref<boolean>;\n /** Renderer controls for stable lookup and recursive disposal. */\n renderer: ReturnType<typeof createRenderer>;\n /** Unmount the tree and dispose all component watchers. */\n unmount(): void;\n}\n\n/**\n * Mount a component (or a plain render function) through the Fresco renderer.\n *\n * The returned {@link MountedFresco.root} is live: re-read it after reactive\n * updates plus `await nextTick()` to observe the patched output tree.\n */\nexport function mountFresco(\n root: Component | (() => VNodeChild),\n options: MountFrescoOptions = {},\n): MountedFresco {\n const renderer = createRenderer({\n onMutation: options.onMutation,\n lifecycle: options.lifecycle,\n });\n const { createApp } = renderer;\n const component: Component = typeof root === \"function\" ? { setup: () => root } : root;\n const app = createApp(component);\n\n const focusManager = createFocusManager();\n const screenReaderEnabled = ref(options.screenReader ?? false);\n const noopWrite = () => {};\n const width = options.width ?? 80;\n const height = options.height ?? 24;\n // A detached stdout stand-in keeps createAppContext from attaching resize\n // listeners to the real process.stdout on every mounted test tree.\n const stdout = {\n isTTY: false,\n columns: width,\n rows: height,\n write: () => true,\n } as unknown as NodeJS.WriteStream;\n\n const appContext = createAppContext({ width, height, stdout });\n app.provide(APP_KEY, appContext);\n app.provide(FOCUS_KEY, focusManager);\n app.provide(SCREEN_READER_KEY, screenReaderEnabled);\n app.provide(CURSOR_KEY, createCursorContext(noopWrite));\n app.provide(\n STREAMS_KEY,\n createStreamsContext({\n interactive: false,\n writeToStdout: noopWrite,\n writeToStderr: noopWrite,\n }),\n );\n\n const rootElement: FrescoElement = {\n id: -1,\n type: \"root\",\n props: {},\n children: [],\n parent: null,\n };\n app.mount(rootElement);\n\n return {\n root: rootElement,\n app,\n appContext,\n focusManager,\n screenReaderEnabled,\n renderer,\n unmount: () => app.unmount(),\n };\n}\n\n/**\n * Dispatch a key event through the same `lastKeyEvent` ref the interactive\n * event loop writes, then wait for watchers to flush.\n *\n * Pass `char` for printable input or `key` for named keys (\"left\", \"enter\",\n * \"backspace\", ...). Modifiers default to false.\n */\nexport function dispatchKey(event: Partial<Omit<KeyEvent, \"type\">>): Promise<void> {\n lastKeyEvent.value = {\n type: \"key\",\n ctrl: false,\n alt: false,\n shift: false,\n meta: false,\n super: false,\n hyper: false,\n capsLock: false,\n numLock: false,\n ...event,\n };\n return nextTick();\n}\n\n/** Dispatch a sequence of printable characters via {@link dispatchKey}. */\nexport async function typeChars(text: string): Promise<void> {\n for (const char of text) {\n await dispatchKey({ char });\n }\n}\n\n/**\n * Serializable snapshot of a mounted output tree.\n *\n * Node ids come from a module-global counter and depend on mount order, and\n * `parent` back-references make trees cyclic, so both are omitted. Props are\n * kept only when defined, so snapshots stay inline-sized and deterministic.\n */\nexport interface FrescoNodeSnapshot {\n type: FrescoNode[\"type\"];\n text?: string;\n props?: Record<string, unknown>;\n children?: FrescoNodeSnapshot[];\n}\n\nfunction definedProps(props: Record<string, unknown>): Record<string, unknown> | undefined {\n const entries = Object.entries(props).filter(([, value]) => value !== undefined);\n if (entries.length === 0) return undefined;\n return Object.fromEntries(entries);\n}\n\n/**\n * Convert a mounted node (or the harness root) into a plain snapshot object\n * suitable for `assert.deepEqual` against an inline expected structure.\n */\nexport function toTreeSnapshot(node: FrescoNode): FrescoNodeSnapshot {\n const snapshot: FrescoNodeSnapshot = { type: node.type };\n if (node.text !== undefined) snapshot.text = node.text;\n const props = definedProps(node.props);\n if (props) snapshot.props = props;\n if (node.children.length > 0) {\n snapshot.children = node.children.map((child) => toTreeSnapshot(child));\n }\n return snapshot;\n}\n\n/** Depth-first list of nodes matching a predicate, starting at `node`. */\nexport function findNodes(\n node: FrescoNode,\n predicate: (candidate: FrescoNode) => boolean,\n): FrescoNode[] {\n const matches: FrescoNode[] = [];\n const visit = (current: FrescoNode) => {\n if (predicate(current)) matches.push(current);\n for (const child of current.children) visit(child);\n };\n visit(node);\n return matches;\n}\n\n/** First mounted child under the harness root, asserting it exists. */\nexport function firstChild(mounted: MountedFresco): FrescoNode {\n const child = mounted.root.children[0];\n if (!child) throw new Error(\"expected the mounted tree to have a root child\");\n return child;\n}\n\n/** Convenience wrapper that renders `component` with `h` and mounts it. */\nexport function mountComponent(\n component: Component,\n props: Record<string, unknown> = {},\n slot?: () => VNodeChild,\n options: MountFrescoOptions = {},\n): MountedFresco {\n return mountFresco(() => h(component, props, slot), options);\n}\n","import type { AriaRole, AriaState } from \"../accessibility.js\";\nimport type { FrescoNode } from \"../renderer.js\";\nimport { findNodes } from \"./mount.js\";\n\nexport type FrescoTextMatcher = string | RegExp;\n\nexport interface FrescoRoleQueryOptions {\n readonly name?: FrescoTextMatcher;\n readonly description?: FrescoTextMatcher;\n readonly state?: AriaState;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n return undefined;\n}\n\nfunction ownText(node: FrescoNode): string | undefined {\n if (node.text !== undefined) return node.text;\n const propText = node.props.text ?? node.props.content;\n if (typeof propText === \"string\" || typeof propText === \"number\") return String(propText);\n\n if (node.type === \"input\") {\n const value = node.props.value;\n const placeholder = node.props.placeholder;\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n if (typeof placeholder === \"string\" || typeof placeholder === \"number\")\n return String(placeholder);\n }\n\n return undefined;\n}\n\nfunction accessibleName(node: FrescoNode): string {\n const ariaLabel = stringValue(node.props[\"aria-label\"]);\n if (ariaLabel !== undefined) return ariaLabel;\n\n const text = ownText(node);\n if (text !== undefined) return text;\n\n return node.children\n .map((child) => accessibleName(child))\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction accessibleDescription(node: FrescoNode): string | undefined {\n return stringValue(\n node.props[\"aria-description\"] ?? node.props.ariaDescription ?? node.props.description,\n );\n}\n\nfunction matchesText(text: string, matcher: FrescoTextMatcher): boolean {\n if (typeof matcher === \"string\") return text === matcher;\n matcher.lastIndex = 0;\n return matcher.test(text);\n}\n\nfunction roleOf(node: FrescoNode): AriaRole | undefined {\n return stringValue(node.props[\"aria-role\"]) as AriaRole | undefined;\n}\n\nfunction testIdOf(node: FrescoNode): string | undefined {\n return stringValue(node.props[\"test-id\"] ?? node.props[\"data-testid\"]);\n}\n\nfunction stateOf(node: FrescoNode): AriaState {\n const state = node.props[\"aria-state\"];\n return state && typeof state === \"object\" ? (state as AriaState) : {};\n}\n\nfunction matchesState(node: FrescoNode, expected: AriaState | undefined): boolean {\n if (expected === undefined) return true;\n const actual = stateOf(node);\n return Object.entries(expected).every(([key, value]) => actual[key as keyof AriaState] === value);\n}\n\nfunction describeRole(role: AriaRole, options: FrescoRoleQueryOptions): string {\n const parts = [`role ${JSON.stringify(role)}`];\n if (options.name !== undefined) parts.push(`name ${String(options.name)}`);\n if (options.description !== undefined) parts.push(`description ${String(options.description)}`);\n if (options.state !== undefined) parts.push(`state ${JSON.stringify(options.state)}`);\n return parts.join(\", \");\n}\n\nfunction uniqueNode(nodes: readonly FrescoNode[], description: string): FrescoNode {\n if (nodes.length === 0) throw new Error(`Unable to find Fresco node with ${description}`);\n if (nodes.length > 1) throw new Error(`Found ${nodes.length} Fresco nodes with ${description}`);\n return nodes[0]!;\n}\n\nexport function queryAllByRole(\n root: FrescoNode,\n role: AriaRole,\n options: FrescoRoleQueryOptions = {},\n): FrescoNode[] {\n return findNodes(root, (node) => {\n if (roleOf(node) !== role) return false;\n if (options.name !== undefined && !matchesText(accessibleName(node), options.name))\n return false;\n if (\n options.description !== undefined &&\n !matchesText(accessibleDescription(node) ?? \"\", options.description)\n )\n return false;\n return matchesState(node, options.state);\n });\n}\n\nexport function getByRole(\n root: FrescoNode,\n role: AriaRole,\n options: FrescoRoleQueryOptions = {},\n): FrescoNode {\n return uniqueNode(queryAllByRole(root, role, options), describeRole(role, options));\n}\n\nexport function queryAllByText(root: FrescoNode, text: FrescoTextMatcher): FrescoNode[] {\n return findNodes(root, (node) => {\n const value = ownText(node);\n return value !== undefined && matchesText(value, text);\n });\n}\n\nexport function getByText(root: FrescoNode, text: FrescoTextMatcher): FrescoNode {\n return uniqueNode(queryAllByText(root, text), `text ${String(text)}`);\n}\n\nexport function queryAllByDescription(\n root: FrescoNode,\n description: FrescoTextMatcher,\n): FrescoNode[] {\n return findNodes(root, (node) => {\n const value = accessibleDescription(node);\n return value !== undefined && matchesText(value, description);\n });\n}\n\nexport function getByDescription(root: FrescoNode, description: FrescoTextMatcher): FrescoNode {\n return uniqueNode(queryAllByDescription(root, description), `description ${String(description)}`);\n}\n\nexport function queryAllByTestId(root: FrescoNode, testId: string): FrescoNode[] {\n return findNodes(root, (node) => testIdOf(node) === testId);\n}\n\nexport function getByTestId(root: FrescoNode, testId: string): FrescoNode {\n return uniqueNode(queryAllByTestId(root, testId), `test id ${JSON.stringify(testId)}`);\n}\n","/**\n * Test utilities for Fresco component and app behavior.\n *\n * The harness mounts through the real Vue custom renderer and records frames\n * without loading the native terminal binding, so it is safe in plain Node,\n * Vitest, and `node:test` suites.\n */\n\nimport { nextTick, type Component, type VNodeChild } from \"vue\";\nimport {\n lastCompositionEvent,\n lastFocusEvent,\n lastMouseEvent,\n lastPasteEvent,\n lastResizeEvent,\n type CompositionEvent,\n type FocusEvent,\n type KeyEvent,\n type MouseEvent,\n type PasteEvent,\n type ResizeEvent,\n} from \"../app.js\";\nimport { treeToScreenReaderString } from \"../accessibility.js\";\nimport type { FrescoNode } from \"../renderer.js\";\nimport {\n dispatchKey,\n mountFresco,\n toTreeSnapshot,\n type FrescoNodeSnapshot,\n type MountedFresco,\n type MountFrescoOptions,\n} from \"./mount.js\";\nimport { treeToRenderNodes } from \"../renderer.js\";\nimport { isStaticItemNode, isStaticNode } from \"../staticNodes.js\";\nimport type { FrescoRenderNode } from \"../protocol.js\";\n\nexport {\n dispatchKey,\n findNodes,\n firstChild,\n mountComponent,\n mountFresco,\n toTreeSnapshot,\n typeChars,\n type FrescoNodeSnapshot,\n type MountedFresco,\n type MountFrescoOptions,\n} from \"./mount.js\";\nexport {\n getByDescription,\n getByRole,\n getByTestId,\n getByText,\n queryAllByDescription,\n queryAllByRole,\n queryAllByTestId,\n queryAllByText,\n type FrescoRoleQueryOptions,\n type FrescoTextMatcher,\n} from \"./queries.js\";\nexport type { FrescoRenderNode } from \"../protocol.js\";\n\nexport type RenderTuiOptions = MountFrescoOptions;\nexport type RenderTuiRoot = Component | (() => VNodeChild);\nexport type KeyInput = Partial<Omit<KeyEvent, \"type\">>;\nexport type MouseInput = Omit<MouseEvent, \"type\">;\n\n/** A single recorded harness frame. */\nexport interface FrescoFrameSnapshot {\n /** Plain terminal output projected from the current mounted tree. */\n output: string;\n /** Deterministic semantic text exposed to assistive technology. */\n screenReaderOutput: string;\n /** Serializable renderer tree for structural assertions. */\n tree: FrescoNodeSnapshot;\n /** Stable native protocol payload for assertions before crossing into Rust. */\n protocolNodes: readonly FrescoRenderNode[];\n}\n\n/** Input driver that injects events through Fresco's public event refs. */\nexport interface FrescoInputDriver {\n /** Dispatch a key event and record the resulting frame. */\n key(event: KeyInput): Promise<FrescoFrameSnapshot>;\n /** Dispatch each printable character and record one frame after the text. */\n text(text: string): Promise<FrescoFrameSnapshot>;\n /** Dispatch a bracketed paste payload and record the resulting frame. */\n paste(text: string): Promise<FrescoFrameSnapshot>;\n /** Update the provided app size, dispatch a resize event, and record a frame. */\n resize(width: number, height: number): Promise<FrescoFrameSnapshot>;\n /** Dispatch a mouse event and record the resulting frame. */\n mouse(event: MouseInput): Promise<FrescoFrameSnapshot>;\n /** Dispatch terminal focus state and record the resulting frame. */\n focus(focused: boolean): Promise<FrescoFrameSnapshot>;\n /** Dispatch a composition start event and record the resulting frame. */\n compositionStart(text?: string, cursor?: number): Promise<FrescoFrameSnapshot>;\n /** Dispatch a composition update event and record the resulting frame. */\n compositionUpdate(text: string, cursor: number): Promise<FrescoFrameSnapshot>;\n /** Dispatch a composition end event and record the resulting frame. */\n compositionEnd(text: string, cursor?: number): Promise<FrescoFrameSnapshot>;\n}\n\n/** Mounted TUI harness with frame history and input helpers. */\nexport interface RenderTuiResult extends MountedFresco {\n /** Recorded plain frames, including the initial mount frame. */\n readonly frames: readonly string[];\n /** Recorded frame snapshots, including the initial mount frame. */\n readonly frameSnapshots: readonly FrescoFrameSnapshot[];\n /** Event injection helpers. */\n readonly input: FrescoInputDriver;\n /** Record and return a fresh snapshot of the current mounted tree. */\n captureFrame(): FrescoFrameSnapshot;\n /** Return the latest recorded plain frame. */\n lastFrame(): string;\n /** Return the latest recorded frame snapshot. */\n frameSnapshot(): FrescoFrameSnapshot;\n}\n\nfunction nodeText(node: FrescoNode): string {\n if (node.text !== undefined) return node.text;\n const propText = node.props.text ?? node.props.content;\n if (typeof propText === \"string\" || typeof propText === \"number\") return String(propText);\n if (node.type !== \"input\") return \"\";\n\n const value = node.props.value;\n const placeholder = node.props.placeholder;\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n if (typeof placeholder === \"string\" || typeof placeholder === \"number\")\n return String(placeholder);\n return \"\";\n}\n\nfunction joinOutput(parts: readonly string[], separator = \"\\n\"): string {\n return parts.filter(Boolean).join(separator);\n}\n\nfunction normalizeOutput(output: string): string {\n return output.endsWith(\"\\n\") ? output.slice(0, -1) : output;\n}\n\nfunction appendOutput(previous: string, next: string): string {\n const normalized = normalizeOutput(next);\n if (!normalized) return previous;\n return previous ? `${previous}\\n${normalized}` : normalized;\n}\n\nfunction treeToFrameOutput(node: FrescoNode, options: { skipStatic?: boolean } = {}): string {\n if (options.skipStatic && isStaticNode(node)) return \"\";\n\n const ownText = nodeText(node);\n const childOutput = node.children.map((child) => treeToFrameOutput(child, options));\n\n if (node.type === \"text\" || node.type === \"input\") {\n return `${ownText}${childOutput.join(\"\")}`;\n }\n\n const style = (node.props.style ?? {}) as Record<string, unknown>;\n const flexDirection = style.flexDirection ?? style.flex_direction;\n const separator = flexDirection === \"column\" ? \"\\n\" : \"\";\n return joinOutput(childOutput, separator);\n}\n\nfunction captureStaticOutput(node: FrescoNode, renderedStaticItems: Map<number, number>): string {\n const output: string[] = [];\n\n const visit = (current: FrescoNode) => {\n if (isStaticNode(current)) {\n const renderedItems = renderedStaticItems.get(current.id) ?? 0;\n const staticItems = current.children.filter(isStaticItemNode);\n const nextItems = staticItems.slice(renderedItems);\n const nextOutput = joinOutput(\n nextItems.map((child) => treeToFrameOutput(child)),\n \"\\n\",\n );\n if (nextOutput) output.push(nextOutput);\n renderedStaticItems.set(current.id, staticItems.length);\n return;\n }\n\n for (const child of current.children) visit(child);\n };\n\n visit(node);\n return joinOutput(output, \"\\n\");\n}\n\nfunction renderFrame(root: FrescoNode, staticOutput: string): string {\n return joinOutput([staticOutput, treeToFrameOutput(root, { skipStatic: true })], \"\\n\");\n}\n\nfunction latestSnapshot(snapshots: readonly FrescoFrameSnapshot[]): FrescoFrameSnapshot {\n const snapshot = snapshots[snapshots.length - 1];\n if (!snapshot) throw new Error(\"expected renderTui to record an initial frame\");\n return snapshot;\n}\n\nfunction protocolSnapshot(root: FrescoNode): FrescoRenderNode[] {\n const nodes = treeToRenderNodes(root);\n const ids = new Map(nodes.map((node, index) => [node.id, index - 1]));\n return nodes.map((node) => {\n const id = ids.get(node.id) ?? node.id;\n const children = node.children?.map((child) => ids.get(child) ?? child);\n return (\n children === undefined ? { ...node, id } : { ...node, id, children }\n ) as FrescoRenderNode;\n });\n}\n\nasync function dispatchPaste(text: string): Promise<void> {\n const event: PasteEvent = { type: \"paste\", text };\n lastPasteEvent.value = event;\n await nextTick();\n}\n\nasync function dispatchMouse(event: MouseInput): Promise<void> {\n lastMouseEvent.value = { type: \"mouse\", ...event };\n await nextTick();\n}\n\nasync function dispatchFocus(focused: boolean): Promise<void> {\n const event: FocusEvent = { type: \"focus\", focused };\n lastFocusEvent.value = event;\n await nextTick();\n}\n\nasync function dispatchComposition(\n type: CompositionEvent[\"type\"],\n text: string,\n cursor: number,\n): Promise<void> {\n lastCompositionEvent.value = { type, text, cursor };\n await nextTick();\n}\n\nasync function dispatchResize(\n mounted: MountedFresco,\n width: number,\n height: number,\n): Promise<void> {\n const event: ResizeEvent = { type: \"resize\", width, height };\n lastResizeEvent.value = event;\n mounted.appContext.width.value = width;\n mounted.appContext.height.value = height;\n await nextTick();\n}\n\n/** Mount a Fresco app for tests with frame snapshots and input injection. */\nexport function renderTui(root: RenderTuiRoot, options: RenderTuiOptions = {}): RenderTuiResult {\n const mounted = mountFresco(root, options);\n const frames: string[] = [];\n const frameSnapshots: FrescoFrameSnapshot[] = [];\n const renderedStaticItems = new Map<number, number>();\n let staticOutput = \"\";\n\n const captureFrame = () => {\n staticOutput = appendOutput(\n staticOutput,\n captureStaticOutput(mounted.root, renderedStaticItems),\n );\n const snapshot: FrescoFrameSnapshot = {\n output: renderFrame(mounted.root, staticOutput),\n screenReaderOutput: treeToScreenReaderString(mounted.root),\n tree: toTreeSnapshot(mounted.root),\n protocolNodes: protocolSnapshot(mounted.root),\n };\n frames.push(snapshot.output);\n frameSnapshots.push(snapshot);\n return snapshot;\n };\n\n const recordAfter = async (dispatch: Promise<void>) => {\n await dispatch;\n return captureFrame();\n };\n\n const input: FrescoInputDriver = {\n key: (event) => recordAfter(dispatchKey(event)),\n async text(text) {\n for (const char of text) {\n await dispatchKey({ char });\n }\n return captureFrame();\n },\n paste: (text) => recordAfter(dispatchPaste(text)),\n resize: (width, height) => recordAfter(dispatchResize(mounted, width, height)),\n mouse: (event) => recordAfter(dispatchMouse(event)),\n focus: (focused) => recordAfter(dispatchFocus(focused)),\n compositionStart: (text = \"\", cursor = 0) =>\n recordAfter(dispatchComposition(\"compositionstart\", text, cursor)),\n compositionUpdate: (text, cursor) =>\n recordAfter(dispatchComposition(\"compositionupdate\", text, cursor)),\n compositionEnd: (text, cursor = text.length) =>\n recordAfter(dispatchComposition(\"compositionend\", text, cursor)),\n };\n\n captureFrame();\n\n return {\n ...mounted,\n frames,\n frameSnapshots,\n input,\n captureFrame,\n lastFrame: () => latestSnapshot(frameSnapshots).output,\n frameSnapshot: () => latestSnapshot(frameSnapshots),\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { F as isScreenReaderEnabledByDefault, P as SCREEN_READER_KEY, T as useStreamsContext, a as lastMouseEvent, g as updateLastRenderLayouts, i as lastKeyEvent, m as getLastRenderLayout, n as lastCompositionEvent, o as lastPasteEvent } from "./app-C_wFlWSV.mjs";
1
+ import { F as isScreenReaderEnabledByDefault, P as SCREEN_READER_KEY, T as useStreamsContext, a as lastMouseEvent, g as updateLastRenderLayouts, i as lastKeyEvent, m as getLastRenderLayout, n as lastCompositionEvent, o as lastPasteEvent } from "./app-CjfLCWic.mjs";
2
2
  import { computed, inject, isRef, onMounted, onUnmounted, reactive, ref, watch } from "vue";
3
3
  //#region src/composables/useIsScreenReaderEnabled.ts
4
4
  /**
@@ -385,4 +385,4 @@ function useBoxMetrics(ref) {
385
385
  //#endregion
386
386
  export { useInput as a, useIsScreenReaderEnabled as c, useMouse as i, createVirtualViewport as n, useKeyPress as o, useVirtualViewport as r, usePaste as s, useBoxMetrics as t };
387
387
 
388
- //# sourceMappingURL=useBoxMetrics-lF5Myjc7.mjs.map
388
+ //# sourceMappingURL=useBoxMetrics-BMD1acRU.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBoxMetrics-lF5Myjc7.mjs","names":["toRef"],"sources":["../src/composables/useIsScreenReaderEnabled.ts","../src/composables/usePaste.ts","../src/composables/useInput.ts","../src/composables/useMouse.ts","../src/composables/useVirtualViewport.ts","../src/composables/useBoxMetrics.ts"],"sourcesContent":["/**\n * useIsScreenReaderEnabled - screen reader mode flag.\n */\n\nimport { inject } from \"vue\";\nimport { SCREEN_READER_KEY, isScreenReaderEnabledByDefault } from \"../accessibility.js\";\n\nexport function useIsScreenReaderEnabled(): boolean {\n const enabled = inject(SCREEN_READER_KEY, null);\n return enabled?.value ?? isScreenReaderEnabledByDefault();\n}\n","/**\n * usePaste - bracketed paste handling.\n */\n\nimport { isRef, onUnmounted, ref, watch, type Ref } from \"vue\";\nimport { lastPasteEvent } from \"../app.js\";\nimport { useStreamsContext } from \"./useStreams.js\";\n\nlet activePasteHandlerCount = 0;\n\nexport interface UsePasteOptions {\n /** Whether the paste handler is active */\n isActive?: boolean | Ref<boolean>;\n}\n\nexport function hasActivePasteHandlers(): boolean {\n return activePasteHandlerCount > 0;\n}\n\nfunction toRef(value: boolean | Ref<boolean>): Ref<boolean> {\n return isRef(value) ? value : ref(value);\n}\n\nexport function usePaste(handler: (text: string) => void, options: UsePasteOptions = {}) {\n const isActive = toRef(options.isActive ?? true);\n const streams = useStreamsContext();\n let rawModeEnabled = false;\n let bracketedPasteEnabled = false;\n let pasteHandlerRegistered = false;\n\n const syncRawMode = (isEnabled: boolean) => {\n if (rawModeEnabled === isEnabled) return;\n streams.setRawMode(isEnabled);\n rawModeEnabled = isEnabled;\n };\n\n const syncBracketedPasteMode = (isEnabled: boolean) => {\n if (bracketedPasteEnabled === isEnabled) return;\n streams.setBracketedPasteMode(isEnabled);\n bracketedPasteEnabled = isEnabled;\n };\n\n const syncPasteRegistration = (isEnabled: boolean) => {\n if (pasteHandlerRegistered === isEnabled) return;\n activePasteHandlerCount += isEnabled ? 1 : -1;\n pasteHandlerRegistered = isEnabled;\n };\n\n const syncActiveState = (isEnabled: boolean) => {\n syncRawMode(isEnabled);\n syncBracketedPasteMode(isEnabled);\n syncPasteRegistration(isEnabled);\n };\n\n watch(lastPasteEvent, (event) => {\n if (!event || !isActive.value) return;\n handler(event.text);\n });\n\n watch(isActive, syncActiveState, { immediate: true });\n onUnmounted(() => syncActiveState(false));\n\n return {\n isActive,\n enable: () => {\n isActive.value = true;\n },\n disable: () => {\n isActive.value = false;\n },\n };\n}\n","/**\n * useInput - Input handling composable\n */\n\nimport { isRef, onUnmounted, ref, watch, type Ref } from \"vue\";\nimport { lastCompositionEvent, lastKeyEvent, lastPasteEvent, type KeyEvent } from \"../app.js\";\nimport { hasActivePasteHandlers } from \"./usePaste.js\";\nimport { useStreamsContext } from \"./useStreams.js\";\n\nexport interface Key {\n upArrow: boolean;\n downArrow: boolean;\n leftArrow: boolean;\n rightArrow: boolean;\n pageDown: boolean;\n pageUp: boolean;\n home: boolean;\n end: boolean;\n return: boolean;\n escape: boolean;\n ctrl: boolean;\n shift: boolean;\n tab: boolean;\n backspace: boolean;\n delete: boolean;\n meta: boolean;\n super: boolean;\n hyper: boolean;\n capsLock: boolean;\n numLock: boolean;\n eventType?: \"press\" | \"repeat\" | \"release\";\n}\n\nexport interface KeyHandler {\n (key: string, modifiers: { ctrl: boolean; alt: boolean; shift: boolean; meta: boolean }): void;\n}\n\nexport interface UseInputOptions {\n /** Whether to capture input (boolean or Ref<boolean>) */\n active?: boolean | Ref<boolean>;\n /** Whether to capture input (alias for active, boolean or Ref<boolean>) */\n isActive?: boolean | Ref<boolean>;\n /** Ink-compatible input callback */\n handler?: (input: string, key: Key) => void;\n /** Called on key press */\n onKey?: KeyHandler;\n /** Called on character input */\n onChar?: (char: string) => void;\n /** Called on Enter */\n onSubmit?: () => void;\n /** Called on Escape */\n onEscape?: () => void;\n /** Called on arrow keys */\n onArrow?: (direction: \"up\" | \"down\" | \"left\" | \"right\") => void;\n /** Called when an IME composition starts */\n onCompositionStart?: () => void;\n /** Called when IME preedit text changes */\n onCompositionUpdate?: (text: string, cursor: number) => void;\n /** Called when IME commits text */\n onCompositionEnd?: (text: string) => void;\n /** Deliver Ctrl+C to this handler instead of reserving it for app exit. */\n captureCtrlC?: boolean;\n}\n\nexport interface UseInputReturn {\n isActive: Ref<boolean>;\n lastKey: Ref<string | null>;\n enable: () => void;\n disable: () => void;\n}\n\nexport type InputHandler = (input: string, key: Key) => void;\n\nexport interface UseInputHandlerOptions {\n isActive?: boolean | Ref<boolean>;\n}\n\nfunction toRef(value: boolean | Ref<boolean>): Ref<boolean> {\n return isRef(value) ? value : ref(value);\n}\n\nfunction keyName(event: KeyEvent): string {\n return event.char ?? event.key ?? \"\";\n}\n\nfunction toInkKey(event: KeyEvent): Key {\n const key = event.key;\n\n return {\n upArrow: key === \"up\",\n downArrow: key === \"down\",\n leftArrow: key === \"left\",\n rightArrow: key === \"right\",\n pageDown: key === \"pagedown\" || key === \"pageDown\",\n pageUp: key === \"pageup\" || key === \"pageUp\",\n home: key === \"home\",\n end: key === \"end\",\n return: key === \"enter\" || key === \"return\",\n escape: key === \"escape\" || key === \"esc\",\n ctrl: event.ctrl,\n shift: event.shift,\n tab: key === \"tab\" || key === \"backtab\",\n backspace: key === \"backspace\",\n delete: key === \"delete\",\n meta: event.meta,\n super: event.super,\n hyper: event.hyper,\n capsLock: event.capsLock,\n numLock: event.numLock,\n eventType: event.eventType,\n };\n}\n\nfunction emptyKey(): Key {\n return {\n upArrow: false,\n downArrow: false,\n leftArrow: false,\n rightArrow: false,\n pageDown: false,\n pageUp: false,\n home: false,\n end: false,\n return: false,\n escape: false,\n ctrl: false,\n shift: false,\n tab: false,\n backspace: false,\n delete: false,\n meta: false,\n super: false,\n hyper: false,\n capsLock: false,\n numLock: false,\n };\n}\n\nfunction inputValue(event: KeyEvent, key: Key): string {\n if (event.char) return event.char;\n if (key.return) return \"\\r\";\n return \"\";\n}\n\nfunction handleStructuredOptions(\n event: KeyEvent,\n options: UseInputOptions,\n lastKey: Ref<string | null>,\n) {\n const modifiers = {\n ctrl: event.ctrl,\n alt: event.alt,\n shift: event.shift,\n meta: event.meta,\n };\n const pressedKey = keyName(event);\n const inkKey = toInkKey(event);\n\n if (event.char) {\n lastKey.value = event.char;\n // Modified character chords represent commands, not text insertion. AltGr\n // terminals report their committed text without these command modifiers.\n if (!event.ctrl && !event.alt && !event.meta) options.onChar?.(event.char);\n options.onKey?.(event.char, modifiers);\n return;\n }\n\n if (pressedKey) {\n lastKey.value = pressedKey;\n options.onKey?.(pressedKey, modifiers);\n }\n\n if (inkKey.return) options.onSubmit?.();\n if (inkKey.escape) options.onEscape?.();\n if (inkKey.upArrow) options.onArrow?.(\"up\");\n if (inkKey.downArrow) options.onArrow?.(\"down\");\n if (inkKey.leftArrow) options.onArrow?.(\"left\");\n if (inkKey.rightArrow) options.onArrow?.(\"right\");\n}\n\nexport function useInput(handler: InputHandler, options?: UseInputHandlerOptions): UseInputReturn;\nexport function useInput(options?: UseInputOptions): UseInputReturn;\nexport function useInput(\n handlerOrOptions: InputHandler | UseInputOptions = {},\n handlerOptions: UseInputHandlerOptions = {},\n): UseInputReturn {\n const options =\n typeof handlerOrOptions === \"function\"\n ? { handler: handlerOrOptions, isActive: handlerOptions.isActive }\n : handlerOrOptions;\n\n const activeSource = options.isActive ?? options.active ?? true;\n const isActive = toRef(activeSource);\n const lastKey = ref<string | null>(null);\n const streams = useStreamsContext();\n let rawModeEnabled = false;\n\n const syncRawMode = (isEnabled: boolean) => {\n if (rawModeEnabled === isEnabled) return;\n streams.setRawMode(isEnabled);\n rawModeEnabled = isEnabled;\n };\n\n watch(lastKeyEvent, (event) => {\n if (!event || !isActive.value) return;\n\n const inkKey = toInkKey(event);\n const input = inputValue(event, inkKey);\n const pressedKey = keyName(event);\n\n if (input === \"c\" && inkKey.ctrl && streams.internal_exitOnCtrlC && !options.captureCtrlC)\n return;\n\n lastKey.value = pressedKey || null;\n options.handler?.(input, inkKey);\n handleStructuredOptions(event, options, lastKey);\n });\n\n watch(lastPasteEvent, (event) => {\n if (!event || !isActive.value || hasActivePasteHandlers()) return;\n\n lastKey.value = event.text;\n options.handler?.(event.text, emptyKey());\n options.onChar?.(event.text);\n });\n\n watch(lastCompositionEvent, (event) => {\n if (!event || !isActive.value) return;\n\n if (event.type === \"compositionstart\") {\n options.onCompositionStart?.();\n } else if (event.type === \"compositionupdate\") {\n options.onCompositionUpdate?.(event.text, event.cursor);\n } else {\n options.onCompositionEnd?.(event.text);\n }\n });\n\n watch(isActive, syncRawMode, { immediate: true });\n onUnmounted(() => syncRawMode(false));\n\n const enable = () => {\n isActive.value = true;\n };\n\n const disable = () => {\n isActive.value = false;\n };\n\n return {\n isActive,\n lastKey,\n enable,\n disable,\n };\n}\n\n/**\n * Shorthand for handling specific key combinations\n */\nexport function useKeyPress(\n key: string,\n handler: () => void,\n options: { ctrl?: boolean; alt?: boolean; shift?: boolean; meta?: boolean } = {},\n) {\n const { ctrl = false, alt = false, shift = false, meta = false } = options;\n\n useInput({\n onKey: (pressedKey, modifiers) => {\n const matches =\n pressedKey.toLowerCase() === key.toLowerCase() &&\n modifiers.ctrl === ctrl &&\n modifiers.alt === alt &&\n modifiers.shift === shift &&\n modifiers.meta === meta;\n\n if (matches) {\n handler();\n }\n },\n });\n}\n","/** Mouse and wheel input handling for focused Fresco surfaces. */\n\nimport { computed, isRef, ref, watch, type Ref } from \"vue\";\nimport { lastMouseEvent } from \"../app.js\";\nimport type { MouseEvent } from \"../protocol.js\";\n\nexport interface UseMouseOptions {\n /** Whether the handler receives events. */\n isActive?: boolean | Readonly<Ref<boolean>>;\n}\n\nexport interface UseMouseReturn {\n isActive: Readonly<Ref<boolean>>;\n /** Start delivering normalized mouse events. */\n enable: () => void;\n /** Stop delivering normalized mouse events. */\n disable: () => void;\n /** Unsubscribe the handler from the shared mouse event stream. */\n stop: () => void;\n}\n\n/** Subscribe to normalized mouse actions, including wheel direction. */\nexport function useMouse(\n handler: (event: MouseEvent) => void,\n options: UseMouseOptions = {},\n): UseMouseReturn {\n const externalIsActive = isRef(options.isActive) ? options.isActive : undefined;\n const locallyEnabled = ref(externalIsActive ? true : (options.isActive ?? true));\n const isActive = computed(() => locallyEnabled.value && (externalIsActive?.value ?? true));\n\n const stop = watch(\n lastMouseEvent,\n (event) => {\n if (event && isActive.value) handler(event);\n },\n { flush: \"sync\" },\n );\n\n return {\n isActive,\n enable: () => {\n locallyEnabled.value = true;\n },\n disable: () => {\n locallyEnabled.value = false;\n },\n stop,\n };\n}\n","/** Bounded viewport state for large terminal collections. */\n\nimport { computed, ref, type ComputedRef, type Ref } from \"vue\";\n\nexport type VirtualScrollAlignment = \"nearest\" | \"start\" | \"center\" | \"end\";\n\nexport interface VirtualViewportRange {\n /** First item occupying the viewport. */\n visibleStart: number;\n /** Exclusive end of items occupying the viewport. */\n visibleEnd: number;\n /** First retained item, including leading overscan. */\n overscanStart: number;\n /** Exclusive end of retained items, including trailing overscan. */\n overscanEnd: number;\n}\n\nexport interface VirtualViewportOptions {\n itemCount: number;\n viewportSize: number;\n overscan?: number;\n initialOffset?: number;\n}\n\nexport interface VirtualViewport {\n readonly itemCount: Readonly<Ref<number>>;\n readonly viewportSize: Readonly<Ref<number>>;\n readonly overscan: Readonly<Ref<number>>;\n readonly offset: Readonly<Ref<number>>;\n readonly maxOffset: ComputedRef<number>;\n readonly atStart: ComputedRef<boolean>;\n readonly atEnd: ComputedRef<boolean>;\n readonly range: ComputedRef<VirtualViewportRange>;\n /** Replace the collection size and clamp the current offset. */\n setItemCount(value: number): boolean;\n /** Replace the visible row count and clamp the current offset. */\n setViewportSize(value: number): boolean;\n /** Replace the number of retained rows on each side of the viewport. */\n setOverscan(value: number): boolean;\n /** Move to an absolute, bounded offset. */\n scrollTo(offset: number): boolean;\n /** Move by a signed row delta. */\n scrollBy(delta: number): boolean;\n /** Reveal one item using the requested viewport alignment. */\n scrollIntoView(index: number, alignment?: VirtualScrollAlignment): boolean;\n}\n\nfunction count(value: number, name: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new RangeError(`${name} must be a non-negative safe integer`);\n }\n return value;\n}\n\n/** Create viewport state whose retained range scales with visible rows, not item count. */\nexport function createVirtualViewport(options: VirtualViewportOptions): VirtualViewport {\n const itemCount = ref(count(options.itemCount, \"itemCount\"));\n const viewportSize = ref(count(options.viewportSize, \"viewportSize\"));\n const overscan = ref(count(options.overscan ?? 2, \"overscan\"));\n const offset = ref(0);\n const maxOffset = computed(() => Math.max(0, itemCount.value - viewportSize.value));\n const atStart = computed(() => offset.value === 0);\n const atEnd = computed(() => offset.value === maxOffset.value);\n const range = computed<VirtualViewportRange>(() => {\n const visibleStart = Math.min(offset.value, itemCount.value);\n const visibleEnd = Math.min(itemCount.value, visibleStart + viewportSize.value);\n return {\n visibleStart,\n visibleEnd,\n overscanStart: Math.max(0, visibleStart - overscan.value),\n overscanEnd: Math.min(itemCount.value, visibleEnd + overscan.value),\n };\n });\n\n const scrollTo = (value: number) => {\n const next = Math.min(maxOffset.value, count(value, \"offset\"));\n if (next === offset.value) return false;\n offset.value = next;\n return true;\n };\n const clamp = () => scrollTo(Math.min(offset.value, maxOffset.value));\n\n const setItemCount = (value: number) => {\n const next = count(value, \"itemCount\");\n if (next === itemCount.value) return false;\n itemCount.value = next;\n clamp();\n return true;\n };\n const setViewportSize = (value: number) => {\n const next = count(value, \"viewportSize\");\n if (next === viewportSize.value) return false;\n viewportSize.value = next;\n clamp();\n return true;\n };\n const setOverscan = (value: number) => {\n const next = count(value, \"overscan\");\n if (next === overscan.value) return false;\n overscan.value = next;\n return true;\n };\n const scrollBy = (delta: number) => {\n if (!Number.isSafeInteger(delta)) throw new RangeError(\"delta must be a safe integer\");\n return scrollTo(Math.max(0, offset.value + delta));\n };\n const scrollIntoView = (index: number, alignment: VirtualScrollAlignment = \"nearest\") => {\n count(index, \"index\");\n if (index >= itemCount.value || viewportSize.value === 0) return false;\n let next = offset.value;\n if (alignment === \"start\") next = index;\n else if (alignment === \"center\") next = Math.max(0, index - Math.floor(viewportSize.value / 2));\n else if (alignment === \"end\") next = Math.max(0, index + 1 - viewportSize.value);\n else if (index < offset.value) next = index;\n else if (index >= offset.value + viewportSize.value) {\n next = index + 1 - viewportSize.value;\n }\n return scrollTo(next);\n };\n\n scrollTo(options.initialOffset ?? 0);\n\n return {\n itemCount,\n viewportSize,\n overscan,\n offset,\n maxOffset,\n atStart,\n atEnd,\n range,\n setItemCount,\n setViewportSize,\n setOverscan,\n scrollTo,\n scrollBy,\n scrollIntoView,\n };\n}\n\n/** Composition API alias for {@link createVirtualViewport}. */\nexport const useVirtualViewport = createVirtualViewport;\n","/**\n * useBoxMetrics - best-effort layout metrics for a rendered Fresco node.\n */\n\nimport { onMounted, onUnmounted, reactive, type Ref } from \"vue\";\nimport { getLastRenderLayout, updateLastRenderLayouts, type DOMElement } from \"../layoutMetrics.js\";\n\nexport interface BoxMetrics {\n width: number;\n height: number;\n left: number;\n top: number;\n}\n\nexport interface UseBoxMetricsResult extends BoxMetrics {\n hasMeasured: boolean;\n /** Refresh from the latest completed native layout snapshot. */\n refresh(): void;\n}\n\nexport type MetricTarget = DOMElement;\n\nasync function loadNative() {\n return import(\"@vizejs/fresco-native\");\n}\n\nfunction targetId(target: MetricTarget | null | undefined): number | undefined {\n return target?.id ?? target?.$el?.id;\n}\n\nexport function useBoxMetrics(ref: Ref<MetricTarget | null>): UseBoxMetricsResult {\n const metrics = reactive({\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n hasMeasured: false,\n }) as UseBoxMetricsResult;\n\n let timer: ReturnType<typeof setInterval> | null = null;\n\n const applyLayout = (layout: { width: number; height: number; x: number; y: number }) => {\n metrics.width = layout.width;\n metrics.height = layout.height;\n metrics.left = layout.x;\n metrics.top = layout.y;\n metrics.hasMeasured = true;\n };\n\n const refresh = () => {\n const id = targetId(ref.value);\n if (id === undefined) {\n metrics.width = 0;\n metrics.height = 0;\n metrics.left = 0;\n metrics.top = 0;\n metrics.hasMeasured = false;\n return;\n }\n\n const cachedLayout = getLastRenderLayout(ref.value);\n if (cachedLayout) {\n applyLayout(cachedLayout);\n return;\n }\n\n void loadNative()\n .then((native) => {\n const layouts = \"getLastRenderLayouts\" in native ? native.getLastRenderLayouts() : [];\n updateLastRenderLayouts(layouts);\n const layout = layouts.find((item: { id: number }) => item.id === id);\n if (!layout) return;\n\n applyLayout(layout);\n })\n .catch(() => {});\n };\n\n metrics.refresh = refresh;\n\n onMounted(() => {\n refresh();\n timer = setInterval(refresh, 100);\n });\n\n onUnmounted(() => {\n if (timer) clearInterval(timer);\n });\n\n return metrics;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useBoxMetrics-BMD1acRU.mjs","names":["toRef"],"sources":["../src/composables/useIsScreenReaderEnabled.ts","../src/composables/usePaste.ts","../src/composables/useInput.ts","../src/composables/useMouse.ts","../src/composables/useVirtualViewport.ts","../src/composables/useBoxMetrics.ts"],"sourcesContent":["/**\n * useIsScreenReaderEnabled - screen reader mode flag.\n */\n\nimport { inject } from \"vue\";\nimport { SCREEN_READER_KEY, isScreenReaderEnabledByDefault } from \"../accessibility.js\";\n\nexport function useIsScreenReaderEnabled(): boolean {\n const enabled = inject(SCREEN_READER_KEY, null);\n return enabled?.value ?? isScreenReaderEnabledByDefault();\n}\n","/**\n * usePaste - bracketed paste handling.\n */\n\nimport { isRef, onUnmounted, ref, watch, type Ref } from \"vue\";\nimport { lastPasteEvent } from \"../app.js\";\nimport { useStreamsContext } from \"./useStreams.js\";\n\nlet activePasteHandlerCount = 0;\n\nexport interface UsePasteOptions {\n /** Whether the paste handler is active */\n isActive?: boolean | Ref<boolean>;\n}\n\nexport function hasActivePasteHandlers(): boolean {\n return activePasteHandlerCount > 0;\n}\n\nfunction toRef(value: boolean | Ref<boolean>): Ref<boolean> {\n return isRef(value) ? value : ref(value);\n}\n\nexport function usePaste(handler: (text: string) => void, options: UsePasteOptions = {}) {\n const isActive = toRef(options.isActive ?? true);\n const streams = useStreamsContext();\n let rawModeEnabled = false;\n let bracketedPasteEnabled = false;\n let pasteHandlerRegistered = false;\n\n const syncRawMode = (isEnabled: boolean) => {\n if (rawModeEnabled === isEnabled) return;\n streams.setRawMode(isEnabled);\n rawModeEnabled = isEnabled;\n };\n\n const syncBracketedPasteMode = (isEnabled: boolean) => {\n if (bracketedPasteEnabled === isEnabled) return;\n streams.setBracketedPasteMode(isEnabled);\n bracketedPasteEnabled = isEnabled;\n };\n\n const syncPasteRegistration = (isEnabled: boolean) => {\n if (pasteHandlerRegistered === isEnabled) return;\n activePasteHandlerCount += isEnabled ? 1 : -1;\n pasteHandlerRegistered = isEnabled;\n };\n\n const syncActiveState = (isEnabled: boolean) => {\n syncRawMode(isEnabled);\n syncBracketedPasteMode(isEnabled);\n syncPasteRegistration(isEnabled);\n };\n\n watch(lastPasteEvent, (event) => {\n if (!event || !isActive.value) return;\n handler(event.text);\n });\n\n watch(isActive, syncActiveState, { immediate: true });\n onUnmounted(() => syncActiveState(false));\n\n return {\n isActive,\n enable: () => {\n isActive.value = true;\n },\n disable: () => {\n isActive.value = false;\n },\n };\n}\n","/**\n * useInput - Input handling composable\n */\n\nimport { isRef, onUnmounted, ref, watch, type Ref } from \"vue\";\nimport { lastCompositionEvent, lastKeyEvent, lastPasteEvent, type KeyEvent } from \"../app.js\";\nimport { hasActivePasteHandlers } from \"./usePaste.js\";\nimport { useStreamsContext } from \"./useStreams.js\";\n\nexport interface Key {\n upArrow: boolean;\n downArrow: boolean;\n leftArrow: boolean;\n rightArrow: boolean;\n pageDown: boolean;\n pageUp: boolean;\n home: boolean;\n end: boolean;\n return: boolean;\n escape: boolean;\n ctrl: boolean;\n shift: boolean;\n tab: boolean;\n backspace: boolean;\n delete: boolean;\n meta: boolean;\n super: boolean;\n hyper: boolean;\n capsLock: boolean;\n numLock: boolean;\n eventType?: \"press\" | \"repeat\" | \"release\";\n}\n\nexport interface KeyHandler {\n (key: string, modifiers: { ctrl: boolean; alt: boolean; shift: boolean; meta: boolean }): void;\n}\n\nexport interface UseInputOptions {\n /** Whether to capture input (boolean or Ref<boolean>) */\n active?: boolean | Ref<boolean>;\n /** Whether to capture input (alias for active, boolean or Ref<boolean>) */\n isActive?: boolean | Ref<boolean>;\n /** Ink-compatible input callback */\n handler?: (input: string, key: Key) => void;\n /** Called on key press */\n onKey?: KeyHandler;\n /** Called on character input */\n onChar?: (char: string) => void;\n /** Called on Enter */\n onSubmit?: () => void;\n /** Called on Escape */\n onEscape?: () => void;\n /** Called on arrow keys */\n onArrow?: (direction: \"up\" | \"down\" | \"left\" | \"right\") => void;\n /** Called when an IME composition starts */\n onCompositionStart?: () => void;\n /** Called when IME preedit text changes */\n onCompositionUpdate?: (text: string, cursor: number) => void;\n /** Called when IME commits text */\n onCompositionEnd?: (text: string) => void;\n /** Deliver Ctrl+C to this handler instead of reserving it for app exit. */\n captureCtrlC?: boolean;\n}\n\nexport interface UseInputReturn {\n isActive: Ref<boolean>;\n lastKey: Ref<string | null>;\n enable: () => void;\n disable: () => void;\n}\n\nexport type InputHandler = (input: string, key: Key) => void;\n\nexport interface UseInputHandlerOptions {\n isActive?: boolean | Ref<boolean>;\n}\n\nfunction toRef(value: boolean | Ref<boolean>): Ref<boolean> {\n return isRef(value) ? value : ref(value);\n}\n\nfunction keyName(event: KeyEvent): string {\n return event.char ?? event.key ?? \"\";\n}\n\nfunction toInkKey(event: KeyEvent): Key {\n const key = event.key;\n\n return {\n upArrow: key === \"up\",\n downArrow: key === \"down\",\n leftArrow: key === \"left\",\n rightArrow: key === \"right\",\n pageDown: key === \"pagedown\" || key === \"pageDown\",\n pageUp: key === \"pageup\" || key === \"pageUp\",\n home: key === \"home\",\n end: key === \"end\",\n return: key === \"enter\" || key === \"return\",\n escape: key === \"escape\" || key === \"esc\",\n ctrl: event.ctrl,\n shift: event.shift,\n tab: key === \"tab\" || key === \"backtab\",\n backspace: key === \"backspace\",\n delete: key === \"delete\",\n meta: event.meta,\n super: event.super,\n hyper: event.hyper,\n capsLock: event.capsLock,\n numLock: event.numLock,\n eventType: event.eventType,\n };\n}\n\nfunction emptyKey(): Key {\n return {\n upArrow: false,\n downArrow: false,\n leftArrow: false,\n rightArrow: false,\n pageDown: false,\n pageUp: false,\n home: false,\n end: false,\n return: false,\n escape: false,\n ctrl: false,\n shift: false,\n tab: false,\n backspace: false,\n delete: false,\n meta: false,\n super: false,\n hyper: false,\n capsLock: false,\n numLock: false,\n };\n}\n\nfunction inputValue(event: KeyEvent, key: Key): string {\n if (event.char) return event.char;\n if (key.return) return \"\\r\";\n return \"\";\n}\n\nfunction handleStructuredOptions(\n event: KeyEvent,\n options: UseInputOptions,\n lastKey: Ref<string | null>,\n) {\n const modifiers = {\n ctrl: event.ctrl,\n alt: event.alt,\n shift: event.shift,\n meta: event.meta,\n };\n const pressedKey = keyName(event);\n const inkKey = toInkKey(event);\n\n if (event.char) {\n lastKey.value = event.char;\n // Modified character chords represent commands, not text insertion. AltGr\n // terminals report their committed text without these command modifiers.\n if (!event.ctrl && !event.alt && !event.meta) options.onChar?.(event.char);\n options.onKey?.(event.char, modifiers);\n return;\n }\n\n if (pressedKey) {\n lastKey.value = pressedKey;\n options.onKey?.(pressedKey, modifiers);\n }\n\n if (inkKey.return) options.onSubmit?.();\n if (inkKey.escape) options.onEscape?.();\n if (inkKey.upArrow) options.onArrow?.(\"up\");\n if (inkKey.downArrow) options.onArrow?.(\"down\");\n if (inkKey.leftArrow) options.onArrow?.(\"left\");\n if (inkKey.rightArrow) options.onArrow?.(\"right\");\n}\n\nexport function useInput(handler: InputHandler, options?: UseInputHandlerOptions): UseInputReturn;\nexport function useInput(options?: UseInputOptions): UseInputReturn;\nexport function useInput(\n handlerOrOptions: InputHandler | UseInputOptions = {},\n handlerOptions: UseInputHandlerOptions = {},\n): UseInputReturn {\n const options =\n typeof handlerOrOptions === \"function\"\n ? { handler: handlerOrOptions, isActive: handlerOptions.isActive }\n : handlerOrOptions;\n\n const activeSource = options.isActive ?? options.active ?? true;\n const isActive = toRef(activeSource);\n const lastKey = ref<string | null>(null);\n const streams = useStreamsContext();\n let rawModeEnabled = false;\n\n const syncRawMode = (isEnabled: boolean) => {\n if (rawModeEnabled === isEnabled) return;\n streams.setRawMode(isEnabled);\n rawModeEnabled = isEnabled;\n };\n\n watch(lastKeyEvent, (event) => {\n if (!event || !isActive.value) return;\n\n const inkKey = toInkKey(event);\n const input = inputValue(event, inkKey);\n const pressedKey = keyName(event);\n\n if (input === \"c\" && inkKey.ctrl && streams.internal_exitOnCtrlC && !options.captureCtrlC)\n return;\n\n lastKey.value = pressedKey || null;\n options.handler?.(input, inkKey);\n handleStructuredOptions(event, options, lastKey);\n });\n\n watch(lastPasteEvent, (event) => {\n if (!event || !isActive.value || hasActivePasteHandlers()) return;\n\n lastKey.value = event.text;\n options.handler?.(event.text, emptyKey());\n options.onChar?.(event.text);\n });\n\n watch(lastCompositionEvent, (event) => {\n if (!event || !isActive.value) return;\n\n if (event.type === \"compositionstart\") {\n options.onCompositionStart?.();\n } else if (event.type === \"compositionupdate\") {\n options.onCompositionUpdate?.(event.text, event.cursor);\n } else {\n options.onCompositionEnd?.(event.text);\n }\n });\n\n watch(isActive, syncRawMode, { immediate: true });\n onUnmounted(() => syncRawMode(false));\n\n const enable = () => {\n isActive.value = true;\n };\n\n const disable = () => {\n isActive.value = false;\n };\n\n return {\n isActive,\n lastKey,\n enable,\n disable,\n };\n}\n\n/**\n * Shorthand for handling specific key combinations\n */\nexport function useKeyPress(\n key: string,\n handler: () => void,\n options: { ctrl?: boolean; alt?: boolean; shift?: boolean; meta?: boolean } = {},\n) {\n const { ctrl = false, alt = false, shift = false, meta = false } = options;\n\n useInput({\n onKey: (pressedKey, modifiers) => {\n const matches =\n pressedKey.toLowerCase() === key.toLowerCase() &&\n modifiers.ctrl === ctrl &&\n modifiers.alt === alt &&\n modifiers.shift === shift &&\n modifiers.meta === meta;\n\n if (matches) {\n handler();\n }\n },\n });\n}\n","/** Mouse and wheel input handling for focused Fresco surfaces. */\n\nimport { computed, isRef, ref, watch, type Ref } from \"vue\";\nimport { lastMouseEvent } from \"../app.js\";\nimport type { MouseEvent } from \"../protocol.js\";\n\nexport interface UseMouseOptions {\n /** Whether the handler receives events. */\n isActive?: boolean | Readonly<Ref<boolean>>;\n}\n\nexport interface UseMouseReturn {\n isActive: Readonly<Ref<boolean>>;\n /** Start delivering normalized mouse events. */\n enable: () => void;\n /** Stop delivering normalized mouse events. */\n disable: () => void;\n /** Unsubscribe the handler from the shared mouse event stream. */\n stop: () => void;\n}\n\n/** Subscribe to normalized mouse actions, including wheel direction. */\nexport function useMouse(\n handler: (event: MouseEvent) => void,\n options: UseMouseOptions = {},\n): UseMouseReturn {\n const externalIsActive = isRef(options.isActive) ? options.isActive : undefined;\n const locallyEnabled = ref(externalIsActive ? true : (options.isActive ?? true));\n const isActive = computed(() => locallyEnabled.value && (externalIsActive?.value ?? true));\n\n const stop = watch(\n lastMouseEvent,\n (event) => {\n if (event && isActive.value) handler(event);\n },\n { flush: \"sync\" },\n );\n\n return {\n isActive,\n enable: () => {\n locallyEnabled.value = true;\n },\n disable: () => {\n locallyEnabled.value = false;\n },\n stop,\n };\n}\n","/** Bounded viewport state for large terminal collections. */\n\nimport { computed, ref, type ComputedRef, type Ref } from \"vue\";\n\nexport type VirtualScrollAlignment = \"nearest\" | \"start\" | \"center\" | \"end\";\n\nexport interface VirtualViewportRange {\n /** First item occupying the viewport. */\n visibleStart: number;\n /** Exclusive end of items occupying the viewport. */\n visibleEnd: number;\n /** First retained item, including leading overscan. */\n overscanStart: number;\n /** Exclusive end of retained items, including trailing overscan. */\n overscanEnd: number;\n}\n\nexport interface VirtualViewportOptions {\n itemCount: number;\n viewportSize: number;\n overscan?: number;\n initialOffset?: number;\n}\n\nexport interface VirtualViewport {\n readonly itemCount: Readonly<Ref<number>>;\n readonly viewportSize: Readonly<Ref<number>>;\n readonly overscan: Readonly<Ref<number>>;\n readonly offset: Readonly<Ref<number>>;\n readonly maxOffset: ComputedRef<number>;\n readonly atStart: ComputedRef<boolean>;\n readonly atEnd: ComputedRef<boolean>;\n readonly range: ComputedRef<VirtualViewportRange>;\n /** Replace the collection size and clamp the current offset. */\n setItemCount(value: number): boolean;\n /** Replace the visible row count and clamp the current offset. */\n setViewportSize(value: number): boolean;\n /** Replace the number of retained rows on each side of the viewport. */\n setOverscan(value: number): boolean;\n /** Move to an absolute, bounded offset. */\n scrollTo(offset: number): boolean;\n /** Move by a signed row delta. */\n scrollBy(delta: number): boolean;\n /** Reveal one item using the requested viewport alignment. */\n scrollIntoView(index: number, alignment?: VirtualScrollAlignment): boolean;\n}\n\nfunction count(value: number, name: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new RangeError(`${name} must be a non-negative safe integer`);\n }\n return value;\n}\n\n/** Create viewport state whose retained range scales with visible rows, not item count. */\nexport function createVirtualViewport(options: VirtualViewportOptions): VirtualViewport {\n const itemCount = ref(count(options.itemCount, \"itemCount\"));\n const viewportSize = ref(count(options.viewportSize, \"viewportSize\"));\n const overscan = ref(count(options.overscan ?? 2, \"overscan\"));\n const offset = ref(0);\n const maxOffset = computed(() => Math.max(0, itemCount.value - viewportSize.value));\n const atStart = computed(() => offset.value === 0);\n const atEnd = computed(() => offset.value === maxOffset.value);\n const range = computed<VirtualViewportRange>(() => {\n const visibleStart = Math.min(offset.value, itemCount.value);\n const visibleEnd = Math.min(itemCount.value, visibleStart + viewportSize.value);\n return {\n visibleStart,\n visibleEnd,\n overscanStart: Math.max(0, visibleStart - overscan.value),\n overscanEnd: Math.min(itemCount.value, visibleEnd + overscan.value),\n };\n });\n\n const scrollTo = (value: number) => {\n const next = Math.min(maxOffset.value, count(value, \"offset\"));\n if (next === offset.value) return false;\n offset.value = next;\n return true;\n };\n const clamp = () => scrollTo(Math.min(offset.value, maxOffset.value));\n\n const setItemCount = (value: number) => {\n const next = count(value, \"itemCount\");\n if (next === itemCount.value) return false;\n itemCount.value = next;\n clamp();\n return true;\n };\n const setViewportSize = (value: number) => {\n const next = count(value, \"viewportSize\");\n if (next === viewportSize.value) return false;\n viewportSize.value = next;\n clamp();\n return true;\n };\n const setOverscan = (value: number) => {\n const next = count(value, \"overscan\");\n if (next === overscan.value) return false;\n overscan.value = next;\n return true;\n };\n const scrollBy = (delta: number) => {\n if (!Number.isSafeInteger(delta)) throw new RangeError(\"delta must be a safe integer\");\n return scrollTo(Math.max(0, offset.value + delta));\n };\n const scrollIntoView = (index: number, alignment: VirtualScrollAlignment = \"nearest\") => {\n count(index, \"index\");\n if (index >= itemCount.value || viewportSize.value === 0) return false;\n let next = offset.value;\n if (alignment === \"start\") next = index;\n else if (alignment === \"center\") next = Math.max(0, index - Math.floor(viewportSize.value / 2));\n else if (alignment === \"end\") next = Math.max(0, index + 1 - viewportSize.value);\n else if (index < offset.value) next = index;\n else if (index >= offset.value + viewportSize.value) {\n next = index + 1 - viewportSize.value;\n }\n return scrollTo(next);\n };\n\n scrollTo(options.initialOffset ?? 0);\n\n return {\n itemCount,\n viewportSize,\n overscan,\n offset,\n maxOffset,\n atStart,\n atEnd,\n range,\n setItemCount,\n setViewportSize,\n setOverscan,\n scrollTo,\n scrollBy,\n scrollIntoView,\n };\n}\n\n/** Composition API alias for {@link createVirtualViewport}. */\nexport const useVirtualViewport = createVirtualViewport;\n","/**\n * useBoxMetrics - best-effort layout metrics for a rendered Fresco node.\n */\n\nimport { onMounted, onUnmounted, reactive, type Ref } from \"vue\";\nimport { getLastRenderLayout, updateLastRenderLayouts, type DOMElement } from \"../layoutMetrics.js\";\n\nexport interface BoxMetrics {\n width: number;\n height: number;\n left: number;\n top: number;\n}\n\nexport interface UseBoxMetricsResult extends BoxMetrics {\n hasMeasured: boolean;\n /** Refresh from the latest completed native layout snapshot. */\n refresh(): void;\n}\n\nexport type MetricTarget = DOMElement;\n\nasync function loadNative() {\n return import(\"@vizejs/fresco-native\");\n}\n\nfunction targetId(target: MetricTarget | null | undefined): number | undefined {\n return target?.id ?? target?.$el?.id;\n}\n\nexport function useBoxMetrics(ref: Ref<MetricTarget | null>): UseBoxMetricsResult {\n const metrics = reactive({\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n hasMeasured: false,\n }) as UseBoxMetricsResult;\n\n let timer: ReturnType<typeof setInterval> | null = null;\n\n const applyLayout = (layout: { width: number; height: number; x: number; y: number }) => {\n metrics.width = layout.width;\n metrics.height = layout.height;\n metrics.left = layout.x;\n metrics.top = layout.y;\n metrics.hasMeasured = true;\n };\n\n const refresh = () => {\n const id = targetId(ref.value);\n if (id === undefined) {\n metrics.width = 0;\n metrics.height = 0;\n metrics.left = 0;\n metrics.top = 0;\n metrics.hasMeasured = false;\n return;\n }\n\n const cachedLayout = getLastRenderLayout(ref.value);\n if (cachedLayout) {\n applyLayout(cachedLayout);\n return;\n }\n\n void loadNative()\n .then((native) => {\n const layouts = \"getLastRenderLayouts\" in native ? native.getLastRenderLayouts() : [];\n updateLastRenderLayouts(layouts);\n const layout = layouts.find((item: { id: number }) => item.id === id);\n if (!layout) return;\n\n applyLayout(layout);\n })\n .catch(() => {});\n };\n\n metrics.refresh = refresh;\n\n onMounted(() => {\n refresh();\n timer = setInterval(refresh, 100);\n });\n\n onUnmounted(() => {\n if (timer) clearInterval(timer);\n });\n\n return metrics;\n}\n"],"mappings":";;;;;;AAOA,SAAgB,2BAAoC;CAElD,OADgB,OAAO,mBAAmB,IAC7B,GAAG,SAAS,+BAA+B;AAC1D;;;;;;ACFA,IAAI,0BAA0B;AAO9B,SAAgB,yBAAkC;CAChD,OAAO,0BAA0B;AACnC;AAEA,SAASA,QAAM,OAA6C;CAC1D,OAAO,MAAM,KAAK,IAAI,QAAQ,IAAI,KAAK;AACzC;AAEA,SAAgB,SAAS,SAAiC,UAA2B,CAAC,GAAG;CACvF,MAAM,WAAWA,QAAM,QAAQ,YAAY,IAAI;CAC/C,MAAM,UAAU,kBAAkB;CAClC,IAAI,iBAAiB;CACrB,IAAI,wBAAwB;CAC5B,IAAI,yBAAyB;CAE7B,MAAM,eAAe,cAAuB;EAC1C,IAAI,mBAAmB,WAAW;EAClC,QAAQ,WAAW,SAAS;EAC5B,iBAAiB;CACnB;CAEA,MAAM,0BAA0B,cAAuB;EACrD,IAAI,0BAA0B,WAAW;EACzC,QAAQ,sBAAsB,SAAS;EACvC,wBAAwB;CAC1B;CAEA,MAAM,yBAAyB,cAAuB;EACpD,IAAI,2BAA2B,WAAW;EAC1C,2BAA2B,YAAY,IAAI;EAC3C,yBAAyB;CAC3B;CAEA,MAAM,mBAAmB,cAAuB;EAC9C,YAAY,SAAS;EACrB,uBAAuB,SAAS;EAChC,sBAAsB,SAAS;CACjC;CAEA,MAAM,iBAAiB,UAAU;EAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,OAAO;EAC/B,QAAQ,MAAM,IAAI;CACpB,CAAC;CAED,MAAM,UAAU,iBAAiB,EAAE,WAAW,KAAK,CAAC;CACpD,kBAAkB,gBAAgB,KAAK,CAAC;CAExC,OAAO;EACL;EACA,cAAc;GACZ,SAAS,QAAQ;EACnB;EACA,eAAe;GACb,SAAS,QAAQ;EACnB;CACF;AACF;;;;;;ACMA,SAAS,MAAM,OAA6C;CAC1D,OAAO,MAAM,KAAK,IAAI,QAAQ,IAAI,KAAK;AACzC;AAEA,SAAS,QAAQ,OAAyB;CACxC,OAAO,MAAM,QAAQ,MAAM,OAAO;AACpC;AAEA,SAAS,SAAS,OAAsB;CACtC,MAAM,MAAM,MAAM;CAElB,OAAO;EACL,SAAS,QAAQ;EACjB,WAAW,QAAQ;EACnB,WAAW,QAAQ;EACnB,YAAY,QAAQ;EACpB,UAAU,QAAQ,cAAc,QAAQ;EACxC,QAAQ,QAAQ,YAAY,QAAQ;EACpC,MAAM,QAAQ;EACd,KAAK,QAAQ;EACb,QAAQ,QAAQ,WAAW,QAAQ;EACnC,QAAQ,QAAQ,YAAY,QAAQ;EACpC,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,KAAK,QAAQ,SAAS,QAAQ;EAC9B,WAAW,QAAQ;EACnB,QAAQ,QAAQ;EAChB,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,OAAO,MAAM;EACb,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,WAAW,MAAM;CACnB;AACF;AAEA,SAAS,WAAgB;CACvB,OAAO;EACL,SAAS;EACT,WAAW;EACX,WAAW;EACX,YAAY;EACZ,UAAU;EACV,QAAQ;EACR,MAAM;EACN,KAAK;EACL,QAAQ;EACR,QAAQ;EACR,MAAM;EACN,OAAO;EACP,KAAK;EACL,WAAW;EACX,QAAQ;EACR,MAAM;EACN,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;AACF;AAEA,SAAS,WAAW,OAAiB,KAAkB;CACrD,IAAI,MAAM,MAAM,OAAO,MAAM;CAC7B,IAAI,IAAI,QAAQ,OAAO;CACvB,OAAO;AACT;AAEA,SAAS,wBACP,OACA,SACA,SACA;CACA,MAAM,YAAY;EAChB,MAAM,MAAM;EACZ,KAAK,MAAM;EACX,OAAO,MAAM;EACb,MAAM,MAAM;CACd;CACA,MAAM,aAAa,QAAQ,KAAK;CAChC,MAAM,SAAS,SAAS,KAAK;CAE7B,IAAI,MAAM,MAAM;EACd,QAAQ,QAAQ,MAAM;EAGtB,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,OAAO,CAAC,MAAM,MAAM,QAAQ,SAAS,MAAM,IAAI;EACzE,QAAQ,QAAQ,MAAM,MAAM,SAAS;EACrC;CACF;CAEA,IAAI,YAAY;EACd,QAAQ,QAAQ;EAChB,QAAQ,QAAQ,YAAY,SAAS;CACvC;CAEA,IAAI,OAAO,QAAQ,QAAQ,WAAW;CACtC,IAAI,OAAO,QAAQ,QAAQ,WAAW;CACtC,IAAI,OAAO,SAAS,QAAQ,UAAU,IAAI;CAC1C,IAAI,OAAO,WAAW,QAAQ,UAAU,MAAM;CAC9C,IAAI,OAAO,WAAW,QAAQ,UAAU,MAAM;CAC9C,IAAI,OAAO,YAAY,QAAQ,UAAU,OAAO;AAClD;AAIA,SAAgB,SACd,mBAAmD,CAAC,GACpD,iBAAyC,CAAC,GAC1B;CAChB,MAAM,UACJ,OAAO,qBAAqB,aACxB;EAAE,SAAS;EAAkB,UAAU,eAAe;CAAS,IAC/D;CAGN,MAAM,WAAW,MADI,QAAQ,YAAY,QAAQ,UAAU,IACxB;CACnC,MAAM,UAAU,IAAmB,IAAI;CACvC,MAAM,UAAU,kBAAkB;CAClC,IAAI,iBAAiB;CAErB,MAAM,eAAe,cAAuB;EAC1C,IAAI,mBAAmB,WAAW;EAClC,QAAQ,WAAW,SAAS;EAC5B,iBAAiB;CACnB;CAEA,MAAM,eAAe,UAAU;EAC7B,IAAI,CAAC,SAAS,CAAC,SAAS,OAAO;EAE/B,MAAM,SAAS,SAAS,KAAK;EAC7B,MAAM,QAAQ,WAAW,OAAO,MAAM;EACtC,MAAM,aAAa,QAAQ,KAAK;EAEhC,IAAI,UAAU,OAAO,OAAO,QAAQ,QAAQ,wBAAwB,CAAC,QAAQ,cAC3E;EAEF,QAAQ,QAAQ,cAAc;EAC9B,QAAQ,UAAU,OAAO,MAAM;EAC/B,wBAAwB,OAAO,SAAS,OAAO;CACjD,CAAC;CAED,MAAM,iBAAiB,UAAU;EAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,SAAS,uBAAuB,GAAG;EAE3D,QAAQ,QAAQ,MAAM;EACtB,QAAQ,UAAU,MAAM,MAAM,SAAS,CAAC;EACxC,QAAQ,SAAS,MAAM,IAAI;CAC7B,CAAC;CAED,MAAM,uBAAuB,UAAU;EACrC,IAAI,CAAC,SAAS,CAAC,SAAS,OAAO;EAE/B,IAAI,MAAM,SAAS,oBACjB,QAAQ,qBAAqB;OACxB,IAAI,MAAM,SAAS,qBACxB,QAAQ,sBAAsB,MAAM,MAAM,MAAM,MAAM;OAEtD,QAAQ,mBAAmB,MAAM,IAAI;CAEzC,CAAC;CAED,MAAM,UAAU,aAAa,EAAE,WAAW,KAAK,CAAC;CAChD,kBAAkB,YAAY,KAAK,CAAC;CAEpC,MAAM,eAAe;EACnB,SAAS,QAAQ;CACnB;CAEA,MAAM,gBAAgB;EACpB,SAAS,QAAQ;CACnB;CAEA,OAAO;EACL;EACA;EACA;EACA;CACF;AACF;;;;AAKA,SAAgB,YACd,KACA,SACA,UAA8E,CAAC,GAC/E;CACA,MAAM,EAAE,OAAO,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAO,UAAU;CAEnE,SAAS,EACP,QAAQ,YAAY,cAAc;EAQhC,IANE,WAAW,YAAY,MAAM,IAAI,YAAY,KAC7C,UAAU,SAAS,QACnB,UAAU,QAAQ,OAClB,UAAU,UAAU,SACpB,UAAU,SAAS,MAGnB,QAAQ;CAEZ,EACF,CAAC;AACH;;;;;ACnQA,SAAgB,SACd,SACA,UAA2B,CAAC,GACZ;CAChB,MAAM,mBAAmB,MAAM,QAAQ,QAAQ,IAAI,QAAQ,WAAW,KAAA;CACtE,MAAM,iBAAiB,IAAI,mBAAmB,OAAQ,QAAQ,YAAY,IAAK;CAC/E,MAAM,WAAW,eAAe,eAAe,UAAU,kBAAkB,SAAS,KAAK;CAUzF,OAAO;EACL;EACA,cAAc;GACZ,eAAe,QAAQ;EACzB;EACA,eAAe;GACb,eAAe,QAAQ;EACzB;EACA,MAhBW,MACX,iBACC,UAAU;GACT,IAAI,SAAS,SAAS,OAAO,QAAQ,KAAK;EAC5C,GACA,EAAE,OAAO,OAAO,CAWb;CACL;AACF;;;;ACDA,SAAS,MAAM,OAAe,MAAsB;CAClD,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAC1C,MAAM,IAAI,WAAW,GAAG,KAAK,qCAAqC;CAEpE,OAAO;AACT;;AAGA,SAAgB,sBAAsB,SAAkD;CACtF,MAAM,YAAY,IAAI,MAAM,QAAQ,WAAW,WAAW,CAAC;CAC3D,MAAM,eAAe,IAAI,MAAM,QAAQ,cAAc,cAAc,CAAC;CACpE,MAAM,WAAW,IAAI,MAAM,QAAQ,YAAY,GAAG,UAAU,CAAC;CAC7D,MAAM,SAAS,IAAI,CAAC;CACpB,MAAM,YAAY,eAAe,KAAK,IAAI,GAAG,UAAU,QAAQ,aAAa,KAAK,CAAC;CAClF,MAAM,UAAU,eAAe,OAAO,UAAU,CAAC;CACjD,MAAM,QAAQ,eAAe,OAAO,UAAU,UAAU,KAAK;CAC7D,MAAM,QAAQ,eAAqC;EACjD,MAAM,eAAe,KAAK,IAAI,OAAO,OAAO,UAAU,KAAK;EAC3D,MAAM,aAAa,KAAK,IAAI,UAAU,OAAO,eAAe,aAAa,KAAK;EAC9E,OAAO;GACL;GACA;GACA,eAAe,KAAK,IAAI,GAAG,eAAe,SAAS,KAAK;GACxD,aAAa,KAAK,IAAI,UAAU,OAAO,aAAa,SAAS,KAAK;EACpE;CACF,CAAC;CAED,MAAM,YAAY,UAAkB;EAClC,MAAM,OAAO,KAAK,IAAI,UAAU,OAAO,MAAM,OAAO,QAAQ,CAAC;EAC7D,IAAI,SAAS,OAAO,OAAO,OAAO;EAClC,OAAO,QAAQ;EACf,OAAO;CACT;CACA,MAAM,cAAc,SAAS,KAAK,IAAI,OAAO,OAAO,UAAU,KAAK,CAAC;CAEpE,MAAM,gBAAgB,UAAkB;EACtC,MAAM,OAAO,MAAM,OAAO,WAAW;EACrC,IAAI,SAAS,UAAU,OAAO,OAAO;EACrC,UAAU,QAAQ;EAClB,MAAM;EACN,OAAO;CACT;CACA,MAAM,mBAAmB,UAAkB;EACzC,MAAM,OAAO,MAAM,OAAO,cAAc;EACxC,IAAI,SAAS,aAAa,OAAO,OAAO;EACxC,aAAa,QAAQ;EACrB,MAAM;EACN,OAAO;CACT;CACA,MAAM,eAAe,UAAkB;EACrC,MAAM,OAAO,MAAM,OAAO,UAAU;EACpC,IAAI,SAAS,SAAS,OAAO,OAAO;EACpC,SAAS,QAAQ;EACjB,OAAO;CACT;CACA,MAAM,YAAY,UAAkB;EAClC,IAAI,CAAC,OAAO,cAAc,KAAK,GAAG,MAAM,IAAI,WAAW,8BAA8B;EACrF,OAAO,SAAS,KAAK,IAAI,GAAG,OAAO,QAAQ,KAAK,CAAC;CACnD;CACA,MAAM,kBAAkB,OAAe,YAAoC,cAAc;EACvF,MAAM,OAAO,OAAO;EACpB,IAAI,SAAS,UAAU,SAAS,aAAa,UAAU,GAAG,OAAO;EACjE,IAAI,OAAO,OAAO;EAClB,IAAI,cAAc,SAAS,OAAO;OAC7B,IAAI,cAAc,UAAU,OAAO,KAAK,IAAI,GAAG,QAAQ,KAAK,MAAM,aAAa,QAAQ,CAAC,CAAC;OACzF,IAAI,cAAc,OAAO,OAAO,KAAK,IAAI,GAAG,QAAQ,IAAI,aAAa,KAAK;OAC1E,IAAI,QAAQ,OAAO,OAAO,OAAO;OACjC,IAAI,SAAS,OAAO,QAAQ,aAAa,OAC5C,OAAO,QAAQ,IAAI,aAAa;EAElC,OAAO,SAAS,IAAI;CACtB;CAEA,SAAS,QAAQ,iBAAiB,CAAC;CAEnC,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;AAGA,MAAa,qBAAqB;;;;;;ACvHlC,eAAe,aAAa;CAC1B,OAAO,OAAO;AAChB;AAEA,SAAS,SAAS,QAA6D;CAC7E,OAAO,QAAQ,MAAM,QAAQ,KAAK;AACpC;AAEA,SAAgB,cAAc,KAAoD;CAChF,MAAM,UAAU,SAAS;EACvB,OAAO;EACP,QAAQ;EACR,MAAM;EACN,KAAK;EACL,aAAa;CACf,CAAC;CAED,IAAI,QAA+C;CAEnD,MAAM,eAAe,WAAoE;EACvF,QAAQ,QAAQ,OAAO;EACvB,QAAQ,SAAS,OAAO;EACxB,QAAQ,OAAO,OAAO;EACtB,QAAQ,MAAM,OAAO;EACrB,QAAQ,cAAc;CACxB;CAEA,MAAM,gBAAgB;EACpB,MAAM,KAAK,SAAS,IAAI,KAAK;EAC7B,IAAI,OAAO,KAAA,GAAW;GACpB,QAAQ,QAAQ;GAChB,QAAQ,SAAS;GACjB,QAAQ,OAAO;GACf,QAAQ,MAAM;GACd,QAAQ,cAAc;GACtB;EACF;EAEA,MAAM,eAAe,oBAAoB,IAAI,KAAK;EAClD,IAAI,cAAc;GAChB,YAAY,YAAY;GACxB;EACF;EAEA,WAAgB,EACb,MAAM,WAAW;GAChB,MAAM,UAAU,0BAA0B,SAAS,OAAO,qBAAqB,IAAI,CAAC;GACpF,wBAAwB,OAAO;GAC/B,MAAM,SAAS,QAAQ,MAAM,SAAyB,KAAK,OAAO,EAAE;GACpE,IAAI,CAAC,QAAQ;GAEb,YAAY,MAAM;EACpB,CAAC,EACA,YAAY,CAAC,CAAC;CACnB;CAEA,QAAQ,UAAU;CAElB,gBAAgB;EACd,QAAQ;EACR,QAAQ,YAAY,SAAS,GAAG;CAClC,CAAC;CAED,kBAAkB;EAChB,IAAI,OAAO,cAAc,KAAK;CAChC,CAAC;CAED,OAAO;AACT"}