@usepatch/widget 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/persistence/normalize-url.ts","../src/viewport/viewport-presets.ts","../src/viewport/viewport-preview-frame.tsx","../src/surface/target-surface.tsx","../src/data/api-client.ts","../src/data/identity-storage.ts","../src/data/annotations-store.tsx","../src/data/popover-store.tsx","../src/capture/element-identification.ts","../src/capture/format-target-label.ts","../src/capture/target-resolution.ts","../src/capture/capture-mode.ts","../src/capture/capture-controller.tsx","../src/data/widget-ui-store.tsx","../src/env-token-resolver.ts","../../shared/src/afs/react-components.ts","../../shared/src/avatar-seed.ts","../../shared/src/client-avatars.ts","../src/thread/popover-position.ts","../src/ui/cn.ts","../src/ui/generated-client-avatar.tsx","../src/pin/pin.tsx","../src/ui/avatar.tsx","../src/ui/glyph-data.ts","../src/ui/glyph.tsx","../src/ui/patch-mark.tsx","../src/ui/tooltip-group.ts","../src/ui/tooltip.tsx","../src/fab/fab-dock.tsx","../src/persistence/proportional-offset.ts","../src/persistence/resolve-anchor.ts","../src/pin/annotation-attention.ts","../src/pin/pin-layer.tsx","../src/_compiled-styles.ts","../src/shadow-mount.tsx","../src/persistence/build-selector.ts","../src/capture/react-hints.ts","../src/capture/capture-payload.ts","../src/thread/actions.ts","../src/thread/thread-context.tsx","../src/ui/button.tsx","../src/thread/thread-confirm-delete.tsx","../src/thread/thread-confirm-discard.tsx","../src/ui/icon-button.tsx","../src/thread/thread-utils.ts","../src/thread/thread-dev-footer.tsx","../src/thread/thread-expand-context.tsx","../src/thread/thread-header.tsx","../src/thread/thread-messages.tsx","../src/ui/textarea.tsx","../src/thread/identity-form.tsx","../src/thread/thread-reply.tsx","../src/thread/thread-root.tsx","../src/thread/thread.tsx","../src/thread/thread-for-client.tsx","../src/thread/thread-for-studio.tsx","../src/thread/active-popover.tsx","../src/patch.tsx"],"names":["useReducedMotion","useState","useRef","useCallback","useEffect","jsx","motion","jsxs","createContext","frame","useMemo","AnimatePresence","use","setIdentity","TEXT_TAGS","truncate","quote","base","range","Ctx","useId","createElement","TOOLTIP_EASE","Fragment","INTERNAL_ATTR","createPortal","oneLine","tempIdCounter","nextTempId","submit","res","markResolved","runPatch","sizes","variants","FAB_EASE","useLayoutEffect"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","file":"index.cjs","sourcesContent":["/**\n * Canonical form for page-scoping pins. Strips a single trailing slash from\n * paths so `/pricing` and `/pricing/` map to the same bucket; root `/` is\n * preserved.\n */\nexport function normalizeUrl(input: string): string {\n if (input.length <= 1) return input;\n if (!input.endsWith(\"/\")) return input;\n // Preserve a bare-origin URL like `https://example.com/` (path is just `/`).\n try {\n const u = new URL(input);\n if (u.pathname === \"/\" && input.endsWith(\"/\")) {\n // Drop the implicit root slash to canonicalize against\n // `origin + pathname` callers that build `https://example.com` (no slash).\n return `${u.origin}${u.search}${u.hash}`;\n }\n } catch {\n // Non-URL strings: fall through to the trailing-slash strip.\n }\n return input.slice(0, -1);\n}\n","import type { AnnotationViewport } from \"@patch/shared\";\nimport type { GlyphName } from \"../ui/glyph\";\n\nexport type ViewportPreset = {\n viewport: AnnotationViewport;\n label: string;\n width: number | null;\n height: number | null;\n glyph: GlyphName;\n};\n\nexport const VIEWPORT_PRESETS: Record<AnnotationViewport, ViewportPreset> = {\n desktop: {\n viewport: \"desktop\",\n label: \"Desktop\",\n width: null,\n height: null,\n glyph: \"desktop\",\n },\n tablet: {\n viewport: \"tablet\",\n label: \"Tablet\",\n width: 834,\n height: 1194,\n glyph: \"tablet\",\n },\n mobile: {\n viewport: \"mobile\",\n label: \"Mobile\",\n width: 390,\n height: 844,\n glyph: \"mobile\",\n },\n};\n\nexport const VIEWPORT_ORDER: AnnotationViewport[] = [\"desktop\", \"tablet\", \"mobile\"];\n\nexport function viewportTooltip(viewport: AnnotationViewport): string {\n const preset = VIEWPORT_PRESETS[viewport];\n if (preset.width === null || preset.height === null) return preset.label;\n return `${preset.label} (${preset.width}px × ${preset.height}px)`;\n}\n\nexport function viewportSizeFor(\n viewport: AnnotationViewport,\n fallback: { width: number; height: number },\n): { width: number; height: number } {\n const preset = VIEWPORT_PRESETS[viewport];\n return {\n width: preset.width ?? fallback.width,\n height: preset.height ?? fallback.height,\n };\n}\n","import { motion, useReducedMotion } from \"motion/react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ViewportPreset } from \"./viewport-presets\";\n\nconst FIT_PADDING_X = 32;\nconst FIT_PADDING_Y = 32;\nconst BLOCKED_TIMEOUT_MS = 3_000;\n\n// Enter/exit settle with a strong ease-out; the on-screen device resize is a\n// morph, so it uses a smooth (not aggressive) ease-in-out.\nconst EASE_OUT_SOFT_CSS = \"cubic-bezier(0.16, 1, 0.3, 1)\";\nconst EASE_OUT = [0.22, 0.61, 0.36, 1] as const;\n// Real physics springs (Apple-style { bounce, duration }) for the device\n// entrance scale and the resize width/height. Low bounce = subtle, organic, and\n// velocity-aware so rapid viewport toggles pick up momentum instead of resetting.\nconst MORPH_SPRING_BOUNCE = 0.3;\nconst MORPH_SPRING_DURATION = 0.5;\nconst ENTER_SPRING_BOUNCE = 0.34;\nconst ENTER_SPRING_DURATION = 0.5;\n\n// Surface enter darkens the backdrop first, then floats the device in.\nconst BACKDROP_ENTER_DURATION = 0.24;\nconst BACKDROP_EXIT_DURATION = 0.22;\nconst DEVICE_ENTER_DELAY = 0.12;\nconst DEVICE_ENTER_DURATION = 0.42;\nconst DEVICE_EXIT_DURATION = 0.2;\n\n// Cross-viewport choreography: fade/blur the page out, smoothly morph the device\n// (single centered box that owns width/height → no drift, no squish artefacts),\n// then fade/blur the new page in.\n//\n// The page blur/fade timing overlaps the spring on both ends. Phase holds say\n// when each step begins; they're tuned against the spring's settle, not a fixed\n// morph duration (the spring owns its own timing).\nconst CONTENT_OUT_MS = 200;\nconst CONTENT_IN_MS = 260;\nconst COVER_HOLD_MS = 70;\nconst RESIZE_HOLD_MS = 180;\nconst REVEAL_HOLD_MS = 260;\nconst CONTENT_BLUR_PX = 8;\n\n// Device bezel. Sits outside the screen (content-box) so the page keeps filling\n// the screen with no letterboxing; opaque so it reads against any backdrop.\nconst BEZEL_PX = 4;\nconst BEZEL_COLOR = \"#d9d9dd\";\nconst CARD_RADIUS = 30;\nconst CARD_SHADOW = [\n \"0 2px 8px rgba(0,0,0,0.20)\",\n \"0 30px 60px -18px rgba(0,0,0,0.55)\",\n \"0 70px 130px -52px rgba(0,0,0,0.55)\",\n].join(\", \");\n\ntype Phase = \"stable\" | \"cover\" | \"resize\" | \"reveal\";\n\ntype Props = {\n src: string;\n viewport: ViewportPreset;\n overlayWindow: Window;\n onFrameElement: (element: HTMLIFrameElement | null) => void;\n onReadyChange: (ready: boolean) => void;\n onBlockedChange: (blocked: boolean) => void;\n};\n\ntype TestWindow = Window & {\n happyDOM?: { settings?: { disableIframePageLoading?: boolean } };\n};\n\ntype DisplayFrame = {\n viewport: string;\n width: number;\n height: number;\n scale: number;\n};\n\nfunction fitScale(win: Window, width: number, height: number): number {\n const availableWidth = Math.max(320, win.innerWidth - FIT_PADDING_X * 2);\n const availableHeight = Math.max(320, win.innerHeight - FIT_PADDING_Y * 2);\n return Math.min(1, availableWidth / width, availableHeight / height);\n}\n\nfunction canAccessFrame(frame: HTMLIFrameElement): boolean {\n try {\n return Boolean(frame.contentWindow && frame.contentDocument?.body);\n } catch {\n return false;\n }\n}\n\nexport function ViewportPreviewFrame({\n src,\n viewport,\n overlayWindow,\n onFrameElement,\n onReadyChange,\n onBlockedChange,\n}: Props) {\n const reduceMotion = useReducedMotion();\n const width = viewport.width ?? overlayWindow.innerWidth;\n const height = viewport.height ?? overlayWindow.innerHeight;\n const targetViewport = viewport.viewport;\n const targetSig = `${targetViewport}:${width}:${height}`;\n const frameNetworkDisabled = Boolean(\n (overlayWindow as TestWindow).happyDOM?.settings?.disableIframePageLoading,\n );\n\n const [displayFrame, setDisplayFrame] = useState<DisplayFrame>(() => ({\n viewport: targetViewport,\n width,\n height,\n scale: fitScale(overlayWindow, width, height),\n }));\n const [phase, setPhase] = useState<Phase>(\"stable\");\n const [loaded, setLoaded] = useState(false);\n const [blocked, setBlocked] = useState(false);\n\n const loadedRef = useRef(false);\n const frameRef = useRef<HTMLIFrameElement | null>(null);\n\n const displaySig = `${displayFrame.viewport}:${displayFrame.width}:${displayFrame.height}`;\n const pending = displaySig !== targetSig;\n // Content is hidden while a change is queued or the cover/resize phases run.\n // The reveal phase brings it back; pins only return once fully stable.\n const transitioning = pending || phase === \"cover\" || phase === \"resize\";\n const contentVisible = loaded && !blocked && !transitioning;\n const ready = loaded && !blocked && phase === \"stable\" && !pending;\n\n const setFrameRef = useCallback(\n (element: HTMLIFrameElement | null) => {\n frameRef.current = element;\n onFrameElement(element);\n },\n [onFrameElement],\n );\n\n const markLoaded = useCallback(() => {\n const frame = frameRef.current;\n if (!frame || !canAccessFrame(frame)) {\n loadedRef.current = false;\n setLoaded(false);\n setBlocked(true);\n return;\n }\n loadedRef.current = true;\n setLoaded(true);\n setBlocked(false);\n }, []);\n\n // Re-fit when the outer window resizes. Scale is excluded from the transition\n // signature, so this never kicks off the cover/resize choreography.\n const updateScale = useCallback(() => {\n setDisplayFrame((current) => {\n const scale = fitScale(overlayWindow, current.width, current.height);\n return current.scale === scale ? current : { ...current, scale };\n });\n }, [overlayWindow]);\n\n useEffect(() => {\n updateScale();\n overlayWindow.addEventListener(\"resize\", updateScale);\n return () => overlayWindow.removeEventListener(\"resize\", updateScale);\n }, [overlayWindow, updateScale]);\n\n // The iframe only reloads when its src changes (viewport-only switches reuse\n // the loaded document), so load + blocked state resets on src alone.\n // biome-ignore lint/correctness/useExhaustiveDependencies: src is the navigation trigger that resets load state, not a value read in the effect body\n useEffect(() => {\n loadedRef.current = false;\n setLoaded(false);\n setBlocked(false);\n const timeout = overlayWindow.setTimeout(() => {\n if (!loadedRef.current) setBlocked(true);\n }, BLOCKED_TIMEOUT_MS);\n return () => overlayWindow.clearTimeout(timeout);\n }, [src, overlayWindow]);\n\n // Single sequencer: each phase schedules exactly one timer for the next step.\n useEffect(() => {\n if (reduceMotion) {\n if (pending) {\n setDisplayFrame({\n viewport: targetViewport,\n width,\n height,\n scale: fitScale(overlayWindow, width, height),\n });\n }\n if (phase !== \"stable\") setPhase(\"stable\");\n return;\n }\n\n switch (phase) {\n case \"stable\": {\n if (pending) setPhase(\"cover\");\n return;\n }\n case \"cover\": {\n const timer = overlayWindow.setTimeout(() => setPhase(\"resize\"), COVER_HOLD_MS);\n return () => overlayWindow.clearTimeout(timer);\n }\n case \"resize\": {\n // Snap the new dimensions under the blur; Framer springs the device\n // width/height to them while the embedded page reflows out of sight.\n if (pending) {\n setDisplayFrame({\n viewport: targetViewport,\n width,\n height,\n scale: fitScale(overlayWindow, width, height),\n });\n }\n const timer = overlayWindow.setTimeout(() => setPhase(\"reveal\"), RESIZE_HOLD_MS);\n return () => overlayWindow.clearTimeout(timer);\n }\n case \"reveal\": {\n const timer = overlayWindow.setTimeout(() => setPhase(\"stable\"), REVEAL_HOLD_MS);\n return () => overlayWindow.clearTimeout(timer);\n }\n }\n }, [phase, pending, reduceMotion, overlayWindow, targetViewport, width, height]);\n\n useEffect(() => {\n onReadyChange(ready);\n }, [ready, onReadyChange]);\n\n useEffect(() => {\n onBlockedChange(blocked);\n }, [blocked, onBlockedChange]);\n\n const backdropEnter = reduceMotion\n ? { duration: 0 }\n : { duration: BACKDROP_ENTER_DURATION, ease: EASE_OUT };\n const backdropExit = reduceMotion\n ? { duration: 0 }\n : { duration: BACKDROP_EXIT_DURATION, ease: EASE_OUT, delay: DEVICE_EXIT_DURATION * 0.5 };\n const deviceExit = reduceMotion\n ? { duration: 0 }\n : { duration: DEVICE_EXIT_DURATION, ease: EASE_OUT };\n\n // Per-property: opacity fades on a tween, while scale (entrance) and the\n // width/height (resize) ride real springs.\n const deviceTransition = reduceMotion\n ? { duration: 0 }\n : {\n opacity: { duration: DEVICE_ENTER_DURATION, ease: EASE_OUT, delay: DEVICE_ENTER_DELAY },\n scale: {\n type: \"spring\" as const,\n bounce: ENTER_SPRING_BOUNCE,\n duration: ENTER_SPRING_DURATION,\n delay: DEVICE_ENTER_DELAY,\n },\n width: {\n type: \"spring\" as const,\n bounce: MORPH_SPRING_BOUNCE,\n duration: MORPH_SPRING_DURATION,\n },\n height: {\n type: \"spring\" as const,\n bounce: MORPH_SPRING_BOUNCE,\n duration: MORPH_SPRING_DURATION,\n },\n };\n const contentSeconds = (contentVisible ? CONTENT_IN_MS : CONTENT_OUT_MS) / 1_000;\n const contentTransition = reduceMotion\n ? undefined\n : `opacity ${contentSeconds}s ${EASE_OUT_SOFT_CSS}, filter ${contentSeconds}s ${EASE_OUT_SOFT_CSS}`;\n\n // The screen (content area); the bezel is drawn outside it via content-box.\n const screenWidth = displayFrame.width * displayFrame.scale;\n const screenHeight = displayFrame.height * displayFrame.scale;\n\n return (\n <motion.div\n data-patch-preview-backdrop=\"\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1, transition: backdropEnter }}\n exit={{ opacity: 0, transition: backdropExit }}\n className=\"fixed inset-0 z-[2147483643] grid place-items-center p-8\"\n style={{\n backgroundColor: \"#0C0C0E\",\n backgroundImage:\n \"radial-gradient(120% 75% at 50% 30%, rgba(255,255,255,0.055), rgba(0,0,0,0) 58%)\",\n }}\n >\n <motion.div\n initial={\n reduceMotion\n ? { opacity: 0, width: screenWidth, height: screenHeight }\n : { opacity: 0, scale: 0.8, width: screenWidth, height: screenHeight }\n }\n animate={{ opacity: 1, scale: 1, width: screenWidth, height: screenHeight }}\n exit={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.92, transition: deviceExit }}\n transition={deviceTransition}\n data-patch-preview-shell=\"\"\n className=\"relative overflow-hidden bg-white\"\n style={{\n boxSizing: \"content-box\",\n border: `${BEZEL_PX}px solid ${BEZEL_COLOR}`,\n borderRadius: CARD_RADIUS,\n boxShadow: CARD_SHADOW,\n willChange: \"width, height\",\n }}\n >\n <div\n aria-hidden={!contentVisible}\n className=\"absolute top-0 left-0 origin-top-left\"\n style={{\n width: displayFrame.width,\n height: displayFrame.height,\n transform: `scale(${displayFrame.scale})`,\n opacity: contentVisible ? 1 : 0,\n filter: reduceMotion || contentVisible ? \"none\" : `blur(${CONTENT_BLUR_PX}px)`,\n transition: contentTransition,\n pointerEvents: contentVisible ? \"auto\" : \"none\",\n willChange: \"opacity, filter\",\n }}\n >\n <iframe\n ref={setFrameRef}\n data-patch-preview-frame=\"\"\n data-patch-preview-src={src}\n title={`${viewport.label} preview`}\n tabIndex={contentVisible ? 0 : -1}\n src={frameNetworkDisabled ? undefined : src}\n srcDoc={frameNetworkDisabled ? \"<!doctype html><html><body></body></html>\" : undefined}\n onLoad={markLoaded}\n className=\"block bg-white\"\n style={{\n width: displayFrame.width,\n height: displayFrame.height,\n border: 0,\n }}\n />\n </div>\n <BlockedFrameMessage visible={blocked} />\n </motion.div>\n </motion.div>\n );\n}\n\nfunction BlockedFrameMessage({ visible }: { visible: boolean }) {\n if (!visible) return null;\n return (\n <div className=\"absolute inset-0 grid place-items-center p-8\">\n <div className=\"max-w-[320px] rounded-[20px] bg-white px-5 py-4 text-center text-[13px] leading-[1.45] text-foreground shadow-[0_18px_44px_-18px_rgba(0,0,0,0.28)]\">\n This site blocks embedding. Add X-Frame-Options: SAMEORIGIN or frame-ancestors 'self' to\n enable viewport previews.\n </div>\n </div>\n );\n}\n","import type { AnnotationViewport } from \"@patch/shared\";\nimport { AnimatePresence } from \"motion/react\";\nimport { createContext, type ReactNode, use, useEffect, useMemo, useRef, useState } from \"react\";\nimport { normalizeUrl } from \"../persistence/normalize-url\";\nimport { VIEWPORT_PRESETS } from \"../viewport/viewport-presets\";\nimport { ViewportPreviewFrame } from \"../viewport/viewport-preview-frame\";\n\nexport type SurfaceSize = {\n width: number;\n height: number;\n};\n\nexport type SurfacePoint = {\n viewportX: number;\n viewportY: number;\n};\n\nexport type SurfaceRect = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type TargetSurface = {\n targetWindow: Window;\n targetDocument: Document;\n overlayWindow: Window;\n overlayDocument: Document;\n getTargetViewport: () => SurfaceSize;\n getOverlayViewport: () => SurfaceSize;\n getTargetScrollY: () => number;\n getPageUrl: () => string;\n targetPointToOverlay: (point: SurfacePoint) => SurfacePoint;\n targetRectToOverlay: (rect: SurfaceRect) => SurfaceRect;\n eventTargetElement: (target: EventTarget | null) => Element | null;\n};\n\nexport type ViewportSurfaceState = {\n activeViewport: AnnotationViewport;\n setActiveViewport: (viewport: AnnotationViewport) => void;\n isPreviewing: boolean;\n previewReady: boolean;\n previewBlocked: boolean;\n};\n\ntype ResizeObserverWindow = Window & {\n ResizeObserver?: typeof ResizeObserver;\n};\n\ntype DomRealmWindow = Window & typeof globalThis;\n\nconst TargetSurfaceContext = createContext<TargetSurface | null>(null);\nconst ViewportSurfaceContext = createContext<ViewportSurfaceState | null>(null);\nconst PREVIEW_PARAM = \"__patch_preview\";\n\nexport function createTopLevelTargetSurface(): TargetSurface | null {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return null;\n\n return {\n targetWindow: window,\n targetDocument: document,\n overlayWindow: window,\n overlayDocument: document,\n getTargetViewport: () => ({ width: window.innerWidth, height: window.innerHeight }),\n getOverlayViewport: () => ({ width: window.innerWidth, height: window.innerHeight }),\n getTargetScrollY: () => window.scrollY,\n getPageUrl: () => normalizeUrl(`${window.location.origin}${window.location.pathname}`),\n targetPointToOverlay: (point) => ({ ...point }),\n targetRectToOverlay: (rect) => ({ ...rect }),\n eventTargetElement: (target) => (target instanceof window.Element ? target : null),\n };\n}\n\nexport function createPreviewFrameUrl(win: Window): string {\n const url = new URL(win.location.href);\n url.searchParams.set(PREVIEW_PARAM, \"1\");\n return url.toString();\n}\n\nexport function isPatchPreviewFrame(win: Window = window): boolean {\n try {\n return new URL(win.location.href).searchParams.get(PREVIEW_PARAM) === \"1\";\n } catch {\n return false;\n }\n}\n\nexport function createIframeTargetSurface(\n overlaySurface: TargetSurface,\n frame: HTMLIFrameElement,\n viewport: SurfaceSize,\n): TargetSurface | null {\n const targetWindow = frame.contentWindow;\n const targetDocument = frame.contentDocument;\n if (!targetWindow || !targetDocument) return null;\n\n function frameRect() {\n return frame.getBoundingClientRect();\n }\n\n function scale() {\n const rect = frameRect();\n return viewport.width > 0 ? rect.width / viewport.width : 1;\n }\n\n function iframeEventTargetElement(target: EventTarget | null): Element | null {\n if (!target) return null;\n const ElementCtor = (targetWindow as DomRealmWindow).Element;\n return target instanceof ElementCtor ? target : null;\n }\n\n return {\n targetWindow,\n targetDocument,\n overlayWindow: overlaySurface.overlayWindow,\n overlayDocument: overlaySurface.overlayDocument,\n getTargetViewport: () => viewport,\n getOverlayViewport: overlaySurface.getOverlayViewport,\n getTargetScrollY: () => targetWindow.scrollY,\n getPageUrl: () =>\n normalizeUrl(`${targetWindow.location.origin}${targetWindow.location.pathname}`),\n targetPointToOverlay: (point) => {\n const rect = frameRect();\n const s = scale();\n return {\n viewportX: rect.left + point.viewportX * s,\n viewportY: rect.top + point.viewportY * s,\n };\n },\n targetRectToOverlay: (rect) => {\n const frame = frameRect();\n const s = scale();\n return {\n x: frame.left + rect.x * s,\n y: frame.top + rect.y * s,\n width: rect.width * s,\n height: rect.height * s,\n };\n },\n eventTargetElement: iframeEventTargetElement,\n };\n}\n\nexport function createResizeObserverForWindow(\n win: Window,\n callback: ResizeObserverCallback,\n): ResizeObserver {\n const ResizeObserverCtor = (win as ResizeObserverWindow).ResizeObserver ?? ResizeObserver;\n return new ResizeObserverCtor(callback);\n}\n\nexport function TargetSurfaceProvider({ children }: { children: ReactNode }) {\n const topSurface = useMemo(() => createTopLevelTargetSurface(), []);\n const [activeViewport, setActiveViewport] = useState<AnnotationViewport>(\"desktop\");\n const [frameElement, setFrameElement] = useState<HTMLIFrameElement | null>(null);\n const [frameReady, setFrameReady] = useState(false);\n const [frameBlocked, setFrameBlocked] = useState(false);\n // Stays true while the preview frame plays its exit animation, so target pins\n // never reappear over the still-visible backdrop on the way back to desktop.\n const [leavingPreview, setLeavingPreview] = useState(false);\n const isPreviewing = activeViewport !== \"desktop\";\n const previewActive = isPreviewing || leavingPreview;\n const activePreset = VIEWPORT_PRESETS[activeViewport];\n const previewViewport =\n activePreset.width && activePreset.height\n ? { width: activePreset.width, height: activePreset.height }\n : null;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: activeViewport is the reset trigger for frame readiness, while the iframe element stays mounted across viewport transitions\n useEffect(() => {\n setFrameReady(false);\n setFrameBlocked(false);\n }, [activeViewport]);\n\n const wasPreviewingRef = useRef(isPreviewing);\n useEffect(() => {\n if (wasPreviewingRef.current && !isPreviewing) setLeavingPreview(true);\n else if (!wasPreviewingRef.current && isPreviewing) setLeavingPreview(false);\n wasPreviewingRef.current = isPreviewing;\n }, [isPreviewing]);\n\n const surface = useMemo(() => {\n if (!topSurface) return null;\n if (!isPreviewing || !frameReady || frameBlocked || !frameElement || !previewViewport) {\n return topSurface;\n }\n return createIframeTargetSurface(topSurface, frameElement, previewViewport) ?? topSurface;\n }, [frameBlocked, frameElement, frameReady, isPreviewing, previewViewport, topSurface]);\n\n const viewportState = useMemo<ViewportSurfaceState>(\n () => ({\n activeViewport,\n setActiveViewport,\n isPreviewing: previewActive,\n previewReady: previewActive ? isPreviewing && frameReady && !frameBlocked : true,\n previewBlocked: isPreviewing && frameBlocked,\n }),\n [activeViewport, frameBlocked, frameReady, isPreviewing, previewActive],\n );\n\n const previewUrl = useMemo(\n () => (topSurface ? createPreviewFrameUrl(topSurface.targetWindow) : \"\"),\n [topSurface],\n );\n\n if (!surface || !topSurface) return null;\n\n return (\n <ViewportSurfaceContext.Provider value={viewportState}>\n <TargetSurfaceContext.Provider value={surface}>\n {children}\n <AnimatePresence onExitComplete={() => setLeavingPreview(false)}>\n {isPreviewing && previewViewport ? (\n <ViewportPreviewFrame\n src={previewUrl}\n viewport={activePreset}\n overlayWindow={topSurface.overlayWindow}\n onFrameElement={setFrameElement}\n onReadyChange={setFrameReady}\n onBlockedChange={setFrameBlocked}\n />\n ) : null}\n </AnimatePresence>\n </TargetSurfaceContext.Provider>\n </ViewportSurfaceContext.Provider>\n );\n}\n\nexport function useTargetSurface(): TargetSurface {\n const surface = use(TargetSurfaceContext);\n const fallback = useMemo(() => createTopLevelTargetSurface(), []);\n if (surface) return surface;\n if (fallback) return fallback;\n throw new Error(\"useTargetSurface must run in a browser document\");\n}\n\nexport function useViewportSurfaceState(): ViewportSurfaceState {\n const state = use(ViewportSurfaceContext);\n const [fallbackViewport, setFallbackViewport] = useState<AnnotationViewport>(\"desktop\");\n const fallback = useMemo<ViewportSurfaceState>(\n () => ({\n activeViewport: fallbackViewport,\n setActiveViewport: setFallbackViewport,\n isPreviewing: false,\n previewReady: true,\n previewBlocked: false,\n }),\n [fallbackViewport],\n );\n return state ?? fallback;\n}\n","import type { AnnotationViewport, WidgetAnnotationInput } from \"@patch/shared\";\nimport type { ClientIdentity, MeResponse, WidgetAnnotation } from \"./types\";\n\nexport const CLIENT_ID_HEADER = \"X-Patch-Client-Id\";\n\nexport type ApiConfig = {\n apiBase: string;\n token: string;\n clientUserId?: string;\n};\n\nexport type ApiError = { ok: false; error: string };\nexport type KickoffResponse = { ok: true } | ApiError;\n\nfunction headers(cfg: ApiConfig, json: boolean): HeadersInit {\n return {\n ...(json ? { \"Content-Type\": \"application/json\" } : {}),\n Authorization: `Bearer ${cfg.token}`,\n ...(cfg.clientUserId ? { [CLIENT_ID_HEADER]: cfg.clientUserId } : {}),\n };\n}\n\nexport type ApiClient = {\n listAnnotations(viewport?: AnnotationViewport): Promise<WidgetAnnotation[]>;\n fetchMe(): Promise<MeResponse | null>;\n postIdentity(input: {\n name: string;\n email: string;\n avatarSeed: string;\n }): Promise<ClientIdentity | null>;\n createAnnotation(payload: WidgetAnnotationInput): Promise<{ id: string } | null>;\n reply(annotationId: string, input: { content: string }): Promise<{ id: string } | null>;\n deleteAnnotation(annotationId: string): Promise<{ ok: true } | null>;\n deleteMessage(annotationId: string, messageId: string): Promise<{ ok: true } | null>;\n kickoff(annotationId: string, input: { guidance?: string }): Promise<KickoffResponse | null>;\n resolve(annotationId: string): Promise<{ ok: true } | null>;\n reopen(annotationId: string): Promise<{ ok: true } | null>;\n};\n\nasync function jsonFetch<T>(url: string, init: RequestInit): Promise<T | null> {\n try {\n const res = await fetch(url, init);\n if (!res.ok) return null;\n const text = await res.text();\n return text ? (JSON.parse(text) as T) : ({} as T);\n } catch {\n return null;\n }\n}\n\nasync function jsonActionFetch<T extends { ok: true }>(\n url: string,\n init: RequestInit,\n): Promise<T | ApiError | null> {\n try {\n const res = await fetch(url, init);\n const text = await res.text();\n const data = text ? (JSON.parse(text) as unknown) : null;\n if (!res.ok) {\n const error =\n data && typeof data === \"object\" && typeof (data as { error?: unknown }).error === \"string\"\n ? (data as { error: string }).error\n : \"Request failed.\";\n return { ok: false, error };\n }\n return (data ?? { ok: true }) as T;\n } catch {\n return null;\n }\n}\n\nexport function createApiClient(cfg: ApiConfig): ApiClient {\n return {\n async listAnnotations(viewport) {\n const params = viewport ? `?viewport=${encodeURIComponent(viewport)}` : \"\";\n const data = await jsonFetch<{ annotations: WidgetAnnotation[] }>(\n `${cfg.apiBase}/api/widget/annotations${params}`,\n { method: \"GET\", credentials: \"include\", headers: headers(cfg, false) },\n );\n return data?.annotations ?? [];\n },\n async fetchMe() {\n return jsonFetch<MeResponse>(`${cfg.apiBase}/api/widget/me`, {\n method: \"GET\",\n credentials: \"include\",\n headers: headers(cfg, false),\n });\n },\n async postIdentity(input) {\n const data = await jsonFetch<{\n id: string;\n name: string;\n email: string;\n avatarSeed?: string;\n }>(`${cfg.apiBase}/api/widget/identity`, {\n method: \"POST\",\n credentials: \"include\",\n headers: headers(cfg, true),\n body: JSON.stringify(input),\n });\n return data\n ? {\n clientUserId: data.id,\n name: data.name,\n email: data.email,\n avatarSeed: data.avatarSeed ?? data.id,\n }\n : null;\n },\n async createAnnotation(payload) {\n return jsonFetch<{ id: string }>(`${cfg.apiBase}/api/widget/annotations`, {\n method: \"POST\",\n credentials: \"include\",\n headers: headers(cfg, true),\n body: JSON.stringify(payload),\n });\n },\n async reply(annotationId, input) {\n return jsonFetch<{ id: string }>(\n `${cfg.apiBase}/api/widget/annotations/${annotationId}/reply`,\n {\n method: \"POST\",\n credentials: \"include\",\n headers: headers(cfg, true),\n body: JSON.stringify(input),\n },\n );\n },\n async deleteAnnotation(annotationId) {\n return jsonFetch<{ ok: true }>(`${cfg.apiBase}/api/widget/annotations/${annotationId}`, {\n method: \"DELETE\",\n credentials: \"include\",\n headers: headers(cfg, false),\n });\n },\n async deleteMessage(annotationId, messageId) {\n return jsonFetch<{ ok: true }>(\n `${cfg.apiBase}/api/widget/annotations/${annotationId}/messages/${messageId}`,\n {\n method: \"DELETE\",\n credentials: \"include\",\n headers: headers(cfg, false),\n },\n );\n },\n async kickoff(annotationId, input) {\n return jsonActionFetch<{ ok: true }>(\n `${cfg.apiBase}/api/widget/annotations/${annotationId}/kickoff`,\n {\n method: \"POST\",\n credentials: \"include\",\n headers: headers(cfg, true),\n body: JSON.stringify(input),\n },\n );\n },\n async resolve(annotationId) {\n return jsonFetch<{ ok: true }>(\n `${cfg.apiBase}/api/widget/annotations/${annotationId}/resolve`,\n { method: \"POST\", credentials: \"include\", headers: headers(cfg, true) },\n );\n },\n async reopen(annotationId) {\n return jsonFetch<{ ok: true }>(\n `${cfg.apiBase}/api/widget/annotations/${annotationId}/reopen`,\n { method: \"POST\", credentials: \"include\", headers: headers(cfg, true) },\n );\n },\n };\n}\n","import type { ClientIdentity } from \"./types\";\n\nconst STORAGE_KEY = \"patch.clientIdentity\";\nconst AVATAR_SEED_STORAGE_KEY = \"patch.clientAvatarSeed\";\n\ntype IdentityMap = Record<string, ClientIdentity | undefined>;\ntype AvatarSeedMap = Record<string, string | undefined>;\n\nfunction readMap(): IdentityMap {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (parsed && typeof parsed === \"object\") return parsed as IdentityMap;\n return {};\n } catch {\n return {};\n }\n}\n\nexport function readStoredIdentity(projectKey: string): ClientIdentity | null {\n return readMap()[projectKey] ?? null;\n}\n\nexport function writeStoredIdentity(projectKey: string, identity: ClientIdentity): void {\n if (typeof window === \"undefined\") return;\n try {\n const map = readMap();\n map[projectKey] = identity;\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(map));\n } catch {\n // localStorage may be disabled — degrade quietly\n }\n}\n\nexport function clearStoredIdentity(projectKey: string): void {\n if (typeof window === \"undefined\") return;\n try {\n const map = readMap();\n delete map[projectKey];\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(map));\n } catch {\n // localStorage may be disabled — degrade quietly\n }\n}\n\nfunction readAvatarSeedMap(): AvatarSeedMap {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(AVATAR_SEED_STORAGE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (parsed && typeof parsed === \"object\") return parsed as AvatarSeedMap;\n return {};\n } catch {\n return {};\n }\n}\n\nfunction newAvatarSeed(): string {\n const crypto = globalThis.crypto;\n const random =\n typeof crypto?.randomUUID === \"function\"\n ? crypto.randomUUID()\n : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n return `client-avatar:${random}`;\n}\n\nexport function getOrCreateStoredAvatarSeed(projectKey: string): string {\n if (typeof window === \"undefined\") return newAvatarSeed();\n try {\n const map = readAvatarSeedMap();\n const existing = map[projectKey];\n if (existing) return existing;\n const seed = newAvatarSeed();\n map[projectKey] = seed;\n window.localStorage.setItem(AVATAR_SEED_STORAGE_KEY, JSON.stringify(map));\n return seed;\n } catch {\n return newAvatarSeed();\n }\n}\n","import type { AnnotationViewport } from \"@patch/shared\";\nimport {\n createContext,\n type ReactNode,\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { normalizeUrl } from \"../persistence/normalize-url\";\nimport { useTargetSurface, useViewportSurfaceState } from \"../surface/target-surface\";\nimport { type ApiClient, createApiClient } from \"./api-client\";\nimport {\n getOrCreateStoredAvatarSeed,\n readStoredIdentity,\n writeStoredIdentity,\n} from \"./identity-storage\";\nimport type { ClientIdentity, StudioInfo, ViewerKind, WidgetAnnotation } from \"./types\";\n\nconst POLL_INTERVAL_MS = 20_000;\n\nexport type EphemeralPin = {\n tempId: string;\n viewportX: number;\n viewportY: number;\n documentY: number;\n};\n\ntype Store = {\n apiClient: ApiClient;\n ready: boolean;\n viewerKind: ViewerKind;\n agentRunReadiness: { ready: boolean; message: string | null } | null;\n activeViewport: AnnotationViewport;\n clientAvatarSeed: string;\n identity: ClientIdentity | null;\n studio: StudioInfo | null;\n annotations: WidgetAnnotation[];\n annotationsReady: boolean;\n ephemerals: EphemeralPin[];\n refresh: () => Promise<void>;\n setActiveViewport: (viewport: AnnotationViewport) => void;\n setIdentity: (next: ClientIdentity) => Promise<ClientIdentity | null>;\n signOut: () => void;\n addEphemeral: (pin: EphemeralPin) => void;\n removeEphemeral: (tempId: string) => void;\n applyAnnotationUpdate: (next: WidgetAnnotation) => void;\n updateAnnotation: (\n annotationId: string,\n updater: (current: WidgetAnnotation) => WidgetAnnotation | null,\n ) => void;\n replaceAnnotationId: (tempId: string, annotationId: string) => void;\n};\n\nconst AnnotationsContext = createContext<Store | null>(null);\n\ntype ProviderProps = {\n projectToken: string;\n apiBase: string;\n children: ReactNode;\n};\n\nfunction mergeServerAnnotations(\n current: WidgetAnnotation[],\n incoming: WidgetAnnotation[],\n): WidgetAnnotation[] {\n const currentById = new Map(current.map((annotation) => [annotation.id, annotation]));\n const incomingIds = new Set(incoming.map((annotation) => annotation.id));\n\n const merged = incoming.map((serverAnnotation) => {\n const local = currentById.get(serverAnnotation.id);\n if (!local) return serverAnnotation;\n\n const serverMessageIds = new Set(serverAnnotation.thread.map((message) => message.id));\n const localPendingMessages = local.thread.filter(\n (message) => message.deliveryStatus && !serverMessageIds.has(message.id),\n );\n let next =\n localPendingMessages.length > 0\n ? {\n ...serverAnnotation,\n thread: [...serverAnnotation.thread, ...localPendingMessages],\n }\n : serverAnnotation;\n\n if (local.optimisticAction === \"resolve-pending\" && serverAnnotation.status !== \"resolved\") {\n next = {\n ...next,\n status: local.status,\n resolvedBy: local.resolvedBy,\n resolvedAt: local.resolvedAt,\n optimisticAction: local.optimisticAction,\n };\n }\n\n if (local.optimisticAction === \"reopen-pending\" && serverAnnotation.status === \"resolved\") {\n next = {\n ...next,\n status: local.status,\n resolvedBy: local.resolvedBy,\n resolvedAt: local.resolvedAt,\n optimisticAction: local.optimisticAction,\n };\n }\n\n if (local.optimisticAction === \"run-pending\" && local.latestRun?.id.startsWith(\"tmp-run\")) {\n const serverRunCreatedAt = serverAnnotation.latestRun\n ? Date.parse(serverAnnotation.latestRun.createdAt)\n : Number.NaN;\n const localRunCreatedAt = Date.parse(local.latestRun.createdAt);\n const serverHasNewRun =\n serverAnnotation.latestRun != null &&\n (Number.isNaN(localRunCreatedAt) ||\n Number.isNaN(serverRunCreatedAt) ||\n serverRunCreatedAt >= localRunCreatedAt);\n\n if (!serverHasNewRun) {\n next = {\n ...next,\n latestRun: local.latestRun,\n optimisticAction: local.optimisticAction,\n };\n }\n }\n\n return next;\n });\n\n const localOnly = current.filter(\n (annotation) =>\n (annotation.deliveryStatus || annotation.optimisticAction) && !incomingIds.has(annotation.id),\n );\n\n return [...merged, ...localOnly];\n}\n\nexport function AnnotationsProvider({ projectToken, apiBase, children }: ProviderProps) {\n const surface = useTargetSurface();\n const { activeViewport, setActiveViewport } = useViewportSurfaceState();\n const [identity, setIdentityState] = useState<ClientIdentity | null>(() =>\n typeof window === \"undefined\" ? null : readStoredIdentity(projectToken),\n );\n const [clientAvatarSeed] = useState(() =>\n typeof window === \"undefined\" ? \"client-avatar:ssr\" : getOrCreateStoredAvatarSeed(projectToken),\n );\n const [studio, setStudio] = useState<StudioInfo | null>(null);\n const [viewerKind, setViewerKind] = useState<ViewerKind>(\"client\");\n const [agentRunReadiness, setAgentRunReadiness] = useState<{\n ready: boolean;\n message: string | null;\n } | null>(null);\n const [annotations, setAnnotations] = useState<WidgetAnnotation[]>([]);\n const [annotationsViewport, setAnnotationsViewport] = useState<AnnotationViewport | null>(null);\n const [ephemerals, setEphemerals] = useState<EphemeralPin[]>([]);\n const [ready, setReady] = useState(false);\n const activeViewportRef = useRef(activeViewport);\n activeViewportRef.current = activeViewport;\n const annotationsReady = annotationsViewport === activeViewport;\n\n const apiClient = useMemo<ApiClient>(\n () =>\n createApiClient({\n apiBase,\n token: projectToken,\n clientUserId: identity?.clientUserId,\n }),\n [apiBase, projectToken, identity?.clientUserId],\n );\n\n const apiRef = useRef(apiClient);\n apiRef.current = apiClient;\n const refreshSeqRef = useRef(0);\n\n const refresh = useCallback(async () => {\n const viewport = activeViewport;\n const requestId = ++refreshSeqRef.current;\n const list = await apiRef.current.listAnnotations(\n viewport === \"desktop\" ? undefined : viewport,\n );\n if (requestId !== refreshSeqRef.current || viewport !== activeViewportRef.current) return;\n const pageUrl = surface.getPageUrl();\n const next = list.filter((a) => normalizeUrl(a.payload.url) === pageUrl);\n setAnnotations((prev) => mergeServerAnnotations(prev, next));\n setAnnotationsViewport(viewport);\n }, [activeViewport, surface]);\n\n const refreshRef = useRef(refresh);\n refreshRef.current = refresh;\n\n // Bootstrap: figure out viewer kind + initial annotation set.\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n const me = await apiRef.current.fetchMe();\n if (cancelled) return;\n if (me?.studio) {\n setStudio(me.studio);\n setViewerKind(\"studio\");\n setAgentRunReadiness(me.agentRunReadiness ?? { ready: true, message: null });\n } else {\n setStudio(null);\n setViewerKind(\"client\");\n setAgentRunReadiness(null);\n if (me?.client) {\n const next = {\n clientUserId: me.client.id,\n name: me.client.name,\n email: me.client.email,\n avatarSeed: me.client.avatarSeed,\n };\n setIdentityState(next);\n writeStoredIdentity(projectToken, next);\n }\n }\n await refreshRef.current();\n if (!cancelled) setReady(true);\n })();\n return () => {\n cancelled = true;\n };\n }, [projectToken]);\n\n useEffect(() => {\n if (!ready) return;\n void refresh();\n }, [ready, refresh]);\n\n // Polling loop — visibility-gated.\n useEffect(() => {\n const { overlayDocument, overlayWindow } = surface;\n const handle = overlayWindow.setInterval(() => {\n if (overlayDocument.visibilityState !== \"visible\") return;\n void refresh();\n }, POLL_INTERVAL_MS);\n const onVis = () => {\n if (overlayDocument.visibilityState === \"visible\") void refresh();\n };\n overlayDocument.addEventListener(\"visibilitychange\", onVis);\n return () => {\n overlayWindow.clearInterval(handle);\n overlayDocument.removeEventListener(\"visibilitychange\", onVis);\n };\n }, [refresh, surface]);\n\n const setIdentity = useCallback(\n async (next: ClientIdentity) => {\n writeStoredIdentity(projectToken, next);\n setIdentityState(next);\n return next;\n },\n [projectToken],\n );\n\n const signOut = useCallback(() => {\n setIdentityState(null);\n try {\n if (typeof window !== \"undefined\") {\n window.localStorage.removeItem(\"patch.clientIdentity\");\n }\n } catch {\n // ignore\n }\n }, []);\n\n const addEphemeral = useCallback((pin: EphemeralPin) => {\n setEphemerals((prev) => [...prev.filter((p) => p.tempId !== pin.tempId), pin]);\n }, []);\n\n const removeEphemeral = useCallback((tempId: string) => {\n setEphemerals((prev) => prev.filter((p) => p.tempId !== tempId));\n }, []);\n\n const applyAnnotationUpdate = useCallback((next: WidgetAnnotation) => {\n setAnnotations((prev) => {\n const found = prev.findIndex((a) => a.id === next.id);\n if (found === -1) return [...prev, next];\n const copy = prev.slice();\n copy[found] = next;\n return copy;\n });\n }, []);\n\n const updateAnnotation = useCallback(\n (annotationId: string, updater: (current: WidgetAnnotation) => WidgetAnnotation | null) => {\n setAnnotations((prev) => {\n let changed = false;\n const next = prev.flatMap((annotation) => {\n if (annotation.id !== annotationId) return [annotation];\n changed = true;\n const updated = updater(annotation);\n return updated ? [updated] : [];\n });\n return changed ? next : prev;\n });\n },\n [],\n );\n\n const replaceAnnotationId = useCallback((tempId: string, annotationId: string) => {\n setAnnotations((prev) =>\n prev.map((annotation) =>\n annotation.id === tempId\n ? { ...annotation, id: annotationId, deliveryStatus: \"sent\" }\n : annotation,\n ),\n );\n }, []);\n\n const value = useMemo<Store>(\n () => ({\n apiClient,\n ready,\n viewerKind,\n agentRunReadiness,\n activeViewport,\n clientAvatarSeed,\n identity,\n studio,\n annotations,\n annotationsReady,\n ephemerals,\n refresh,\n setActiveViewport,\n setIdentity,\n signOut,\n addEphemeral,\n removeEphemeral,\n applyAnnotationUpdate,\n updateAnnotation,\n replaceAnnotationId,\n }),\n [\n apiClient,\n ready,\n viewerKind,\n agentRunReadiness,\n activeViewport,\n clientAvatarSeed,\n identity,\n studio,\n annotations,\n annotationsReady,\n ephemerals,\n refresh,\n setActiveViewport,\n setIdentity,\n signOut,\n addEphemeral,\n removeEphemeral,\n applyAnnotationUpdate,\n updateAnnotation,\n replaceAnnotationId,\n ],\n );\n\n return <AnnotationsContext.Provider value={value}>{children}</AnnotationsContext.Provider>;\n}\n\nexport function useAnnotationsStore(): Store {\n const v = use(AnnotationsContext);\n if (!v) throw new Error(\"useAnnotationsStore must be used inside <AnnotationsProvider>\");\n return v;\n}\n","import { createContext, type ReactNode, use, useCallback, useMemo, useState } from \"react\";\nimport type { CaptureTarget } from \"../capture/target-resolution\";\n\nexport type PopoverAnchor = {\n viewportX: number;\n viewportY: number;\n documentY: number;\n};\n\nexport type ActivePopover =\n | {\n kind: \"composer\";\n tempId: string;\n target: CaptureTarget;\n anchor: PopoverAnchor;\n }\n | {\n kind: \"existing\";\n annotationId: string;\n }\n | null;\n\ntype Store = {\n active: ActivePopover;\n draftText: string;\n shakeNonce: number;\n confirmDiscardOpen: boolean;\n openExisting: (annotationId: string) => void;\n openComposer: (input: { tempId: string; target: CaptureTarget; anchor: PopoverAnchor }) => void;\n setDraftText: (s: string) => void;\n attemptClose: () => void;\n forceClose: () => void;\n setConfirmDiscardOpen: (b: boolean) => void;\n};\n\nconst Ctx = createContext<Store | null>(null);\n\nexport function PopoverProvider({ children }: { children: ReactNode }) {\n const [active, setActive] = useState<ActivePopover>(null);\n const [draftText, setDraftText] = useState(\"\");\n const [shakeNonce, setShakeNonce] = useState(0);\n const [confirmDiscardOpen, setConfirmDiscardOpen] = useState(false);\n\n const reset = useCallback(() => {\n setActive(null);\n setDraftText(\"\");\n setConfirmDiscardOpen(false);\n }, []);\n\n const openExisting = useCallback((annotationId: string) => {\n // Switching popovers respects draft guard — caller checks attemptClose first\n // if a draft exists. From bare state (no active popover), open immediately.\n setActive({ kind: \"existing\", annotationId });\n setDraftText(\"\");\n setConfirmDiscardOpen(false);\n }, []);\n\n const openComposer = useCallback(\n (input: { tempId: string; target: CaptureTarget; anchor: PopoverAnchor }) => {\n setActive({ kind: \"composer\", ...input });\n setDraftText(\"\");\n setConfirmDiscardOpen(false);\n },\n [],\n );\n\n const attemptClose = useCallback(() => {\n if (draftText.trim().length > 0) {\n setShakeNonce((n) => n + 1);\n return;\n }\n reset();\n }, [draftText, reset]);\n\n const forceClose = useCallback(() => {\n reset();\n }, [reset]);\n\n const value = useMemo<Store>(\n () => ({\n active,\n draftText,\n shakeNonce,\n confirmDiscardOpen,\n openExisting,\n openComposer,\n setDraftText,\n attemptClose,\n forceClose,\n setConfirmDiscardOpen,\n }),\n [\n active,\n draftText,\n shakeNonce,\n confirmDiscardOpen,\n openExisting,\n openComposer,\n attemptClose,\n forceClose,\n ],\n );\n\n return <Ctx.Provider value={value}>{children}</Ctx.Provider>;\n}\n\nexport function usePopoverStore(): Store {\n const v = use(Ctx);\n if (!v) throw new Error(\"usePopoverStore must be used inside <PopoverProvider>\");\n return v;\n}\n","export type Accessibility = {\n role?: string;\n ariaLabel?: string;\n tabIndex?: number;\n focusable?: boolean;\n};\n\nconst TEXT_TAGS = new Set([\n \"p\",\n \"span\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"li\",\n \"td\",\n \"th\",\n \"label\",\n \"blockquote\",\n \"figcaption\",\n \"code\",\n \"pre\",\n \"strong\",\n \"em\",\n \"i\",\n \"b\",\n \"u\",\n \"mark\",\n \"small\",\n \"sub\",\n \"sup\",\n \"abbr\",\n \"cite\",\n \"q\",\n \"dt\",\n \"dd\",\n]);\n\nconst INTERACTIVE_TAGS = new Set([\"a\", \"button\", \"input\", \"select\", \"textarea\"]);\n\nconst TAG_LABEL: Record<string, string> = {\n a: \"link\",\n button: \"button\",\n input: \"input\",\n select: \"select\",\n textarea: \"textarea\",\n img: \"img\",\n svg: \"icon\",\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n p: \"paragraph\",\n li: \"list item\",\n td: \"cell\",\n th: \"header cell\",\n label: \"label\",\n blockquote: \"quote\",\n figcaption: \"caption\",\n code: \"code\",\n pre: \"code block\",\n};\n\nconst MAX_LABEL_TEXT = 40;\nconst MAX_PATH_LENGTH = 1500;\nconst MAX_NEARBY_TEXT = 200;\nconst MAX_NEARBY_ELEMENTS = 5;\nconst MAX_CSS_CLASSES = 10;\n\nexport function isTextTag(el: Element): boolean {\n return TEXT_TAGS.has(el.tagName.toLowerCase());\n}\n\nfunction truncate(value: string, max: number): string {\n const cleaned = value.replace(/\\s+/g, \" \").trim();\n if (cleaned.length <= max) return cleaned;\n return `${cleaned.slice(0, max - 1)}…`;\n}\n\nfunction quote(value: string): string {\n return `\"${value}\"`;\n}\n\nfunction getDirectText(el: Element): string {\n let text = \"\";\n for (const node of Array.from(el.childNodes)) {\n if (node.nodeType === 3 /* TEXT_NODE */) {\n text += node.textContent ?? \"\";\n }\n }\n return text.replace(/\\s+/g, \" \").trim();\n}\n\nfunction getVisibleText(el: Element): string {\n return (el.textContent ?? \"\").replace(/\\s+/g, \" \").trim();\n}\n\n/**\n * Strip hashed/utility-style classnames that don't help a human or an agent\n * understand intent. Module hashes (`Header_a3f9`, `css-1abc23`) and pure\n * tailwind/utility tokens (`px-4`, `text-sm`, `md:flex`) get dropped.\n */\nfunction isMeaningfulClass(name: string): boolean {\n if (!name) return false;\n if (name.length > 40) return false;\n // CSS-modules `Component_name__hash` or `Foo_a3f9` or `_hash_` infix\n if (/__[A-Za-z0-9]{4,}$/.test(name)) return false;\n if (/_[a-z0-9]{4,}$/i.test(name) && /[0-9]/.test(name)) return false;\n if (/_[A-Za-z0-9]{5,}_/.test(name)) return false;\n // styled-components / emotion: `sc-aXbYcZ` or `css-1abc23`\n if (/^(sc-|css-)[A-Za-z0-9]{4,}$/.test(name)) return false;\n // tailwind responsive/variant prefixes\n if (/^[a-z]{2,}:[\\w-]+$/.test(name)) return false;\n // tailwind core: `text-gray-500`, `px-4`, `-mt-2`, `w-1/2`, `bg-[#fff]`\n if (\n /^-?(p|m|w|h|min|max|gap|space|inset|top|right|bottom|left)[trblxy]?-/.test(name) ||\n /^-?(text|bg|border|ring|shadow|font|leading|tracking|rounded|opacity|z|flex|grid|col|row|order|justify|items|self|content|place|object)-/.test(\n name,\n )\n ) {\n return false;\n }\n // pure hex/random-ish: lots of digits, low vowel ratio\n const digitRatio = (name.match(/\\d/g)?.length ?? 0) / name.length;\n if (digitRatio > 0.4) return false;\n return true;\n}\n\nexport function extractCssClasses(el: Element): string[] {\n const list = Array.from(el.classList);\n const meaningful = list.filter(isMeaningfulClass).slice(0, MAX_CSS_CLASSES);\n if (meaningful.length > 0) return meaningful;\n // Fallback hint when nothing meaningful survives — gives the agent something\n // to work with rather than an empty array.\n if (list.length > 0) return [\"container\"];\n return [];\n}\n\nexport function extractAccessibility(el: Element): Accessibility | undefined {\n const role = el.getAttribute(\"role\") ?? undefined;\n const ariaLabel = el.getAttribute(\"aria-label\") ?? undefined;\n const tabIndexAttr = el.getAttribute(\"tabindex\");\n const tabIndex = tabIndexAttr !== null && tabIndexAttr !== \"\" ? Number(tabIndexAttr) : undefined;\n const tag = el.tagName.toLowerCase();\n const focusable =\n INTERACTIVE_TAGS.has(tag) ||\n (tabIndex !== undefined && Number.isFinite(tabIndex) && tabIndex >= 0);\n if (role === undefined && ariaLabel === undefined && tabIndex === undefined && !focusable) {\n return undefined;\n }\n const out: Accessibility = { focusable };\n if (role !== undefined) out.role = role;\n if (ariaLabel !== undefined) out.ariaLabel = ariaLabel;\n if (tabIndex !== undefined && Number.isFinite(tabIndex)) out.tabIndex = tabIndex;\n return out;\n}\n\nfunction describeInput(el: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement): string {\n const tag = el.tagName.toLowerCase();\n const label = TAG_LABEL[tag] ?? tag;\n const ariaLabel = el.getAttribute(\"aria-label\");\n if (ariaLabel) return `${label} ${quote(truncate(ariaLabel, MAX_LABEL_TEXT))}`;\n const placeholder = (el as HTMLInputElement).placeholder;\n if (placeholder) return `${label} ${quote(truncate(placeholder, MAX_LABEL_TEXT))}`;\n const name = el.getAttribute(\"name\");\n if (name) return `${label}[name=\"${name}\"]`;\n if (tag === \"input\") {\n const type = (el as HTMLInputElement).type || \"text\";\n return `${label}[type=${type}]`;\n }\n return label;\n}\n\nfunction describeImage(el: HTMLImageElement): string {\n const alt = el.alt?.trim();\n if (alt) return `img ${quote(truncate(alt, MAX_LABEL_TEXT))}`;\n return \"img\";\n}\n\n/**\n * Human-readable element label.\n *\n * Examples:\n * <button>Get started</button> → button \"Get started\"\n * <a href=\"/x\"><svg/></a> → link (icon)\n * <input placeholder=\"Email\" /> → input \"Email\"\n * <h2>Pricing plans</h2> → h2 \"Pricing plans\"\n * <img alt=\"hero\" /> → img \"hero\"\n */\nexport function identifyElement(el: Element): string {\n const tag = el.tagName.toLowerCase();\n\n if (tag === \"img\") return describeImage(el as HTMLImageElement);\n if (tag === \"input\" || tag === \"textarea\" || tag === \"select\") {\n return describeInput(el as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement);\n }\n\n const label = TAG_LABEL[tag] ?? tag;\n const ariaLabel = el.getAttribute(\"aria-label\");\n if (ariaLabel) return `${label} ${quote(truncate(ariaLabel, MAX_LABEL_TEXT))}`;\n\n if (tag === \"a\" || tag === \"button\" || TEXT_TAGS.has(tag) || tag === \"label\") {\n const text = getVisibleText(el);\n if (text) return `${label} ${quote(truncate(text, MAX_LABEL_TEXT))}`;\n // Icon-only interactive element: signal its iconography but keep a label.\n if (tag === \"a\" || tag === \"button\") {\n const innerSvg = el.querySelector(\"svg\");\n if (innerSvg) {\n const svgLabel = innerSvg.getAttribute(\"aria-label\");\n if (svgLabel) {\n return `${label} ${quote(truncate(svgLabel, MAX_LABEL_TEXT))}`;\n }\n return `${label} (icon)`;\n }\n const href = el.getAttribute(\"href\");\n if (tag === \"a\" && href) return `link[href=\"${truncate(href, MAX_LABEL_TEXT)}\"]`;\n }\n return label;\n }\n\n // Containers — fall back to id, then class hint, then tag.\n if (el.id) return `${tag}#${el.id}`;\n const classes = extractCssClasses(el);\n if (classes.length > 0) return `${tag}.${classes[0]}`;\n return tag;\n}\n\n/** Compact, human-readable ancestor chain ending at the target. */\nexport function buildElementPath(el: Element): string {\n const segments: string[] = [];\n let node: Element | null = el;\n let depth = 0;\n while (node && node.tagName.toLowerCase() !== \"body\" && depth < 6) {\n segments.unshift(identifyElement(node));\n node = node.parentElement;\n depth++;\n }\n if (node && node.tagName.toLowerCase() === \"body\") segments.unshift(\"body\");\n return segments.join(\" > \").slice(0, MAX_PATH_LENGTH);\n}\n\n/**\n * Pull text from the element's nearest text-bearing ancestor (or siblings if\n * the element itself is text-bearing). Gives the agent semantic context the\n * element itself doesn't carry.\n */\nexport function extractNearbyText(el: Element): string | undefined {\n const own = getVisibleText(el);\n const parent = el.parentElement;\n if (!parent) return undefined;\n const parentText = getVisibleText(parent);\n if (!parentText) return undefined;\n if (own && parentText === own) {\n // The parent's text equals our text — no extra context. Walk one more level.\n const grand = parent.parentElement;\n if (!grand) return undefined;\n const grandText = getVisibleText(grand);\n if (!grandText || grandText === own) return undefined;\n return truncate(grandText, MAX_NEARBY_TEXT);\n }\n return truncate(parentText, MAX_NEARBY_TEXT);\n}\n\n/** Identify a small set of sibling elements for grouping context. */\nexport function extractNearbyElements(el: Element): string[] {\n const parent = el.parentElement;\n if (!parent) return [];\n const out: string[] = [];\n for (const sibling of Array.from(parent.children)) {\n if (sibling === el) continue;\n if (sibling.tagName.toLowerCase() === \"script\") continue;\n out.push(identifyElement(sibling));\n if (out.length >= MAX_NEARBY_ELEMENTS) break;\n }\n return out;\n}\n\nconst ATTR_ALLOW = [\"role\", \"aria-label\", \"name\"];\nconst MAX_ATTRS = 10;\nconst MAX_ATTR_VALUE = 100;\n\n/**\n * Stable attribute signature used by the resolver to verify a candidate. Pulls\n * `role`, `aria-label`, `name`, and any `data-*` attributes, capped at 10.\n */\nexport function extractAttributes(el: Element): Record<string, string> {\n const out: Record<string, string> = {};\n for (const name of ATTR_ALLOW) {\n const v = el.getAttribute(name);\n if (v !== null && v !== \"\") out[name] = v.slice(0, MAX_ATTR_VALUE);\n }\n for (const attr of Array.from(el.attributes)) {\n if (Object.keys(out).length >= MAX_ATTRS) break;\n if (!attr.name.startsWith(\"data-\")) continue;\n if (attr.value === \"\") continue;\n out[attr.name] = attr.value.slice(0, MAX_ATTR_VALUE);\n }\n return out;\n}\n\n/** Verbatim direct text, whitespace-normalized. Empty string when none. */\nexport function extractTextSignature(el: Element): string {\n return getDirectText(el);\n}\n\n/** Climb a node to the nearest Element ancestor (or itself if already one). */\nexport function nearestElement(node: Node | null): Element | null {\n let current: Node | null = node;\n while (current && current.nodeType !== 1 /* ELEMENT_NODE */) {\n current = current.parentNode;\n }\n return current as Element | null;\n}\n\n/** True when `el` is inside the widget's own DOM. */\nexport function isInternal(el: Element, internalAttr: string): boolean {\n return el.closest(`[${internalAttr}]`) !== null;\n}\n\nexport const _internals = { getDirectText, isMeaningfulClass };\n","export type TargetLabelInput =\n | { kind: \"element\"; label: string; selectedText?: string }\n | { kind: \"multi\"; count: number }\n | { kind: \"area\" };\n\nconst TEXT_TAGS = new Set([\n \"p\",\n \"span\",\n \"li\",\n \"td\",\n \"th\",\n \"label\",\n \"blockquote\",\n \"figcaption\",\n \"code\",\n \"pre\",\n \"strong\",\n \"em\",\n \"i\",\n \"b\",\n \"u\",\n \"mark\",\n \"small\",\n \"sub\",\n \"sup\",\n \"abbr\",\n \"cite\",\n \"q\",\n \"dt\",\n \"dd\",\n]);\n\nconst LANDMARK_LABELS: Record<string, string> = {\n article: \"Article\",\n aside: \"Sidebar\",\n dialog: \"Dialog\",\n fieldset: \"Form section\",\n figure: \"Image\",\n footer: \"Footer\",\n form: \"Form\",\n header: \"Header\",\n main: \"Main content\",\n nav: \"Navigation\",\n section: \"Section\",\n summary: \"Summary\",\n};\n\nconst STORED_LABELS: Record<string, string> = {\n a: \"Link\",\n article: \"Article\",\n aside: \"Sidebar\",\n blockquote: \"Text\",\n button: \"Button\",\n code: \"Text\",\n div: \"Area\",\n figcaption: \"Text\",\n figure: \"Image\",\n footer: \"Footer\",\n form: \"Form\",\n header: \"Header\",\n img: \"Image\",\n input: \"Field\",\n label: \"Text\",\n li: \"Text\",\n main: \"Main content\",\n nav: \"Navigation\",\n p: \"Text\",\n pre: \"Text\",\n section: \"Section\",\n select: \"Field\",\n span: \"Text\",\n svg: \"Icon\",\n textarea: \"Field\",\n};\n\nconst LEGACY_STORED_LABELS: Record<string, string> = {\n caption: \"Text\",\n cell: \"Text\",\n \"code block\": \"Text\",\n icon: \"Icon\",\n input: \"Field\",\n label: \"Text\",\n link: \"Link\",\n \"list item\": \"Text\",\n paragraph: \"Text\",\n quote: \"Text\",\n select: \"Field\",\n textarea: \"Field\",\n};\n\nfunction truncate(value: string, max: number): string {\n const cleaned = value.replace(/\\s+/g, \" \").trim();\n if (cleaned.length <= max) return cleaned;\n return `${cleaned.slice(0, max - 1).trim()}…`;\n}\n\nfunction quote(value: string): string {\n return `\"${value}\"`;\n}\n\nfunction visibleText(el: Element): string {\n return (el.textContent ?? \"\").replace(/\\s+/g, \" \").trim();\n}\n\nfunction humanize(value: string): string {\n const spaced = value\n .replace(/[_-]+/g, \" \")\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .trim();\n if (!spaced) return \"\";\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n}\n\nfunction labelFromText(base: string, text: string | null | undefined): string {\n const trimmed = text?.trim();\n if (!trimmed) return base;\n return `${base}: ${quote(truncate(trimmed, 48))}`;\n}\n\nfunction parseStoredPart(value: string): { base: string; text?: string } {\n const trimmed = value.trim();\n const quoteMatch = trimmed.match(/^(.+?)\\s+\"(.+)\"$/);\n if (quoteMatch) {\n return { base: quoteMatch[1] ?? trimmed, text: quoteMatch[2] };\n }\n return { base: trimmed };\n}\n\nfunction storedBaseLabel(value: string): string {\n const base = value\n .toLowerCase()\n .replace(/\\[[\\s\\S]*$/, \"\")\n .trim();\n const legacy = LEGACY_STORED_LABELS[base];\n if (legacy) return legacy;\n\n const tag = value.match(/^[a-z][\\w-]*/i)?.[0]?.toLowerCase();\n if (!tag) return \"Area\";\n if (/^h[1-6]$/.test(tag)) return \"Heading\";\n return STORED_LABELS[tag] ?? \"Area\";\n}\n\nfunction inputLabel(el: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement): string {\n const aria = el.getAttribute(\"aria-label\");\n if (aria) return labelFromText(\"Field\", aria);\n const placeholder = (el as HTMLInputElement | HTMLTextAreaElement).placeholder;\n if (placeholder) return labelFromText(\"Field\", placeholder);\n const name = el.getAttribute(\"name\");\n if (name) return labelFromText(\"Field\", humanize(name));\n if (el.tagName.toLowerCase() === \"input\") {\n const type = (el as HTMLInputElement).type || \"text\";\n if (type && type !== \"text\") return labelFromText(\"Field\", humanize(type));\n }\n return \"Field\";\n}\n\nexport function formatElementTargetLabel(el: Element, selectedText?: string): string {\n if (selectedText?.trim()) {\n return labelFromText(\"Selected text\", selectedText);\n }\n\n const tag = el.tagName.toLowerCase();\n const aria = el.getAttribute(\"aria-label\");\n\n if (tag === \"button\") return labelFromText(\"Button\", aria ?? visibleText(el));\n if (tag === \"a\") return labelFromText(\"Link\", aria ?? visibleText(el));\n if (tag === \"input\" || tag === \"textarea\" || tag === \"select\") {\n return inputLabel(el as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement);\n }\n if (tag === \"img\") {\n const alt = (el as HTMLImageElement).alt;\n return labelFromText(\"Image\", alt);\n }\n if (tag === \"svg\") return labelFromText(\"Icon\", aria);\n if (/^h[1-6]$/.test(tag)) return labelFromText(\"Heading\", visibleText(el));\n if (TEXT_TAGS.has(tag)) return labelFromText(\"Text\", visibleText(el));\n\n const landmark = LANDMARK_LABELS[tag];\n if (landmark) return labelFromText(landmark, aria);\n\n return labelFromText(\"Area\", aria);\n}\n\nexport function formatMultiTargetLabel(count: number): string {\n if (count === 1) return \"1 item selected\";\n return `${count} items selected`;\n}\n\nexport function formatAreaTargetLabel(): string {\n return \"Selected area\";\n}\n\nexport function formatStoredTargetLabel(input: {\n targetLabel?: string;\n element?: string;\n elementPath?: string;\n selectedText?: string;\n}): string {\n if (input.targetLabel?.trim()) return truncate(input.targetLabel, 120);\n if (input.selectedText?.trim()) return labelFromText(\"Selected text\", input.selectedText);\n\n const raw = input.element?.trim() || input.elementPath?.trim();\n if (!raw) return \"Annotation\";\n\n const multiMatch = raw.match(/^(\\d+)\\s+elements?:/i);\n if (multiMatch) return formatMultiTargetLabel(Number(multiMatch[1]));\n if (/^region\\b/i.test(raw)) return formatAreaTargetLabel();\n\n const part = parseStoredPart(raw.split(\">\").at(-1) ?? raw);\n return labelFromText(storedBaseLabel(part.base), part.text);\n}\n\n/**\n * Human-readable target label.\n *\n * - element (no selection): `Button: \"Submit\"`\n * - element with text selection: `Selected text: \"Without Patch...\"`\n * - multi: `3 items selected`\n * - area: `Selected area`\n */\nexport function formatTargetLabel(input: TargetLabelInput): string {\n if (input.kind === \"element\") {\n if (!input.selectedText) return input.label;\n return labelFromText(\"Selected text\", input.selectedText);\n }\n if (input.kind === \"multi\") {\n return formatMultiTargetLabel(input.count);\n }\n return formatAreaTargetLabel();\n}\n","import { extractCssClasses, isInternal, nearestElement } from \"./element-identification\";\n\nexport type Rect = { x: number; y: number; width: number; height: number };\n\nexport type ElementTarget = {\n kind: \"element\";\n element: Element;\n /** Bounding box used for pin anchoring and persistence. */\n rect: DOMRect;\n /** Verbatim selected text, if any was highlighted at click time. */\n selectedText?: string;\n /**\n * When `selectedText` is present, this is the click target (the actual node\n * under the cursor). When absent, it equals `element`.\n */\n clickTarget: Element;\n};\n\nexport type MultiTarget = {\n kind: \"multi\";\n elements: Element[];\n /** Per-element rects, parallel to `elements`. */\n rects: Rect[];\n /** Union of `rects` — anchor reference and persistence box. */\n union: Rect;\n};\n\nexport type AreaTarget = {\n kind: \"area\";\n /** The drag rectangle as-is. */\n rect: Rect;\n};\n\nexport type CaptureTarget = ElementTarget | MultiTarget | AreaTarget;\n\nexport type ResolveOptions = {\n /** The full event target (could be a text node descendant). */\n clickTarget: Element;\n /** The active selection on the page, or null. */\n selection: Selection | null;\n};\n\n/**\n * Resolve a click in capture mode to a typed capture target.\n *\n * Rule:\n * - If a non-empty text selection exists, the target element is the\n * selection range's `commonAncestorContainer` climbed to the nearest\n * Element, and the bounding rect is the range's rect (tight box around\n * the selected text).\n * - Otherwise the target element is the click target itself.\n */\nexport function resolveCaptureTarget(opts: ResolveOptions): ElementTarget {\n const { clickTarget, selection } = opts;\n\n const selectedText = selection && !selection.isCollapsed ? selection.toString().trim() : \"\";\n\n if (selectedText && selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const ancestor = nearestElement(range.commonAncestorContainer);\n if (ancestor) {\n // Use the ancestor's own bbox (not the selection range's tight box) so\n // the persistence resolver — which re-queries the element bbox at\n // re-render time — sees the same reference frame the capture-time\n // proportional offset was encoded against.\n return {\n kind: \"element\",\n element: ancestor,\n rect: ancestor.getBoundingClientRect(),\n selectedText,\n clickTarget,\n };\n }\n }\n\n return {\n kind: \"element\",\n element: clickTarget,\n rect: clickTarget.getBoundingClientRect(),\n clickTarget,\n };\n}\n\n// --- multi/area drag resolution ------------------------------------------------\n\n/** Minimum drag rect dimensions for an area-fallback target to be accepted. */\nexport const AREA_MIN_SIZE_PX = 20;\n\n/** Distance (px) past which a mousedown→mousemove flips into a drag gesture. */\nexport const DRAG_DISTANCE_THRESHOLD_PX = 7;\n\nconst MIN_ELEMENT_SIZE_PX = 10;\nconst MAX_VIEWPORT_WIDTH_RATIO = 0.8;\nconst MAX_VIEWPORT_HEIGHT_RATIO = 0.5;\n\nconst SKIP_TAGS = new Set([\n \"html\",\n \"body\",\n \"head\",\n \"script\",\n \"style\",\n \"meta\",\n \"link\",\n \"title\",\n \"br\",\n \"noscript\",\n]);\n\n/**\n * Tags that always count as meaningful capture targets — they carry semantic\n * weight by themselves and don't need direct text or interactive role to\n * survive the wrapper rule.\n */\nconst SEMANTIC_CONTAINER_TAGS = new Set([\n \"section\",\n \"article\",\n \"aside\",\n \"header\",\n \"footer\",\n \"nav\",\n \"main\",\n \"figure\",\n \"form\",\n \"fieldset\",\n \"dialog\",\n \"details\",\n \"summary\",\n]);\n\n/** Margin (px) allowed when checking if a container's bbox fits inside the drag rect. */\nconst SEMANTIC_PREFER_MARGIN_PX = 24;\n\nfunction isSemanticContainer(el: Element): boolean {\n const tag = el.tagName.toLowerCase();\n if (SEMANTIC_CONTAINER_TAGS.has(tag)) return true;\n if (tag === \"div\" || tag === \"span\") {\n if (el.id) return true;\n const classes = extractCssClasses(el);\n // `extractCssClasses` returns [\"container\"] when nothing meaningful survives;\n // anything else means a real class name (e.g., \"card\", \"hero\") is present.\n if (classes.length > 0 && classes[0] !== \"container\") return true;\n }\n return false;\n}\n\n/**\n * Tag set used to seed the candidate pool. DIV/SPAN are included but pass an\n * extra has-text-or-role check in `isMeaningfulElement`.\n */\nconst MEANINGFUL_TAGS_SELECTOR = [\n \"a\",\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n \"img\",\n \"svg\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"p\",\n \"span\",\n \"li\",\n \"td\",\n \"th\",\n \"label\",\n \"blockquote\",\n \"figcaption\",\n \"code\",\n \"pre\",\n \"strong\",\n \"em\",\n \"div\",\n \"section\",\n \"article\",\n \"aside\",\n \"header\",\n \"footer\",\n \"nav\",\n \"main\",\n \"figure\",\n \"form\",\n \"fieldset\",\n \"dialog\",\n \"details\",\n].join(\",\");\n\nfunction rectFromDom(r: DOMRect): Rect {\n return { x: r.x, y: r.y, width: r.width, height: r.height };\n}\n\nfunction rectsIntersect(a: Rect, b: Rect): boolean {\n return !(\n a.x + a.width < b.x ||\n b.x + b.width < a.x ||\n a.y + a.height < b.y ||\n b.y + b.height < a.y\n );\n}\n\n/**\n * Whether an element is a reasonable annotation target inside a drag rect.\n * Drops widget DOM, page chrome tags, wrappers (too big), noise (too small),\n * and contentless layout DIV/SPANs.\n *\n * Exported for unit tests.\n */\nexport function isMeaningfulElement(\n el: Element,\n viewport: { width: number; height: number },\n internalAttr: string,\n): boolean {\n if (isInternal(el, internalAttr)) return false;\n const tag = el.tagName.toLowerCase();\n if (SKIP_TAGS.has(tag)) return false;\n\n const r = el.getBoundingClientRect();\n if (r.width < MIN_ELEMENT_SIZE_PX || r.height < MIN_ELEMENT_SIZE_PX) return false;\n if (r.width > viewport.width * MAX_VIEWPORT_WIDTH_RATIO) return false;\n if (r.height > viewport.height * MAX_VIEWPORT_HEIGHT_RATIO) return false;\n\n if (tag === \"div\" || tag === \"span\") {\n const hasOwnText = Array.from(el.childNodes).some(\n (n) => n.nodeType === 3 && (n.textContent ?? \"\").trim().length > 0,\n );\n const role = el.getAttribute(\"role\");\n const hasInteractiveRole = role !== null && role.length > 0;\n if (!hasOwnText && !hasInteractiveRole && !isSemanticContainer(el)) return false;\n }\n\n return true;\n}\n\n/**\n * Drop a parent when any other selected element is its descendant. Leaves the\n * leaf-most representative in the set.\n *\n * Exported for unit tests.\n */\nexport function dominatorFilter(elements: Element[]): Element[] {\n return elements.filter((el) => !elements.some((other) => other !== el && el.contains(other)));\n}\n\n/**\n * If a semantic container in the set wraps every other candidate AND its bbox\n * fits inside the drag rect (with small margin), the user almost certainly\n * meant \"the whole card\" — collapse to that single container.\n *\n * Otherwise return null and let the dominator filter run.\n *\n * Exported for unit tests.\n */\nexport function preferSemanticContainer(elements: Element[], dragRect: Rect): Element | null {\n // Smallest-first so a nested semantic container wins over its outer wrapper.\n const sorted = [...elements].sort((a, b) => {\n const ra = a.getBoundingClientRect();\n const rb = b.getBoundingClientRect();\n return ra.width * ra.height - rb.width * rb.height;\n });\n for (const candidate of sorted) {\n if (!isSemanticContainer(candidate)) continue;\n const containsAll = elements.every((e) => e === candidate || candidate.contains(e));\n if (!containsAll) continue;\n const r = candidate.getBoundingClientRect();\n const fits =\n r.left >= dragRect.x - SEMANTIC_PREFER_MARGIN_PX &&\n r.top >= dragRect.y - SEMANTIC_PREFER_MARGIN_PX &&\n r.right <= dragRect.x + dragRect.width + SEMANTIC_PREFER_MARGIN_PX &&\n r.bottom <= dragRect.y + dragRect.height + SEMANTIC_PREFER_MARGIN_PX;\n if (fits) return candidate;\n }\n return null;\n}\n\nfunction unionRect(rects: Rect[]): Rect {\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxRight = Number.NEGATIVE_INFINITY;\n let maxBottom = Number.NEGATIVE_INFINITY;\n for (const r of rects) {\n if (r.x < minX) minX = r.x;\n if (r.y < minY) minY = r.y;\n if (r.x + r.width > maxRight) maxRight = r.x + r.width;\n if (r.y + r.height > maxBottom) maxBottom = r.y + r.height;\n }\n return { x: minX, y: minY, width: maxRight - minX, height: maxBottom - minY };\n}\n\nfunction ninePoints(rect: Rect): Array<{ x: number; y: number }> {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.x + rect.width;\n const by = rect.y + rect.height;\n return [\n { x: rect.x, y: rect.y },\n { x: cx, y: rect.y },\n { x: rx, y: rect.y },\n { x: rect.x, y: cy },\n { x: cx, y: cy },\n { x: rx, y: cy },\n { x: rect.x, y: by },\n { x: cx, y: by },\n { x: rx, y: by },\n ];\n}\n\nexport type ResolveDragOptions = {\n rect: Rect;\n viewport: { width: number; height: number };\n internalAttr: string;\n doc?: Document;\n};\n\n/**\n * Resolve a finished drag rectangle into a `multi` target (when meaningful\n * elements intersect) or an `area` target (when the rect is large enough but\n * empty). Returns null for stray-click rectangles (no meaningful elements\n * AND under the area minimum).\n */\nexport function resolveDragTarget(opts: ResolveDragOptions): MultiTarget | AreaTarget | null {\n const { rect, viewport, internalAttr } = opts;\n const doc = opts.doc ?? document;\n\n const candidates = new Set<Element>();\n\n for (const p of ninePoints(rect)) {\n const stack = doc.elementsFromPoint(p.x, p.y);\n for (const el of stack) {\n candidates.add(el);\n }\n }\n\n for (const el of Array.from(doc.querySelectorAll(MEANINGFUL_TAGS_SELECTOR))) {\n if (rectsIntersect(rectFromDom(el.getBoundingClientRect()), rect)) {\n candidates.add(el);\n }\n }\n\n const meaningful = Array.from(candidates).filter((el) =>\n isMeaningfulElement(el, viewport, internalAttr),\n );\n\n const semantic = preferSemanticContainer(meaningful, rect);\n const filtered = semantic ? [semantic] : dominatorFilter(meaningful);\n\n if (filtered.length > 0) {\n const rects = filtered.map((el) => rectFromDom(el.getBoundingClientRect()));\n return {\n kind: \"multi\",\n elements: filtered,\n rects,\n union: unionRect(rects),\n };\n }\n\n if (rect.width >= AREA_MIN_SIZE_PX && rect.height >= AREA_MIN_SIZE_PX) {\n return { kind: \"area\", rect };\n }\n\n return null;\n}\n","import type { TargetSurface } from \"../surface/target-surface\";\nimport { isTextTag } from \"./element-identification\";\nimport { formatElementTargetLabel } from \"./format-target-label\";\nimport { DRAG_DISTANCE_THRESHOLD_PX, type Rect } from \"./target-resolution\";\n\nconst STYLE_ID = \"patch-capture-cursor-style\";\n\ntype ClickHandler = (event: MouseEvent) => void;\ntype DragHandler = (rect: Rect, event: MouseEvent) => void;\n\nexport type CaptureModeOptions = {\n internalAttr: string;\n surface: TargetSurface;\n onClick: ClickHandler;\n /** Optional: fires on mouseup of a drag past the distance threshold. */\n onDrag?: DragHandler;\n};\n\nexport type CaptureModeHandle = {\n exit(): void;\n /** Hide the hover overlay and stop updating it (used while a composer is open). */\n pause(): void;\n /** Resume hover-overlay updates. */\n resume(): void;\n /**\n * Remove the drag-rect overlay that persisted from the last drag commit.\n * Call after the composer for that drag resolves (submit or cancel).\n */\n dismissDragOverlay(): void;\n};\n\n/**\n * Build the `<style>` block that overrides native cursors during capture\n * mode. Crosshair on most elements (including bare body/html so the empty\n * page background still feels like capture mode), I-beam on text tags. The\n * `:not()` exclusion keeps native cursors on the widget's own DOM so the\n * toolbar/composer still feel normal.\n */\nfunction buildCursorStylesheet(internalAttr: string): string {\n const exclude = `:not([${internalAttr}]):not([${internalAttr}] *)`;\n const textSelector = [\n \"p\",\n \"span\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"li\",\n \"td\",\n \"th\",\n \"label\",\n \"blockquote\",\n \"figcaption\",\n \"code\",\n \"pre\",\n \"strong\",\n \"em\",\n \"i\",\n \"b\",\n \"u\",\n \"mark\",\n \"small\",\n \"sub\",\n \"sup\",\n \"abbr\",\n \"cite\",\n \"q\",\n \"dt\",\n \"dd\",\n ]\n .map((t) => `body ${t}${exclude}`)\n .join(\",\\n\");\n return [\n `html, body { cursor: crosshair !important; }`,\n `body *${exclude} { cursor: crosshair !important; }`,\n `${textSelector} { cursor: text !important; }`,\n ].join(\"\\n\");\n}\n\nfunction injectCursorStylesheet(surface: TargetSurface, internalAttr: string): HTMLStyleElement {\n const doc = surface.targetDocument;\n const existing = doc.getElementById(STYLE_ID);\n if (existing) existing.remove();\n const style = doc.createElement(\"style\");\n style.id = STYLE_ID;\n style.setAttribute(internalAttr, \"\");\n style.textContent = buildCursorStylesheet(internalAttr);\n doc.head.appendChild(style);\n return style;\n}\n\nfunction isWidgetInternal(\n surface: TargetSurface,\n target: EventTarget | null,\n internalAttr: string,\n): boolean {\n const el = surface.eventTargetElement(target);\n return el ? el.closest(`[${internalAttr}]`) !== null : false;\n}\n\ntype HighlightOverlay = {\n update(el: Element): void;\n hide(): void;\n destroy(): void;\n};\n\nconst HIGHLIGHT_BORDER = 1.5;\nconst BRAND = \"#0287FE\";\nconst BRAND_TINT_SOFT = \"rgba(2, 135, 254, 0.032)\";\n\nfunction clampRadius(value: string): number {\n const first = value.split(\" \")[0] ?? \"\";\n const parsed = Number.parseFloat(first);\n if (!Number.isFinite(parsed)) return 6;\n return Math.min(8, Math.max(3, parsed));\n}\n\nfunction createHighlightOverlay(surface: TargetSurface, internalAttr: string): HighlightOverlay {\n const doc = surface.targetDocument;\n const box = doc.createElement(\"div\");\n box.setAttribute(internalAttr, \"\");\n Object.assign(box.style, {\n position: \"fixed\",\n pointerEvents: \"none\",\n border: `${HIGHLIGHT_BORDER}px solid ${BRAND}`,\n background: BRAND_TINT_SOFT,\n boxSizing: \"border-box\",\n zIndex: \"2147483645\",\n display: \"none\",\n borderRadius: \"6px\",\n transition:\n \"top 80ms ease-out, left 80ms ease-out, width 80ms ease-out, height 80ms ease-out, border-radius 80ms ease-out\",\n } satisfies Partial<CSSStyleDeclaration>);\n\n const label = doc.createElement(\"div\");\n label.setAttribute(internalAttr, \"\");\n Object.assign(label.style, {\n position: \"fixed\",\n pointerEvents: \"none\",\n background: \"#111\",\n color: \"#fff\",\n fontFamily: \"system-ui, sans-serif\",\n fontSize: \"12px\",\n fontWeight: \"500\",\n padding: \"6px 10px\",\n borderRadius: \"6px\",\n zIndex: \"2147483646\",\n maxWidth: \"240px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n display: \"none\",\n boxShadow: \"0 10px 24px -12px rgba(0, 0, 0, 0.36), 0 0 0 1px rgba(255, 255, 255, 0.08)\",\n } satisfies Partial<CSSStyleDeclaration>);\n\n doc.body.appendChild(box);\n doc.body.appendChild(label);\n\n let lastElement: Element | null = null;\n\n return {\n update(el: Element) {\n const rect = el.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) {\n this.hide();\n return;\n }\n // Position the highlight box so its border surrounds the element rather\n // than covers its inside edge.\n box.style.display = \"block\";\n box.style.top = `${rect.top - HIGHLIGHT_BORDER}px`;\n box.style.left = `${rect.left - HIGHLIGHT_BORDER}px`;\n box.style.width = `${rect.width + HIGHLIGHT_BORDER * 2}px`;\n box.style.height = `${rect.height + HIGHLIGHT_BORDER * 2}px`;\n box.style.borderRadius = `${\n clampRadius(surface.targetWindow.getComputedStyle(el).borderRadius) + HIGHLIGHT_BORDER\n }px`;\n\n if (el !== lastElement) {\n label.textContent = formatElementTargetLabel(el);\n lastElement = el;\n }\n label.style.display = \"block\";\n const labelRight = rect.right + 8;\n const labelTop = Math.max(8, rect.top);\n const labelMaxRight = surface.getTargetViewport().width - 8;\n // If there's room to the right of the element, place the label there;\n // otherwise tuck it inside the top-right corner of the element.\n if (labelRight + 240 <= labelMaxRight) {\n label.style.left = `${labelRight}px`;\n label.style.top = `${labelTop}px`;\n } else {\n label.style.left = `${Math.max(8, rect.right - 240)}px`;\n label.style.top = `${Math.max(8, rect.top - 24)}px`;\n }\n },\n hide() {\n box.style.display = \"none\";\n label.style.display = \"none\";\n },\n destroy() {\n box.remove();\n label.remove();\n },\n };\n}\n\n/**\n * Enter capture mode. Returns a handle to exit.\n *\n * Cursor:\n * Crosshair on most elements (including bare html/body), I-beam on text tags.\n *\n * Hover overlay:\n * Outline + label tooltip following the hovered element. Helps disambiguate\n * \"am I about to pin this paragraph or the wrapper div?\".\n *\n * Event suppression (capture phase, document-level):\n * - `click` — always suppressed for non-internal targets.\n * - `mousedown` — suppressed except on text tags (preserves native text\n * selection so passive text-selection capture can work).\n * - `mouseup` — same rule as `mousedown`.\n *\n * The provided `onClick` runs after suppression on the click event. It owns\n * its own busy-guard and identity flow.\n */\ntype DragOverlay = {\n update(rect: Rect): void;\n destroy(): void;\n};\n\nfunction createDragRectOverlay(surface: TargetSurface, internalAttr: string): DragOverlay {\n const box = surface.targetDocument.createElement(\"div\");\n box.setAttribute(internalAttr, \"\");\n Object.assign(box.style, {\n position: \"fixed\",\n pointerEvents: \"none\",\n border: `${HIGHLIGHT_BORDER}px solid ${BRAND}`,\n background: BRAND_TINT_SOFT,\n boxSizing: \"border-box\",\n zIndex: \"2147483645\",\n borderRadius: \"8px\",\n } satisfies Partial<CSSStyleDeclaration>);\n surface.targetDocument.body.appendChild(box);\n return {\n update(rect: Rect) {\n box.style.left = `${rect.x}px`;\n box.style.top = `${rect.y}px`;\n box.style.width = `${rect.width}px`;\n box.style.height = `${rect.height}px`;\n },\n destroy() {\n box.remove();\n },\n };\n}\n\nfunction rectFromPoints(a: { x: number; y: number }, b: { x: number; y: number }): Rect {\n return {\n x: Math.min(a.x, b.x),\n y: Math.min(a.y, b.y),\n width: Math.abs(b.x - a.x),\n height: Math.abs(b.y - a.y),\n };\n}\n\nexport function enterCaptureMode(options: CaptureModeOptions): CaptureModeHandle {\n const { internalAttr, onClick, onDrag, surface } = options;\n const doc = surface.targetDocument;\n\n const style = injectCursorStylesheet(surface, internalAttr);\n const overlay = createHighlightOverlay(surface, internalAttr);\n let paused = false;\n\n type DragState = {\n startX: number;\n startY: number;\n isDragging: boolean;\n rectOverlay: DragOverlay | null;\n };\n let drag: DragState | null = null;\n /** Overlay from the most recently committed drag, kept alive while the composer is open. */\n let persistedOverlay: DragOverlay | null = null;\n\n function clearActiveDrag() {\n if (drag?.rectOverlay) drag.rectOverlay.destroy();\n drag = null;\n }\n\n function clearPersistedOverlay() {\n if (persistedOverlay) {\n persistedOverlay.destroy();\n persistedOverlay = null;\n }\n }\n\n const onMouseDown = (event: Event): void => {\n const e = event as MouseEvent;\n const target = surface.eventTargetElement(e.target);\n if (isWidgetInternal(surface, e.target, internalAttr)) return;\n if (target && isTextTag(target)) return;\n e.preventDefault();\n e.stopPropagation();\n if (paused) return;\n // Starting a new gesture — any persisted overlay from the previous drag goes away.\n clearPersistedOverlay();\n drag = { startX: e.clientX, startY: e.clientY, isDragging: false, rectOverlay: null };\n };\n\n const onMouseUp = (event: Event): void => {\n const e = event as MouseEvent;\n // Drag completion: ignore text-tag/internal filters — wherever the mouse\n // happens to land, the drag is \"ours\" to commit because we started it on\n // a non-text target.\n if (drag?.isDragging) {\n e.preventDefault();\n e.stopPropagation();\n const rect = rectFromPoints(\n { x: drag.startX, y: drag.startY },\n { x: e.clientX, y: e.clientY },\n );\n // Hand the overlay off to `persistedOverlay`; caller dismisses after the composer.\n persistedOverlay = drag.rectOverlay;\n drag = null;\n onDrag?.(rect, e);\n return;\n }\n clearActiveDrag();\n const target = surface.eventTargetElement(e.target);\n if (isWidgetInternal(surface, e.target, internalAttr)) return;\n if (target && isTextTag(target)) return;\n e.preventDefault();\n e.stopPropagation();\n };\n\n const onClickCapture = (event: Event): void => {\n const e = event as MouseEvent;\n if (isWidgetInternal(surface, e.target, internalAttr)) return;\n e.preventDefault();\n e.stopPropagation();\n // While a composer is open, capture is paused — suppress the page click.\n // On close the controller resumes capture, so an outside-click both\n // dismisses the popover and opens a fresh one at that point. A composer\n // with an unsaved draft stays open (shake guard), keeping its click\n // suppressed so the draft isn't replaced.\n if (paused) return;\n onClick(e);\n };\n\n const onMouseMove = (event: Event): void => {\n const e = event as MouseEvent;\n if (drag) {\n if (!drag.isDragging) {\n const dx = e.clientX - drag.startX;\n const dy = e.clientY - drag.startY;\n if (Math.hypot(dx, dy) < DRAG_DISTANCE_THRESHOLD_PX) return;\n drag.isDragging = true;\n overlay.hide();\n drag.rectOverlay = createDragRectOverlay(surface, internalAttr);\n }\n drag.rectOverlay?.update(\n rectFromPoints({ x: drag.startX, y: drag.startY }, { x: e.clientX, y: e.clientY }),\n );\n return;\n }\n if (paused) return;\n const target = surface.eventTargetElement(e.target);\n if (!target) {\n overlay.hide();\n return;\n }\n if (isWidgetInternal(surface, target, internalAttr)) {\n overlay.hide();\n return;\n }\n const tag = target.tagName.toLowerCase();\n if (tag === \"html\" || tag === \"body\") {\n overlay.hide();\n return;\n }\n overlay.update(target);\n };\n\n const onMouseOut = (event: Event): void => {\n const e = event as MouseEvent;\n // Mouse left the document.\n if (!e.relatedTarget) overlay.hide();\n };\n\n doc.addEventListener(\"mousedown\", onMouseDown, true);\n doc.addEventListener(\"mouseup\", onMouseUp, true);\n doc.addEventListener(\"click\", onClickCapture, true);\n doc.addEventListener(\"mousemove\", onMouseMove, true);\n doc.addEventListener(\"mouseout\", onMouseOut, true);\n\n return {\n exit() {\n style.remove();\n overlay.destroy();\n clearActiveDrag();\n clearPersistedOverlay();\n doc.removeEventListener(\"mousedown\", onMouseDown, true);\n doc.removeEventListener(\"mouseup\", onMouseUp, true);\n doc.removeEventListener(\"click\", onClickCapture, true);\n doc.removeEventListener(\"mousemove\", onMouseMove, true);\n doc.removeEventListener(\"mouseout\", onMouseOut, true);\n },\n pause() {\n paused = true;\n overlay.hide();\n // Don't touch persistedOverlay — composer just opened and we want the\n // drag-rect visible alongside it.\n clearActiveDrag();\n },\n resume() {\n paused = false;\n },\n dismissDragOverlay() {\n clearPersistedOverlay();\n },\n };\n}\n\nexport const _internals = { buildCursorStylesheet };\n","import {\n createContext,\n type ReactNode,\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAnnotationsStore } from \"../data/annotations-store\";\nimport { usePopoverStore } from \"../data/popover-store\";\nimport { useTargetSurface, useViewportSurfaceState } from \"../surface/target-surface\";\nimport { type CaptureModeHandle, enterCaptureMode } from \"./capture-mode\";\nimport { type Rect, resolveCaptureTarget, resolveDragTarget } from \"./target-resolution\";\n\nconst INTERNAL_ATTR = \"data-patch-internal\";\n\ntype Controls = {\n isCapturing: boolean;\n enter: () => void;\n exit: () => void;\n};\n\nconst Ctx = createContext<Controls | null>(null);\n\nlet tempIdCounter = 0;\nfunction nextTempId(): string {\n tempIdCounter += 1;\n return `tmp-${Date.now().toString(36)}-${tempIdCounter}`;\n}\n\n/**\n * Wraps the imperative enterCaptureMode() handle. Owns the FAB's capture state\n * and routes click / drag events into the popover store as composer-state\n * popovers with an ephemeral pin in the annotations store.\n */\nexport function CaptureProvider({ children }: { children: ReactNode }) {\n const popover = usePopoverStore();\n const store = useAnnotationsStore();\n const surface = useTargetSurface();\n const { isPreviewing, previewReady } = useViewportSurfaceState();\n const [isCapturing, setIsCapturing] = useState(false);\n const handleRef = useRef<CaptureModeHandle | null>(null);\n const popoverRef = useRef(popover);\n const storeRef = useRef(store);\n popoverRef.current = popover;\n storeRef.current = store;\n\n const onCaptureClick = useCallback(\n (event: MouseEvent) => {\n // An open popover with an unsaved draft must not be replaced by an\n // outside-click — shake it and keep it open instead of starting a new one.\n // (A draft-free popover falls through and is replaced by the fresh one.)\n const pop = popoverRef.current;\n if (pop.active && pop.draftText.trim().length > 0) {\n pop.attemptClose();\n return;\n }\n\n const target = surface.eventTargetElement(event.target) ?? surface.targetDocument.body;\n const selection = surface.targetWindow.getSelection();\n const ct = resolveCaptureTarget({ clickTarget: target, selection });\n\n const tempId = nextTempId();\n const anchor = {\n viewportX: event.clientX,\n viewportY: event.clientY,\n documentY: event.clientY + surface.getTargetScrollY(),\n };\n storeRef.current.addEphemeral({\n tempId,\n viewportX: anchor.viewportX,\n viewportY: anchor.viewportY,\n documentY: anchor.documentY,\n });\n popoverRef.current.openComposer({ tempId, target: ct, anchor });\n handleRef.current?.pause();\n },\n [surface],\n );\n\n const onCaptureDrag = useCallback(\n (rect: Rect, release: { viewportX: number; viewportY: number }) => {\n const pop = popoverRef.current;\n if (pop.active && pop.draftText.trim().length > 0) {\n pop.attemptClose();\n handleRef.current?.dismissDragOverlay();\n return;\n }\n\n const viewport = surface.getTargetViewport();\n const target = resolveDragTarget({\n rect,\n viewport,\n internalAttr: INTERNAL_ATTR,\n doc: surface.targetDocument,\n });\n if (!target) {\n handleRef.current?.dismissDragOverlay();\n return;\n }\n const tempId = nextTempId();\n const anchor = {\n viewportX: release.viewportX,\n viewportY: release.viewportY,\n documentY: release.viewportY + surface.getTargetScrollY(),\n };\n storeRef.current.addEphemeral({\n tempId,\n viewportX: anchor.viewportX,\n viewportY: anchor.viewportY,\n documentY: anchor.documentY,\n });\n popoverRef.current.openComposer({ tempId, target, anchor });\n handleRef.current?.pause();\n },\n [surface],\n );\n\n const targetReady = store.annotationsReady && (!isPreviewing || previewReady);\n\n useEffect(() => {\n if (!isCapturing || !targetReady) {\n handleRef.current?.exit();\n handleRef.current = null;\n return;\n }\n handleRef.current?.exit();\n handleRef.current = enterCaptureMode({\n internalAttr: INTERNAL_ATTR,\n surface,\n onClick: onCaptureClick,\n onDrag: (rect, e) => onCaptureDrag(rect, { viewportX: e.clientX, viewportY: e.clientY }),\n });\n return () => {\n handleRef.current?.exit();\n handleRef.current = null;\n };\n }, [isCapturing, onCaptureClick, onCaptureDrag, surface, targetReady]);\n\n const enter = useCallback(() => {\n if (isCapturing) return;\n setIsCapturing(true);\n }, [isCapturing]);\n\n const exit = useCallback(() => {\n setIsCapturing(false);\n }, []);\n\n // Track active transitions to keep capture-mode in sync and to clean up\n // ephemeral pins that belong to a closed composer.\n const lastActiveRef = useRef<typeof popover.active>(null);\n useEffect(() => {\n const prev = lastActiveRef.current;\n const next = popover.active;\n\n // Composer just closed (cancelled or outside-click).\n if (prev?.kind === \"composer\" && next?.kind !== \"composer\") {\n storeRef.current.removeEphemeral(prev.tempId);\n // Drop any committed drag overlay and resume capture so the next page\n // click captures normally. An outside-click both dismisses this popover\n // and opens a fresh one at the click point — to dismiss without creating,\n // use the close button or Escape.\n handleRef.current?.dismissDragOverlay();\n handleRef.current?.resume();\n }\n\n // User started a composer on a fresh target while another was open —\n // drop the previous ephemeral.\n if (prev?.kind === \"composer\" && next?.kind === \"composer\" && prev.tempId !== next.tempId) {\n storeRef.current.removeEphemeral(prev.tempId);\n }\n\n lastActiveRef.current = next;\n }, [popover.active]);\n\n useEffect(() => {\n return () => {\n handleRef.current?.exit();\n handleRef.current = null;\n };\n }, []);\n\n const value = useMemo<Controls>(() => ({ isCapturing, enter, exit }), [isCapturing, enter, exit]);\n return <Ctx.Provider value={value}>{children}</Ctx.Provider>;\n}\n\nexport function useCaptureControls(): Controls {\n const v = use(Ctx);\n if (!v) throw new Error(\"useCaptureControls must be used inside <CaptureProvider>\");\n return v;\n}\n","import { createContext, type ReactNode, use, useMemo, useState } from \"react\";\n\ntype Store = {\n dockOpen: boolean;\n hideResolvedAnnotations: boolean;\n setDockOpen: (open: boolean) => void;\n setHideResolvedAnnotations: (hide: boolean) => void;\n};\n\nconst Ctx = createContext<Store | null>(null);\n\nexport function WidgetUiProvider({ children }: { children: ReactNode }) {\n const [dockOpen, setDockOpen] = useState(false);\n const [hideResolvedAnnotations, setHideResolvedAnnotations] = useState(false);\n\n const value = useMemo<Store>(\n () => ({ dockOpen, hideResolvedAnnotations, setDockOpen, setHideResolvedAnnotations }),\n [dockOpen, hideResolvedAnnotations],\n );\n\n return <Ctx.Provider value={value}>{children}</Ctx.Provider>;\n}\n\nexport function useWidgetUiStore(): Store {\n const v = use(Ctx);\n if (!v) throw new Error(\"useWidgetUiStore must be used inside <WidgetUiProvider>\");\n return v;\n}\n","type ProcessEnv = { NEXT_PUBLIC_PATCH_TOKEN?: string } | undefined;\ntype ImportMetaEnv = { VITE_PATCH_TOKEN?: string; PUBLIC_PATCH_TOKEN?: string } | undefined;\n\nexport type ResolveTokenInput = {\n prop?: string;\n processEnv?: ProcessEnv;\n importMetaEnv?: ImportMetaEnv;\n};\n\nconst MESSAGE =\n \"[Patch] No project token found. Pass `projectToken` as a prop, or set \" +\n \"NEXT_PUBLIC_PATCH_TOKEN (Next.js), VITE_PATCH_TOKEN (Vite / React Router), \" +\n \"or PUBLIC_PATCH_TOKEN (Astro) in your env.\";\n\n/**\n * Resolution order: explicit prop > NEXT_PUBLIC_PATCH_TOKEN (Next.js) >\n * VITE_PATCH_TOKEN (Vite / React Router) > PUBLIC_PATCH_TOKEN (Astro).\n * Throws with a descriptive message if none resolve.\n */\nexport function resolveProjectToken(input: ResolveTokenInput): string {\n const fromProp = input.prop?.trim();\n if (fromProp) return fromProp;\n const fromNext = input.processEnv?.NEXT_PUBLIC_PATCH_TOKEN?.trim();\n if (fromNext) return fromNext;\n const fromVite = input.importMetaEnv?.VITE_PATCH_TOKEN?.trim();\n if (fromVite) return fromVite;\n const fromAstro = input.importMetaEnv?.PUBLIC_PATCH_TOKEN?.trim();\n if (fromAstro) return fromAstro;\n throw new Error(MESSAGE);\n}\n\n/**\n * Best-effort `import.meta.env` reader that doesn't crash CJS contexts\n * where `import.meta` is illegal syntax. The compiled output keeps the\n * literal reference so the consumer's bundler (Vite) can inline at build.\n */\nexport function readImportMetaEnv(): ImportMetaEnv {\n try {\n if (typeof import.meta === \"undefined\") return undefined;\n const env = (import.meta as { env?: ImportMetaEnv }).env;\n return env;\n } catch {\n return undefined;\n }\n}\n\nexport function readProcessEnv(): ProcessEnv {\n try {\n if (typeof process === \"undefined\" || !process.env) return undefined;\n return { NEXT_PUBLIC_PATCH_TOKEN: process.env.NEXT_PUBLIC_PATCH_TOKEN };\n } catch {\n return undefined;\n }\n}\n","const MAX_COMPONENT_CHAIN = 1000;\n\nconst FRAMEWORK_REACT_COMPONENT_NAMES = new Set([\n \"AmpStateContext\",\n \"AppRouter\",\n \"AppRouterContext\",\n \"ClientPageRoot\",\n \"ClientSegmentRoot\",\n \"ErrorBoundary\",\n \"ForbiddenBoundary\",\n \"GlobalLayoutRouterContext\",\n \"HTTPAccessFallbackBoundary\",\n \"HTTPAccessFallbackErrorBoundary\",\n \"HeadManagerContext\",\n \"HotReload\",\n \"ImageConfigContext\",\n \"InnerLayoutRouter\",\n \"InnerScrollAndFocusHandler\",\n \"InnerScrollAndFocusHandlerOld\",\n \"LayoutRouterContext\",\n \"LoadingBoundary\",\n \"NavigationPromisesContext\",\n \"NotFoundBoundary\",\n \"OuterLayoutRouter\",\n \"PathParamsContext\",\n \"PathnameContext\",\n \"ReactDevOverlay\",\n \"RedirectBoundary\",\n \"RedirectErrorBoundary\",\n \"RenderFromTemplateContext\",\n \"RouterContext\",\n \"ScrollAndMaybeFocusHandler\",\n \"SearchParamsContext\",\n \"SegmentStateProvider\",\n \"SegmentViewNode\",\n \"ServerInsertedHTMLContext\",\n \"Suspense\",\n \"TemplateContext\",\n \"UnauthorizedBoundary\",\n]);\n\nfunction truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return `${value.slice(0, max - 1).trim()}…`;\n}\n\nfunction oneLine(value: string): string {\n return value.replace(/\\s+/g, \" \").trim();\n}\n\nexport function isFrameworkReactComponentName(name: string): boolean {\n return FRAMEWORK_REACT_COMPONENT_NAMES.has(oneLine(name));\n}\n\nexport function sanitizeReactComponentsHint(value: string | undefined): string | null {\n if (!value) return null;\n\n const names: string[] = [];\n const matches = value.matchAll(/<([^<>]+)>/g);\n for (const match of matches) {\n const name = oneLine(match[1] ?? \"\");\n if (!name || isFrameworkReactComponentName(name)) continue;\n if (names[names.length - 1] !== name) names.push(name);\n }\n\n if (names.length === 0) return null;\n return truncate(names.map((name) => `<${name}>`).join(\" \"), MAX_COMPONENT_CHAIN);\n}\n","// A stored avatar value (e.g. `user.image` or `organization.logo`) is either a\n// real image URL (an OAuth provider photo or one we uploaded) or a\n// generated-avatar seed encoded as `seed:<value>`. These helpers are the single\n// source of truth shared by the dashboard, the widget, and the widget API so a\n// seed is never rendered as an <img> src anywhere.\n\nexport const AVATAR_SEED_PREFIX = \"seed:\";\n\nexport function encodeAvatarSeed(seed: string): string {\n return `${AVATAR_SEED_PREFIX}${seed}`;\n}\n\nexport function splitAvatarValue(value: string | null | undefined): {\n url: string | null;\n seed: string | null;\n} {\n if (!value) return { url: null, seed: null };\n if (value.startsWith(AVATAR_SEED_PREFIX)) {\n return { url: null, seed: value.slice(AVATAR_SEED_PREFIX.length) || null };\n }\n // A bare http(s) value is a real image; anything else is treated as a raw seed\n // (legacy workspace logos stored the seed without the `seed:` prefix).\n if (/^https?:\\/\\//i.test(value)) return { url: value, seed: null };\n return { url: null, seed: value };\n}\n","export type ClientAvatarSpot = {\n id: string;\n cx: number;\n cy: number;\n r: number;\n color: string;\n opacity: number;\n gradientTransform: string;\n};\n\nexport type ClientAvatar = {\n id: string;\n background: string;\n spots: ClientAvatarSpot[];\n blur: number;\n grain: number;\n};\n\n// Vivid base hues, densely spaced around the wheel so two seeds rarely land in\n// the same family.\nconst HUES = [\n 6, 20, 34, 92, 120, 140, 158, 174, 190, 206, 220, 234, 252, 270, 286, 300, 318, 336, 350,\n] as const;\n\n// Each spot has a role: a hue family (\"base\" core, \"near\" subtle shift, \"accent\"\n// a real second colour like green-in-a-blue), a lightness band (one bright sheen,\n// one deep pocket → depth, not a flat ball), and a \"reach\" so spots are flung off\n// toward the edges in different directions instead of stacking in the centre.\nconst SPOT_ROLES = [\n {\n hue: \"near\",\n sat: [88, 98],\n light: [68, 82],\n r: [0.44, 0.62],\n opacity: [0.9, 1],\n reach: [0.14, 0.32],\n },\n {\n hue: \"base\",\n sat: [85, 96],\n light: [44, 56],\n r: [0.5, 0.74],\n opacity: [0.85, 1],\n reach: [0.2, 0.42],\n },\n {\n hue: \"accent\",\n sat: [84, 97],\n light: [50, 66],\n r: [0.42, 0.64],\n opacity: [0.8, 0.98],\n reach: [0.26, 0.48],\n },\n {\n hue: \"accent2\",\n sat: [82, 95],\n light: [30, 46],\n r: [0.44, 0.66],\n opacity: [0.72, 0.94],\n reach: [0.24, 0.46],\n },\n] as const;\n\nconst TAU = Math.PI * 2;\n\nfunction hashSeed(seed: string): number {\n let hash = 2166136261;\n for (let i = 0; i < seed.length; i++) {\n hash ^= seed.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return hash >>> 0;\n}\n\nfunction mulberry32(seed: number) {\n return () => {\n seed += 0x6d2b79f5;\n let t = seed;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nfunction range(rng: () => number, min: number, max: number): number {\n return min + rng() * (max - min);\n}\n\nfunction round(value: number, digits = 3): number {\n const factor = 10 ** digits;\n return Math.round(value * factor) / factor;\n}\n\nfunction hsl(hue: number, saturation: number, lightness: number): string {\n return `hsl(${round(((hue % 360) + 360) % 360, 1)} ${round(saturation, 1)}% ${round(lightness, 1)}%)`;\n}\n\nexport function clientAvatar(seed: string | null | undefined): ClientAvatar {\n const hash = hashSeed(seed?.trim() || \"patch-client\");\n const rng = mulberry32(hash);\n const id = hash.toString(36);\n\n const baseHue = (HUES[hash % HUES.length] ?? HUES[0]) + range(rng, -10, 10);\n const nearDir = rng() < 0.5 ? -1 : 1;\n // The accent swings independently of \"near\", so an avatar can pick up a tint\n // on either side (a blue with green on one edge, violet on the other). Capped\n // so we never mix true opposites — at most three related hues.\n const accentDir = rng() < 0.5 ? -1 : 1;\n const accentHue = baseHue + accentDir * range(rng, 52, 116);\n // A third related tone, drifting the other way for a wider spread.\n const accent2Hue = baseHue - accentDir * range(rng, 26, 66);\n const nearHue = baseHue + nearDir * range(rng, 12, 38);\n\n const background = hsl(\n baseHue + nearDir * range(rng, 0, 14),\n range(rng, 80, 92),\n range(rng, 44, 54),\n );\n\n const startAngle = range(rng, 0, TAU);\n const spots = SPOT_ROLES.map((role, index) => {\n const hueBase =\n role.hue === \"accent\"\n ? accentHue\n : role.hue === \"accent2\"\n ? accent2Hue\n : role.hue === \"near\"\n ? nearHue\n : baseHue;\n const hue = hueBase + range(rng, -11, 11);\n // Fling each spot outward at a spread-out angle so blobs read as an\n // asymmetric cloud rather than concentric rings.\n const angle = startAngle + (index / SPOT_ROLES.length) * TAU + range(rng, -0.6, 0.6);\n const reach = range(rng, role.reach[0], role.reach[1]);\n const cx = round(0.5 + Math.cos(angle) * reach);\n const cy = round(0.5 + Math.sin(angle) * reach);\n // Stretch + rotate each radial gradient into an oriented ellipse so the\n // blobs are odd organic shapes, not perfect circles.\n const rot = round(range(rng, 0, 180), 1);\n const sx = round(range(rng, 0.62, 1.5), 3);\n const sy = round(range(rng, 0.62, 1.5), 3);\n return {\n id: `cav-${id}-${index}`,\n cx,\n cy,\n r: round(range(rng, role.r[0], role.r[1])),\n color: hsl(\n hue,\n range(rng, role.sat[0], role.sat[1]),\n range(rng, role.light[0], role.light[1]),\n ),\n opacity: round(range(rng, role.opacity[0], role.opacity[1]), 2),\n gradientTransform: `rotate(${rot} ${cx} ${cy}) translate(${cx} ${cy}) scale(${sx} ${sy}) translate(${round(-cx)} ${round(-cy)})`,\n };\n });\n\n return {\n id,\n background,\n spots,\n blur: round(range(rng, 3.4, 5.4), 2),\n grain: round(range(rng, 0.09, 0.15), 2),\n };\n}\n","export type Rect = { x: number; y: number; width: number; height: number };\nexport type Size = { width: number; height: number };\nexport type Placement = \"right\" | \"left\";\n\nexport type PositionInput = {\n anchor: Rect;\n popover: Size;\n viewport: Size;\n /** Gap between the anchor and the popover. Defaults to 12px. */\n gap?: number;\n /** Margin from viewport edges. Defaults to 16px. */\n margin?: number;\n};\n\nexport type Position = {\n x: number;\n y: number;\n width: number;\n placement: Placement;\n};\n\nconst DEFAULT_GAP = 12;\nconst DEFAULT_MARGIN = 16;\n\n/** Width of the collapsed annotation popover. Shared so pins can predict the\n * side the popover will open on and point toward it. */\nexport const POPOVER_WIDTH = 332;\n\n/**\n * Compute a popover position relative to an anchor.\n *\n * - Prefers placing the popover to the right of the anchor; flips to the left\n * when there isn't enough room.\n * - Aligns the popover's top with the anchor's top; slides up when overflowing\n * the viewport bottom; clamps to the top margin if it would overflow there.\n * - Returns a clamped `width` (min of requested width and viewport - 2*margin).\n */\nexport function computePosition(input: PositionInput): Position {\n const gap = input.gap ?? DEFAULT_GAP;\n const margin = input.margin ?? DEFAULT_MARGIN;\n\n const width = Math.min(input.popover.width, Math.max(0, input.viewport.width - margin * 2));\n\n let placement: Placement = \"right\";\n let x = input.anchor.x + input.anchor.width + gap;\n if (x + width > input.viewport.width - margin) {\n placement = \"left\";\n x = input.anchor.x - width - gap;\n }\n if (x < margin) x = margin;\n\n let y = input.anchor.y;\n if (y + input.popover.height > input.viewport.height - margin) {\n y = input.viewport.height - margin - input.popover.height;\n }\n if (y < margin) y = margin;\n\n return { x, y, width, placement };\n}\n","export function cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(\" \");\n}\n","import { clientAvatar } from \"@patch/shared\";\nimport { type CSSProperties, useId } from \"react\";\nimport { cn } from \"./cn\";\n\nexport function GeneratedClientAvatar({\n seed,\n className,\n style,\n}: {\n seed: string;\n className?: string;\n style?: CSSProperties;\n}) {\n const avatar = clientAvatar(seed);\n const instanceId = useId().replace(/[^a-zA-Z0-9_-]/g, \"\");\n const id = `${avatar.id}-${instanceId}`;\n const blurId = `cav-blur-${id}`;\n const grainId = `cav-grain-${id}`;\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 64 64\"\n className={cn(\"absolute inset-0 size-full! overflow-hidden rounded-full\", className)}\n style={style}\n >\n <defs>\n <filter id={blurId} x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\">\n <feGaussianBlur stdDeviation={avatar.blur} />\n </filter>\n <filter id={grainId} x=\"0%\" y=\"0%\" width=\"100%\" height=\"100%\">\n <feTurbulence\n type=\"fractalNoise\"\n baseFrequency=\"0.9\"\n numOctaves=\"2\"\n stitchTiles=\"stitch\"\n />\n <feColorMatrix type=\"saturate\" values=\"0\" />\n </filter>\n {avatar.spots.map((spot) => (\n <radialGradient\n key={spot.id}\n id={`${id}-${spot.id}`}\n cx={spot.cx}\n cy={spot.cy}\n r={spot.r}\n gradientTransform={spot.gradientTransform}\n >\n <stop offset=\"0%\" stopColor={spot.color} stopOpacity={spot.opacity} />\n <stop offset=\"100%\" stopColor={spot.color} stopOpacity={0} />\n </radialGradient>\n ))}\n </defs>\n <rect width=\"64\" height=\"64\" fill={avatar.background} />\n <g filter={`url(#${blurId})`}>\n {avatar.spots.map((spot) => (\n <rect key={spot.id} width=\"64\" height=\"64\" fill={`url(#${id}-${spot.id})`} />\n ))}\n </g>\n <rect\n width=\"64\"\n height=\"64\"\n filter={`url(#${grainId})`}\n opacity={avatar.grain}\n style={{ mixBlendMode: \"overlay\" }}\n />\n </svg>\n );\n}\n","import { splitAvatarValue } from \"@patch/shared\";\nimport { motion } from \"motion/react\";\nimport type { MouseEvent, Ref } from \"react\";\nimport { computePosition, POPOVER_WIDTH, type Rect, type Size } from \"../thread/popover-position\";\nimport { GeneratedClientAvatar } from \"../ui/generated-client-avatar\";\nimport type { AnnotationAttention } from \"./annotation-attention\";\n\nexport const PIN_SIZE = 28;\nconst PIN_EASE = [0.22, 0.61, 0.36, 1] as const;\n\nconst TINTS = [\n \"var(--color-avatar-tint-1)\",\n \"var(--color-avatar-tint-2)\",\n \"var(--color-avatar-tint-3)\",\n \"var(--color-avatar-tint-4)\",\n \"var(--color-avatar-tint-5)\",\n] as const;\n\nexport function initialsFromName(name: string | null | undefined): string {\n if (!name) return \"?\";\n const parts = name.trim().split(/\\s+/);\n const first = parts[0];\n const last = parts[parts.length - 1];\n if (!first || !last) return \"?\";\n if (parts.length === 1) return first.slice(0, 2).toUpperCase();\n const firstChar = first[0] ?? \"\";\n const lastChar = last[0] ?? \"\";\n return (firstChar + lastChar).toUpperCase() || \"?\";\n}\n\nexport function tintForAuthor(key: string | null | undefined): string {\n if (!key) return TINTS[0];\n let hash = 0;\n for (let i = 0; i < key.length; i++) {\n hash = (hash << 5) - hash + key.charCodeAt(i);\n hash |= 0;\n }\n return TINTS[Math.abs(hash) % TINTS.length] ?? TINTS[0];\n}\n\nexport type PinPointSide = \"left\" | \"right\";\n\n// Teardrop radius: three rounded corners + one pointed corner. The point marks\n// the dropped spot and sits opposite the popover. Keyed by `pointSide`.\nconst FRAME_RADIUS: Record<PinPointSide, string> = {\n right: \"50% 50% 3px 50%\",\n left: \"50% 50% 50% 3px\",\n};\nconst AVATAR_RADIUS: Record<PinPointSide, string> = {\n right: \"50% 50% 2px 50%\",\n left: \"50% 50% 50% 2px\",\n};\n\n/**\n * Which bottom corner the teardrop points at for a pin dropped at `spot`. The\n * tip marks the dropped point and sits opposite the side the popover opens on,\n * so it points \"away\" from the thread.\n */\nexport function pinPointSide(\n spot: { viewportX: number; viewportY: number },\n viewport: Size,\n): PinPointSide {\n const { placement } = computePosition({\n anchor: {\n x: spot.viewportX - PIN_SIZE / 2,\n y: spot.viewportY - PIN_SIZE / 2,\n width: PIN_SIZE,\n height: PIN_SIZE,\n },\n popover: { width: POPOVER_WIDTH, height: 200 },\n viewport,\n });\n return placement === \"right\" ? \"left\" : \"right\";\n}\n\n/**\n * Top-left of the 28px pin box positioned so its pointed corner lands exactly\n * on the dropped `spot`. The body extends up and toward the popover side.\n */\nexport function pinBoxRect(\n spot: { viewportX: number; viewportY: number },\n pointSide: PinPointSide,\n): Rect {\n return {\n x: pointSide === \"left\" ? spot.viewportX : spot.viewportX - PIN_SIZE,\n y: spot.viewportY - PIN_SIZE,\n width: PIN_SIZE,\n height: PIN_SIZE,\n };\n}\n\ntype Props = {\n avatarSrc?: string | null;\n generatedSeed?: string | null;\n avatarAlt?: string;\n resolved: boolean;\n attention?: AnnotationAttention | null;\n orphan?: boolean;\n ephemeral?: boolean;\n /** Which corner the teardrop points at — marks the dropped spot. */\n pointSide?: PinPointSide;\n onClick?: (e: MouseEvent<HTMLButtonElement>) => void;\n ariaLabel?: string;\n pinId?: string;\n ref?: Ref<HTMLButtonElement>;\n};\n\n/**\n * Single pin. Position (top/left) is set imperatively by the layer via the\n * ref prop so scroll/resize updates don't trigger React re-renders.\n *\n * Visual contract: a 28px teardrop with a white frame and soft shadow holding\n * the lead participant's avatar. The pointed corner marks the dropped spot and\n * sits opposite the popover. A top-right attention dot signals when studio\n * action is needed; a green tick on the corner opposite the point marks resolved.\n */\nexport function Pin({ ref, ...props }: Props) {\n const pointSide: PinPointSide = props.pointSide ?? \"right\";\n const attentionClass = !props.resolved && props.attention ? attentionTone[props.attention] : null;\n // `avatarSrc` may carry a generated-avatar seed (`seed:<value>`) — route it to\n // the generated avatar rather than an <img>.\n const { url: avatarUrl, seed: avatarSeedFromSrc } = splitAvatarValue(props.avatarSrc);\n const generatedSeed = avatarSeedFromSrc ?? props.generatedSeed;\n const avatarFilter = props.orphan\n ? \"grayscale(1)\"\n : props.resolved\n ? \"saturate(0.55) brightness(1.04) contrast(0.92)\"\n : \"\";\n const avatarOpacity = props.orphan ? 0.55 : 1;\n // Tick lands on the rounded corner opposite the point so it never sits on the tip.\n const tickCorner = pointSide === \"right\" ? \"-bottom-0.5 -left-0.5\" : \"-bottom-0.5 -right-0.5\";\n\n return (\n <motion.button\n ref={ref}\n type=\"button\"\n onClick={props.onClick}\n aria-label={props.ariaLabel ?? \"Open annotation\"}\n data-patch-ephemeral={props.ephemeral ? \"\" : undefined}\n data-patch-pin-id={props.pinId}\n className=\"patch-pin-button fixed z-[2147483645] size-7 border-0 bg-transparent p-0\"\n initial={props.ephemeral ? { opacity: 0, scale: 0.45 } : false}\n animate={\n props.ephemeral\n ? {\n opacity: 1,\n scale: 1,\n transition: { type: \"spring\", stiffness: 620, damping: 30, mass: 0.65 },\n }\n : { opacity: 1, scale: 1 }\n }\n exit={\n props.ephemeral\n ? {\n opacity: 0,\n scale: 0.45,\n transition: { delay: 0.16, duration: 0.14, ease: PIN_EASE },\n }\n : {\n opacity: 0,\n scale: 0.9,\n transition: { duration: 0.12, ease: PIN_EASE },\n }\n }\n >\n <span\n className=\"patch-pin relative grid size-full place-items-center\"\n data-patch-point-side={pointSide}\n style={{ borderRadius: FRAME_RADIUS[pointSide] }}\n >\n <span\n data-patch-avatar=\"\"\n className=\"absolute inset-[2px] overflow-hidden\"\n style={{\n borderRadius: AVATAR_RADIUS[pointSide],\n // Neutral placeholder behind the avatar — only ever seen while an\n // image is loading or if it fails before the generated avatar paints.\n background: \"var(--color-muted-foreground)\",\n filter: props.orphan ? \"grayscale(1)\" : \"none\",\n // Orphans (anchor lost) stay faded — the avatar tints are already\n // grey, so grayscale alone wouldn't distinguish them.\n opacity: props.orphan ? 0.55 : 1,\n }}\n >\n {generatedSeed ? (\n <GeneratedClientAvatar\n seed={generatedSeed}\n style={{\n // The avatar wrapper clips to the teardrop; let the fill square\n // off so it reaches into the pointed corner.\n borderRadius: 0,\n filter: avatarFilter || \"none\",\n opacity: avatarOpacity,\n }}\n />\n ) : null}\n {avatarUrl ? (\n <img\n src={avatarUrl}\n alt={props.avatarAlt ?? \"\"}\n referrerPolicy=\"no-referrer\"\n className=\"absolute inset-0 size-full object-cover\"\n draggable={false}\n style={{\n filter: avatarFilter || \"none\",\n opacity: avatarOpacity,\n }}\n onError={(event) => {\n event.currentTarget.remove();\n }}\n />\n ) : null}\n </span>\n {props.resolved && (\n <span\n className={`absolute ${tickCorner} grid size-[13px] place-items-center rounded-full bg-brand-green text-[8px] font-bold leading-none text-white`}\n >\n ✓\n </span>\n )}\n {attentionClass && (\n <span\n data-patch-attention={props.attention}\n aria-hidden=\"true\"\n className={`absolute -top-0.5 -right-0.5 size-[9px] rounded-full border-[1.5px] border-white ${attentionClass}`}\n />\n )}\n </span>\n </motion.button>\n );\n}\n\nconst attentionTone: Record<AnnotationAttention, string> = {\n \"review-pr\": \"bg-brand\",\n \"patch-failed\": \"bg-destructive\",\n \"rerun-after-closed\": \"bg-muted-foreground\",\n};\n","import { splitAvatarValue } from \"@patch/shared\";\nimport type { CSSProperties } from \"react\";\nimport { cn } from \"./cn\";\nimport { GeneratedClientAvatar } from \"./generated-client-avatar\";\n\ntype Size = \"sm\" | \"md\";\n\ntype Props = {\n initials: string;\n /** CSS color (often a `var(--color-avatar-tint-*)` token) — resolved at runtime. */\n tint: string;\n src?: string | null;\n generatedSeed?: string | null;\n alt?: string;\n size?: Size;\n className?: string;\n style?: CSSProperties;\n};\n\nconst base =\n \"relative inline-grid shrink-0 overflow-hidden place-items-center rounded-full text-white font-semibold tracking-[-0.01em]\";\n\nconst sizes: Record<Size, string> = {\n sm: \"size-[22px] text-[9.5px]\",\n md: \"size-7 text-[10.5px]\",\n};\n\nexport function Avatar({\n initials,\n tint,\n src,\n generatedSeed,\n alt = \"\",\n size = \"md\",\n className,\n style,\n}: Props) {\n // `src` may carry a generated-avatar seed (`seed:<value>`) rather than a real\n // image URL — route it to the generated avatar instead of an <img>.\n const { url, seed } = splitAvatarValue(src);\n const effectiveSeed = seed ?? generatedSeed;\n return (\n <span className={cn(base, sizes[size], className)} style={{ background: tint, ...style }}>\n <span>{initials}</span>\n {!url && effectiveSeed ? <GeneratedClientAvatar seed={effectiveSeed} /> : null}\n {url ? (\n <img\n src={url}\n alt={alt}\n referrerPolicy=\"no-referrer\"\n className=\"absolute inset-0 size-full rounded-full object-cover\"\n draggable={false}\n onError={(event) => {\n event.currentTarget.remove();\n }}\n />\n ) : null}\n </span>\n );\n}\n","// GENERATED by scripts/generate-glyphs.ts — do not edit by hand.\n// Source: @hugeicons/core-free-icons (free, Stroke Rounded). Geometry only;\n// stroke / fill / width are applied by <Glyph> at render time.\n\nexport type GlyphName =\n | \"arrow-up\"\n | \"check\"\n | \"cursor\"\n | \"desktop\"\n | \"globe\"\n | \"lock\"\n | \"maximize\"\n | \"minimize\"\n | \"mobile\"\n | \"more\"\n | \"play\"\n | \"pr\"\n | \"refresh\"\n | \"robot\"\n | \"settings\"\n | \"tablet\"\n | \"trash\"\n | \"x\";\n\nexport type GlyphElement = readonly [string, Readonly<Record<string, string | number>>];\n\nexport const GLYPH_DATA: Readonly<Record<GlyphName, readonly GlyphElement[]>> = {\n \"arrow-up\": [\n [\"path\", { d: \"M12 5.5V19\" }],\n [\"path\", { d: \"M18 11C18 11 13.5811 5.00001 12 5C10.4188 4.99999 6 11 6 11\" }],\n ],\n check: [[\"path\", { d: \"M5 14L8.5 17.5L19 6.5\" }]],\n cursor: [\n [\n \"path\",\n {\n d: \"M12.669 8.35811L17.6969 10.3256C20.5969 11.4604 22.0469 12.0277 21.9988 12.9278C21.9508 13.8278 20.4375 14.2405 17.4111 15.0659C16.5099 15.3117 16.0593 15.4346 15.7469 15.7469C15.4346 16.0593 15.3117 16.5099 15.0659 17.4111C14.2405 20.4375 13.8278 21.9508 12.9278 21.9988C12.0277 22.0469 11.4604 20.5969 10.3256 17.6969L8.35811 12.669C7.17004 9.63279 6.57601 8.1147 7.34535 7.34535C8.1147 6.57601 9.63279 7.17004 12.669 8.35811Z\",\n },\n ],\n [\"path\", { d: \"M9 4V2M5 5L3.5 3.5M4 9H2M5 13L3.5 14.5M14.5 3.5L13 5\" }],\n ],\n desktop: [\n [\n \"path\",\n {\n d: \"M14 21H16M14 21C13.1716 21 12.5 20.3284 12.5 19.5V17L12 17M14 21H10M10 21H8M10 21C10.8284 21 11.5 20.3284 11.5 19.5V17L12 17M12 17V21\",\n },\n ],\n [\n \"path\",\n {\n d: \"M16 3H8C5.17157 3 3.75736 3 2.87868 3.87868C2 4.75736 2 6.17157 2 9V11C2 13.8284 2 15.2426 2.87868 16.1213C3.75736 17 5.17157 17 8 17H16C18.8284 17 20.2426 17 21.1213 16.1213C22 15.2426 22 13.8284 22 11V9C22 6.17157 22 4.75736 21.1213 3.87868C20.2426 3 18.8284 3 16 3Z\",\n },\n ],\n ],\n globe: [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\" }],\n [\"path\", { d: \"M8 12C8 18 12 22 12 22C12 22 16 18 16 12C16 6 12 2 12 2C12 2 8 6 8 12Z\" }],\n [\"path\", { d: \"M21 15H3\" }],\n [\"path\", { d: \"M21 9H3\" }],\n ],\n lock: [\n [\n \"path\",\n {\n d: \"M4.26781 18.8447C4.49269 20.515 5.87613 21.8235 7.55966 21.9009C8.97627 21.966 10.4153 22 12 22C13.5847 22 15.0237 21.966 16.4403 21.9009C18.1239 21.8235 19.5073 20.515 19.7322 18.8447C19.879 17.7547 20 16.6376 20 15.5C20 14.3624 19.879 13.2453 19.7322 12.1553C19.5073 10.485 18.1239 9.17649 16.4403 9.09909C15.0237 9.03397 13.5847 9 12 9C10.4153 9 8.97627 9.03397 7.55966 9.09909C5.87613 9.17649 4.49269 10.485 4.26781 12.1553C4.12104 13.2453 4 14.3624 4 15.5C4 16.6376 4.12104 17.7547 4.26781 18.8447Z\",\n },\n ],\n [\"path\", { d: \"M7.5 9V6.5C7.5 4.01472 9.51472 2 12 2C14.4853 2 16.5 4.01472 16.5 6.5V9\" }],\n [\n \"path\",\n {\n d: \"M12.125 15.5H12M12.25 15.5C12.25 15.6381 12.1381 15.75 12 15.75C11.8619 15.75 11.75 15.6381 11.75 15.5C11.75 15.3619 11.8619 15.25 12 15.25C12.1381 15.25 12.25 15.3619 12.25 15.5Z\",\n },\n ],\n ],\n maximize: [\n [\n \"path\",\n {\n d: \"M16.4999 3.26621C17.3443 3.25421 20.1408 2.67328 20.7337 3.26621C21.3266 3.85913 20.7457 6.65559 20.7337 7.5M20.5059 3.49097L13.5021 10.4961\",\n },\n ],\n [\n \"path\",\n {\n d: \"M3.26636 16.5001C3.25436 17.3445 2.67343 20.141 3.26636 20.7339C3.85928 21.3268 6.65574 20.7459 7.50015 20.7339M10.502 13.4976L3.49824 20.5027\",\n },\n ],\n ],\n minimize: [\n [\n \"path\",\n {\n d: \"M6.5023 10.7365C7.34671 10.7485 10.1432 11.3294 10.7361 10.7365C11.329 10.1436 10.7481 7.34708 10.7361 6.50267M13.2685 17.5027C13.2565 16.6583 12.6756 13.8618 13.2685 13.2689C13.8614 12.676 16.6579 13.2569 17.5023 13.2689M20.9991 21.001L13.6102 13.6188M10.3691 10.3763L2.99998 2.99902\",\n },\n ],\n ],\n mobile: [\n [\n \"path\",\n {\n d: \"M13.5 2H10.5C8.14298 2 6.96447 2 6.23223 2.73223C5.5 3.46447 5.5 4.64298 5.5 7V17C5.5 19.357 5.5 20.5355 6.23223 21.2678C6.96447 22 8.14298 22 10.5 22H13.5C15.857 22 17.0355 22 17.7678 21.2678C18.5 20.5355 18.5 19.357 18.5 17V7C18.5 4.64298 18.5 3.46447 17.7678 2.73223C17.0355 2 15.857 2 13.5 2Z\",\n },\n ],\n [\n \"path\",\n {\n d: \"M12.125 19H12M12.25 19C12.25 19.1381 12.1381 19.25 12 19.25C11.8619 19.25 11.75 19.1381 11.75 19C11.75 18.8619 11.8619 18.75 12 18.75C12.1381 18.75 12.25 18.8619 12.25 19Z\",\n },\n ],\n ],\n more: [\n [\n \"path\",\n {\n d: \"M12 12.002H12.5M19 12.002H19.5M5 12.002H5.5M12 13.002C12.5523 13.002 13 12.5542 13 12.002C13 11.4497 12.5523 11.002 12 11.002C11.4477 11.002 11 11.4497 11 12.002C11 12.5542 11.4477 13.002 12 13.002ZM19 13.002C19.5523 13.002 20 12.5542 20 12.002C20 11.4497 19.5523 11.002 19 11.002C18.4477 11.002 18 11.4497 18 12.002C18 12.5542 18.4477 13.002 19 13.002ZM5 13.002C5.55228 13.002 6 12.5542 6 12.002C6 11.4497 5.55228 11.002 5 11.002C4.44772 11.002 4 11.4497 4 12.002C4 12.5542 4.44772 13.002 5 13.002Z\",\n },\n ],\n ],\n play: [\n [\n \"path\",\n {\n d: \"M18.8906 12.846C18.5371 14.189 16.8667 15.138 13.5257 17.0361C10.296 18.8709 8.6812 19.7884 7.37983 19.4196C6.8418 19.2671 6.35159 18.9776 5.95624 18.5787C5 17.6139 5 15.7426 5 12C5 8.2574 5 6.3861 5.95624 5.42132C6.35159 5.02245 6.8418 4.73288 7.37983 4.58042C8.6812 4.21165 10.296 5.12907 13.5257 6.96393C16.8667 8.86197 18.5371 9.811 18.8906 11.154C19.0365 11.7084 19.0365 12.2916 18.8906 12.846Z\",\n },\n ],\n ],\n pr: [\n [\"path\", { d: \"M6 8L6 16\" }],\n [\n \"path\",\n {\n d: \"M18 16V12C18 9.17156 18 7.75735 17.1213 6.87867C16.2426 5.99999 14.8284 5.99999 12 5.99999L11 5.99999M11 5.99999C11 5.29976 12.9943 3.99152 13.5 3.49999M11 5.99999C11 6.70022 12.9943 8.00846 13.5 8.49999\",\n },\n ],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"2\" }],\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"2\" }],\n [\"circle\", { cx: \"18\", cy: \"18\", r: \"2\" }],\n ],\n refresh: [\n [\n \"path\",\n {\n d: \"M20.0092 2V5.13219C20.0092 5.42605 19.6418 5.55908 19.4537 5.33333C17.6226 3.2875 14.9617 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12\",\n },\n ],\n ],\n robot: [\n [\n \"path\",\n {\n d: \"M19 16V14C19 11.1716 19 9.75736 18.1213 8.87868C17.2426 8 15.8284 8 13 8H11C8.17157 8 6.75736 8 5.87868 8.87868C5 9.75736 5 11.1716 5 14V16C5 18.8284 5 20.2426 5.87868 21.1213C6.75736 22 8.17157 22 11 22H13C15.8284 22 17.2426 22 18.1213 21.1213C19 20.2426 19 18.8284 19 16Z\",\n },\n ],\n [\n \"path\",\n {\n d: \"M19 18C20.4142 18 21.1213 18 21.5607 17.5607C22 17.1213 22 16.4142 22 15C22 13.5858 22 12.8787 21.5607 12.4393C21.1213 12 20.4142 12 19 12\",\n },\n ],\n [\n \"path\",\n {\n d: \"M5 18C3.58579 18 2.87868 18 2.43934 17.5607C2 17.1213 2 16.4142 2 15C2 13.5858 2 12.8787 2.43934 12.4393C2.87868 12 3.58579 12 5 12\",\n },\n ],\n [\n \"path\",\n {\n d: \"M13.5 3.5C13.5 4.32843 12.8284 5 12 5C11.1716 5 10.5 4.32843 10.5 3.5C10.5 2.67157 11.1716 2 12 2C12.8284 2 13.5 2.67157 13.5 3.5Z\",\n },\n ],\n [\"path\", { d: \"M12 5V8\" }],\n [\"path\", { d: \"M9 13V14\" }],\n [\"path\", { d: \"M15 13V14\" }],\n [\"path\", { d: \"M10 17.5C10 17.5 10.6667 18 12 18C13.3333 18 14 17.5 14 17.5\" }],\n ],\n settings: [\n [\n \"path\",\n {\n d: \"M15.5 12C15.5 13.933 13.933 15.5 12 15.5C10.067 15.5 8.5 13.933 8.5 12C8.5 10.067 10.067 8.5 12 8.5C13.933 8.5 15.5 10.067 15.5 12Z\",\n },\n ],\n [\n \"path\",\n {\n d: \"M21.011 14.0965C21.5329 13.9558 21.7939 13.8854 21.8969 13.7508C22 13.6163 22 13.3998 22 12.9669V11.0332C22 10.6003 22 10.3838 21.8969 10.2493C21.7938 10.1147 21.5329 10.0443 21.011 9.90358C19.0606 9.37759 17.8399 7.33851 18.3433 5.40087C18.4817 4.86799 18.5509 4.60156 18.4848 4.44529C18.4187 4.28902 18.2291 4.18134 17.8497 3.96596L16.125 2.98673C15.7528 2.77539 15.5667 2.66972 15.3997 2.69222C15.2326 2.71472 15.0442 2.90273 14.6672 3.27873C13.208 4.73448 10.7936 4.73442 9.33434 3.27864C8.95743 2.90263 8.76898 2.71463 8.60193 2.69212C8.43489 2.66962 8.24877 2.77529 7.87653 2.98663L6.15184 3.96587C5.77253 4.18123 5.58287 4.28891 5.51678 4.44515C5.45068 4.6014 5.51987 4.86787 5.65825 5.4008C6.16137 7.3385 4.93972 9.37763 2.98902 9.9036C2.46712 10.0443 2.20617 10.1147 2.10308 10.2492C2 10.3838 2 10.6003 2 11.0332V12.9669C2 13.3998 2 13.6163 2.10308 13.7508C2.20615 13.8854 2.46711 13.9558 2.98902 14.0965C4.9394 14.6225 6.16008 16.6616 5.65672 18.5992C5.51829 19.1321 5.44907 19.3985 5.51516 19.5548C5.58126 19.7111 5.77092 19.8188 6.15025 20.0341L7.87495 21.0134C8.24721 21.2247 8.43334 21.3304 8.6004 21.3079C8.76746 21.2854 8.95588 21.0973 9.33271 20.7213C10.7927 19.2644 13.2088 19.2643 14.6689 20.7212C15.0457 21.0973 15.2341 21.2853 15.4012 21.3078C15.5682 21.3303 15.7544 21.2246 16.1266 21.0133L17.8513 20.034C18.2307 19.8187 18.4204 19.711 18.4864 19.5547C18.5525 19.3984 18.4833 19.132 18.3448 18.5991C17.8412 16.6616 19.0609 14.6226 21.011 14.0965Z\",\n },\n ],\n ],\n tablet: [\n [\n \"path\",\n {\n d: \"M14.5 2H9.5C6.67157 2 5.25736 2 4.37868 2.87868C3.5 3.75736 3.5 5.17157 3.5 8V16C3.5 18.8284 3.5 20.2426 4.37868 21.1213C5.25736 22 6.67157 22 9.5 22H14.5C17.3284 22 18.7426 22 19.6213 21.1213C20.5 20.2426 20.5 18.8284 20.5 16V8C20.5 5.17157 20.5 3.75736 19.6213 2.87868C18.7426 2 17.3284 2 14.5 2Z\",\n },\n ],\n [\n \"path\",\n {\n d: \"M12.125 19H12M12.25 19C12.25 19.1381 12.1381 19.25 12 19.25C11.8619 19.25 11.75 19.1381 11.75 19C11.75 18.8619 11.8619 18.75 12 18.75C12.1381 18.75 12.25 18.8619 12.25 19Z\",\n },\n ],\n ],\n trash: [\n [\n \"path\",\n {\n d: \"M19.5 5.5L18.8803 15.5251C18.7219 18.0864 18.6428 19.3671 18.0008 20.2879C17.6833 20.7431 17.2747 21.1273 16.8007 21.416C15.8421 22 14.559 22 11.9927 22C9.42312 22 8.1383 22 7.17905 21.4149C6.7048 21.1257 6.296 20.7408 5.97868 20.2848C5.33688 19.3626 5.25945 18.0801 5.10461 15.5152L4.5 5.5\",\n },\n ],\n [\n \"path\",\n {\n d: \"M3 5.5H21M16.0557 5.5L15.3731 4.09173C14.9196 3.15626 14.6928 2.68852 14.3017 2.39681C14.215 2.3321 14.1231 2.27454 14.027 2.2247C13.5939 2 13.0741 2 12.0345 2C10.9688 2 10.436 2 9.99568 2.23412C9.8981 2.28601 9.80498 2.3459 9.71729 2.41317C9.32164 2.7167 9.10063 3.20155 8.65861 4.17126L8.05292 5.5\",\n },\n ],\n [\"path\", { d: \"M9.5 16.5L9.5 10.5\" }],\n [\"path\", { d: \"M14.5 16.5L14.5 10.5\" }],\n ],\n x: [[\"path\", { d: \"M18 6L6.00081 17.9992M17.9992 18L6 6.00085\" }]],\n};\n","import { createElement } from \"react\";\nimport { GLYPH_DATA, type GlyphName } from \"./glyph-data\";\n\n// Icons are sourced from Hugeicons (free, Stroke Rounded) and inlined as path\n// data in glyph-data.ts — no icon library ships in the widget bundle. See\n// scripts/generate-glyphs.ts.\n\nexport type { GlyphName };\n\ntype Props = {\n name: GlyphName;\n size?: number;\n stroke?: number;\n color?: string;\n className?: string;\n};\n\nexport function Glyph({ name, size = 16, stroke = 2, color, className }: Props) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color ?? \"currentColor\"}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n className={className}\n >\n {GLYPH_DATA[name].map(([tag, attrs], i) => createElement(tag, { key: i, ...attrs }))}\n </svg>\n );\n}\n","// The Patch pin: a rounded square with one sharp (bottom-right) corner — the\n// brand mark, matching apps/web's PatchMark and the on-page pin silhouette.\n// Inherits the surrounding text colour via `currentColor`. Inlined here to keep\n// the widget free of any icon dependency.\n//\n// `variant=\"outline\"` strokes the silhouette to sit alongside the stroke glyphs\n// (same width / round joins); the default fills it as the solid brand mark. The\n// path spans 2–22 in the 24 viewBox, so a 2px stroke stays clear of the edges.\nconst PIN_PATH =\n \"M12 2A10 10 0 0 1 22 12V20.6A1.4 1.4 0 0 1 20.6 22H12A10 10 0 0 1 2 12A10 10 0 0 1 12 2Z\";\n\nexport function PatchMark({\n size = 16,\n variant = \"filled\",\n stroke = 2,\n className,\n}: {\n size?: number;\n variant?: \"filled\" | \"outline\";\n stroke?: number;\n className?: string;\n}) {\n const outline = variant === \"outline\";\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill={outline ? \"none\" : \"currentColor\"}\n stroke={outline ? \"currentColor\" : \"none\"}\n strokeWidth={outline ? stroke : undefined}\n strokeLinejoin={outline ? \"round\" : undefined}\n strokeLinecap={outline ? \"round\" : undefined}\n aria-hidden=\"true\"\n focusable=\"false\"\n className={className}\n >\n <path d={PIN_PATH} />\n </svg>\n );\n}\n","// Shared open-delay coordination for tooltips, mirroring the Radix / Base UI\n// behaviour: the first tooltip waits before opening (so a passing cursor doesn't\n// flash one), but once any tooltip in the group is showing — or has just closed —\n// the next one opens instantly, with no delay and no animation. Module-level\n// state is fine here: the widget mounts a single instance inside its shadow root.\n\nconst OPEN_DELAY = 700;\nconst SKIP_WINDOW = 300;\n\nlet warm = false;\nlet cooldown: ReturnType<typeof setTimeout> | null = null;\nlet dismissCurrent: (() => void) | null = null;\n\nexport const tooltipGroup = {\n openDelay: OPEN_DELAY,\n /** True when the next tooltip should open instantly (no delay, no animation). */\n isInstant() {\n return warm;\n },\n /**\n * Call when a tooltip becomes visible. Keeps the group warm and, so that two\n * members never overlap, instantly dismisses whichever member is still showing.\n * Plain tooltips self-close on mouse-leave and pass no dismiss; richer members\n * (the identity hover-card, with its close-grace window) register one.\n */\n onOpen(dismiss?: () => void) {\n if (dismissCurrent && dismissCurrent !== dismiss) dismissCurrent();\n dismissCurrent = dismiss ?? null;\n warm = true;\n if (cooldown) {\n clearTimeout(cooldown);\n cooldown = null;\n }\n },\n /** Call when a visible tooltip hides. Stays warm for a brief grace window. */\n onClose() {\n if (cooldown) clearTimeout(cooldown);\n cooldown = setTimeout(() => {\n warm = false;\n cooldown = null;\n }, SKIP_WINDOW);\n },\n};\n","import { AnimatePresence, motion } from \"motion/react\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"./cn\";\nimport { tooltipGroup } from \"./tooltip-group\";\n\nconst TOOLTIP_EASE = \"easeOut\" as const;\n\nexport function Tooltip({\n text,\n children,\n className,\n tone = \"default\",\n placement = \"top\",\n}: {\n text: string;\n children: ReactNode;\n className?: string;\n tone?: \"default\" | \"warning\";\n placement?: \"top\" | \"bottom\";\n}) {\n const [open, setOpen] = useState(false);\n const [instant, setInstant] = useState(false);\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const openRef = useRef(false);\n\n useEffect(\n () => () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (openRef.current) tooltipGroup.onClose();\n },\n [],\n );\n\n const reveal = (asInstant: boolean) => {\n setInstant(asInstant);\n setOpen(true);\n openRef.current = true;\n tooltipGroup.onOpen();\n };\n\n const show = () => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n if (tooltipGroup.isInstant()) {\n reveal(true);\n return;\n }\n openTimer.current = setTimeout(() => {\n openTimer.current = null;\n reveal(false);\n }, tooltipGroup.openDelay);\n };\n\n const hide = () => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n if (openRef.current) {\n openRef.current = false;\n tooltipGroup.onClose();\n }\n setOpen(false);\n };\n // Warning tooltips live inside the dev footer of an overflow-hidden popover,\n // so they anchor to the button's left edge (not centered) to avoid clipping.\n const bubblePosition =\n tone === \"warning\"\n ? \"pointer-events-none absolute bottom-[calc(100%+8px)] left-0 z-[1]\"\n : placement === \"bottom\"\n ? \"pointer-events-none absolute top-[calc(100%+8px)] left-1/2 z-[1] -translate-x-1/2\"\n : \"pointer-events-none absolute -top-[38px] left-1/2 z-[1] -translate-x-1/2\";\n const tooltipShadow =\n \"shadow-[0_10px_30px_-10px_rgba(0,0,0,0.45),0_3px_8px_-3px_rgba(0,0,0,0.3)] ring-1 ring-white/10\";\n const bubbleClass =\n tone === \"warning\"\n ? `relative flex w-[200px] items-start gap-1.5 rounded-[14px] bg-foreground px-3 py-2.5 text-left text-[11px] leading-[1.35] font-medium text-white ${tooltipShadow}`\n : `relative block whitespace-nowrap rounded-[10px] bg-foreground px-2.5 py-[6px] text-[11px] font-medium tracking-[0.01em] text-white ${tooltipShadow}`;\n const arrowClass =\n tone === \"warning\"\n ? \"absolute -bottom-1 left-6 size-2 rotate-45 rounded-[2px] border-r border-b border-white/10 bg-foreground\"\n : placement === \"bottom\"\n ? \"absolute -top-1 left-1/2 size-2 -translate-x-1/2 rotate-45 rounded-[2px] border-l border-t border-white/10 bg-foreground\"\n : \"absolute -bottom-1 left-1/2 size-2 -translate-x-1/2 rotate-45 rounded-[2px] border-r border-b border-white/10 bg-foreground\";\n const enterY = placement === \"bottom\" && tone !== \"warning\" ? -3 : 3;\n const exitY = placement === \"bottom\" && tone !== \"warning\" ? -2 : 2;\n\n return (\n // biome-ignore lint/a11y/noStaticElementInteractions: tooltip hover wrapper, child remains the interactive element\n <span\n className={cn(\"relative inline-flex items-center justify-center\", className)}\n onMouseEnter={show}\n onMouseLeave={hide}\n onMouseDown={hide}\n >\n {/* Static wrapper owns the horizontal centering (-translate-x-1/2);\n the inner motion span owns the y/scale animation. Keeping them on\n separate elements stops Framer's transform from clobbering the\n centering translate. */}\n <span className={bubblePosition}>\n <AnimatePresence>\n {open && (\n <motion.span\n initial={instant ? false : { opacity: 0, y: enterY, scale: 0.98 }}\n animate={{\n opacity: 1,\n y: 0,\n scale: 1,\n transition: instant ? { duration: 0 } : { duration: 0.1, ease: TOOLTIP_EASE },\n }}\n exit={{\n opacity: 0,\n y: exitY,\n scale: 0.98,\n transition: { duration: 0.08, ease: TOOLTIP_EASE },\n }}\n className={bubbleClass}\n >\n {tone === \"warning\" ? (\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n className=\"mt-px size-3.5 shrink-0\"\n >\n <path\n d=\"M10.3 3.9 1.8 18.6A2 2 0 0 0 3.5 21.6h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z\"\n fill=\"#fbbf24\"\n />\n <path\n d=\"M12 9v4.5M12 17h.01\"\n fill=\"none\"\n stroke=\"#fff\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n ) : null}\n <span className=\"min-w-0 flex-1\">{text}</span>\n <span className={arrowClass} />\n </motion.span>\n )}\n </AnimatePresence>\n </span>\n {children}\n </span>\n );\n}\n","import type { AnnotationViewport } from \"@patch/shared\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { type FocusEvent, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { useCaptureControls } from \"../capture/capture-controller\";\nimport { useAnnotationsStore } from \"../data/annotations-store\";\nimport { usePopoverStore } from \"../data/popover-store\";\nimport { useWidgetUiStore } from \"../data/widget-ui-store\";\nimport { initialsFromName, tintForAuthor } from \"../pin/pin\";\nimport { Avatar } from \"../ui/avatar\";\nimport { cn } from \"../ui/cn\";\nimport { Glyph } from \"../ui/glyph\";\nimport { PatchMark } from \"../ui/patch-mark\";\nimport { Tooltip } from \"../ui/tooltip\";\nimport { tooltipGroup } from \"../ui/tooltip-group\";\nimport { VIEWPORT_ORDER, VIEWPORT_PRESETS, viewportTooltip } from \"../viewport/viewport-presets\";\n\nconst FAB_CLOSED_W = 44;\nconst FAB_OPEN_W = 212;\nconst FAB_EASE = [0.16, 1, 0.3, 1] as const;\nconst TOOLTIP_EASE = \"easeOut\" as const;\nconst TOOLTIP_SHOW_DELAY = 0.08;\nconst IDENTITY_ARROW_RIGHT_IN_CARD = 60;\nconst IDENTITY_REVEAL_ORIGIN = \"calc(100% - 64px) calc(100% + 4px)\";\n\nconst dockIconButton =\n \"pkey pkey-dock grid size-8 place-items-center rounded-full border-0 bg-transparent\";\n\n/**\n * Bottom-right floating control. Black surface, two states.\n * - Closed: 44px circle with the Patch pin mark. Click → opens the dock.\n * - Open: icons-only pill — capture toggle, person, close.\n */\nexport function FabDock() {\n const capture = useCaptureControls();\n const popover = usePopoverStore();\n const store = useAnnotationsStore();\n const {\n dockOpen: open,\n hideResolvedAnnotations,\n setDockOpen,\n setHideResolvedAnnotations,\n } = useWidgetUiStore();\n const [identityOpen, setIdentityOpen] = useState(false);\n const [viewportOpen, setViewportOpen] = useState(false);\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [identityInstant, setIdentityInstant] = useState(false);\n const [identityExitInstant, setIdentityExitInstant] = useState(false);\n const identityCloseTimer = useRef<number | null>(null);\n const identityOpenTimer = useRef<number | null>(null);\n const identityVisibleRef = useRef(false);\n // The pill clips its content (overflow-hidden) only while the width morphs —\n // otherwise the clip would eat the tooltips, which render above the pill.\n const [animating, setAnimating] = useState(false);\n\n const meName = store.studio ? store.studio.name : (store.identity?.name ?? null);\n const meInitials = initialsFromName(meName);\n const meAvatarSrc = store.studio?.image ?? null;\n const viewerSeed = store.identity?.avatarSeed ?? store.clientAvatarSeed;\n const meGeneratedSeed = store.studio?.userId ?? viewerSeed;\n const meTint = store.studio ? \"var(--color-foreground)\" : tintForAuthor(viewerSeed);\n const fabAvatarTint = store.studio && !meAvatarSrc ? \"#FFFFFF\" : meTint;\n const fabAvatarText = store.studio && !meAvatarSrc ? \"text-foreground\" : \"text-white\";\n const activeViewportPreset = VIEWPORT_PRESETS[store.activeViewport];\n\n function clearIdentityCloseTimer() {\n if (identityCloseTimer.current === null) return;\n window.clearTimeout(identityCloseTimer.current);\n identityCloseTimer.current = null;\n }\n\n function clearIdentityOpenTimer() {\n if (identityOpenTimer.current === null) return;\n window.clearTimeout(identityOpenTimer.current);\n identityOpenTimer.current = null;\n }\n\n // Stable handler the tooltip group calls to evict this card when another\n // member opens: cancel the close-grace and skip the exit animation so the\n // card vanishes the instant its neighbour appears (no overlap).\n const dismissIdentityImpl = useRef<() => void>(() => {});\n dismissIdentityImpl.current = () => {\n if (!identityVisibleRef.current && identityCloseTimer.current === null) return;\n clearIdentityCloseTimer();\n clearIdentityOpenTimer();\n identityVisibleRef.current = false;\n setIdentityExitInstant(true);\n };\n const dismissIdentity = useRef(() => dismissIdentityImpl.current()).current;\n\n // Once the instant-exit flag is committed, drop the card without animating.\n useEffect(() => {\n if (identityExitInstant && identityOpen) setIdentityOpen(false);\n }, [identityExitInstant, identityOpen]);\n\n function revealIdentity(instant: boolean) {\n setViewportOpen(false);\n setSettingsOpen(false);\n clearIdentityCloseTimer();\n clearIdentityOpenTimer();\n identityVisibleRef.current = true;\n setIdentityExitInstant(false);\n setIdentityInstant(instant);\n tooltipGroup.onOpen(dismissIdentity);\n setIdentityOpen(true);\n }\n\n // Keyboard focus: reveal immediately, but with the entrance animation.\n function focusIdentity() {\n revealIdentity(false);\n }\n\n // Hover: honour the shared tooltip group — wait on a cold first hover, but\n // open instantly (no delay, no animation) when sweeping in from an adjacent tooltip.\n function openIdentityPreview() {\n clearIdentityCloseTimer();\n if (identityVisibleRef.current || identityOpenTimer.current !== null) return;\n if (tooltipGroup.isInstant()) {\n revealIdentity(true);\n return;\n }\n identityOpenTimer.current = window.setTimeout(() => {\n identityOpenTimer.current = null;\n revealIdentity(false);\n }, tooltipGroup.openDelay);\n }\n\n function closeIdentityPreview() {\n clearIdentityOpenTimer();\n clearIdentityCloseTimer();\n if (identityVisibleRef.current) {\n identityVisibleRef.current = false;\n tooltipGroup.onClose();\n }\n identityCloseTimer.current = window.setTimeout(() => {\n setIdentityOpen(false);\n identityCloseTimer.current = null;\n }, 120);\n }\n\n function openDock() {\n setAnimating(true);\n setDockOpen(true);\n }\n\n function toggleCapture() {\n setViewportOpen(false);\n setSettingsOpen(false);\n clearIdentityOpenTimer();\n identityVisibleRef.current = false;\n setIdentityOpen(false);\n if (capture.isCapturing) {\n capture.exit();\n } else {\n capture.enter();\n }\n }\n\n function closeDock() {\n setAnimating(true);\n setDockOpen(false);\n setViewportOpen(false);\n setSettingsOpen(false);\n clearIdentityOpenTimer();\n identityVisibleRef.current = false;\n setIdentityOpen(false);\n capture.exit();\n if (popover.active) popover.forceClose();\n }\n\n useEffect(() => {\n return () => {\n if (identityCloseTimer.current !== null) {\n window.clearTimeout(identityCloseTimer.current);\n }\n if (identityOpenTimer.current !== null) {\n window.clearTimeout(identityOpenTimer.current);\n }\n };\n }, []);\n\n const handleSignOut = () => {\n store.signOut();\n setIdentityOpen(false);\n };\n\n function toggleViewportMenu() {\n setSettingsOpen(false);\n clearIdentityOpenTimer();\n identityVisibleRef.current = false;\n setIdentityOpen(false);\n setViewportOpen((current) => !current);\n }\n\n function selectViewport(viewport: AnnotationViewport) {\n setViewportOpen(false);\n if (store.activeViewport === viewport) return;\n if (popover.active) popover.forceClose();\n store.setActiveViewport(viewport);\n }\n\n function toggleSettingsMenu() {\n setViewportOpen(false);\n clearIdentityOpenTimer();\n identityVisibleRef.current = false;\n setIdentityOpen(false);\n setSettingsOpen((current) => !current);\n }\n\n function toggleHideResolvedAnnotations() {\n setHideResolvedAnnotations(!hideResolvedAnnotations);\n }\n\n function handleIdentityBlur(event: FocusEvent<HTMLSpanElement>) {\n const next = event.relatedTarget;\n if (next instanceof Node && event.currentTarget.contains(next)) return;\n closeIdentityPreview();\n }\n\n return (\n <div data-patch-fab-dock=\"\" className=\"fixed right-5 bottom-5 z-[2147483647] flex justify-end\">\n <motion.div\n initial={false}\n animate={{ width: open ? FAB_OPEN_W : FAB_CLOSED_W }}\n transition={{ duration: 0.36, ease: FAB_EASE }}\n onAnimationComplete={() => setAnimating(false)}\n // Press/hover lift only on the closed circle — gated off while open so\n // hovering the dock's icons never scales the whole pill.\n whileHover={\n open ? undefined : { scale: 1.03, transition: { duration: 0.15, ease: FAB_EASE } }\n }\n whileTap={open ? undefined : { scale: 0.97, transition: { duration: 0.1, ease: FAB_EASE } }}\n data-patch-fab-dock=\"\"\n className={cn(\n \"pkey-fab relative h-11 rounded-full\",\n animating ? \"overflow-hidden\" : \"overflow-visible\",\n )}\n >\n <motion.div\n animate={{ opacity: open ? 0 : 1, scale: open ? 0.7 : 1 }}\n transition={{ duration: 0.18, ease: FAB_EASE }}\n className={cn(\"absolute inset-0\", open ? \"pointer-events-none\" : \"pointer-events-auto\")}\n >\n <button\n type=\"button\"\n onClick={openDock}\n data-patch-fab-dock=\"\"\n aria-label=\"Leave feedback\"\n className=\"grid size-full place-items-center border-0 bg-transparent text-white\"\n >\n <PatchMark variant=\"outline\" size={18} />\n </button>\n </motion.div>\n\n <div\n data-patch-fab-dock=\"\"\n className={cn(\n \"absolute inset-0 flex items-center gap-1.5 px-1.5\",\n open ? \"pointer-events-auto\" : \"pointer-events-none\",\n )}\n >\n <DockItem visible={open} index={0}>\n <Tooltip text={capture.isCapturing ? \"Stop commenting\" : \"Add comment\"}>\n <button\n type=\"button\"\n data-patch-fab-dock=\"\"\n aria-label={capture.isCapturing ? \"Stop commenting\" : \"Add comment\"}\n aria-pressed={capture.isCapturing}\n onClick={toggleCapture}\n className={cn(\n dockIconButton,\n \"transition-colors\",\n capture.isCapturing\n ? \"bg-brand/15 text-brand\"\n : \"text-white/70 hover:bg-white/[0.08] hover:text-white\",\n )}\n >\n <PatchMark variant=\"outline\" size={16} />\n </button>\n </Tooltip>\n </DockItem>\n\n <DockItem visible={open} index={1}>\n <div className=\"relative flex items-center\">\n <button\n type=\"button\"\n data-patch-fab-dock=\"\"\n aria-label={`Viewport: ${activeViewportPreset.label}`}\n aria-expanded={viewportOpen}\n onClick={toggleViewportMenu}\n className={cn(\n dockIconButton,\n \"transition-colors\",\n store.activeViewport === \"desktop\" && !viewportOpen\n ? \"text-white/70 hover:bg-white/[0.08] hover:text-white\"\n : \"bg-brand/15 text-brand\",\n )}\n >\n <Glyph name={activeViewportPreset.glyph} size={15} />\n </button>\n <AnimatePresence>\n {viewportOpen ? (\n <motion.div\n initial={{ opacity: 0, y: 4, scale: 0.97 }}\n animate={{\n opacity: 1,\n y: 0,\n scale: 1,\n transition: { duration: 0.16, ease: FAB_EASE },\n }}\n exit={{\n opacity: 0,\n y: 3,\n scale: 0.98,\n transition: { duration: 0.12, ease: FAB_EASE },\n }}\n data-patch-fab-dock=\"\"\n data-patch-viewport-menu=\"\"\n className=\"pkey-fab absolute bottom-[46px] left-[-42px] z-[2147483647] flex items-center gap-1 rounded-full p-1.5 text-white\"\n style={{ transformOrigin: \"50% calc(100% + 8px)\" }}\n >\n <span className=\"pointer-events-none absolute -bottom-1 left-1/2 size-2 -translate-x-1/2 rotate-45 rounded-[2px] border-r border-b border-white/10 bg-foreground\" />\n {VIEWPORT_ORDER.map((viewport) => {\n const preset = VIEWPORT_PRESETS[viewport];\n const active = store.activeViewport === viewport;\n return (\n <Tooltip key={viewport} text={viewportTooltip(viewport)}>\n <button\n type=\"button\"\n data-patch-viewport-option={viewport}\n aria-label={viewportTooltip(viewport)}\n aria-pressed={active}\n onClick={() => selectViewport(viewport)}\n className={cn(\n \"grid size-8 place-items-center rounded-full border-0 bg-transparent transition-colors\",\n active\n ? \"bg-brand/15 text-brand\"\n : \"text-white/70 hover:bg-white/[0.08] hover:text-white\",\n )}\n >\n <Glyph name={preset.glyph} size={15} />\n </button>\n </Tooltip>\n );\n })}\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n </DockItem>\n\n <DockItem visible={open} index={2}>\n <div className=\"relative flex items-center\">\n <Tooltip text=\"Settings\">\n <button\n type=\"button\"\n data-patch-fab-dock=\"\"\n aria-label=\"Settings\"\n aria-expanded={settingsOpen}\n onClick={toggleSettingsMenu}\n className={cn(\n dockIconButton,\n \"transition-colors\",\n settingsOpen || hideResolvedAnnotations\n ? \"bg-brand/15 text-brand\"\n : \"text-white/70 hover:bg-white/[0.08] hover:text-white\",\n )}\n >\n <Glyph name=\"settings\" size={15} />\n </button>\n </Tooltip>\n <AnimatePresence>\n {settingsOpen ? (\n <motion.div\n initial={{ opacity: 0, y: 4, scale: 0.97 }}\n animate={{\n opacity: 1,\n y: 0,\n scale: 1,\n transition: { duration: 0.16, ease: FAB_EASE },\n }}\n exit={{\n opacity: 0,\n y: 3,\n scale: 0.98,\n transition: { duration: 0.12, ease: FAB_EASE },\n }}\n data-patch-fab-dock=\"\"\n data-patch-settings-menu=\"\"\n className=\"pkey-fab absolute bottom-[46px] left-[-84px] z-[2147483647] w-[200px] rounded-[18px] p-1.5 text-white\"\n style={{ transformOrigin: \"50% calc(100% + 8px)\" }}\n >\n <span className=\"pointer-events-none absolute -bottom-1 left-1/2 size-2 -translate-x-1/2 rotate-45 rounded-[2px] border-r border-b border-white/10 bg-foreground\" />\n <label\n data-patch-hide-resolved-toggle=\"\"\n className=\"flex h-9 w-full cursor-pointer items-center gap-2 rounded-xl px-2.5 text-left font-sans text-[12px] font-medium text-white transition-colors hover:bg-white/[0.08]\"\n >\n <input\n type=\"checkbox\"\n checked={hideResolvedAnnotations}\n aria-label=\"Hide resolved annotations\"\n onChange={toggleHideResolvedAnnotations}\n className=\"peer sr-only\"\n />\n <span\n aria-hidden=\"true\"\n className={cn(\n \"grid size-4 shrink-0 place-items-center rounded-[5px] border transition-colors\",\n hideResolvedAnnotations\n ? \"border-brand bg-brand text-white\"\n : \"border-white/25 bg-white/[0.06] text-transparent\",\n )}\n >\n <Glyph name=\"check\" size={10} stroke={2.4} />\n </span>\n <span className=\"min-w-0 flex-1 whitespace-nowrap\">\n Hide resolved annotations\n </span>\n </label>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n </DockItem>\n\n <DockItem visible={open} index={3}>\n {/* biome-ignore lint/a11y/noStaticElementInteractions: hover/focus wrapper keeps the fixed identity popover open while the avatar button remains the interactive element */}\n <span\n data-patch-identity-hover=\"\"\n className=\"relative inline-flex items-center justify-center\"\n onMouseEnter={openIdentityPreview}\n onMouseLeave={closeIdentityPreview}\n onFocus={focusIdentity}\n onBlur={handleIdentityBlur}\n >\n <button\n type=\"button\"\n data-patch-fab-dock=\"\"\n data-patch-person-btn=\"\"\n aria-label={meName ? `Account: ${meName}` : \"Identify\"}\n className={cn(dockIconButton, \"text-white\")}\n >\n {meName ? (\n <Avatar\n initials={meInitials}\n tint={fabAvatarTint}\n src={meAvatarSrc}\n generatedSeed={meGeneratedSeed}\n alt={meName}\n size=\"sm\"\n className={cn(\"size-[22px] text-[9.5px] ring-1 ring-white/20\", fabAvatarText)}\n />\n ) : (\n <span className=\"grid size-[22px] place-items-center rounded-full border border-white/30 text-[9.5px] font-semibold text-white/70\">\n ?\n </span>\n )}\n </button>\n <AnimatePresence>\n {identityOpen ? (\n <motion.div\n initial={identityInstant ? false : { opacity: 0, y: 3, scale: 0.98 }}\n animate={{\n opacity: 1,\n y: 0,\n scale: 1,\n transition: identityInstant\n ? { duration: 0 }\n : {\n duration: 0.12,\n delay: TOOLTIP_SHOW_DELAY,\n ease: TOOLTIP_EASE,\n },\n }}\n exit={{\n opacity: 0,\n y: 2,\n scale: 0.98,\n transition: identityExitInstant\n ? { duration: 0 }\n : { duration: 0.08, ease: TOOLTIP_EASE },\n }}\n data-patch-fab-dock=\"\"\n data-patch-identity-popover=\"\"\n className=\"fixed right-8 bottom-[72px] z-[2147483647] w-[min(272px,calc(100vw-40px))] min-w-[220px] rounded-2xl bg-foreground p-3.5 font-sans text-[13px] text-white shadow-[0_18px_44px_-14px_rgba(0,0,0,0.5),0_6px_14px_-6px_rgba(0,0,0,0.45)] ring-1 ring-white/10\"\n style={{ transformOrigin: IDENTITY_REVEAL_ORIGIN }}\n >\n <span\n className=\"absolute bottom-[-4px] size-2 rotate-45 border-r border-b border-white/10 bg-foreground\"\n style={{ right: IDENTITY_ARROW_RIGHT_IN_CARD }}\n />\n {store.studio ? (\n <div className=\"flex items-center gap-2.5\">\n <Avatar\n initials={meInitials}\n tint={meTint}\n src={meAvatarSrc}\n generatedSeed={meGeneratedSeed}\n alt={store.studio.name}\n size=\"md\"\n />\n <div className=\"min-w-0\">\n <div className=\"truncate font-medium text-white\">{store.studio.name}</div>\n <div className=\"truncate text-xs text-white/55\">{store.studio.email}</div>\n </div>\n </div>\n ) : store.identity ? (\n <>\n <div className=\"flex items-center gap-2.5\">\n <Avatar\n initials={meInitials}\n tint={meTint}\n generatedSeed={meGeneratedSeed}\n size=\"md\"\n />\n <div className=\"min-w-0\">\n <div className=\"truncate font-medium text-white\">\n {store.identity.name}\n </div>\n <div className=\"truncate text-xs text-white/55\">\n {store.identity.email}\n </div>\n </div>\n </div>\n <div className=\"my-3 h-px bg-white/10\" />\n <button\n type=\"button\"\n onClick={handleSignOut}\n className=\"w-full rounded-full bg-white/[0.08] px-2.5 py-[7px] text-[12.5px] font-medium text-white transition-colors hover:bg-white/[0.13]\"\n >\n Sign out\n </button>\n </>\n ) : (\n <div className=\"text-[12.5px] text-white/60\">\n Not signed in. Drop a pin to introduce yourself.\n </div>\n )}\n </motion.div>\n ) : null}\n </AnimatePresence>\n </span>\n </DockItem>\n\n <DockItem visible={open} index={4}>\n <div className=\"flex items-center gap-1.5\">\n <span className=\"h-5 w-px shrink-0 bg-white/12\" />\n <Tooltip text=\"Close\">\n <button\n type=\"button\"\n data-patch-fab-dock=\"\"\n aria-label=\"Close\"\n onClick={closeDock}\n className={cn(dockIconButton, \"text-white/70\")}\n >\n <Glyph name=\"x\" size={14} />\n </button>\n </Tooltip>\n </div>\n </DockItem>\n </div>\n </motion.div>\n </div>\n );\n}\n\nfunction DockItem({\n children,\n visible,\n index,\n}: {\n children: ReactNode;\n visible: boolean;\n index: number;\n}) {\n return (\n <motion.div\n initial={{ opacity: 0, x: 6 }}\n animate={\n visible\n ? {\n opacity: 1,\n x: 0,\n transition: { duration: 0.2, delay: 0.12 + index * 0.035, ease: FAB_EASE },\n }\n : {\n opacity: 0,\n x: 6,\n transition: { duration: 0.12, ease: FAB_EASE },\n }\n }\n >\n {children}\n </motion.div>\n );\n}\n","export type Bbox = { x: number; y: number; width: number; height: number };\nexport type ViewportCoords = { viewportX: number; viewportY: number };\nexport type Fraction = { fx: number; fy: number };\n\n/** Encode a viewport coord into a [0,1]² offset within the bbox. */\nexport function encode(coords: ViewportCoords, bbox: Bbox): Fraction {\n if (bbox.width <= 0 || bbox.height <= 0) return { fx: 0, fy: 0 };\n return {\n fx: (coords.viewportX - bbox.x) / bbox.width,\n fy: (coords.viewportY - bbox.y) / bbox.height,\n };\n}\n\n/** Decode a [0,1]² offset back into a viewport coord against the current bbox. */\nexport function decode(fraction: Fraction, bbox: Bbox): ViewportCoords {\n return {\n viewportX: bbox.x + fraction.fx * bbox.width,\n viewportY: bbox.y + fraction.fy * bbox.height,\n };\n}\n","import {\n extractAttributes,\n extractCssClasses,\n extractTextSignature,\n isInternal,\n} from \"../capture/element-identification\";\nimport type { Bbox } from \"./proportional-offset\";\nimport { decode, encode } from \"./proportional-offset\";\n\nconst TIER_THRESHOLD = 0.6;\nconst WEIGHTS = { text: 0.4, attrs: 0.3, classes: 0.2, bbox: 0.1 };\nconst MAX_SCORE_CANDIDATES = 5000;\n\nexport type ResolveInput = {\n payload: {\n coordinates: {\n viewportX: number;\n viewportY: number;\n documentY: number;\n isFixed: boolean;\n };\n boundingBox?: { x: number; y: number; width: number; height: number };\n domHints?: {\n cssSelector: string;\n textSignature?: string;\n attributeSignature?: Record<string, string>;\n };\n cssClasses?: string[];\n };\n doc: Document;\n scrollY: number;\n viewport: { width: number; height: number };\n internalAttr: string;\n};\n\nexport type Resolved = {\n tier: 1 | 2 | 3;\n el: Element | null;\n position: { viewportX: number; viewportY: number };\n};\n\nfunction textScore(elText: string, sig: string | undefined): number {\n if (sig === undefined || sig === \"\") return 0.5;\n if (elText === sig) return 1;\n if (!elText) return 0;\n if (elText.includes(sig) || sig.includes(elText)) return 0.5;\n return 0;\n}\n\nfunction attrScore(\n elAttrs: Record<string, string>,\n sig: Record<string, string> | undefined,\n): number {\n if (!sig) return 0.5;\n const keys = Object.keys(sig);\n if (keys.length === 0) return 0.5;\n let matched = 0;\n for (const k of keys) if (elAttrs[k] === sig[k]) matched++;\n return matched / keys.length;\n}\n\nfunction classScore(elClasses: string[], sig: string[] | undefined): number {\n const a = new Set(elClasses);\n const b = new Set(sig ?? []);\n if (a.size === 0 && b.size === 0) return 0.5;\n let inter = 0;\n for (const x of a) if (b.has(x)) inter++;\n const uni = a.size + b.size - inter;\n return uni === 0 ? 0 : inter / uni;\n}\n\nfunction bboxScore(\n rect: { x: number; y: number; width: number; height: number },\n captured: Bbox | undefined,\n viewport: { width: number; height: number },\n): number {\n if (!captured) return 0.5;\n const cx1 = rect.x + rect.width / 2;\n const cy1 = rect.y + rect.height / 2;\n const cx2 = captured.x + captured.width / 2;\n const cy2 = captured.y + captured.height / 2;\n const dx = (cx1 - cx2) / Math.max(1, viewport.width);\n const dy = (cy1 - cy2) / Math.max(1, viewport.height);\n const dist = Math.sqrt(dx * dx + dy * dy);\n return Math.max(0, 1 - dist);\n}\n\nexport function scoreElement(el: Element, input: ResolveInput): number {\n const text = extractTextSignature(el);\n const attrs = extractAttributes(el);\n const classes = extractCssClasses(el);\n const rect = el.getBoundingClientRect();\n const t = textScore(text, input.payload.domHints?.textSignature);\n const a = attrScore(attrs, input.payload.domHints?.attributeSignature);\n const c = classScore(classes, input.payload.cssClasses);\n const b = bboxScore(rect, input.payload.boundingBox, input.viewport);\n return WEIGHTS.text * t + WEIGHTS.attrs * a + WEIGHTS.classes * c + WEIGHTS.bbox * b;\n}\n\nfunction orphanPosition(input: ResolveInput): { viewportX: number; viewportY: number } {\n return {\n viewportX: input.payload.coordinates.viewportX,\n viewportY: input.payload.coordinates.documentY - input.scrollY,\n };\n}\n\nfunction anchoredPosition(\n el: Element,\n input: ResolveInput,\n): { viewportX: number; viewportY: number } {\n const rect = el.getBoundingClientRect();\n if (!input.payload.boundingBox) {\n return { viewportX: rect.x, viewportY: rect.y };\n }\n const fraction = encode(\n {\n viewportX: input.payload.coordinates.viewportX,\n viewportY: input.payload.coordinates.viewportY,\n },\n input.payload.boundingBox,\n );\n return decode(fraction, { x: rect.x, y: rect.y, width: rect.width, height: rect.height });\n}\n\nfunction trySelector(input: ResolveInput): Element | null {\n const sel = input.payload.domHints?.cssSelector;\n if (!sel) return null;\n try {\n return input.doc.querySelector(sel);\n } catch {\n return null;\n }\n}\n\nfunction walkCandidates(input: ResolveInput): Element | null {\n let bestEl: Element | null = null;\n let bestScore = -1;\n let seen = 0;\n const all = input.doc.querySelectorAll<Element>(\"*\");\n for (const el of Array.from(all)) {\n if (seen >= MAX_SCORE_CANDIDATES) break;\n seen++;\n if (isInternal(el, input.internalAttr)) continue;\n const tag = el.tagName.toLowerCase();\n if (tag === \"html\" || tag === \"head\" || tag === \"script\" || tag === \"style\") continue;\n const s = scoreElement(el, input);\n if (s > bestScore) {\n bestScore = s;\n bestEl = el;\n }\n }\n return bestScore >= TIER_THRESHOLD ? bestEl : null;\n}\n\n/**\n * Three-tier anchor resolution. Tier 1: selector hits AND verifies ≥ 0.6. Tier\n * 2: selector misses (or fails to verify) but the best scored candidate clears\n * the threshold. Tier 3: orphan — render at captured viewport coords adjusted\n * for current scroll.\n */\nexport function resolveAnchor(input: ResolveInput): Resolved {\n if (!input.payload.domHints) {\n return { tier: 3, el: null, position: orphanPosition(input) };\n }\n\n const selectorHit = trySelector(input);\n if (selectorHit) {\n const score = scoreElement(selectorHit, input);\n if (score >= TIER_THRESHOLD) {\n return { tier: 1, el: selectorHit, position: anchoredPosition(selectorHit, input) };\n }\n }\n\n const scored = walkCandidates(input);\n if (scored) {\n return { tier: 2, el: scored, position: anchoredPosition(scored, input) };\n }\n\n return { tier: 3, el: null, position: orphanPosition(input) };\n}\n","import type { WidgetAnnotation } from \"../data/types\";\n\nexport type AnnotationAttention = \"review-pr\" | \"patch-failed\" | \"rerun-after-closed\";\n\nexport function getAnnotationAttention(\n annotation: Pick<WidgetAnnotation, \"status\" | \"latestRun\">,\n): AnnotationAttention | null {\n if (annotation.status === \"resolved\") return null;\n const run = annotation.latestRun;\n if (!run) return null;\n\n if (run.status === \"failed\") return \"patch-failed\";\n if (run.status !== \"succeeded\") return null;\n if (run.prClosedUnmerged) return \"rerun-after-closed\";\n if (run.prUrl) return \"review-pr\";\n return null;\n}\n","import { AnimatePresence, useReducedMotion } from \"motion/react\";\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { useAnnotationsStore } from \"../data/annotations-store\";\nimport { usePopoverStore } from \"../data/popover-store\";\nimport type { WidgetAnnotation } from \"../data/types\";\nimport { useWidgetUiStore } from \"../data/widget-ui-store\";\nimport { type Resolved, resolveAnchor } from \"../persistence/resolve-anchor\";\nimport {\n createResizeObserverForWindow,\n type SurfacePoint,\n type TargetSurface,\n useTargetSurface,\n useViewportSurfaceState,\n} from \"../surface/target-surface\";\nimport { getAnnotationAttention } from \"./annotation-attention\";\nimport { Pin, pinBoxRect, pinPointSide } from \"./pin\";\n\nconst INTERNAL_ATTR = \"data-patch-internal\";\n\nfunction place(el: HTMLElement, surface: TargetSurface, position: SurfacePoint) {\n const pointSide = pinPointSide(position, surface.getOverlayViewport());\n const rect = pinBoxRect(position, pointSide);\n el.style.top = `${rect.y}px`;\n el.style.left = `${rect.x}px`;\n}\n\ntype PinResolution = {\n tier: Resolved[\"tier\"];\n position: SurfacePoint;\n};\n\nfunction resolvePin(surface: TargetSurface, annotation: WidgetAnnotation): PinResolution {\n const result = resolveAnchor({\n payload: annotation.payload,\n doc: surface.targetDocument,\n scrollY: surface.getTargetScrollY(),\n viewport: surface.getTargetViewport(),\n internalAttr: INTERNAL_ATTR,\n });\n return {\n tier: result.tier,\n position: surface.targetPointToOverlay(result.position),\n };\n}\n\nfunction ephemeralPosition(surface: TargetSurface, pin: { viewportX: number; documentY: number }) {\n return surface.targetPointToOverlay({\n viewportX: pin.viewportX,\n viewportY: pin.documentY - surface.getTargetScrollY(),\n });\n}\n\n/**\n * Renders one pin per annotation (filtered to the current page by the store)\n * plus an ephemeral pin per mid-capture entry. Re-positions imperatively via\n * refs on scroll/resize/RO so we don't re-render the React tree per frame.\n */\nexport function PinLayer() {\n const { annotations, annotationsReady, ephemerals, identity, studio, clientAvatarSeed } =\n useAnnotationsStore();\n const popover = usePopoverStore();\n const { dockOpen, hideResolvedAnnotations } = useWidgetUiStore();\n const surface = useTargetSurface();\n const { isPreviewing, previewReady } = useViewportSurfaceState();\n const reduceMotion = useReducedMotion();\n const activePopover = popover.active;\n const forceClosePopover = popover.forceClose;\n // Pins stay mounted across viewport switches; the layer hides instantly (and\n // re-fades in) via opacity so no pin from the previous surface lingers as an\n // AnimatePresence exit over the backdrop.\n const targetReady = annotationsReady && (!isPreviewing || previewReady);\n const visibleAnnotations = useMemo(\n () =>\n dockOpen && annotationsReady\n ? annotations.filter(\n (annotation) => !hideResolvedAnnotations || annotation.status !== \"resolved\",\n )\n : [],\n [dockOpen, annotationsReady, annotations, hideResolvedAnnotations],\n );\n const visibleEphemerals = useMemo(\n () => (dockOpen && annotationsReady ? ephemerals : []),\n [dockOpen, annotationsReady, ephemerals],\n );\n\n useEffect(() => {\n if (!hideResolvedAnnotations || activePopover?.kind !== \"existing\") return;\n const activeAnnotation = annotations.find((a) => a.id === activePopover.annotationId);\n if (activeAnnotation?.status === \"resolved\") forceClosePopover();\n }, [activePopover, annotations, forceClosePopover, hideResolvedAnnotations]);\n\n const pinRefs = useRef(new Map<string, HTMLButtonElement>());\n const ephemeralRefs = useRef(new Map<string, HTMLButtonElement>());\n\n // resolveAnchor results cached per render — used to assign orphan styling on initial render.\n const resolvedById = useMemo(() => {\n const map = new Map<string, PinResolution>();\n for (const a of visibleAnnotations) {\n map.set(a.id, resolvePin(surface, a));\n }\n return map;\n }, [surface, visibleAnnotations]);\n\n const reanchorAll = useCallback(() => {\n for (const a of visibleAnnotations) {\n const el = pinRefs.current.get(a.id);\n if (!el) continue;\n place(el, surface, resolvePin(surface, a).position);\n }\n for (const p of visibleEphemerals) {\n const el = ephemeralRefs.current.get(p.tempId);\n if (!el) continue;\n place(el, surface, ephemeralPosition(surface, p));\n }\n }, [surface, visibleAnnotations, visibleEphemerals]);\n\n useEffect(() => {\n let frame: number | null = null;\n const schedule = () => {\n if (frame !== null) return;\n frame = surface.overlayWindow.requestAnimationFrame(() => {\n frame = null;\n reanchorAll();\n });\n };\n const listeningWindows = new Set([surface.targetWindow, surface.overlayWindow]);\n for (const win of listeningWindows) {\n win.addEventListener(\"resize\", schedule);\n win.addEventListener(\"scroll\", schedule, { passive: true });\n }\n const ro = createResizeObserverForWindow(surface.targetWindow, schedule);\n ro.observe(surface.targetDocument.body);\n schedule();\n return () => {\n if (frame !== null) surface.overlayWindow.cancelAnimationFrame(frame);\n for (const win of listeningWindows) {\n win.removeEventListener(\"resize\", schedule);\n win.removeEventListener(\"scroll\", schedule);\n }\n ro.disconnect();\n };\n }, [reanchorAll, surface]);\n\n const onPinClick = useCallback(\n (id: string) => {\n // If there's an active popover with unsaved draft, route through the\n // shake guard instead of silently switching.\n if (popover.active && popover.draftText.trim().length > 0) {\n popover.attemptClose();\n return;\n }\n popover.openExisting(id);\n },\n [popover],\n );\n\n const meName = studio ? studio.name : (identity?.name ?? null);\n const meAvatarSrc = studio?.image ?? null;\n const viewerSeed = identity?.avatarSeed ?? clientAvatarSeed;\n const meGeneratedSeed = studio?.userId ?? viewerSeed;\n\n return (\n <div\n data-patch-pin-layer=\"\"\n style={{\n opacity: targetReady ? 1 : 0,\n transition:\n reduceMotion || !targetReady\n ? undefined\n : \"opacity 0.2s cubic-bezier(0.22, 0.61, 0.36, 1)\",\n pointerEvents: targetReady ? undefined : \"none\",\n }}\n >\n <AnimatePresence initial={false}>\n {visibleAnnotations.map((a) => {\n const r = resolvedById.get(a.id);\n const author = pinAuthor(a);\n const authoredByViewer =\n !studio &&\n !!identity?.clientUserId &&\n a.payload.authorRole === \"client\" &&\n a.payload.authorId === identity.clientUserId;\n const attention = studio ? getAnnotationAttention(a) : null;\n const pointSide = r ? pinPointSide(r.position, surface.getOverlayViewport()) : \"right\";\n return (\n <Pin\n key={a.id}\n ref={(el) => {\n if (el) {\n pinRefs.current.set(a.id, el);\n if (r) place(el, surface, r.position);\n } else {\n pinRefs.current.delete(a.id);\n }\n }}\n avatarSrc={author.image}\n generatedSeed={authoredByViewer ? viewerSeed : author.generatedSeed}\n avatarAlt={author.name ?? \"\"}\n resolved={a.status === \"resolved\"}\n attention={attention}\n orphan={r?.tier === 3}\n pointSide={pointSide}\n ariaLabel={`Annotation by ${a.authorName ?? \"someone\"}`}\n onClick={() => onPinClick(a.id)}\n pinId={a.id}\n />\n );\n })}\n </AnimatePresence>\n <AnimatePresence initial={false}>\n {visibleEphemerals.map((p) => {\n const overlayPoint = surface.targetPointToOverlay({\n viewportX: p.viewportX,\n viewportY: p.viewportY,\n });\n return (\n <Pin\n key={p.tempId}\n ref={(el) => {\n if (el) {\n ephemeralRefs.current.set(p.tempId, el);\n place(el, surface, overlayPoint);\n } else {\n ephemeralRefs.current.delete(p.tempId);\n }\n }}\n avatarSrc={meAvatarSrc}\n generatedSeed={meGeneratedSeed}\n avatarAlt={meName ?? \"\"}\n resolved={false}\n pointSide={pinPointSide(overlayPoint, surface.getOverlayViewport())}\n ephemeral\n />\n );\n })}\n </AnimatePresence>\n </div>\n );\n}\n\nexport function pinAuthor(annotation: WidgetAnnotation): {\n name: string | null;\n image: string | null;\n generatedSeed: string | null;\n key: string;\n} {\n const annotationSeed =\n annotation.authorAvatarSeed ??\n annotation.payload.authorId ??\n (annotation.authorName ? `annotation-author:${annotation.authorName}` : null);\n if (annotation.authorImage || annotationSeed || annotation.authorName) {\n return {\n name: annotation.authorName,\n image: annotation.authorImage ?? null,\n // Always carry a seed so a broken avatar image falls back to a generated\n // avatar rather than an empty disc.\n generatedSeed: annotationSeed ?? annotation.id,\n key: annotation.payload.authorId ?? annotation.authorName ?? annotation.id,\n };\n }\n\n const firstThreadAuthor = annotation.thread.find(\n (message) => message.authorImage || message.authorId || message.authorName,\n );\n if (firstThreadAuthor) {\n const threadSeed =\n firstThreadAuthor.authorAvatarSeed ??\n firstThreadAuthor.authorId ??\n (firstThreadAuthor.authorName ? `thread-author:${firstThreadAuthor.authorName}` : null);\n return {\n name: firstThreadAuthor.authorName,\n image: firstThreadAuthor.authorImage ?? null,\n generatedSeed: threadSeed ?? annotation.id,\n key: firstThreadAuthor.authorId ?? firstThreadAuthor.authorName ?? annotation.id,\n };\n }\n\n return {\n name: annotation.authorName,\n image: annotation.authorImage ?? null,\n generatedSeed: annotation.id,\n key: annotation.id,\n };\n}\n","// Generated by scripts/compile-styles.ts — do not edit by hand.\n// Run `bun run scripts/compile-styles.ts` or `bun run build` to refresh.\n\nexport const widgetCss = `/*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: \"Inter\", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto,\n \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-neutral-100: oklch(97% 0 0);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --leading-normal: 1.5;\n --radius-lg: 1.25rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --ease-out: cubic-bezier(0.22, 0.61, 0.36, 1);\n --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n --radius: var(--radius-lg);\n --color-foreground: oklch(0.18 0 0);\n --color-popover: oklch(1 0 0);\n --color-popover-foreground: oklch(0.18 0 0);\n --color-primary: oklch(0.18 0 0);\n --color-primary-foreground: oklch(1 0 0);\n --color-muted-foreground: oklch(0.62 0 0);\n --color-destructive: oklch(0.55 0.2 27);\n --color-border: oklch(0.92 0 0);\n --color-ring: oklch(0.60 0.21 250 / 0.40);\n --color-brand: #0287FE;\n --color-brand-tint: rgba(2, 135, 254, 0.10);\n --color-brand-orange: oklch(0.68 0.13 60);\n --color-brand-green: oklch(0.72 0.19 150);\n --color-avatar-tint-1: #6E6E6E;\n --color-avatar-tint-2: #8A7E76;\n --color-avatar-tint-3: #7B6D85;\n --color-avatar-tint-4: #525252;\n --color-avatar-tint-5: #3D3D3D;\n --shadow-dialog: 0 12px 32px -8px oklch(0 0 0 / 0.12), 0 4px 12px -4px oklch(0 0 0 / 0.06);\n --duration-press: 100ms;\n --duration-hover-button: 150ms;\n --duration-hover-card: 250ms;\n --duration-fast: 120ms;\n --duration-normal: 200ms;\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-auto {\n pointer-events: auto;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .inset-\\\\[2px\\\\] {\n inset: 2px;\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .-top-0\\\\.5 {\n top: calc(var(--spacing) * -0.5);\n }\n .-top-1 {\n top: calc(var(--spacing) * -1);\n }\n .-top-\\\\[38px\\\\] {\n top: calc(38px * -1);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-\\\\[-5px\\\\] {\n top: -5px;\n }\n .top-\\\\[calc\\\\(100\\\\%\\\\+8px\\\\)\\\\] {\n top: calc(100% + 8px);\n }\n .top-full {\n top: 100%;\n }\n .-right-0\\\\.5 {\n right: calc(var(--spacing) * -0.5);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-5 {\n right: calc(var(--spacing) * 5);\n }\n .right-8 {\n right: calc(var(--spacing) * 8);\n }\n .-bottom-0\\\\.5 {\n bottom: calc(var(--spacing) * -0.5);\n }\n .-bottom-1 {\n bottom: calc(var(--spacing) * -1);\n }\n .bottom-5 {\n bottom: calc(var(--spacing) * 5);\n }\n .bottom-\\\\[-4px\\\\] {\n bottom: -4px;\n }\n .bottom-\\\\[46px\\\\] {\n bottom: 46px;\n }\n .bottom-\\\\[72px\\\\] {\n bottom: 72px;\n }\n .bottom-\\\\[calc\\\\(100\\\\%\\\\+8px\\\\)\\\\] {\n bottom: calc(100% + 8px);\n }\n .bottom-full {\n bottom: 100%;\n }\n .-left-0\\\\.5 {\n left: calc(var(--spacing) * -0.5);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-1\\\\/2 {\n left: calc(1 / 2 * 100%);\n }\n .left-6 {\n left: calc(var(--spacing) * 6);\n }\n .left-\\\\[-42px\\\\] {\n left: -42px;\n }\n .left-\\\\[-84px\\\\] {\n left: -84px;\n }\n .z-10 {\n z-index: 10;\n }\n .z-20 {\n z-index: 20;\n }\n .z-30 {\n z-index: 30;\n }\n .z-40 {\n z-index: 40;\n }\n .z-\\\\[1\\\\] {\n z-index: 1;\n }\n .z-\\\\[5\\\\] {\n z-index: 5;\n }\n .z-\\\\[2147483643\\\\] {\n z-index: 2147483643;\n }\n .z-\\\\[2147483645\\\\] {\n z-index: 2147483645;\n }\n .z-\\\\[2147483646\\\\] {\n z-index: 2147483646;\n }\n .z-\\\\[2147483647\\\\] {\n z-index: 2147483647;\n }\n .my-3 {\n margin-block: calc(var(--spacing) * 3);\n }\n .-mt-\\\\[22px\\\\] {\n margin-top: calc(22px * -1);\n }\n .mt-0\\\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .mt-px {\n margin-top: 1px;\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .ml-0\\\\.5 {\n margin-left: calc(var(--spacing) * 0.5);\n }\n .block {\n display: block;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline-flex {\n display: inline-flex;\n }\n .inline-grid {\n display: inline-grid;\n }\n .size-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-3\\\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-\\\\[7px\\\\] {\n width: 7px;\n height: 7px;\n }\n .size-\\\\[9px\\\\] {\n width: 9px;\n height: 9px;\n }\n .size-\\\\[13px\\\\] {\n width: 13px;\n height: 13px;\n }\n .size-\\\\[22px\\\\] {\n width: 22px;\n height: 22px;\n }\n .size-full {\n width: 100%;\n height: 100%;\n }\n .size-full\\\\! {\n width: 100% !important;\n height: 100% !important;\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-11 {\n height: calc(var(--spacing) * 11);\n }\n .h-px {\n height: 1px;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-20 {\n min-height: calc(var(--spacing) * 20);\n }\n .min-h-\\\\[60px\\\\] {\n min-height: 60px;\n }\n .w-\\\\[200px\\\\] {\n width: 200px;\n }\n .w-\\\\[min\\\\(272px\\\\,calc\\\\(100vw-40px\\\\)\\\\)\\\\] {\n width: min(272px, calc(100vw - 40px));\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-\\\\[280px\\\\] {\n max-width: 280px;\n }\n .max-w-\\\\[286px\\\\] {\n max-width: 286px;\n }\n .max-w-\\\\[320px\\\\] {\n max-width: 320px;\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-36 {\n min-width: calc(var(--spacing) * 36);\n }\n .min-w-40 {\n min-width: calc(var(--spacing) * 40);\n }\n .min-w-\\\\[220px\\\\] {\n min-width: 220px;\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .origin-top-left {\n transform-origin: 0 0;\n }\n .-translate-x-1\\\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .rotate-45 {\n rotate: 45deg;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-not-allowed {\n cursor: not-allowed;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .resize-none {\n resize: none;\n }\n .resize-y {\n resize: vertical;\n }\n .flex-col {\n flex-direction: column;\n }\n .place-items-center {\n place-items: center;\n }\n .items-baseline {\n align-items: baseline;\n }\n .items-center {\n align-items: center;\n }\n .items-end {\n align-items: flex-end;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .gap-0\\\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-2\\\\.5 {\n gap: calc(var(--spacing) * 2.5);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .self-center {\n align-self: center;\n }\n .self-end {\n align-self: flex-end;\n }\n .self-start {\n align-self: flex-start;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-visible {\n overflow: visible;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: var(--radius);\n }\n .rounded-2xl {\n border-radius: var(--radius-2xl);\n }\n .rounded-\\\\[2px\\\\] {\n border-radius: 2px;\n }\n .rounded-\\\\[5px\\\\] {\n border-radius: 5px;\n }\n .rounded-\\\\[10px\\\\] {\n border-radius: 10px;\n }\n .rounded-\\\\[14px\\\\] {\n border-radius: 14px;\n }\n .rounded-\\\\[16px\\\\] {\n border-radius: 16px;\n }\n .rounded-\\\\[18px\\\\] {\n border-radius: 18px;\n }\n .rounded-\\\\[20px\\\\] {\n border-radius: 20px;\n }\n .rounded-\\\\[22px\\\\] {\n border-radius: 22px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .rounded-xl {\n border-radius: var(--radius-xl);\n }\n .rounded-b-\\\\[22px\\\\] {\n border-bottom-right-radius: 22px;\n border-bottom-left-radius: 22px;\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .border-\\\\[1\\\\.5px\\\\] {\n border-style: var(--tw-border-style);\n border-width: 1.5px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .border-l-\\\\[2\\\\.5px\\\\] {\n border-left-style: var(--tw-border-style);\n border-left-width: 2.5px;\n }\n .border-black\\\\/6 {\n border-color: color-mix(in srgb, #000 6%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-black) 6%, transparent);\n }\n }\n .border-black\\\\/10 {\n border-color: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-black) 10%, transparent);\n }\n }\n .border-black\\\\/16 {\n border-color: color-mix(in srgb, #000 16%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-black) 16%, transparent);\n }\n }\n .border-black\\\\/\\\\[0\\\\.07\\\\] {\n border-color: color-mix(in srgb, #000 7.000000000000001%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-black) 7.000000000000001%, transparent);\n }\n }\n .border-border {\n border-color: var(--color-border);\n }\n .border-brand {\n border-color: var(--color-brand);\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-white\\\\/10 {\n border-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .border-white\\\\/25 {\n border-color: color-mix(in srgb, #fff 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 25%, transparent);\n }\n }\n .border-white\\\\/30 {\n border-color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n .bg-amber-500\\\\/15 {\n background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-500) 15%, transparent);\n }\n }\n .bg-black\\\\/4 {\n background-color: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 4%, transparent);\n }\n }\n .bg-black\\\\/8 {\n background-color: color-mix(in srgb, #000 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 8%, transparent);\n }\n }\n .bg-black\\\\/16 {\n background-color: color-mix(in srgb, #000 16%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 16%, transparent);\n }\n }\n .bg-black\\\\/25 {\n background-color: color-mix(in srgb, #000 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 25%, transparent);\n }\n }\n .bg-black\\\\/\\\\[0\\\\.03\\\\] {\n background-color: color-mix(in srgb, #000 3%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 3%, transparent);\n }\n }\n .bg-brand {\n background-color: var(--color-brand);\n }\n .bg-brand-green {\n background-color: var(--color-brand-green);\n }\n .bg-brand-green\\\\/10 {\n background-color: color-mix(in srgb, oklch(0.72 0.19 150) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-brand-green) 10%, transparent);\n }\n }\n .bg-brand-orange\\\\/10 {\n background-color: color-mix(in srgb, oklch(0.68 0.13 60) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-brand-orange) 10%, transparent);\n }\n }\n .bg-brand-tint {\n background-color: var(--color-brand-tint);\n }\n .bg-brand\\\\/15 {\n background-color: color-mix(in srgb, #0287FE 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-brand) 15%, transparent);\n }\n }\n .bg-destructive {\n background-color: var(--color-destructive);\n }\n .bg-destructive\\\\/10 {\n background-color: color-mix(in srgb, oklch(0.55 0.2 27) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-destructive) 10%, transparent);\n }\n }\n .bg-foreground {\n background-color: var(--color-foreground);\n }\n .bg-muted-foreground {\n background-color: var(--color-muted-foreground);\n }\n .bg-neutral-100\\\\/50 {\n background-color: color-mix(in srgb, oklch(97% 0 0) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-neutral-100) 50%, transparent);\n }\n }\n .bg-neutral-100\\\\/60 {\n background-color: color-mix(in srgb, oklch(97% 0 0) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-neutral-100) 60%, transparent);\n }\n }\n .bg-popover {\n background-color: var(--color-popover);\n }\n .bg-primary {\n background-color: var(--color-primary);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .bg-white\\\\/10 {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .bg-white\\\\/12 {\n background-color: color-mix(in srgb, #fff 12%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 12%, transparent);\n }\n }\n .bg-white\\\\/\\\\[0\\\\.06\\\\] {\n background-color: color-mix(in srgb, #fff 6%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 6%, transparent);\n }\n }\n .bg-white\\\\/\\\\[0\\\\.08\\\\] {\n background-color: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 8%, transparent);\n }\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0 {\n padding: calc(var(--spacing) * 0);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-3 {\n padding: calc(var(--spacing) * 3);\n }\n .p-3\\\\.5 {\n padding: calc(var(--spacing) * 3.5);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-8 {\n padding: calc(var(--spacing) * 8);\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-3\\\\.5 {\n padding-inline: calc(var(--spacing) * 3.5);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-2\\\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-\\\\[3px\\\\] {\n padding-block: 3px;\n }\n .py-\\\\[6px\\\\] {\n padding-block: 6px;\n }\n .py-\\\\[7px\\\\] {\n padding-block: 7px;\n }\n .pt-3\\\\.5 {\n padding-top: calc(var(--spacing) * 3.5);\n }\n .pt-\\\\[2\\\\.125rem\\\\] {\n padding-top: 2.125rem;\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pb-3 {\n padding-bottom: calc(var(--spacing) * 3);\n }\n .pl-2\\\\.5 {\n padding-left: calc(var(--spacing) * 2.5);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .font-sans {\n font-family: var(--font-sans);\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\\\[8px\\\\] {\n font-size: 8px;\n }\n .text-\\\\[9\\\\.5px\\\\] {\n font-size: 9.5px;\n }\n .text-\\\\[10\\\\.5px\\\\] {\n font-size: 10.5px;\n }\n .text-\\\\[11px\\\\] {\n font-size: 11px;\n }\n .text-\\\\[12\\\\.5px\\\\] {\n font-size: 12.5px;\n }\n .text-\\\\[12px\\\\] {\n font-size: 12px;\n }\n .text-\\\\[13\\\\.5px\\\\] {\n font-size: 13.5px;\n }\n .text-\\\\[13px\\\\] {\n font-size: 13px;\n }\n .leading-\\\\[1\\\\.4\\\\] {\n --tw-leading: 1.4;\n line-height: 1.4;\n }\n .leading-\\\\[1\\\\.35\\\\] {\n --tw-leading: 1.35;\n line-height: 1.35;\n }\n .leading-\\\\[1\\\\.45\\\\] {\n --tw-leading: 1.45;\n line-height: 1.45;\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .leading-normal {\n --tw-leading: var(--leading-normal);\n line-height: var(--leading-normal);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-\\\\[-0\\\\.01em\\\\] {\n --tw-tracking: -0.01em;\n letter-spacing: -0.01em;\n }\n .tracking-\\\\[0\\\\.01em\\\\] {\n --tw-tracking: 0.01em;\n letter-spacing: 0.01em;\n }\n .text-ellipsis {\n text-overflow: ellipsis;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-brand {\n color: var(--color-brand);\n }\n .text-brand-green {\n color: var(--color-brand-green);\n }\n .text-brand-orange {\n color: var(--color-brand-orange);\n }\n .text-destructive {\n color: var(--color-destructive);\n }\n .text-foreground {\n color: var(--color-foreground);\n }\n .text-muted-foreground {\n color: var(--color-muted-foreground);\n }\n .text-popover-foreground {\n color: var(--color-popover-foreground);\n }\n .text-primary-foreground {\n color: var(--color-primary-foreground);\n }\n .text-transparent {\n color: transparent;\n }\n .text-white {\n color: var(--color-white);\n }\n .text-white\\\\/55 {\n color: color-mix(in srgb, #fff 55%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 55%, transparent);\n }\n }\n .text-white\\\\/60 {\n color: color-mix(in srgb, #fff 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 60%, transparent);\n }\n }\n .text-white\\\\/70 {\n color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .no-underline {\n text-decoration-line: none;\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-60 {\n opacity: 60%;\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\\\[0_0_0_1px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.06\\\\)\\\\] {\n --tw-shadow: 0 0 0 1px var(--tw-shadow-color, rgba(0,0,0,0.06));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\\\[0_6px_12px_-5px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.16\\\\)\\\\] {\n --tw-shadow: 0 6px 12px -5px var(--tw-shadow-color, rgba(0,0,0,0.16));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\\\[0_10px_30px_-10px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.45\\\\)\\\\,0_3px_8px_-3px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.3\\\\)\\\\] {\n --tw-shadow: 0 10px 30px -10px var(--tw-shadow-color, rgba(0,0,0,0.45)), 0 3px 8px -3px var(--tw-shadow-color, rgba(0,0,0,0.3));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\\\[0_18px_44px_-14px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.5\\\\)\\\\,0_6px_14px_-6px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.45\\\\)\\\\] {\n --tw-shadow: 0 18px 44px -14px var(--tw-shadow-color, rgba(0,0,0,0.5)), 0 6px 14px -6px var(--tw-shadow-color, rgba(0,0,0,0.45));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\\\[0_18px_44px_-18px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.28\\\\)\\\\] {\n --tw-shadow: 0 18px 44px -18px var(--tw-shadow-color, rgba(0,0,0,0.28));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\\\[0_20px_56px_-16px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.2\\\\)\\\\,0_8px_18px_-6px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.08\\\\)\\\\] {\n --tw-shadow: 0 20px 56px -16px var(--tw-shadow-color, rgba(0,0,0,0.2)), 0 8px 18px -6px var(--tw-shadow-color, rgba(0,0,0,0.08));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-dialog {\n --tw-shadow: 0 12px 32px -8px var(--tw-shadow-color, oklch(0 0 0 / 0.12)), 0 4px 12px -4px var(--tw-shadow-color, oklch(0 0 0 / 0.06));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-1 {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-black\\\\/6 {\n --tw-ring-color: color-mix(in srgb, #000 6%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-black) 6%, transparent);\n }\n }\n .ring-white\\\\/10 {\n --tw-ring-color: color-mix(in srgb, #fff 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .ring-white\\\\/20 {\n --tw-ring-color: color-mix(in srgb, #fff 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .grayscale {\n --tw-grayscale: grayscale(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-\\\\[2px\\\\] {\n --tw-backdrop-blur: blur(2px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .group-focus-within\\\\/message\\\\:opacity-100 {\n &:is(:where(.group\\\\/message):focus-within *) {\n opacity: 100%;\n }\n }\n .group-hover\\\\/message\\\\:opacity-100 {\n &:is(:where(.group\\\\/message):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .placeholder\\\\:text-muted-foreground {\n &::placeholder {\n color: var(--color-muted-foreground);\n }\n }\n .hover\\\\:bg-black\\\\/6 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 6%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 6%, transparent);\n }\n }\n }\n }\n .hover\\\\:bg-black\\\\/12 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 12%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 12%, transparent);\n }\n }\n }\n }\n .hover\\\\:bg-brand-green\\\\/15 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(0.72 0.19 150) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-brand-green) 15%, transparent);\n }\n }\n }\n }\n .hover\\\\:bg-brand-orange\\\\/15 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(0.68 0.13 60) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-brand-orange) 15%, transparent);\n }\n }\n }\n }\n .hover\\\\:bg-brand-tint\\\\/70 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, rgba(2, 135, 254, 0.10) 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-brand-tint) 70%, transparent);\n }\n }\n }\n }\n .hover\\\\:bg-destructive\\\\/10 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(0.55 0.2 27) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-destructive) 10%, transparent);\n }\n }\n }\n }\n .hover\\\\:bg-destructive\\\\/15 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(0.55 0.2 27) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-destructive) 15%, transparent);\n }\n }\n }\n }\n .hover\\\\:bg-primary\\\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(0.18 0 0) 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\\\:bg-white\\\\/\\\\[0\\\\.08\\\\] {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 8%, transparent);\n }\n }\n }\n }\n .hover\\\\:bg-white\\\\/\\\\[0\\\\.13\\\\] {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 13%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 13%, transparent);\n }\n }\n }\n }\n .hover\\\\:text-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--color-foreground);\n }\n }\n }\n .hover\\\\:text-white {\n &:hover {\n @media (hover: hover) {\n color: var(--color-white);\n }\n }\n }\n .focus\\\\:border-brand\\\\/50 {\n &:focus {\n border-color: color-mix(in srgb, #0287FE 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-brand) 50%, transparent);\n }\n }\n }\n .focus\\\\:bg-destructive\\\\/10 {\n &:focus {\n background-color: color-mix(in srgb, oklch(0.55 0.2 27) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-destructive) 10%, transparent);\n }\n }\n }\n .focus\\\\:ring-2 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\\\:ring-brand\\\\/20 {\n &:focus {\n --tw-ring-color: color-mix(in srgb, #0287FE 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-brand) 20%, transparent);\n }\n }\n }\n .focus\\\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\\\:border-ring {\n &:focus-visible {\n border-color: var(--color-ring);\n }\n }\n .focus-visible\\\\:ring-2 {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\\\:ring-ring {\n &:focus-visible {\n --tw-ring-color: var(--color-ring);\n }\n }\n .disabled\\\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n}\n:host {\n font-family: var(--font-sans);\n font-size: 13px;\n line-height: 1.4;\n color: var(--color-foreground);\n font-weight: 400;\n font-feature-settings: \"cv11\", \"ss01\";\n letter-spacing: -0.011em;\n cursor: auto;\n --color-background: oklch(0.985 0 0);\n --color-foreground: oklch(0.18 0 0);\n --color-card: oklch(1 0 0);\n --color-card-foreground: oklch(0.18 0 0);\n --color-popover: oklch(1 0 0);\n --color-popover-foreground: oklch(0.18 0 0);\n --color-primary: oklch(0.18 0 0);\n --color-primary-foreground: oklch(1 0 0);\n --color-secondary: oklch(0.945 0 0);\n --color-secondary-foreground: oklch(0.18 0 0);\n --color-muted: oklch(0.945 0 0);\n --color-muted-foreground: oklch(0.62 0 0);\n --color-accent: oklch(0.60 0.21 250);\n --color-accent-foreground: oklch(1 0 0);\n --color-destructive: oklch(0.55 0.2 27);\n --color-border: oklch(0.92 0 0);\n --color-input: oklch(0.92 0 0);\n --color-ring: oklch(0.60 0.21 250 / 0.40);\n --color-brand: #0287FE;\n --color-brand-hover: #0173D6;\n --color-brand-tint: rgba(2, 135, 254, 0.10);\n --color-brand-orange: oklch(0.68 0.13 60);\n --color-brand-green: oklch(0.72 0.19 150);\n --color-avatar-tint-1: #6E6E6E;\n --color-avatar-tint-2: #8A7E76;\n --color-avatar-tint-3: #7B6D85;\n --color-avatar-tint-4: #525252;\n --color-avatar-tint-5: #3D3D3D;\n --radius-pill: 9999px;\n --radius-sm: 0.625rem;\n --radius-md: 1rem;\n --radius-lg: 1.25rem;\n --radius: var(--radius-lg);\n --shadow-subtle: 0 1px 2px 0 oklch(0 0 0 / 0.04);\n --shadow-card: 0 2px 8px -2px oklch(0 0 0 / 0.06), 0 4px 12px -4px oklch(0 0 0 / 0.04);\n --shadow-dialog: 0 12px 32px -8px oklch(0 0 0 / 0.12), 0 4px 12px -4px oklch(0 0 0 / 0.06);\n --shadow-popover: var(--shadow-dialog);\n --duration-press: 100ms;\n --duration-hover-button: 150ms;\n --duration-hover-card: 250ms;\n --duration-fast: 120ms;\n --duration-normal: 200ms;\n --duration-slow: 320ms;\n --ease-out: cubic-bezier(0.22, 0.61, 0.36, 1);\n --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);\n --ease-spring: cubic-bezier(0.34, 1.32, 0.64, 1);\n}\n@keyframes patch-shake {\n 0%,\n 100% {\n transform: translate(var(--patch-popover-tx, 0), var(--patch-popover-ty, 0));\n }\n 20% {\n transform: translate(calc(var(--patch-popover-tx, 0px) - 6px), var(--patch-popover-ty, 0));\n }\n 40% {\n transform: translate(calc(var(--patch-popover-tx, 0px) + 6px), var(--patch-popover-ty, 0));\n }\n 60% {\n transform: translate(calc(var(--patch-popover-tx, 0px) - 4px), var(--patch-popover-ty, 0));\n }\n 80% {\n transform: translate(calc(var(--patch-popover-tx, 0px) + 4px), var(--patch-popover-ty, 0));\n }\n}\n.patch-shake {\n animation: patch-shake var(--duration-normal) var(--ease-in-out);\n}\n@keyframes patch-fade-in {\n from {\n opacity: 0;\n transform: scale(0.96);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n.patch-fade-in {\n animation: patch-fade-in var(--duration-fast) var(--ease-out);\n}\nbutton:not(:disabled) {\n cursor: pointer;\n}\nbutton:not(:disabled):not(.pkey):active {\n transform: scale(0.97);\n transition: transform var(--duration-press) var(--ease-out);\n}\n.pkey {\n border-width: 0;\n background-clip: border-box;\n transition: box-shadow var(--duration-hover-button) var(--ease-out);\n}\n.pkey:active {\n transition-duration: var(--duration-press);\n}\n.pkey:focus-visible {\n outline: 2px solid var(--color-ring);\n outline-offset: 2px;\n}\n.pkey-brand {\n background: linear-gradient(180deg, #1f97ff 0%, var(--color-brand) 100%);\n box-shadow: 0 1px 1.5px rgba(8, 38, 75, 0.22),\n 0 2px 5px -1px rgba(8, 38, 75, 0.16),\n inset 0 1px 0.5px rgba(255, 255, 255, 0.32),\n inset 0 -1px 1px rgba(0, 18, 45, 0.16),\n inset 0 0 0 1px rgba(2, 70, 145, 0.18),\n inset 0 0 0 1000px rgba(255, 255, 255, 0);\n}\n.pkey-brand:hover {\n box-shadow: 0 1px 1.5px rgba(8, 38, 75, 0.24),\n 0 4px 10px -3px rgba(8, 38, 75, 0.22),\n inset 0 1px 0.5px rgba(255, 255, 255, 0.36),\n inset 0 -1px 1px rgba(0, 18, 45, 0.18),\n inset 0 0 0 1px rgba(2, 70, 145, 0.2),\n inset 0 0 0 1000px rgba(255, 255, 255, 0.08);\n}\n.pkey-brand:active {\n box-shadow: 0 1px 1px rgba(8, 38, 75, 0.18),\n 0 1px 2px rgba(8, 38, 75, 0.16),\n inset 0 1px 2px rgba(0, 22, 52, 0.22),\n inset 0 -1px 1px rgba(0, 18, 45, 0.14),\n inset 0 0 0 1px rgba(2, 70, 145, 0.22),\n inset 0 0 0 1000px rgba(0, 0, 0, 0.06);\n}\n.pkey-outline {\n background: linear-gradient(180deg, #fafafb 0%, #f0f0f2 100%);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.035),\n 0 2px 4px -1px rgba(0, 0, 0, 0.04),\n inset 0 1px 0.5px rgba(255, 255, 255, 0.75),\n inset 0 -1px 1px rgba(0, 0, 0, 0.025),\n inset 0 0 0 1px rgba(0, 0, 0, 0.085),\n inset 0 0 0 1000px rgba(0, 0, 0, 0);\n}\n.pkey-outline:hover {\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04),\n 0 4px 10px -3px rgba(0, 0, 0, 0.07),\n inset 0 1px 0.5px rgba(255, 255, 255, 0.75),\n inset 0 -1px 1px rgba(0, 0, 0, 0.025),\n inset 0 0 0 1px rgba(0, 0, 0, 0.095),\n inset 0 0 0 1000px rgba(0, 0, 0, 0.025);\n}\n.pkey-outline:active {\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.03),\n 0 1px 2px rgba(0, 0, 0, 0.035),\n inset 0 1px 2px rgba(0, 0, 0, 0.05),\n inset 0 -1px 1px rgba(0, 0, 0, 0.02),\n inset 0 0 0 1px rgba(0, 0, 0, 0.095),\n inset 0 0 0 1000px rgba(0, 0, 0, 0.05);\n}\n.pkey-destructive {\n background: linear-gradient(180deg, #cf5750 0%, var(--color-destructive) 100%);\n box-shadow: 0 1px 1.5px rgba(70, 15, 15, 0.22),\n 0 2px 5px -1px rgba(70, 15, 15, 0.16),\n inset 0 1px 0.5px rgba(255, 255, 255, 0.3),\n inset 0 -1px 1px rgba(45, 5, 5, 0.18),\n inset 0 0 0 1px rgba(120, 30, 30, 0.22),\n inset 0 0 0 1000px rgba(255, 255, 255, 0);\n}\n.pkey-destructive:hover {\n box-shadow: 0 1px 1.5px rgba(70, 15, 15, 0.24),\n 0 4px 10px -3px rgba(70, 15, 15, 0.22),\n inset 0 1px 0.5px rgba(255, 255, 255, 0.34),\n inset 0 -1px 1px rgba(45, 5, 5, 0.2),\n inset 0 0 0 1px rgba(120, 30, 30, 0.24),\n inset 0 0 0 1000px rgba(255, 255, 255, 0.08);\n}\n.pkey-destructive:active {\n box-shadow: 0 1px 1px rgba(70, 15, 15, 0.18),\n 0 1px 2px rgba(70, 15, 15, 0.16),\n inset 0 1px 2px rgba(50, 8, 8, 0.24),\n inset 0 -1px 1px rgba(45, 5, 5, 0.16),\n inset 0 0 0 1px rgba(120, 30, 30, 0.26),\n inset 0 0 0 1000px rgba(0, 0, 0, 0.07);\n}\n.pkey-warn {\n background: linear-gradient(180deg, #fbb43a 0%, #f59e0b 100%);\n box-shadow: 0 1px 1.5px rgba(90, 55, 0, 0.22),\n 0 2px 5px -1px rgba(90, 55, 0, 0.16),\n inset 0 1px 0.5px rgba(255, 255, 255, 0.4),\n inset 0 -1px 1px rgba(60, 35, 0, 0.18),\n inset 0 0 0 1px rgba(150, 90, 0, 0.22),\n inset 0 0 0 1000px rgba(255, 255, 255, 0);\n}\n.pkey-warn:hover {\n box-shadow: 0 1px 1.5px rgba(90, 55, 0, 0.24),\n 0 4px 10px -3px rgba(90, 55, 0, 0.22),\n inset 0 1px 0.5px rgba(255, 255, 255, 0.44),\n inset 0 -1px 1px rgba(60, 35, 0, 0.2),\n inset 0 0 0 1px rgba(150, 90, 0, 0.24),\n inset 0 0 0 1000px rgba(255, 255, 255, 0.08);\n}\n.pkey-warn:active {\n box-shadow: 0 1px 1px rgba(90, 55, 0, 0.18),\n 0 1px 2px rgba(90, 55, 0, 0.16),\n inset 0 1px 2px rgba(70, 40, 0, 0.24),\n inset 0 -1px 1px rgba(60, 35, 0, 0.16),\n inset 0 0 0 1px rgba(150, 90, 0, 0.26),\n inset 0 0 0 1000px rgba(0, 0, 0, 0.07);\n}\n.pkey-fab {\n background: linear-gradient(180deg, #3a3a3a 0%, var(--color-foreground) 100%);\n box-shadow: 0 14px 32px -6px rgba(0, 0, 0, 0.3),\n 0 6px 14px -4px rgba(0, 0, 0, 0.14),\n inset 0 1px 0.5px rgba(255, 255, 255, 0.14),\n inset 0 -1px 1px rgba(0, 0, 0, 0.4),\n inset 0 0 0 1px rgba(255, 255, 255, 0.05);\n}\n.pkey-dock {\n transition: box-shadow var(--duration-hover-button) var(--ease-out),\n background-color var(--duration-hover-button) var(--ease-out);\n}\n.pkey-dock:hover {\n background-color: rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.14);\n}\n.pkey-dock:active {\n background-color: rgba(0, 0, 0, 0.28);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.5);\n transition-duration: var(--duration-press);\n}\n@media (prefers-reduced-motion: reduce) {\n .pkey,\n .pkey-dock,\n .patch-pin {\n transition: none;\n }\n}\n.patch-pin {\n background: var(--color-popover);\n transition: transform var(--duration-hover-card) var(--ease-out), box-shadow var(--duration-hover-card) var(--ease-out);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 4px 12px rgba(0, 0, 0, 0.14);\n transform: translateZ(0) scale(1);\n will-change: transform;\n backface-visibility: hidden;\n}\n.patch-pin-button:hover .patch-pin {\n transform: translateZ(0) scale(1.06);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 5px 14px rgba(0, 0, 0, 0.15);\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n }\n }\n}\n`;\n","import { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { widgetCss } from \"./_compiled-styles\";\n\nconst HOST_TAG = \"patch-widget-root\";\n\ntype Props = {\n children: ReactNode;\n};\n\n/**\n * Mounts a single <patch-widget-root> on document.body, attaches a shadow root,\n * injects the compiled Tailwind stylesheet once, and portals children into it.\n * Idempotent across re-mounts.\n */\nexport function ShadowMount({ children }: Props) {\n const [container, setContainer] = useState<HTMLElement | null>(null);\n const hostRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n let host = document.querySelector(HOST_TAG) as HTMLElement | null;\n if (!host) {\n host = document.createElement(HOST_TAG);\n // Mark as internal so resolve-anchor's scoring walk ignores us.\n host.setAttribute(\"data-patch-internal\", \"\");\n document.body.appendChild(host);\n }\n hostRef.current = host;\n const shadow = host.shadowRoot ?? host.attachShadow({ mode: \"open\" });\n if (!shadow.querySelector(\"style[data-patch-css]\")) {\n const style = document.createElement(\"style\");\n style.setAttribute(\"data-patch-css\", \"\");\n style.textContent = widgetCss;\n shadow.appendChild(style);\n }\n let mount = shadow.querySelector(\"div[data-patch-mount]\") as HTMLDivElement | null;\n if (!mount) {\n mount = document.createElement(\"div\");\n mount.setAttribute(\"data-patch-mount\", \"\");\n shadow.appendChild(mount);\n }\n setContainer(mount);\n return () => {\n // Leave the host attached across re-mounts. Tearing down on unmount\n // would create flicker if a parent re-renders Patch.\n };\n }, []);\n\n if (!container) return null;\n return createPortal(children, container);\n}\n","const MAX_DEPTH = 4;\n\n// CSS identifiers that would break a bare `#id` selector. We reject these and\n// fall through to the nth-of-type chain rather than emit something invalid.\nconst ID_REJECT = /[\\s#.:[\\]()>+~,\\\\]/;\n\nfunction idIsSafe(id: string): boolean {\n if (!id) return false;\n if (ID_REJECT.test(id)) return false;\n if (/^\\d/.test(id)) return false;\n return true;\n}\n\nfunction nthOfTypeIndex(el: Element): number {\n let i = 1;\n let sib = el.previousElementSibling;\n const tag = el.tagName;\n while (sib) {\n if (sib.tagName === tag) i++;\n sib = sib.previousElementSibling;\n }\n return i;\n}\n\n/**\n * Best-effort capture-time selector. Returns `#id` when the element has a safe\n * id, otherwise a depth-capped `tag:nth-of-type(n) > …` chain ending at `el`.\n *\n * 4 levels is a tradeoff: deeper selectors are more specific but more brittle.\n * The chain stops at `body` or at the depth cap, whichever comes first.\n */\nexport function buildSelector(el: Element): string {\n if (!el.tagName) return \"\";\n\n if (el.id && idIsSafe(el.id)) return `#${el.id}`;\n\n const segments: string[] = [];\n let node: Element | null = el;\n let depth = 0;\n while (node && node.tagName.toLowerCase() !== \"body\" && depth < MAX_DEPTH) {\n const tag = node.tagName.toLowerCase();\n if (node.id && idIsSafe(node.id)) {\n segments.unshift(`#${node.id}`);\n return segments.join(\" > \");\n }\n segments.unshift(`${tag}:nth-of-type(${nthOfTypeIndex(node)})`);\n node = node.parentElement;\n depth++;\n }\n return segments.join(\" > \");\n}\n","import { isFrameworkReactComponentName, sanitizeReactComponentsHint } from \"@patch/shared\";\n\nexport type ReactTargetHints = {\n reactComponents?: string;\n sourceFile?: string;\n};\n\ntype ReactFiberNode = {\n return?: ReactFiberNode | null;\n type?: unknown;\n elementType?: unknown;\n _debugOwner?: ReactFiberNode | null;\n _debugSource?: {\n fileName?: string;\n } | null;\n};\n\nconst MAX_COMPONENT_NAME = 80;\nconst MAX_SOURCE_FILE = 500;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\";\n}\n\nfunction isFiberNode(value: unknown): value is ReactFiberNode {\n if (!isRecord(value)) return false;\n return \"return\" in value || \"type\" in value || \"elementType\" in value || \"_debugOwner\" in value;\n}\n\nfunction readDisplayName(value: unknown): string | null {\n if (typeof value === \"function\") {\n return (\n (value as { displayName?: string }).displayName || (value as { name?: string }).name || null\n );\n }\n if (!isRecord(value)) return null;\n\n const displayName = value.displayName;\n if (typeof displayName === \"string\" && displayName) return displayName;\n\n const renderName = readDisplayName(value.render);\n if (renderName) return renderName;\n\n const wrappedName = readDisplayName(value.type);\n if (wrappedName) return wrappedName;\n\n return null;\n}\n\nfunction oneLine(value: string): string {\n return value.replace(/\\s+/g, \" \").trim();\n}\n\nfunction truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return `${value.slice(0, max - 1).trim()}…`;\n}\n\nfunction cleanComponentName(name: string): string | null {\n const cleaned = oneLine(name).replace(/[<>]/g, \"\");\n if (!cleaned || /^[a-z]/.test(cleaned)) return null;\n return truncate(cleaned, MAX_COMPONENT_NAME);\n}\n\nfunction componentName(fiber: ReactFiberNode): string | null {\n const name = readDisplayName(fiber.elementType) ?? readDisplayName(fiber.type);\n return name ? cleanComponentName(name) : null;\n}\n\nfunction cleanSourceFile(fileName: string): string {\n return truncate(oneLine(fileName), MAX_SOURCE_FILE);\n}\n\nfunction isFrameworkSourceFile(fileName: string): boolean {\n const normalized = fileName.replace(/\\\\/g, \"/\");\n return (\n normalized.includes(\"/.next/\") ||\n normalized.includes(\"/node_modules/next/\") ||\n normalized.includes(\"/node_modules/react/\") ||\n normalized.includes(\"/node_modules/react-dom/\") ||\n /(^|\\/)next\\/dist\\//.test(normalized)\n );\n}\n\nfunction normalizeSourceFile(fileName: string): string {\n const cleaned = fileName\n .replace(/^webpack:\\/\\/[^/]+\\//, \"\")\n .replace(/^file:\\/\\//, \"\")\n .replace(/\\\\/g, \"/\")\n .replace(/\\/\\.\\//g, \"/\")\n .replace(/^\\.\\//, \"\");\n\n for (const marker of [\"/apps/\", \"/packages/\", \"/src/\"]) {\n const index = cleaned.lastIndexOf(marker);\n if (index >= 0) return cleanSourceFile(cleaned.slice(index + 1));\n }\n\n const parts = cleaned.split(\"/\").filter(Boolean);\n return cleanSourceFile(parts.slice(-3).join(\"/\"));\n}\n\nfunction sourceFile(fiber: ReactFiberNode): string | null {\n const fileName = fiber._debugSource?.fileName;\n if (typeof fileName !== \"string\" || !fileName.trim()) return null;\n if (isFrameworkSourceFile(fileName)) return null;\n return normalizeSourceFile(fileName);\n}\n\nfunction findFiber(el: Element): ReactFiberNode | null {\n const record = el as unknown as Record<string, unknown>;\n for (const key of Object.getOwnPropertyNames(el)) {\n if (!key.startsWith(\"__reactFiber$\") && !key.startsWith(\"__reactInternalInstance$\")) {\n continue;\n }\n const value = record[key];\n if (isFiberNode(value)) return value;\n }\n return null;\n}\n\nexport function extractReactTargetHints(el: Element): ReactTargetHints | null {\n let fiber = findFiber(el);\n if (!fiber) return null;\n\n const names: string[] = [];\n let nearestSourceFile: string | null = null;\n let depth = 0;\n\n while (fiber && depth < 30) {\n const name = componentName(fiber);\n const isFrameworkComponent = name ? isFrameworkReactComponentName(name) : false;\n if (name && !isFrameworkComponent && names[names.length - 1] !== name) names.push(name);\n if (!isFrameworkComponent) nearestSourceFile ??= sourceFile(fiber);\n fiber = fiber.return ?? fiber._debugOwner ?? null;\n depth += 1;\n }\n\n const reactComponents =\n names.length > 0\n ? sanitizeReactComponentsHint(\n names\n .reverse()\n .map((name) => `<${name}>`)\n .join(\" \"),\n )\n : null;\n const hints: ReactTargetHints = {};\n if (reactComponents) hints.reactComponents = reactComponents;\n if (nearestSourceFile) hints.sourceFile = nearestSourceFile;\n return Object.keys(hints).length > 0 ? hints : null;\n}\n","import type { DomHints, WidgetAnnotationInput } from \"@patch/shared\";\nimport { buildSelector } from \"../persistence/build-selector\";\nimport { normalizeUrl } from \"../persistence/normalize-url\";\nimport {\n buildElementPath,\n extractAccessibility,\n extractAttributes,\n extractCssClasses,\n extractNearbyElements,\n extractNearbyText,\n extractTextSignature,\n identifyElement,\n} from \"./element-identification\";\nimport {\n formatAreaTargetLabel,\n formatElementTargetLabel,\n formatMultiTargetLabel,\n} from \"./format-target-label\";\nimport { extractReactTargetHints } from \"./react-hints\";\nimport type {\n AreaTarget,\n CaptureTarget,\n ElementTarget,\n MultiTarget,\n Rect,\n} from \"./target-resolution\";\n\nconst SELECTED_TEXT_MAX = 500;\nconst MULTI_LABEL_PREVIEW = 3;\n\nexport type ClickGeometry = {\n viewportX: number;\n viewportY: number;\n scrollY: number;\n};\n\nexport type BuildPayloadInput = {\n target: CaptureTarget;\n /** Anchor point in viewport coords; element=click coord, multi/area=union bottom-right. */\n click: ClickGeometry;\n comment: string;\n url: string;\n};\n\nfunction truncateSelected(text: string): string {\n if (text.length <= SELECTED_TEXT_MAX) return text;\n return text.slice(0, SELECTED_TEXT_MAX);\n}\n\n/**\n * Viewport-coord anchor for a capture target. Bottom-right of union/rect for\n * multi/area; bbox top-left for element (callers usually pass the click coord\n * themselves and don't need this).\n */\nexport function anchorForTarget(target: CaptureTarget): { viewportX: number; viewportY: number } {\n if (target.kind === \"multi\") {\n return {\n viewportX: target.union.x + target.union.width,\n viewportY: target.union.y + target.union.height,\n };\n }\n if (target.kind === \"area\") {\n return {\n viewportX: target.rect.x + target.rect.width,\n viewportY: target.rect.y + target.rect.height,\n };\n }\n return { viewportX: target.rect.x, viewportY: target.rect.y };\n}\n\nfunction commonCoordinates(click: ClickGeometry) {\n return {\n viewportX: click.viewportX,\n viewportY: click.viewportY,\n documentY: click.viewportY + click.scrollY,\n isFixed: false,\n };\n}\n\nfunction rectAsBox(r: Rect | DOMRect) {\n return { x: r.x, y: r.y, width: r.width, height: r.height };\n}\n\nfunction buildDomHints(el: Element): DomHints {\n const hints: DomHints = { cssSelector: buildSelector(el) };\n const text = extractTextSignature(el);\n if (text) hints.textSignature = text;\n const attrs = extractAttributes(el);\n if (Object.keys(attrs).length > 0) hints.attributeSignature = attrs;\n return hints;\n}\n\n/**\n * Client-facing target label. Used to label the header while the annotation is\n * still a draft (pre-submit); persisted as `targetLabel` after submit.\n */\nexport function targetDisplayLabel(target: CaptureTarget): string {\n if (target.kind === \"element\") {\n return formatElementTargetLabel(target.element, target.selectedText);\n }\n if (target.kind === \"multi\") return formatMultiTargetLabel(target.elements.length);\n return formatAreaTargetLabel();\n}\n\n/** Build the wire payload for an `element`-kind annotation. */\nexport function buildElementPayload(input: {\n target: ElementTarget;\n click: ClickGeometry;\n comment: string;\n url: string;\n}): WidgetAnnotationInput {\n const { target, click, comment, url } = input;\n const element = target.element;\n const rect = target.rect;\n\n const accessibility = extractAccessibility(element);\n const nearbyText = extractNearbyText(element);\n const cssClasses = extractCssClasses(element);\n const nearbyElements = extractNearbyElements(element);\n const reactHints = extractReactTargetHints(element);\n\n const payload: WidgetAnnotationInput = {\n comment,\n element: identifyElement(element),\n elementPath: buildElementPath(element),\n targetLabel: formatElementTargetLabel(element, target.selectedText),\n timestamp: Date.now(),\n url: normalizeUrl(url),\n kind: \"feedback\",\n coordinates: commonCoordinates(click),\n boundingBox: rectAsBox(rect),\n domHints: buildDomHints(element),\n };\n\n if (target.selectedText) payload.selectedText = truncateSelected(target.selectedText);\n if (nearbyText) payload.nearbyText = nearbyText;\n if (cssClasses.length > 0) payload.cssClasses = cssClasses;\n if (nearbyElements.length > 0) payload.nearbyElements = nearbyElements;\n if (accessibility) payload.accessibility = accessibility;\n if (reactHints?.reactComponents) payload.reactComponents = reactHints.reactComponents;\n if (reactHints?.sourceFile) payload.sourceFile = reactHints.sourceFile;\n\n return payload;\n}\n\n/** Build the wire payload for a `multi`-kind annotation. */\nexport function buildMultiPayload(input: {\n target: MultiTarget;\n click: ClickGeometry;\n comment: string;\n url: string;\n}): WidgetAnnotationInput {\n const { target, click, comment, url } = input;\n const names = target.elements.slice(0, MULTI_LABEL_PREVIEW).map((el) => identifyElement(el));\n const suffix = target.elements.length > MULTI_LABEL_PREVIEW ? \"…\" : \"\";\n const label = `${target.elements.length} elements: ${names.join(\", \")}${suffix}`;\n\n const primary = target.elements[0];\n const reactHints = primary ? extractReactTargetHints(primary) : null;\n return {\n comment,\n element: label,\n elementPath: label,\n targetLabel: formatMultiTargetLabel(target.elements.length),\n timestamp: Date.now(),\n url: normalizeUrl(url),\n kind: \"feedback\",\n coordinates: commonCoordinates(click),\n boundingBox: rectAsBox(target.union),\n isMultiSelect: true,\n elementBoundingBoxes: target.rects.map(rectAsBox),\n ...(reactHints?.reactComponents ? { reactComponents: reactHints.reactComponents } : {}),\n ...(reactHints?.sourceFile ? { sourceFile: reactHints.sourceFile } : {}),\n ...(primary ? { domHints: buildDomHints(primary) } : {}),\n };\n}\n\n/** Build the wire payload for an `area`-kind annotation. */\nexport function buildAreaPayload(input: {\n target: AreaTarget;\n click: ClickGeometry;\n comment: string;\n url: string;\n}): WidgetAnnotationInput {\n const { target, click, comment, url } = input;\n const w = Math.round(target.rect.width);\n const h = Math.round(target.rect.height);\n const x = Math.round(target.rect.x);\n const y = Math.round(target.rect.y);\n\n return {\n comment,\n element: `region ${w}×${h}`,\n elementPath: `region at (${x}, ${y}) ${w}×${h}`,\n targetLabel: formatAreaTargetLabel(),\n timestamp: Date.now(),\n url: normalizeUrl(url),\n kind: \"feedback\",\n coordinates: commonCoordinates(click),\n boundingBox: rectAsBox(target.rect),\n };\n}\n","import type { WidgetAnnotationInput } from \"@patch/shared\";\nimport type { ApiClient, KickoffResponse } from \"../data/api-client\";\nimport type { ClientIdentity, ViewerKind } from \"../data/types\";\n\n/**\n * Subset of ApiClient used by thread actions. Lets tests fake the surface\n * without constructing a full ApiClient.\n */\nexport type ActionApi = Pick<\n ApiClient,\n | \"createAnnotation\"\n | \"reply\"\n | \"deleteAnnotation\"\n | \"deleteMessage\"\n | \"kickoff\"\n | \"resolve\"\n | \"reopen\"\n | \"postIdentity\"\n>;\n\nexport type SubmitInput =\n | { kind: \"composer\"; payload: WidgetAnnotationInput }\n | {\n kind: \"reply\";\n annotationId: string;\n content: string;\n };\n\n/**\n * Branch on `kind`: composer → POST /annotations creating both annotation +\n * first message in one call; reply → POST /annotations/[aid]/reply appending\n * a message. Returns the created entity id, or `null` on network failure.\n */\nexport async function submit(input: SubmitInput, api: ActionApi): Promise<{ id: string } | null> {\n if (input.kind === \"composer\") {\n return api.createAnnotation(input.payload);\n }\n return api.reply(input.annotationId, {\n content: input.content,\n });\n}\n\nexport async function markResolved(\n annotationId: string,\n api: ActionApi,\n): Promise<{ ok: true } | null> {\n return api.resolve(annotationId);\n}\n\nexport async function deleteAnnotation(\n annotationId: string,\n api: ActionApi,\n): Promise<{ ok: true } | null> {\n return api.deleteAnnotation(annotationId);\n}\n\nexport async function deleteMessage(\n args: { annotationId: string; messageId: string },\n api: ActionApi,\n): Promise<{ ok: true } | null> {\n return api.deleteMessage(args.annotationId, args.messageId);\n}\n\nexport async function reopenAnnotation(\n args: { annotationId: string; viewerKind: ViewerKind },\n api: ActionApi,\n): Promise<{ ok: true } | null> {\n if (args.viewerKind !== \"studio\") return null;\n return api.reopen(args.annotationId);\n}\n\n/**\n * No-op for client viewers as a defense-in-depth guard. The server already\n * blocks non-studio kickoff calls with 403; we never want a client UI to even\n * attempt the call.\n */\nexport async function runPatch(\n args: { annotationId: string; viewerKind: ViewerKind; guidance?: string },\n api: ActionApi,\n): Promise<KickoffResponse | null> {\n if (args.viewerKind !== \"studio\") return null;\n return api.kickoff(args.annotationId, { guidance: args.guidance });\n}\n\nexport async function setIdentity(\n input: { name: string; email: string; avatarSeed: string },\n api: ActionApi,\n): Promise<ClientIdentity | null> {\n return api.postIdentity(input);\n}\n","import type { AnnotationViewport, WidgetAnnotationInput } from \"@patch/shared\";\nimport { createContext, type ReactNode, use, useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n buildAreaPayload,\n buildElementPayload,\n buildMultiPayload,\n} from \"../capture/capture-payload\";\nimport { formatStoredTargetLabel } from \"../capture/format-target-label\";\nimport { useAnnotationsStore } from \"../data/annotations-store\";\nimport { usePopoverStore } from \"../data/popover-store\";\nimport type {\n AgentRunSnapshot,\n ClientIdentity,\n ThreadMessage,\n ViewerKind,\n WidgetAnnotation,\n} from \"../data/types\";\nimport { useTargetSurface } from \"../surface/target-surface\";\nimport { viewportSizeFor } from \"../viewport/viewport-presets\";\nimport * as actions from \"./actions\";\n\nexport type ThreadContextValue = {\n state: ThreadState;\n actions: ThreadActions;\n meta: ThreadMeta;\n};\n\nexport type ThreadState = {\n annotation: WidgetAnnotation | null;\n messages: ThreadMessage[];\n runState: AgentRunSnapshot | null;\n draftText: string;\n busy: boolean;\n actionError: string | null;\n confirmDiscardOpen: boolean;\n confirmDelete: DeleteConfirmTarget | null;\n showDevFooter: boolean;\n agentRunReady: boolean;\n agentRunSetupMessage: string | null;\n needsIdentity: boolean;\n isResolved: boolean;\n initialMessageLocked: boolean;\n threadVisible: boolean;\n canDeleteAnnotation: boolean;\n};\n\nexport type ThreadActions = {\n setDraftText: (value: string) => void;\n /** Submit a draft. Branches on composer vs reply internally. */\n submit: () => Promise<void>;\n retryMessage: (messageId: string) => Promise<void>;\n retryInitialMessage: () => Promise<void>;\n requestDeleteAnnotation: () => void;\n requestDeleteMessage: (message: ThreadMessage) => void;\n canDeleteMessage: (message: ThreadMessage) => boolean;\n cancelDelete: () => void;\n confirmDelete: () => Promise<void>;\n markResolved: () => Promise<void>;\n reopen: () => Promise<void>;\n runPatch: (guidance?: string) => Promise<void>;\n setIdentity: (input: { name: string; email: string }) => Promise<ClientIdentity | null>;\n /** Close via outside-click/Escape. Drafts stay open and shake. */\n attemptClose: () => void;\n /** Close via the header button. Drafts ask for confirmation. */\n requestClose: () => void;\n forceClose: () => void;\n setConfirmDiscardOpen: (value: boolean) => void;\n};\n\nexport type ThreadMeta = {\n /** Header label: the saved annotation's element, or the live draft's target. */\n targetLabel: string;\n viewport: AnnotationViewport;\n shakeNonce: number;\n viewer: {\n kind: ViewerKind;\n authorId: string | null;\n name: string | null;\n avatarKey: string | null;\n avatarSrc: string | null;\n generatedSeed: string | null;\n };\n};\n\nexport type DeleteConfirmTarget = { kind: \"annotation\" } | { kind: \"message\"; messageId: string };\n\nconst Ctx = createContext<ThreadContextValue | null>(null);\n\nlet tempIdCounter = 0;\nfunction nextTempId(prefix: string): string {\n tempIdCounter += 1;\n return `${prefix}-${Date.now().toString(36)}-${tempIdCounter}`;\n}\n\nfunction initialMessageLocked(annotation: WidgetAnnotation): boolean {\n return annotation.deliveryStatus === \"sending\" || annotation.deliveryStatus === \"failed\";\n}\n\ntype ProviderProps = {\n annotation: WidgetAnnotation | null;\n draftTargetLabel?: string | null;\n children: ReactNode;\n};\n\nexport function ThreadProvider({ annotation, draftTargetLabel, children }: ProviderProps) {\n const store = useAnnotationsStore();\n const popover = usePopoverStore();\n const surface = useTargetSurface();\n const [busy, setBusy] = useState(false);\n const [actionError, setActionError] = useState<string | null>(null);\n const [confirmDelete, setConfirmDelete] = useState<DeleteConfirmTarget | null>(null);\n const busyRef = useRef(false);\n\n const messages = annotation?.thread ?? [];\n const runState = annotation?.latestRun ?? null;\n const isResolved = annotation?.status === \"resolved\";\n const lockedInitialMessage = annotation ? initialMessageLocked(annotation) : false;\n\n const viewerKind = store.viewerKind;\n\n const currentAuthor = useCallback(() => {\n if (viewerKind === \"studio\") {\n return {\n role: \"studio\" as const,\n authorId: store.studio?.userId ?? null,\n authorName: store.studio?.name ?? null,\n authorImage: store.studio?.image ?? null,\n };\n }\n return {\n role: \"client\" as const,\n authorId: store.identity?.clientUserId ?? null,\n authorName: store.identity?.name ?? null,\n authorImage: null,\n };\n }, [store.identity, store.studio, viewerKind]);\n\n const viewerAuthor = useMemo(() => currentAuthor(), [currentAuthor]);\n const canDeleteAnnotation =\n !!annotation &&\n annotation.deliveryStatus !== \"sending\" &&\n annotation.deliveryStatus !== \"failed\" &&\n !!viewerAuthor.authorId &&\n annotation.payload.authorRole === viewerAuthor.role &&\n annotation.payload.authorId === viewerAuthor.authorId;\n\n const optimisticMessage = useCallback(\n (content: string): ThreadMessage => {\n const author = currentAuthor();\n return {\n id: nextTempId(\"tmp-msg\"),\n role: author.role,\n authorId: author.authorId,\n authorName: author.authorName,\n authorImage: author.authorImage,\n content,\n createdAt: new Date().toISOString(),\n deliveryStatus: \"sending\",\n };\n },\n [currentAuthor],\n );\n\n const withBusy = useCallback(async <T,>(op: () => Promise<T>): Promise<T> => {\n if (busyRef.current) return Promise.reject(new Error(\"busy\"));\n busyRef.current = true;\n setBusy(true);\n try {\n return await op();\n } finally {\n busyRef.current = false;\n setBusy(false);\n }\n }, []);\n\n const submit = useCallback(async () => {\n const content = popover.draftText.trim();\n if (!content) return;\n if (annotation) {\n if (isResolved) return;\n if (initialMessageLocked(annotation)) return;\n const message = optimisticMessage(content);\n popover.setDraftText(\"\");\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n thread: [...current.thread, message],\n }));\n const res = await actions.submit(\n {\n kind: \"reply\",\n annotationId: annotation.id,\n content,\n },\n store.apiClient,\n );\n if (res) {\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n thread: current.thread.map((threadMessage) =>\n threadMessage.id === message.id\n ? { ...threadMessage, id: res.id, deliveryStatus: \"sent\" }\n : threadMessage,\n ),\n }));\n void store.refresh();\n return;\n }\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n thread: current.thread.map((threadMessage) =>\n threadMessage.id === message.id\n ? { ...threadMessage, deliveryStatus: \"failed\" }\n : threadMessage,\n ),\n }));\n return;\n }\n const active = popover.active;\n if (!active || active.kind !== \"composer\") return;\n const target = active.target;\n const click = {\n viewportX: active.anchor.viewportX,\n viewportY: active.anchor.viewportY,\n scrollY: active.anchor.documentY - active.anchor.viewportY,\n };\n const url = surface.getPageUrl();\n const viewportSize = viewportSizeFor(store.activeViewport, surface.getTargetViewport());\n const payload =\n target.kind === \"element\"\n ? buildElementPayload({ target, click, comment: content, url })\n : target.kind === \"multi\"\n ? buildMultiPayload({ target, click, comment: content, url })\n : buildAreaPayload({ target, click, comment: content, url });\n payload.viewport = store.activeViewport;\n payload.viewportSize = viewportSize;\n const author = currentAuthor();\n const tempAnnotationId = nextTempId(\"tmp-ann\");\n store.applyAnnotationUpdate({\n id: tempAnnotationId,\n status: \"pending\",\n resolvedBy: null,\n resolvedAt: null,\n createdAt: new Date().toISOString(),\n authorName: author.authorName,\n authorImage: author.authorImage,\n payload: {\n ...payload,\n authorRole: author.role,\n authorId: author.authorId,\n },\n thread: [],\n latestRun: null,\n deliveryStatus: \"sending\",\n });\n popover.setDraftText(\"\");\n popover.openExisting(tempAnnotationId);\n\n const res = await actions.submit({ kind: \"composer\", payload }, store.apiClient);\n if (res) {\n store.replaceAnnotationId(tempAnnotationId, res.id);\n popover.openExisting(res.id);\n void store.refresh();\n return;\n }\n store.updateAnnotation(tempAnnotationId, (current) => ({\n ...current,\n deliveryStatus: \"failed\",\n }));\n }, [annotation, currentAuthor, isResolved, optimisticMessage, store, popover, surface]);\n\n const retryMessage = useCallback(\n async (messageId: string) => {\n if (!annotation || initialMessageLocked(annotation)) return;\n const message = annotation.thread.find((item) => item.id === messageId);\n if (!message || message.deliveryStatus !== \"failed\") return;\n\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n thread: current.thread.map((threadMessage) =>\n threadMessage.id === messageId\n ? { ...threadMessage, deliveryStatus: \"sending\" }\n : threadMessage,\n ),\n }));\n\n const res = await actions.submit(\n {\n kind: \"reply\",\n annotationId: annotation.id,\n content: message.content,\n },\n store.apiClient,\n );\n\n if (res) {\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n thread: current.thread.map((threadMessage) =>\n threadMessage.id === messageId\n ? { ...threadMessage, id: res.id, deliveryStatus: \"sent\" }\n : threadMessage,\n ),\n }));\n void store.refresh();\n return;\n }\n\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n thread: current.thread.map((threadMessage) =>\n threadMessage.id === messageId\n ? { ...threadMessage, deliveryStatus: \"failed\" }\n : threadMessage,\n ),\n }));\n },\n [annotation, store],\n );\n\n const retryInitialMessage = useCallback(async () => {\n if (!annotation || annotation.deliveryStatus !== \"failed\") return;\n const tempAnnotationId = annotation.id;\n\n store.updateAnnotation(tempAnnotationId, (current) => ({\n ...current,\n deliveryStatus: \"sending\",\n }));\n\n const res = await actions.submit(\n { kind: \"composer\", payload: annotation.payload as WidgetAnnotationInput },\n store.apiClient,\n );\n\n if (res) {\n store.replaceAnnotationId(tempAnnotationId, res.id);\n popover.openExisting(res.id);\n void store.refresh();\n return;\n }\n\n store.updateAnnotation(tempAnnotationId, (current) => ({\n ...current,\n deliveryStatus: \"failed\",\n }));\n }, [annotation, store, popover]);\n\n const canDeleteMessage = useCallback(\n (message: ThreadMessage) => {\n if (!viewerAuthor.authorId) return false;\n if (message.deliveryStatus && message.deliveryStatus !== \"sent\") return false;\n return message.role === viewerAuthor.role && message.authorId === viewerAuthor.authorId;\n },\n [viewerAuthor],\n );\n\n const requestDeleteAnnotation = useCallback(() => {\n if (!canDeleteAnnotation) return;\n setActionError(null);\n setConfirmDelete({ kind: \"annotation\" });\n }, [canDeleteAnnotation]);\n\n const requestDeleteMessage = useCallback(\n (message: ThreadMessage) => {\n if (!canDeleteMessage(message)) return;\n setActionError(null);\n setConfirmDelete({\n kind: \"message\",\n messageId: message.id,\n });\n },\n [canDeleteMessage],\n );\n\n const cancelDelete = useCallback(() => {\n setActionError(null);\n setConfirmDelete(null);\n }, []);\n\n const deleteMessageForConfirmed = useCallback(\n async (messageId: string): Promise<boolean> => {\n if (!annotation) return false;\n const previousThread = annotation.thread;\n return withBusy(async () => {\n setActionError(null);\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n thread: current.thread.filter((message) => message.id !== messageId),\n }));\n const res = await actions.deleteMessage(\n { annotationId: annotation.id, messageId },\n store.apiClient,\n );\n if (!res) {\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n thread: previousThread,\n }));\n setActionError(\"Couldn't delete message. Try again.\");\n return false;\n }\n void store.refresh();\n return true;\n });\n },\n [annotation, store, withBusy],\n );\n\n const deleteAnnotationForConfirmed = useCallback(async (): Promise<boolean> => {\n if (!annotation || !canDeleteAnnotation) return false;\n return withBusy(async () => {\n setActionError(null);\n const res = await actions.deleteAnnotation(annotation.id, store.apiClient);\n if (!res) {\n setActionError(\"Couldn't delete annotation. Try again.\");\n return false;\n }\n store.updateAnnotation(annotation.id, () => null);\n popover.forceClose();\n void store.refresh();\n return true;\n });\n }, [annotation, canDeleteAnnotation, store, popover, withBusy]);\n\n const confirmDeleteTarget = useCallback(async () => {\n if (!confirmDelete) return;\n try {\n const ok =\n confirmDelete.kind === \"annotation\"\n ? await deleteAnnotationForConfirmed()\n : await deleteMessageForConfirmed(confirmDelete.messageId);\n if (ok) setConfirmDelete(null);\n } catch {\n setActionError(\"Couldn't delete. Try again.\");\n }\n }, [confirmDelete, deleteAnnotationForConfirmed, deleteMessageForConfirmed]);\n\n const markResolved = useCallback(async () => {\n if (!annotation) return;\n await withBusy(async () => {\n setActionError(null);\n const rollback = {\n status: annotation.status,\n resolvedBy: annotation.resolvedBy,\n resolvedAt: annotation.resolvedAt,\n optimisticAction: annotation.optimisticAction,\n };\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n status: \"resolved\",\n resolvedBy: \"dev\",\n resolvedAt: new Date().toISOString(),\n optimisticAction: \"resolve-pending\",\n }));\n const res = await actions.markResolved(annotation.id, store.apiClient);\n if (!res) {\n store.updateAnnotation(annotation.id, (current) => ({ ...current, ...rollback }));\n setActionError(\"Couldn't resolve. Try again.\");\n return;\n }\n void store.refresh();\n });\n }, [annotation, store, withBusy]);\n\n const reopen = useCallback(async () => {\n if (!annotation) return;\n await withBusy(async () => {\n setActionError(null);\n const rollback = {\n status: annotation.status,\n resolvedBy: annotation.resolvedBy,\n resolvedAt: annotation.resolvedAt,\n optimisticAction: annotation.optimisticAction,\n };\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n status: \"pending\",\n resolvedBy: null,\n resolvedAt: null,\n optimisticAction: \"reopen-pending\",\n }));\n const res = await actions.reopenAnnotation(\n { annotationId: annotation.id, viewerKind },\n store.apiClient,\n );\n if (!res) {\n store.updateAnnotation(annotation.id, (current) => ({ ...current, ...rollback }));\n setActionError(\"Couldn't reopen. Try again.\");\n return;\n }\n void store.refresh();\n });\n }, [annotation, viewerKind, store, withBusy]);\n\n const runPatch = useCallback(\n async (guidance?: string) => {\n if (!annotation) return;\n await withBusy(async () => {\n setActionError(null);\n const previousRun = annotation.latestRun;\n const previousOptimisticAction = annotation.optimisticAction;\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n latestRun: {\n id: nextTempId(\"tmp-run\"),\n status: \"queued\",\n prUrl: null,\n createdAt: new Date().toISOString(),\n completedAt: null,\n prClosedUnmerged: false,\n },\n optimisticAction: \"run-pending\",\n }));\n const res = await actions.runPatch(\n { annotationId: annotation.id, viewerKind, guidance },\n store.apiClient,\n );\n if (!res?.ok) {\n store.updateAnnotation(annotation.id, (current) => ({\n ...current,\n latestRun: previousRun,\n optimisticAction: previousOptimisticAction,\n }));\n setActionError(res?.error ?? \"Couldn't start Patch. Try again.\");\n return;\n }\n void store.refresh();\n });\n },\n [annotation, viewerKind, store, withBusy],\n );\n\n const setIdentity = useCallback(\n async (input: { name: string; email: string }) => {\n const next = await actions.setIdentity(\n { ...input, avatarSeed: store.clientAvatarSeed },\n store.apiClient,\n );\n if (next) await store.setIdentity(next);\n return next;\n },\n [store],\n );\n\n const isClient = viewerKind === \"client\";\n const needsIdentity = isClient && !store.identity && messages.length === 0;\n const threadVisible = !!annotation || messages.length > 0;\n const agentRunReady = store.agentRunReadiness?.ready ?? true;\n const agentRunSetupMessage = store.agentRunReadiness?.message ?? null;\n\n const requestClose = useCallback(() => {\n if (popover.draftText.trim().length > 0) {\n popover.setConfirmDiscardOpen(true);\n return;\n }\n popover.forceClose();\n }, [popover]);\n\n const targetLabel = annotation\n ? formatStoredTargetLabel(annotation.payload)\n : draftTargetLabel\n ? draftTargetLabel\n : \"annotation\";\n const threadViewport = annotation?.payload.viewport ?? store.activeViewport;\n\n const viewerName = store.studio ? store.studio.name : (store.identity?.name ?? null);\n const viewerSeed = store.identity?.avatarSeed ?? store.clientAvatarSeed;\n const viewerAvatarKey = store.studio?.userId ?? viewerSeed;\n const viewerAvatarSrc = store.studio?.image ?? null;\n const viewerGeneratedSeed = store.studio?.userId ?? viewerSeed;\n\n const value = useMemo<ThreadContextValue>(\n () => ({\n state: {\n annotation,\n messages,\n runState,\n draftText: popover.draftText,\n busy,\n actionError,\n confirmDiscardOpen: popover.confirmDiscardOpen,\n confirmDelete,\n showDevFooter: viewerKind === \"studio\",\n agentRunReady,\n agentRunSetupMessage,\n needsIdentity,\n isResolved,\n initialMessageLocked: lockedInitialMessage,\n threadVisible,\n canDeleteAnnotation,\n },\n actions: {\n setDraftText: popover.setDraftText,\n submit,\n retryMessage,\n retryInitialMessage,\n requestDeleteAnnotation,\n requestDeleteMessage,\n canDeleteMessage,\n cancelDelete,\n confirmDelete: confirmDeleteTarget,\n markResolved,\n reopen,\n runPatch,\n setIdentity,\n attemptClose: popover.attemptClose,\n requestClose,\n forceClose: popover.forceClose,\n setConfirmDiscardOpen: popover.setConfirmDiscardOpen,\n },\n meta: {\n targetLabel,\n viewport: threadViewport,\n shakeNonce: popover.shakeNonce,\n viewer: {\n kind: viewerKind,\n authorId: viewerAuthor.authorId,\n name: viewerName,\n avatarKey: viewerAvatarKey,\n avatarSrc: viewerAvatarSrc,\n generatedSeed: viewerGeneratedSeed,\n },\n },\n }),\n [\n annotation,\n messages,\n runState,\n popover.draftText,\n popover.confirmDiscardOpen,\n popover.setDraftText,\n popover.attemptClose,\n popover.forceClose,\n popover.setConfirmDiscardOpen,\n popover.shakeNonce,\n busy,\n actionError,\n confirmDelete,\n submit,\n retryMessage,\n retryInitialMessage,\n requestDeleteAnnotation,\n requestDeleteMessage,\n canDeleteMessage,\n cancelDelete,\n confirmDeleteTarget,\n markResolved,\n reopen,\n runPatch,\n setIdentity,\n viewerKind,\n agentRunReady,\n agentRunSetupMessage,\n needsIdentity,\n isResolved,\n lockedInitialMessage,\n threadVisible,\n canDeleteAnnotation,\n requestClose,\n targetLabel,\n threadViewport,\n viewerAuthor.authorId,\n viewerName,\n viewerAvatarKey,\n viewerAvatarSrc,\n viewerGeneratedSeed,\n ],\n );\n\n return <Ctx.Provider value={value}>{children}</Ctx.Provider>;\n}\n\nexport function useThreadContext(): ThreadContextValue {\n const v = use(Ctx);\n if (!v) throw new Error(\"useThreadContext must be used inside <ThreadProvider>\");\n return v;\n}\n","import type { ButtonHTMLAttributes, Ref } from \"react\";\nimport { cn } from \"./cn\";\n\ntype Variant =\n | \"brand\"\n | \"brandTint\"\n | \"destructive\"\n | \"destructiveTint\"\n | \"successTint\"\n | \"warn\"\n | \"warnTint\"\n | \"neutral\"\n | \"subtle\";\n\ntype Props = ButtonHTMLAttributes<HTMLButtonElement> & {\n variant?: Variant;\n ref?: Ref<HTMLButtonElement>;\n};\n\n// 32px tall / 13px / 600 — a step down from the webapp's 44px keys (the widget\n// is a compact overlay), sharing the same physical-key look. Solid fills wear\n// the `.pkey*` classes (see styles.css); tints stay flat.\nconst base =\n \"inline-flex shrink-0 items-center justify-center gap-1.5 h-8 px-3.5 rounded-full whitespace-nowrap text-[13px] font-semibold transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none\";\n\nconst variants: Record<Variant, string> = {\n brand: \"pkey pkey-brand text-white\",\n brandTint: \"bg-brand-tint text-brand hover:bg-brand-tint/70\",\n destructive: \"pkey pkey-destructive text-white\",\n destructiveTint: \"bg-destructive/10 text-destructive hover:bg-destructive/15\",\n successTint: \"bg-brand-green/10 text-brand-green hover:bg-brand-green/15\",\n warn: \"pkey pkey-warn text-white\",\n warnTint: \"bg-brand-orange/10 text-brand-orange hover:bg-brand-orange/15\",\n neutral: \"pkey pkey-outline text-foreground\",\n subtle: \"bg-black/8 text-muted-foreground\",\n};\n\n/** Shared so anchors/links can wear the same physical-key recipe as <Button>. */\nexport function buttonClasses(variant: Variant = \"brand\", className?: string) {\n return cn(base, variants[variant], className);\n}\n\nexport function Button({ variant = \"brand\", className, type = \"button\", ref, ...rest }: Props) {\n return <button ref={ref} type={type} className={buttonClasses(variant, className)} {...rest} />;\n}\n","import { Button } from \"../ui/button\";\nimport { useThreadContext } from \"./thread-context\";\n\n/** Overlay shown before deleting a message or the whole annotation. */\nexport function ConfirmDelete() {\n const { state, actions } = useThreadContext();\n const target = state.confirmDelete;\n if (!target) return null;\n\n const isAnnotation = target.kind === \"annotation\";\n const title = isAnnotation ? \"Delete annotation?\" : \"Delete message?\";\n const description = isAnnotation\n ? \"This removes the annotation and its thread for everyone.\"\n : \"This removes your message from the thread.\";\n const actionLabel = isAnnotation ? \"Delete annotation\" : \"Delete message\";\n\n return (\n <div className=\"absolute inset-0 z-40 flex items-start justify-end bg-black/25 p-3 backdrop-blur-[2px]\">\n <div\n role=\"dialog\"\n aria-label={title}\n className=\"patch-fade-in flex w-full max-w-[286px] flex-col gap-2 rounded-2xl bg-popover p-4 shadow-dialog\"\n >\n <div className=\"text-[13.5px] font-medium text-foreground\">{title}</div>\n <div className=\"text-xs text-muted-foreground\">{description}</div>\n {state.actionError ? (\n <div className=\"text-[11px] font-medium text-destructive\">{state.actionError}</div>\n ) : null}\n <div className=\"mt-1 flex justify-end gap-2\">\n <Button variant=\"neutral\" disabled={state.busy} onClick={actions.cancelDelete}>\n Cancel\n </Button>\n <Button variant=\"destructive\" disabled={state.busy} onClick={actions.confirmDelete}>\n {state.busy ? \"Deleting…\" : actionLabel}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import { Button } from \"../ui/button\";\nimport { useThreadContext } from \"./thread-context\";\n\n/** Overlay shown when closing with an unsaved draft. */\nexport function ConfirmDiscard() {\n const { state, actions } = useThreadContext();\n if (!state.confirmDiscardOpen) return null;\n\n return (\n <div className=\"absolute inset-0 z-20 flex items-start justify-end bg-black/25 p-3 backdrop-blur-[2px]\">\n <div\n role=\"dialog\"\n aria-label=\"Discard draft\"\n className=\"patch-fade-in flex w-full max-w-[280px] flex-col gap-2 rounded-2xl bg-popover p-4 shadow-dialog\"\n >\n <div className=\"text-[13.5px] font-medium text-foreground\">Discard draft?</div>\n <div className=\"text-xs text-muted-foreground\">You'll lose what you've typed.</div>\n <div className=\"mt-1 flex justify-end gap-2\">\n <Button variant=\"neutral\" onClick={() => actions.setConfirmDiscardOpen(false)}>\n Keep editing\n </Button>\n <Button variant=\"destructive\" onClick={() => actions.forceClose()}>\n Discard\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import type { ButtonHTMLAttributes, Ref } from \"react\";\nimport { cn } from \"./cn\";\n\ntype Size = \"sm\" | \"md\";\ntype Tone = \"default\" | \"warn\";\n\ntype Props = ButtonHTMLAttributes<HTMLButtonElement> & {\n size?: Size;\n tone?: Tone;\n ref?: Ref<HTMLButtonElement>;\n};\n\nconst base =\n \"inline-grid place-items-center rounded-full transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\";\n\nconst sizes: Record<Size, string> = {\n sm: \"size-7\",\n md: \"size-8\",\n};\n\nconst tones: Record<Tone, string> = {\n default: \"text-muted-foreground hover:bg-black/6 hover:text-foreground\",\n warn: \"bg-amber-500/15 text-amber-700\",\n};\n\nexport function IconButton({\n size = \"sm\",\n tone = \"default\",\n className,\n type = \"button\",\n ref,\n ...rest\n}: Props) {\n return (\n <button\n ref={ref}\n type={type}\n className={cn(base, sizes[size], tones[tone], className)}\n {...rest}\n />\n );\n}\n","export function fmtRelative(iso: string): string {\n const then = new Date(iso).getTime();\n const diff = Date.now() - then;\n const min = Math.round(diff / 60000);\n if (Number.isNaN(min)) return \"\";\n if (min < 1) return \"just now\";\n if (min < 60) return `${min}m ago`;\n const hr = Math.round(min / 60);\n if (hr < 24) return `${hr}h ago`;\n const d = Math.round(hr / 24);\n return `${d}d ago`;\n}\n\nexport function isWidgetEvent(e: Event): boolean {\n const path = e.composedPath();\n for (const node of path) {\n if (!(node instanceof Element)) continue;\n if (node.tagName?.toLowerCase() === \"patch-widget-root\") return true;\n }\n return false;\n}\n\nexport function prNumberFromUrl(url: string): string {\n const m = url.match(/\\/pull\\/(\\d+)/);\n return m ? `#${m[1]}` : \"PR\";\n}\n","import { useState } from \"react\";\nimport { Button, buttonClasses } from \"../ui/button\";\nimport { Glyph } from \"../ui/glyph\";\nimport { IconButton } from \"../ui/icon-button\";\nimport { Tooltip } from \"../ui/tooltip\";\nimport { useThreadContext } from \"./thread-context\";\nimport { prNumberFromUrl } from \"./thread-utils\";\n\n/** Studio only. Agent action left, resolve right. Inset shadow. */\nexport function DevFooter() {\n const { state } = useThreadContext();\n if (!state.showDevFooter || !state.annotation) return null;\n return (\n <div className=\"-mt-[22px] flex flex-col gap-2 bg-neutral-100/50 px-3 pt-[2.125rem] pb-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <AgentActionButton />\n <div className=\"flex shrink-0 items-center gap-1\">\n <ResolveButton />\n </div>\n </div>\n {state.actionError ? (\n <div className=\"px-1 text-[11px] font-medium text-destructive\">{state.actionError}</div>\n ) : null}\n </div>\n );\n}\n\nfunction AgentActionButton() {\n const { state, actions } = useThreadContext();\n const [open, setOpen] = useState(false);\n const [guidance, setGuidance] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const run = state.runState;\n const status = run?.status;\n const resolved = state.annotation?.status === \"resolved\";\n\n if (resolved) return <div className=\"min-w-0 flex-1\" />;\n\n const inflight = status === \"queued\" || status === \"running\";\n\n const prOpen = status === \"succeeded\" && !!run?.prUrl && !run.prClosedUnmerged;\n const closedUnmerged = status === \"succeeded\" && run?.prClosedUnmerged;\n const label = run ? \"Run Patch again\" : \"Run Patch\";\n const actionVariant =\n status === \"failed\" ? \"destructiveTint\" : closedUnmerged ? \"warnTint\" : \"brand\";\n const disabledForSetup = !state.agentRunReady;\n\n const onSubmit = async () => {\n try {\n setSubmitting(true);\n await actions.runPatch(guidance.trim() || undefined);\n setGuidance(\"\");\n setOpen(false);\n } finally {\n setSubmitting(false);\n }\n };\n\n if (inflight) {\n return (\n <div className=\"min-w-0 flex-1\">\n <Button variant=\"brandTint\" disabled>\n <span className=\"patch-fade-in size-[7px] rounded-full bg-brand\" />\n Patch is working…\n </Button>\n </div>\n );\n }\n\n if (prOpen) {\n const prLabel = prNumberFromUrl(run.prUrl as string);\n return (\n <div className=\"min-w-0 flex-1\">\n <a\n href={run.prUrl as string}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={buttonClasses(\"brand\", \"no-underline\")}\n >\n <Glyph name=\"pr\" size={12} />\n {prLabel === \"PR\" ? \"View PR\" : `View PR ${prLabel}`}\n </a>\n </div>\n );\n }\n\n const button = (\n <Button\n variant={actionVariant}\n disabled={state.busy || disabledForSetup}\n className={disabledForSetup ? \"opacity-60\" : undefined}\n onClick={() => setOpen(true)}\n >\n <Glyph name={status === \"failed\" ? \"play\" : \"robot\"} size={12} /> {label}\n </Button>\n );\n\n return (\n <div className=\"min-w-0 flex-1\">\n {disabledForSetup && state.agentRunSetupMessage ? (\n <Tooltip text={state.agentRunSetupMessage} tone=\"warning\">\n {button}\n </Tooltip>\n ) : (\n button\n )}\n {open ? (\n <GuidanceDialog\n title={label}\n guidance={guidance}\n submitting={submitting || state.busy}\n onGuidanceChange={setGuidance}\n onCancel={() => setOpen(false)}\n onSubmit={onSubmit}\n />\n ) : null}\n </div>\n );\n}\n\nfunction GuidanceDialog({\n title,\n guidance,\n submitting,\n onGuidanceChange,\n onCancel,\n onSubmit,\n}: {\n title: string;\n guidance: string;\n submitting: boolean;\n onGuidanceChange: (value: string) => void;\n onCancel: () => void;\n onSubmit: () => Promise<void>;\n}) {\n return (\n <div className=\"absolute inset-0 z-30 flex items-center justify-center p-4\">\n <button\n type=\"button\"\n aria-label=\"Close guidance\"\n className=\"absolute inset-0 cursor-default bg-black/25 backdrop-blur-[2px]\"\n onClick={onCancel}\n />\n <form\n role=\"dialog\"\n aria-label={title}\n className=\"patch-fade-in relative flex w-full max-w-[280px] flex-col gap-3 rounded-[20px] bg-popover p-4 shadow-dialog\"\n onSubmit={(event) => {\n event.preventDefault();\n void onSubmit();\n }}\n >\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"grid size-7 shrink-0 place-items-center rounded-xl bg-brand text-white\">\n <Glyph name=\"robot\" size={13} />\n </span>\n <span className=\"truncate text-[13.5px] font-medium text-foreground\">{title}</span>\n </div>\n <IconButton size=\"sm\" title=\"Close\" onClick={onCancel}>\n <Glyph name=\"x\" size={12} />\n </IconButton>\n </div>\n <label className=\"flex flex-col gap-1.5\">\n <span className=\"text-[12px] font-medium text-muted-foreground\">Guidance</span>\n <textarea\n value={guidance}\n onChange={(event) => onGuidanceChange(event.target.value)}\n maxLength={5000}\n rows={3}\n placeholder=\"Optional run guidance\"\n className=\"min-h-20 resize-none rounded-[16px] border border-black/10 bg-black/[0.03] px-3 py-2 text-[13px] leading-[1.4] text-foreground outline-none placeholder:text-muted-foreground focus:border-brand/50 focus:ring-2 focus:ring-brand/20\"\n />\n </label>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"neutral\" disabled={submitting} onClick={onCancel}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"brand\" disabled={submitting}>\n {submitting ? \"Starting…\" : \"Start run\"}\n </Button>\n </div>\n </form>\n </div>\n );\n}\n\nfunction ResolveButton() {\n const { state, actions } = useThreadContext();\n if (!state.annotation) return null;\n const resolved = state.annotation.status === \"resolved\";\n if (resolved) {\n return (\n <Button variant=\"neutral\" disabled={state.busy} onClick={() => actions.reopen()}>\n <Glyph name=\"refresh\" size={12} />\n Reopen\n </Button>\n );\n }\n return (\n <Button variant=\"neutral\" disabled={state.busy} onClick={() => actions.markResolved()}>\n <Glyph name=\"check\" size={12} />\n Resolve\n </Button>\n );\n}\n","import { createContext, use } from \"react\";\n\ntype ExpandState = { expanded: boolean; onToggleExpand: () => void };\n\nexport const ExpandContext = createContext<ExpandState>({\n expanded: false,\n onToggleExpand: () => {},\n});\n\nexport function useExpand(): ExpandState {\n return use(ExpandContext);\n}\n","import { useState } from \"react\";\nimport { Glyph } from \"../ui/glyph\";\nimport { IconButton } from \"../ui/icon-button\";\nimport { Tooltip } from \"../ui/tooltip\";\nimport { VIEWPORT_PRESETS, viewportTooltip } from \"../viewport/viewport-presets\";\nimport { useThreadContext } from \"./thread-context\";\nimport { useExpand } from \"./thread-expand-context\";\n\n/**\n * The \"annotation info\" section: target label + meta + expand/close. Renders\n * the quote block when present. Tinted background + bottom border.\n */\nexport function Header() {\n const { state, meta } = useThreadContext();\n const { expanded, onToggleExpand } = useExpand();\n const annotation = state.annotation;\n const viewportPreset = VIEWPORT_PRESETS[meta.viewport];\n\n const quote = annotation?.payload.selectedText;\n\n return (\n <div className=\"relative z-10 flex flex-col gap-2.5 border-b border-black/[0.07] bg-neutral-100/60 px-4 py-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span\n title={meta.targetLabel}\n className=\"min-w-0 overflow-hidden text-ellipsis whitespace-nowrap text-[12.5px] font-medium text-foreground\"\n >\n {meta.targetLabel}\n </span>\n <Tooltip text={viewportTooltip(meta.viewport)} placement=\"bottom\">\n <span\n data-patch-thread-viewport={meta.viewport}\n role=\"img\"\n aria-label={viewportTooltip(meta.viewport)}\n className=\"inline-flex shrink-0 items-center text-brand\"\n >\n <Glyph name={viewportPreset.glyph} size={15} stroke={1.8} />\n </span>\n </Tooltip>\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {state.isResolved ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-brand-green px-2 py-[3px] text-[11px] font-medium text-white\">\n <Glyph name=\"check\" size={10} /> Resolved\n </span>\n ) : null}\n <div className=\"ml-0.5 flex items-center gap-0.5\">\n <AnnotationActionsMenu />\n <IconButton onClick={onToggleExpand} title={expanded ? \"Collapse\" : \"Expand\"}>\n <Glyph name={expanded ? \"minimize\" : \"maximize\"} size={13} />\n </IconButton>\n <CloseIconBtn />\n </div>\n </div>\n </div>\n\n {quote ? (\n <div className=\"rounded-xl bg-white px-3 py-2 shadow-[0_0_0_1px_rgba(0,0,0,0.06)]\">\n <div className=\"border-l-[2.5px] border-black/16 pl-2.5 text-[12.5px] leading-[1.45] text-muted-foreground\">\n {quote.length > 200 ? `${quote.slice(0, 199).trim()}…` : quote}\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction CloseIconBtn() {\n const { actions } = useThreadContext();\n return (\n <IconButton onClick={actions.requestClose} title=\"Close\">\n <Glyph name=\"x\" size={14} />\n </IconButton>\n );\n}\n\nfunction AnnotationActionsMenu() {\n const { state, actions } = useThreadContext();\n const [open, setOpen] = useState(false);\n if (!state.canDeleteAnnotation) return null;\n\n return (\n <div className=\"relative\">\n <IconButton\n title=\"Annotation actions\"\n aria-label=\"Annotation actions\"\n aria-expanded={open}\n aria-haspopup=\"menu\"\n onClick={() => setOpen((value) => !value)}\n >\n <Glyph name=\"more\" size={14} />\n </IconButton>\n {open ? (\n <div\n role=\"menu\"\n className=\"patch-fade-in absolute top-full right-0 z-[5] mt-1 min-w-40 rounded-xl bg-popover p-1 shadow-dialog ring-1 ring-black/6\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"flex w-full items-center gap-2 rounded-lg px-2.5 py-2 text-left text-[12.5px] font-medium text-destructive hover:bg-destructive/10 focus:bg-destructive/10 focus:outline-none\"\n onClick={() => {\n setOpen(false);\n actions.requestDeleteAnnotation();\n }}\n >\n <Glyph name=\"trash\" size={13} />\n Delete annotation\n </button>\n </div>\n ) : null}\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { DeliveryStatus } from \"../data/types\";\nimport { initialsFromName, tintForAuthor } from \"../pin/pin\";\nimport { Avatar } from \"../ui/avatar\";\nimport { cn } from \"../ui/cn\";\nimport { Glyph } from \"../ui/glyph\";\nimport { IconButton } from \"../ui/icon-button\";\nimport { useThreadContext } from \"./thread-context\";\nimport { fmtRelative } from \"./thread-utils\";\n\n/** Scrollable thread: human message rows only. Agent/run state lives in the dev footer. */\nexport function Messages() {\n const { state, actions, meta } = useThreadContext();\n const scrollerRef = useRef<HTMLDivElement | null>(null);\n const viewerGeneratedSeed = meta.viewer.kind === \"client\" ? meta.viewer.generatedSeed : null;\n const viewerAuthorId = meta.viewer.kind === \"client\" ? meta.viewer.authorId : null;\n\n useEffect(() => {\n const el = scrollerRef.current;\n if (!el) return;\n el.scrollTop = el.scrollHeight;\n });\n\n // Composer/new-annotation state has no annotation and no messages — render\n // nothing rather than an empty padded block between the header and composer.\n const hasContent = state.threadVisible;\n if (!hasContent) return null;\n return (\n <div\n ref={scrollerRef}\n data-patch-thread-scroller=\"\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto bg-white px-4 pt-3.5 pb-3\",\n state.showDevFooter &&\n state.isResolved &&\n \"relative z-[1] rounded-b-[22px] shadow-[0_6px_12px_-5px_rgba(0,0,0,0.16)]\",\n )}\n >\n {state.annotation ? (\n <MessageRow\n name={state.annotation.authorName ?? \"Someone\"}\n createdAt={state.annotation.createdAt}\n content={state.annotation.payload.comment}\n authorKey={\n state.annotation.payload.authorId ?? state.annotation.authorName ?? state.annotation.id\n }\n avatarSrc={state.annotation.authorImage}\n generatedSeed={\n state.annotation.payload.authorRole === \"client\" &&\n state.annotation.payload.authorId === viewerAuthorId\n ? viewerGeneratedSeed\n : (state.annotation.authorAvatarSeed ?? state.annotation.payload.authorId ?? null)\n }\n deliveryStatus={state.annotation.deliveryStatus}\n onRetry={\n state.annotation.deliveryStatus === \"failed\" ? actions.retryInitialMessage : undefined\n }\n />\n ) : null}\n {state.messages.map((m) => (\n <MessageRow\n key={m.id}\n name={m.authorName ?? m.role}\n createdAt={m.createdAt}\n content={m.content}\n authorKey={m.authorId ?? m.authorName ?? m.role}\n avatarSrc={m.authorImage}\n generatedSeed={\n m.role === \"client\" && m.authorId === viewerAuthorId\n ? viewerGeneratedSeed\n : (m.authorAvatarSeed ?? m.authorId)\n }\n deliveryStatus={m.deliveryStatus}\n canDelete={actions.canDeleteMessage(m)}\n onDelete={() => actions.requestDeleteMessage(m)}\n onRetry={\n m.deliveryStatus === \"failed\" ? () => void actions.retryMessage(m.id) : undefined\n }\n />\n ))}\n </div>\n );\n}\n\nfunction MessageRow(props: {\n name: string;\n createdAt: string;\n content: string;\n authorKey: string;\n avatarSrc?: string | null;\n generatedSeed?: string | null;\n deliveryStatus?: DeliveryStatus;\n canDelete?: boolean;\n onDelete?: () => void;\n onRetry?: () => void;\n}) {\n const initials = initialsFromName(props.name);\n const tint = tintForAuthor(props.authorKey);\n const failed = props.deliveryStatus === \"failed\";\n\n return (\n <div className=\"group/message flex gap-2.5\">\n <Avatar\n initials={initials}\n tint={tint}\n src={props.avatarSrc}\n generatedSeed={props.generatedSeed}\n alt={props.name}\n />\n <div className=\"relative min-w-0 flex-1 pr-8\">\n <div className=\"flex items-baseline gap-1.5\">\n <span className=\"text-[12.5px] font-medium text-foreground\">{props.name}</span>\n <span className=\"text-[11px] text-muted-foreground\">{fmtRelative(props.createdAt)}</span>\n </div>\n {props.canDelete && props.onDelete ? (\n <MessageActionsMenu onDelete={props.onDelete} />\n ) : null}\n <p className=\"mt-0.5 whitespace-pre-wrap text-[13px] leading-[1.45] text-foreground\">\n {props.content}\n </p>\n {failed ? (\n <div className=\"mt-1 flex items-center gap-2 text-[11px] leading-none\">\n <span className=\"text-destructive\">Failed to send</span>\n {props.onRetry ? (\n <button\n type=\"button\"\n onClick={props.onRetry}\n className=\"rounded-full bg-black/8 px-2 py-1 font-medium text-foreground transition-colors hover:bg-black/12\"\n >\n Retry\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\ntype MenuPlacement = \"down\" | \"up\";\nconst MESSAGE_ACTION_MENU_HEIGHT = 44;\nconst MESSAGE_ACTION_MENU_GAP = 8;\n\nfunction MessageActionsMenu({ onDelete }: { onDelete: () => void }) {\n const [open, setOpen] = useState(false);\n const [placement, setPlacement] = useState<MenuPlacement>(\"down\");\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n const updatePlacement = useCallback(() => {\n const button = buttonRef.current;\n const scroller = button?.closest(\"[data-patch-thread-scroller]\");\n if (!button || !scroller) {\n setPlacement(\"down\");\n return;\n }\n\n const buttonRect = button.getBoundingClientRect();\n const scrollerRect = scroller.getBoundingClientRect();\n const spaceBelow = scrollerRect.bottom - buttonRect.bottom;\n const spaceAbove = buttonRect.top - scrollerRect.top;\n setPlacement(\n spaceBelow < MESSAGE_ACTION_MENU_HEIGHT + MESSAGE_ACTION_MENU_GAP && spaceAbove > spaceBelow\n ? \"up\"\n : \"down\",\n );\n }, []);\n\n const toggleOpen = useCallback(() => {\n setOpen((value) => {\n const next = !value;\n if (next) updatePlacement();\n return next;\n });\n }, [updatePlacement]);\n\n return (\n <div className=\"absolute top-[-5px] right-0 opacity-0 transition-opacity group-focus-within/message:opacity-100 group-hover/message:opacity-100\">\n <IconButton\n ref={buttonRef}\n size=\"sm\"\n title=\"Message actions\"\n aria-label=\"Message actions\"\n aria-expanded={open}\n aria-haspopup=\"menu\"\n onClick={toggleOpen}\n >\n <Glyph name=\"more\" size={14} />\n </IconButton>\n {open ? (\n <div\n role=\"menu\"\n className={cn(\n \"patch-fade-in absolute right-0 z-[5] min-w-36 rounded-xl bg-popover p-1 shadow-dialog ring-1 ring-black/6\",\n placement === \"up\" ? \"bottom-full mb-1\" : \"top-full mt-1\",\n )}\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"flex w-full items-center gap-2 rounded-lg px-2.5 py-2 text-left text-[12.5px] font-medium text-destructive hover:bg-destructive/10 focus:bg-destructive/10 focus:outline-none\"\n onClick={() => {\n setOpen(false);\n onDelete();\n }}\n >\n <Glyph name=\"trash\" size={13} />\n Delete\n </button>\n </div>\n ) : null}\n </div>\n );\n}\n","import type { Ref, TextareaHTMLAttributes } from \"react\";\nimport { cn } from \"./cn\";\n\ntype Variant = \"default\" | \"bare\";\n\ntype Props = TextareaHTMLAttributes<HTMLTextAreaElement> & {\n variant?: Variant;\n ref?: Ref<HTMLTextAreaElement>;\n};\n\nconst variants: Record<Variant, string> = {\n default:\n \"w-full min-h-[60px] resize-y rounded-2xl border border-border bg-popover px-3 py-2 text-[13px] leading-[1.45] text-foreground outline-none transition-colors placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\",\n bare: \"w-full resize-none self-center overflow-y-auto bg-transparent border-0 outline-none text-[13px] leading-normal text-foreground placeholder:text-muted-foreground\",\n};\n\nexport function Textarea({ variant = \"default\", className, ref, ...rest }: Props) {\n return <textarea ref={ref} className={cn(variants[variant], className)} {...rest} />;\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../ui/cn\";\nimport { useThreadContext } from \"./thread-context\";\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nconst inputClass =\n \"w-full rounded-[10px] border border-border bg-popover px-2 py-2 text-[13px] text-foreground outline-none transition-colors focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring\";\n\n/**\n * Inline identity capture form. Renders in place of the reply textarea for\n * unidentified clients with an empty thread. On Continue, posts to\n * /api/widget/identity, persists to localStorage, then disappears so the\n * textarea takes over the same slot.\n */\nexport function IdentityForm() {\n const { actions } = useThreadContext();\n const [name, setName] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n const nameRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setTimeout(() => nameRef.current?.focus(), 0);\n }, []);\n\n const onSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const n = name.trim();\n const m = email.trim();\n if (!n) {\n setError(\"Name is required.\");\n return;\n }\n if (!EMAIL_RE.test(m)) {\n setError(\"Enter a valid email.\");\n return;\n }\n setError(null);\n setBusy(true);\n const result = await actions.setIdentity({ name: n, email: m });\n setBusy(false);\n if (!result) setError(\"Could not save identity. Try again.\");\n };\n\n return (\n <form onSubmit={onSubmit} className=\"flex flex-col gap-2\">\n <div className=\"text-xs text-muted-foreground\">\n Tell us who you are so the team can reply.\n </div>\n <input\n ref={nameRef}\n type=\"text\"\n placeholder=\"Name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n className={inputClass}\n />\n <input\n type=\"email\"\n placeholder=\"Email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n className={inputClass}\n />\n {error ? <div className=\"text-xs text-destructive\">{error}</div> : null}\n <button\n type=\"submit\"\n disabled={busy}\n className={cn(\n \"self-end rounded-[10px] bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground transition-colors hover:bg-primary/90\",\n busy && \"cursor-not-allowed opacity-60\",\n )}\n >\n {busy ? \"Saving…\" : \"Continue\"}\n </button>\n </form>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { initialsFromName, tintForAuthor } from \"../pin/pin\";\nimport { Avatar } from \"../ui/avatar\";\nimport { cn } from \"../ui/cn\";\nimport { Glyph } from \"../ui/glyph\";\nimport { Textarea } from \"../ui/textarea\";\nimport { IdentityForm } from \"./identity-form\";\nimport { useThreadContext } from \"./thread-context\";\n\n/**\n * Composer row (avatar + textarea + round Send) inline. The identity form\n * swaps into the same slot for an unidentified client on an empty thread.\n */\nexport function Reply() {\n const { state, actions, meta } = useThreadContext();\n const ref = useRef<HTMLTextAreaElement | null>(null);\n // Single line → fully-rounded pill; multi-line → fixed radius (a tall pill\n // looks odd). Tracked from the measured height in the resize effect.\n const [multiline, setMultiline] = useState(false);\n\n useEffect(() => {\n if (state.needsIdentity) return;\n setTimeout(() => ref.current?.focus(), 0);\n }, [state.needsIdentity]);\n\n // Auto-resize textarea up to a max height. draftText is a trigger dep: the\n // effect reads the DOM's scrollHeight, which reflects the draft, so it must\n // re-run on every change (including external resets to empty after submit).\n // biome-ignore lint/correctness/useExhaustiveDependencies: draftText drives the resize via scrollHeight\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n el.style.height = \"0px\";\n const next = Math.min(el.scrollHeight, 140);\n el.style.height = `${next}px`;\n setMultiline(next > 28);\n }, [state.draftText]);\n\n // The header already draws a bottom divider; only add our own top border when\n // the thread (messages) is visible above us — otherwise the two borders stack\n // into a double line in the empty/composer state.\n if (state.isResolved) return null;\n if (state.initialMessageLocked) return null;\n\n if (state.needsIdentity) {\n return (\n <div className={cn(\"bg-white px-4 py-3\", state.threadVisible && \"border-t border-black/6\")}>\n <IdentityForm />\n </div>\n );\n }\n\n const hasText = state.draftText.trim().length > 0;\n\n const meName = meta.viewer.name;\n const meInitials = initialsFromName(meName);\n const meTint =\n meta.viewer.kind === \"studio\"\n ? \"var(--color-foreground)\"\n : tintForAuthor(meta.viewer.avatarKey);\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n void actions.submit();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Enter (or Cmd/Ctrl+Enter) submits; Shift+Enter inserts a newline.\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n void actions.submit();\n }\n };\n\n return (\n <form\n onSubmit={handleSubmit}\n className={cn(\n \"bg-white p-3\",\n state.threadVisible && \"border-t border-black/6\",\n // When the studio footer sits below, round the input panel's bottom\n // corners and cast a soft shadow down onto the footer tray.\n state.showDevFooter &&\n \"relative z-[1] rounded-b-[22px] shadow-[0_6px_12px_-5px_rgba(0,0,0,0.16)]\",\n )}\n >\n <div\n className={cn(\n \"flex items-end gap-2 bg-black/4 px-3 py-2.5 transition-colors\",\n multiline ? \"rounded-[18px]\" : \"rounded-full\",\n )}\n >\n <Avatar\n initials={meInitials}\n tint={meTint}\n src={meta.viewer.avatarSrc}\n generatedSeed={meta.viewer.generatedSeed}\n alt={meName ?? \"\"}\n className=\"self-start\"\n />\n <Textarea\n ref={ref}\n variant=\"bare\"\n value={state.draftText}\n onChange={(e) => actions.setDraftText(e.target.value)}\n onKeyDown={handleKeyDown}\n rows={1}\n placeholder={state.annotation ? \"Reply…\" : \"What should change?\"}\n style={{ maxHeight: \"140px\" }}\n />\n <SendButton enabled={hasText} />\n </div>\n </form>\n );\n}\n\nfunction SendButton({ enabled }: { enabled: boolean }) {\n return (\n <button\n type=\"submit\"\n disabled={!enabled}\n aria-label=\"Send\"\n className={cn(\n \"grid size-7 shrink-0 place-items-center rounded-full text-white\",\n enabled ? \"pkey pkey-brand\" : \"bg-black/16 transition-colors\",\n )}\n >\n <Glyph name=\"arrow-up\" size={13} />\n </button>\n );\n}\n","import { motion } from \"motion/react\";\nimport {\n type CSSProperties,\n type ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n createResizeObserverForWindow,\n type TargetSurface,\n useTargetSurface,\n} from \"../surface/target-surface\";\nimport { computePosition, POPOVER_WIDTH, type Rect } from \"./popover-position\";\nimport { useThreadContext } from \"./thread-context\";\nimport { ExpandContext } from \"./thread-expand-context\";\nimport { isWidgetEvent } from \"./thread-utils\";\n\nconst DRAWER_WIDTH = 440;\nconst DRAWER_FAB_CLEARANCE = 88;\nconst DRAWER_MARGIN = 16;\nconst FAB_EASE = [0.22, 0.61, 0.36, 1] as const;\nconst POPOVER_EXIT_EASE = [0.4, 0, 0.2, 1] as const;\nconst DEFAULT_ANCHOR_OFFSET = { x: -8, y: -8, origin: \"top left\" };\nconst INITIAL_POPOVER_HEIGHT = 200;\n\ntype RootProps = {\n getAnchorRect: () => Rect | null;\n initialAnchorRect?: Rect | null;\n expanded: boolean;\n entryDelay?: number;\n onToggleExpand: () => void;\n children: ReactNode;\n};\n\ntype AnchorOffset = {\n x: number;\n y: number;\n origin: string;\n};\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction anchorOffsetFromPosition(\n anchor: Rect,\n position: { x: number; y: number; width: number },\n popoverHeight: number,\n): AnchorOffset {\n const anchorCenter = {\n x: anchor.x + anchor.width / 2,\n y: anchor.y + anchor.height / 2,\n };\n const popoverCenter = {\n x: position.x + position.width / 2,\n y: position.y + popoverHeight / 2,\n };\n return {\n x: clamp((anchorCenter.x - popoverCenter.x) * 0.08, -12, 12),\n y: clamp((anchorCenter.y - popoverCenter.y) * 0.12, -10, 10),\n origin: `${anchorCenter.y < popoverCenter.y ? \"top\" : \"bottom\"} ${\n anchorCenter.x < popoverCenter.x ? \"left\" : \"right\"\n }`,\n };\n}\n\nfunction initialAnchorOffset(surface: TargetSurface, anchor: Rect | null): AnchorOffset {\n if (!anchor) return DEFAULT_ANCHOR_OFFSET;\n const position = computePosition({\n anchor,\n popover: { width: POPOVER_WIDTH, height: INITIAL_POPOVER_HEIGHT },\n viewport: surface.getOverlayViewport(),\n });\n return anchorOffsetFromPosition(anchor, position, INITIAL_POPOVER_HEIGHT);\n}\n\nfunction sameAnchorOffset(a: AnchorOffset, b: AnchorOffset): boolean {\n return a.x === b.x && a.y === b.y && a.origin === b.origin;\n}\n\n/** Anchored popover OR right-edge drawer. Motion `layout` morphs the two. */\nexport function Root({\n getAnchorRect,\n initialAnchorRect,\n expanded,\n entryDelay = 0,\n onToggleExpand,\n children,\n}: RootProps) {\n const {\n actions: { attemptClose },\n meta: { shakeNonce },\n } = useThreadContext();\n const surface = useTargetSurface();\n const popoverRef = useRef<HTMLDivElement | null>(null);\n const [drawerHeight, setDrawerHeight] = useState(600);\n const [anchorOffset, setAnchorOffset] = useState<AnchorOffset>(() =>\n initialAnchorOffset(surface, initialAnchorRect ?? getAnchorRect()),\n );\n\n // Compute & apply popover position when collapsed. When expanded, the\n // drawer geometry is fixed right-edge so no per-frame recompute is needed.\n const recompute = useCallback(() => {\n const el = popoverRef.current;\n if (!el || expanded) return;\n const anchor = getAnchorRect();\n if (!anchor) return;\n // offsetHeight, not getBoundingClientRect: during the expand/collapse morph\n // Motion applies a CSS transform, which getBoundingClientRect reflects (so it\n // would report the drawer's size mid-animation and misplace the popover).\n // offsetHeight is the untransformed layout height.\n const height = el.offsetHeight || 200;\n const pos = computePosition({\n anchor,\n popover: { width: POPOVER_WIDTH, height },\n viewport: surface.getOverlayViewport(),\n });\n el.style.left = `${pos.x}px`;\n el.style.top = `${pos.y}px`;\n el.style.right = \"auto\";\n const nextOffset = anchorOffsetFromPosition(anchor, pos, height);\n setAnchorOffset((current) => (sameAnchorOffset(current, nextOffset) ? current : nextOffset));\n }, [getAnchorRect, expanded, surface]);\n\n useLayoutEffect(() => {\n if (!expanded) recompute();\n setDrawerHeight(surface.getOverlayViewport().height - DRAWER_MARGIN - DRAWER_FAB_CLEARANCE);\n });\n\n useEffect(() => {\n let frame: number | null = null;\n const schedule = () => {\n if (frame !== null) return;\n frame = surface.overlayWindow.requestAnimationFrame(() => {\n frame = null;\n if (!expanded) recompute();\n setDrawerHeight(surface.getOverlayViewport().height - DRAWER_MARGIN - DRAWER_FAB_CLEARANCE);\n });\n };\n const listeningWindows = new Set([surface.targetWindow, surface.overlayWindow]);\n for (const win of listeningWindows) {\n win.addEventListener(\"resize\", schedule);\n win.addEventListener(\"scroll\", schedule, { passive: true });\n }\n const ro = createResizeObserverForWindow(surface.overlayWindow, schedule);\n ro.observe(surface.overlayDocument.body);\n if (surface.targetDocument.body !== surface.overlayDocument.body) {\n ro.observe(surface.targetDocument.body);\n }\n if (popoverRef.current) ro.observe(popoverRef.current);\n return () => {\n if (frame !== null) surface.overlayWindow.cancelAnimationFrame(frame);\n for (const win of listeningWindows) {\n win.removeEventListener(\"resize\", schedule);\n win.removeEventListener(\"scroll\", schedule);\n }\n ro.disconnect();\n };\n }, [recompute, expanded, surface]);\n\n // Outside-click + Escape: route through popover store guard (shake on draft).\n useEffect(() => {\n const onMouseDown = (e: MouseEvent) => {\n if (isWidgetEvent(e)) return;\n attemptClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") attemptClose();\n };\n const listeningDocuments = new Set([surface.targetDocument, surface.overlayDocument]);\n for (const doc of listeningDocuments) {\n doc.addEventListener(\"mousedown\", onMouseDown, true);\n doc.addEventListener(\"keydown\", onKey);\n }\n return () => {\n for (const doc of listeningDocuments) {\n doc.removeEventListener(\"mousedown\", onMouseDown, true);\n doc.removeEventListener(\"keydown\", onKey);\n }\n };\n }, [attemptClose, surface]);\n\n // Shake on locked close (existing draft).\n const lastShakeRef = useRef(shakeNonce);\n useEffect(() => {\n if (shakeNonce === lastShakeRef.current) return;\n lastShakeRef.current = shakeNonce;\n const el = popoverRef.current;\n if (!el) return;\n el.classList.remove(\"patch-shake\");\n void el.offsetWidth;\n el.classList.add(\"patch-shake\");\n }, [shakeNonce]);\n\n const expandedStyle: CSSProperties = {\n left: \"auto\",\n right: `${DRAWER_MARGIN}px`,\n top: `${DRAWER_MARGIN}px`,\n width: `${DRAWER_WIDTH}px`,\n height: `${drawerHeight}px`,\n };\n\n const collapsedStyle: CSSProperties = {\n width: `${POPOVER_WIDTH}px`,\n height: \"auto\",\n transformOrigin: anchorOffset.origin,\n };\n\n return (\n <motion.div\n ref={popoverRef}\n layout\n initial={{ opacity: 0, x: anchorOffset.x, y: anchorOffset.y, scale: 0.985 }}\n animate={{\n opacity: 1,\n x: 0,\n y: 0,\n scale: 1,\n transition: {\n type: \"spring\",\n stiffness: 560,\n damping: 34,\n mass: 0.7,\n delay: entryDelay,\n },\n }}\n exit={{\n opacity: 0,\n x: anchorOffset.x,\n y: anchorOffset.y,\n scale: 0.985,\n transition: { duration: 0.16, ease: POPOVER_EXIT_EASE },\n }}\n transition={{ layout: { duration: 0.42, ease: FAB_EASE } }}\n // Re-anchor once the morph settles — recompute() no-ops while expanded.\n onLayoutAnimationComplete={recompute}\n data-patch-popover=\"\"\n role=\"dialog\"\n aria-label=\"Annotation thread\"\n className=\"fixed z-[2147483646] flex flex-col overflow-hidden rounded-[22px] border border-black/6 bg-popover font-sans text-popover-foreground shadow-[0_20px_56px_-16px_rgba(0,0,0,0.2),0_8px_18px_-6px_rgba(0,0,0,0.08)]\"\n style={expanded ? expandedStyle : collapsedStyle}\n >\n <ExpandContext.Provider value={{ expanded, onToggleExpand }}>\n {children}\n </ExpandContext.Provider>\n </motion.div>\n );\n}\n","import { ConfirmDelete } from \"./thread-confirm-delete\";\nimport { ConfirmDiscard } from \"./thread-confirm-discard\";\nimport { DevFooter } from \"./thread-dev-footer\";\nimport { Header } from \"./thread-header\";\nimport { Messages } from \"./thread-messages\";\nimport { Reply } from \"./thread-reply\";\nimport { Root } from \"./thread-root\";\n\nexport const Thread = {\n Root,\n Header,\n Messages,\n Reply,\n DevFooter,\n ConfirmDiscard,\n ConfirmDelete,\n};\n","import type { Rect } from \"./popover-position\";\nimport { Thread } from \"./thread\";\n\ntype Props = {\n getAnchorRect: () => Rect | null;\n initialAnchorRect?: Rect | null;\n expanded: boolean;\n entryDelay?: number;\n onToggleExpand: () => void;\n};\n\n/**\n * Client composition: info section + thread + composer. No agent message and\n * no dev footer.\n */\nexport function ThreadForClient({\n getAnchorRect,\n initialAnchorRect,\n expanded,\n entryDelay,\n onToggleExpand,\n}: Props) {\n return (\n <Thread.Root\n getAnchorRect={getAnchorRect}\n initialAnchorRect={initialAnchorRect}\n expanded={expanded}\n entryDelay={entryDelay}\n onToggleExpand={onToggleExpand}\n >\n <Thread.Header />\n <Thread.Messages />\n <Thread.Reply />\n <Thread.ConfirmDiscard />\n <Thread.ConfirmDelete />\n </Thread.Root>\n );\n}\n","import type { Rect } from \"./popover-position\";\nimport { Thread } from \"./thread\";\n\ntype Props = {\n getAnchorRect: () => Rect | null;\n initialAnchorRect?: Rect | null;\n expanded: boolean;\n entryDelay?: number;\n onToggleExpand: () => void;\n};\n\n/** Studio composition: human thread plus dev-only action/status footer. */\nexport function ThreadForStudio({\n getAnchorRect,\n initialAnchorRect,\n expanded,\n entryDelay,\n onToggleExpand,\n}: Props) {\n return (\n <Thread.Root\n getAnchorRect={getAnchorRect}\n initialAnchorRect={initialAnchorRect}\n expanded={expanded}\n entryDelay={entryDelay}\n onToggleExpand={onToggleExpand}\n >\n <Thread.Header />\n <Thread.Messages />\n <Thread.Reply />\n <Thread.DevFooter />\n <Thread.ConfirmDiscard />\n <Thread.ConfirmDelete />\n </Thread.Root>\n );\n}\n","import { AnimatePresence } from \"motion/react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { targetDisplayLabel } from \"../capture/capture-payload\";\nimport { useAnnotationsStore } from \"../data/annotations-store\";\nimport { type ActivePopover, usePopoverStore } from \"../data/popover-store\";\nimport type { WidgetAnnotation } from \"../data/types\";\nimport { resolveAnchor } from \"../persistence/resolve-anchor\";\nimport { pinBoxRect, pinPointSide } from \"../pin/pin\";\nimport { type TargetSurface, useTargetSurface } from \"../surface/target-surface\";\nimport type { Rect } from \"./popover-position\";\nimport { ThreadProvider } from \"./thread-context\";\nimport { ThreadForClient } from \"./thread-for-client\";\nimport { ThreadForStudio } from \"./thread-for-studio\";\n\nconst INTERNAL_ATTR = \"data-patch-internal\";\n\n// Match the rendered pin's geometry (tip on the dropped spot) so the popover\n// anchors to the same box the pin occupies.\nfunction pinRectFromCoords(surface: TargetSurface, viewportX: number, viewportY: number): Rect {\n const spot = { viewportX, viewportY };\n const pointSide = pinPointSide(spot, surface.getOverlayViewport());\n return pinBoxRect(spot, pointSide);\n}\n\nfunction shadowQuery(surface: TargetSurface, selector: string): Element | null {\n const host = surface.overlayDocument.querySelector(\"patch-widget-root\") as HTMLElement | null;\n return host?.shadowRoot?.querySelector(selector) ?? null;\n}\n\nfunction existingPinRect(surface: TargetSurface, annotationId: string): Rect | null {\n const el = shadowQuery(surface, `[data-patch-pin-id=\"${annotationId}\"]`);\n if (!el) return null;\n const r = el.getBoundingClientRect();\n return { x: r.x, y: r.y, width: r.width, height: r.height };\n}\n\nfunction resolvedAnnotationRect(\n surface: TargetSurface,\n annotation: WidgetAnnotation | null,\n): Rect | null {\n if (!annotation) return null;\n const result = resolveAnchor({\n payload: annotation.payload,\n doc: surface.targetDocument,\n scrollY: surface.getTargetScrollY(),\n viewport: surface.getTargetViewport(),\n internalAttr: INTERNAL_ATTR,\n });\n const position = surface.targetPointToOverlay(result.position);\n return pinRectFromCoords(surface, position.viewportX, position.viewportY);\n}\n\nfunction anchorRectForActive(\n surface: TargetSurface,\n active: ActivePopover,\n annotation: WidgetAnnotation | null,\n): Rect | null {\n if (!active) return null;\n if (active.kind === \"existing\") {\n return (\n existingPinRect(surface, active.annotationId) ?? resolvedAnnotationRect(surface, annotation)\n );\n }\n const position = surface.targetPointToOverlay({\n viewportX: active.anchor.viewportX,\n viewportY: active.anchor.documentY - surface.getTargetScrollY(),\n });\n return pinRectFromCoords(surface, position.viewportX, position.viewportY);\n}\n\n/**\n * Reads the popover store, locates the right annotation and anchor, and\n * mounts the per-viewer Thread composition. Returns null when no popover\n * is active or when an existing-annotation popover refers to an annotation\n * we haven't polled in yet.\n */\nexport function ActivePopoverHost() {\n const popover = usePopoverStore();\n const store = useAnnotationsStore();\n const surface = useTargetSurface();\n const active = popover.active;\n\n const annotation = useMemo(() => {\n if (!active || active.kind !== \"existing\") return null;\n return store.annotations.find((a) => a.id === active.annotationId) ?? null;\n }, [active, store.annotations]);\n\n const getAnchorRect = useCallback((): Rect | null => {\n return anchorRectForActive(surface, active, annotation);\n }, [active, annotation, surface]);\n\n // Expand state lives here so it survives across re-renders of the popover\n // tree but resets when the active popover changes (different annotation).\n const [expanded, setExpanded] = useState(false);\n const activeKey = popover.active\n ? popover.active.kind === \"existing\"\n ? popover.active.annotationId\n : \"composer\"\n : null;\n // Collapse back to the popover whenever the active target changes, so a new\n // annotation never opens already-expanded into the drawer.\n // biome-ignore lint/correctness/useExhaustiveDependencies: activeKey is the reset trigger\n useEffect(() => {\n setExpanded(false);\n }, [activeKey]);\n\n const Composition = store.viewerKind === \"studio\" ? ThreadForStudio : ThreadForClient;\n const canRender = active && (active.kind === \"composer\" || !!annotation);\n const entryDelay = active?.kind === \"composer\" ? 0.04 : 0;\n const draftTargetLabel = active?.kind === \"composer\" ? targetDisplayLabel(active.target) : null;\n const initialAnchorRect = useMemo(\n () => anchorRectForActive(surface, active, annotation),\n [active, annotation, surface],\n );\n\n return (\n <AnimatePresence>\n {canRender ? (\n <ThreadProvider\n key=\"active-popover\"\n annotation={annotation}\n draftTargetLabel={draftTargetLabel}\n >\n <Composition\n getAnchorRect={getAnchorRect}\n initialAnchorRect={initialAnchorRect}\n expanded={expanded}\n entryDelay={entryDelay}\n onToggleExpand={() => setExpanded((e) => !e)}\n />\n </ThreadProvider>\n ) : null}\n </AnimatePresence>\n );\n}\n","import { useMemo } from \"react\";\nimport { CaptureProvider } from \"./capture/capture-controller\";\nimport { AnnotationsProvider } from \"./data/annotations-store\";\nimport { PopoverProvider } from \"./data/popover-store\";\nimport { WidgetUiProvider } from \"./data/widget-ui-store\";\nimport { readImportMetaEnv, readProcessEnv, resolveProjectToken } from \"./env-token-resolver\";\nimport { FabDock } from \"./fab/fab-dock\";\nimport { PinLayer } from \"./pin/pin-layer\";\nimport { ShadowMount } from \"./shadow-mount\";\nimport { isPatchPreviewFrame, TargetSurfaceProvider } from \"./surface/target-surface\";\nimport { ActivePopoverHost } from \"./thread/active-popover\";\n\nexport type PatchProps = {\n /** Explicit project token; overrides any env-var resolution. */\n projectToken?: string;\n /** Base URL for Patch's API. Defaults to https://app.usepatch.dev. */\n apiBase?: string;\n};\n\nconst DEFAULT_API_BASE = \"https://app.usepatch.dev\";\n\nexport function Patch(props: PatchProps) {\n const previewFrame = typeof window !== \"undefined\" && isPatchPreviewFrame(window);\n const token = useMemo(\n () =>\n resolveProjectToken({\n prop: props.projectToken,\n processEnv: readProcessEnv(),\n importMetaEnv: readImportMetaEnv(),\n }),\n [props.projectToken],\n );\n const apiBase = props.apiBase ?? DEFAULT_API_BASE;\n if (previewFrame) return null;\n\n return (\n <ShadowMount>\n <TargetSurfaceProvider>\n <AnnotationsProvider projectToken={token} apiBase={apiBase}>\n <PopoverProvider>\n <WidgetUiProvider>\n <CaptureProvider>\n <PinLayer />\n <ActivePopoverHost />\n <FabDock />\n </CaptureProvider>\n </WidgetUiProvider>\n </PopoverProvider>\n </AnnotationsProvider>\n </TargetSurfaceProvider>\n </ShadowMount>\n );\n}\n\nexport default Patch;\n"]}