{"version":3,"file":"index.cjs","sources":["../../src/vue/hooks/use-selection.ts","../../src/vue/components/text-selection.vue","../../src/vue/components/marquee-selection.vue","../../src/vue/components/selection-layer.vue","../../src/vue/components/copy-to-clipboard.vue","../../src/vue/index.ts"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport { SelectionPlugin } from '@embedpdf/plugin-selection';\n\n/**\n * Hook to get the selection plugin's capability API.\n * This provides methods for controlling and listening to selection events.\n */\nexport const useSelectionCapability = () => useCapability<SelectionPlugin>(SelectionPlugin.id);\n\n/**\n * Hook to get the raw selection plugin instance.\n * Useful for accessing plugin-specific properties or methods not exposed in the capability.\n */\nexport const useSelectionPlugin = () => usePlugin<SelectionPlugin>(SelectionPlugin.id);\n","<script setup lang=\"ts\">\nimport { ref, watch, computed, useSlots, type VNode } from 'vue';\nimport { useDocumentState } from '@embedpdf/core/vue';\nimport { Rotation, type Rect } from '@embedpdf/models';\nimport type { SelectionMenuPlacement } from '@embedpdf/plugin-selection';\nimport { CounterRotate, type MenuWrapperProps } from '@embedpdf/utils/vue';\nimport { useSelectionPlugin } from '../hooks/use-selection';\nimport type { SelectionSelectionContext, SelectionSelectionMenuRenderFn } from '../types';\n\ninterface TextSelectionProps {\n  documentId: string;\n  pageIndex: number;\n  scale?: number;\n  rotation?: Rotation;\n  /** Background color for text selection highlights. Default: 'rgba(33,150,243)' */\n  background?: string;\n  /** Render function for selection menu (schema-driven approach) */\n  selectionMenu?: SelectionSelectionMenuRenderFn;\n}\n\nconst props = withDefaults(defineProps<TextSelectionProps>(), {\n  background: 'rgba(33,150,243)',\n  rotation: Rotation.Degree0,\n});\n\nconst slots = useSlots();\nconst { plugin: selPlugin } = useSelectionPlugin();\nconst documentState = useDocumentState(() => props.documentId);\nconst page = computed(() => documentState.value?.document?.pages?.[props.pageIndex]);\nconst rects = ref<Rect[]>([]);\nconst boundingRect = ref<Rect | null>(null);\nconst placement = ref<SelectionMenuPlacement | null>(null);\n\nconst actualScale = computed(() => {\n  if (props.scale !== undefined) return props.scale;\n  return documentState.value?.scale ?? 1;\n});\n\nconst actualRotation = computed(() => {\n  if (props.rotation !== undefined) return props.rotation;\n  // Combine page intrinsic rotation with document rotation\n  const pageRotation = page.value?.rotation ?? 0;\n  const docRotation = documentState.value?.rotation ?? 0;\n  return ((pageRotation + docRotation) % 4) as Rotation;\n});\n\n// Check if menu should render: placement is valid AND (render fn OR slot exists)\nconst shouldRenderMenu = computed(() => {\n  if (!placement.value) return false;\n  if (placement.value.pageIndex !== props.pageIndex) return false;\n  if (!placement.value.isVisible) return false;\n\n  // Must have either render function or slot\n  return !!props.selectionMenu || !!slots['selection-menu'];\n});\n\nwatch(\n  [() => selPlugin.value, () => props.documentId, () => props.pageIndex],\n  ([plugin, docId, pageIdx], _, onCleanup) => {\n    if (!plugin || !docId) {\n      rects.value = [];\n      boundingRect.value = null;\n      return;\n    }\n\n    const unregister = plugin.registerSelectionOnPage({\n      documentId: docId,\n      pageIndex: pageIdx,\n      onRectsChange: ({ rects: newRects, boundingRect: newBoundingRect }) => {\n        rects.value = newRects;\n        boundingRect.value = newBoundingRect;\n      },\n    });\n\n    onCleanup(unregister);\n  },\n  { immediate: true },\n);\n\nwatch(\n  [() => selPlugin.value, () => props.documentId],\n  ([plugin, docId], _, onCleanup) => {\n    if (!plugin || !docId) {\n      placement.value = null;\n      return;\n    }\n\n    const unsubscribe = plugin.onMenuPlacement(docId, (newPlacement) => {\n      placement.value = newPlacement;\n    });\n\n    onCleanup(unsubscribe);\n  },\n  { immediate: true },\n);\n\n// --- Selection Menu Logic ---\n\n// Build context object for selection menu\nconst buildContext = (): SelectionSelectionContext => ({\n  type: 'selection',\n  pageIndex: props.pageIndex,\n});\n\n// Build placement hints from plugin placement data\nconst buildMenuPlacement = () => ({\n  suggestTop: placement.value?.suggestTop ?? false,\n  spaceAbove: placement.value?.spaceAbove ?? 0,\n  spaceBelow: placement.value?.spaceBelow ?? 0,\n});\n\n// Render via function (for schema-driven approach)\nconst renderSelectionMenu = (rect: Rect, menuWrapperProps: MenuWrapperProps): VNode | null => {\n  if (!props.selectionMenu) return null;\n\n  return props.selectionMenu({\n    rect,\n    menuWrapperProps,\n    selected: true, // Selection is always \"selected\" when visible\n    placement: buildMenuPlacement(),\n    context: buildContext(),\n  });\n};\n</script>\n\n<template>\n  <template v-if=\"boundingRect\">\n    <div\n      :style=\"{\n        position: 'absolute',\n        left: `${boundingRect.origin.x * actualScale}px`,\n        top: `${boundingRect.origin.y * actualScale}px`,\n        width: `${boundingRect.size.width * actualScale}px`,\n        height: `${boundingRect.size.height * actualScale}px`,\n        mixBlendMode: 'multiply',\n        isolation: 'isolate',\n        pointerEvents: 'none',\n      }\"\n    >\n      <div\n        v-for=\"(rect, i) in rects\"\n        :key=\"i\"\n        :style=\"{\n          position: 'absolute',\n          left: `${(rect.origin.x - boundingRect.origin.x) * actualScale}px`,\n          top: `${(rect.origin.y - boundingRect.origin.y) * actualScale}px`,\n          width: `${rect.size.width * actualScale}px`,\n          height: `${rect.size.height * actualScale}px`,\n          background: background,\n        }\"\n      />\n    </div>\n\n    <!-- Selection Menu: Supports BOTH render function and slot -->\n    <CounterRotate\n      v-if=\"shouldRenderMenu\"\n      :rect=\"{\n        origin: {\n          x: placement!.rect.origin.x * actualScale,\n          y: placement!.rect.origin.y * actualScale,\n        },\n        size: {\n          width: placement!.rect.size.width * actualScale,\n          height: placement!.rect.size.height * actualScale,\n        },\n      }\"\n      :rotation=\"actualRotation\"\n    >\n      <template #default=\"{ rect, menuWrapperProps }\">\n        <!-- Priority 1: Render function prop (schema-driven) -->\n        <component v-if=\"selectionMenu\" :is=\"renderSelectionMenu(rect, menuWrapperProps)\" />\n\n        <!-- Priority 2: Slot (manual customization) -->\n        <slot\n          v-else\n          name=\"selection-menu\"\n          :context=\"buildContext()\"\n          :selected=\"true\"\n          :rect=\"rect\"\n          :placement=\"buildMenuPlacement()\"\n          :menuWrapperProps=\"menuWrapperProps\"\n        />\n      </template>\n    </CounterRotate>\n  </template>\n</template>\n","<template>\n  <div\n    v-if=\"rect\"\n    :style=\"{\n      position: 'absolute',\n      pointerEvents: 'none',\n      left: `${rect.origin.x * actualScale}px`,\n      top: `${rect.origin.y * actualScale}px`,\n      width: `${rect.size.width * actualScale}px`,\n      height: `${rect.size.height * actualScale}px`,\n      border: `1px ${resolvedBorderStyle} ${resolvedBorderColor}`,\n      background: resolvedBackground,\n      boxSizing: 'border-box',\n      zIndex: 1000,\n    }\"\n    :class=\"className\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue';\nimport type { Rect } from '@embedpdf/models';\nimport { useDocumentState } from '@embedpdf/core/vue';\nimport { useSelectionPlugin } from '../hooks';\n\ninterface MarqueeSelectionProps {\n  /** The ID of the document */\n  documentId: string;\n  /** Index of the page this layer lives on */\n  pageIndex: number;\n  /** Scale of the page (optional, defaults to document scale) */\n  scale?: number;\n  /** Optional CSS class applied to the marquee rectangle */\n  className?: string;\n  /** Fill/background color inside the marquee rectangle. Default: 'rgba(0,122,204,0.15)' */\n  background?: string;\n  /** Border color of the marquee rectangle. Default: 'rgba(0,122,204,0.8)' */\n  borderColor?: string;\n  /** Border style. Default: 'dashed' */\n  borderStyle?: 'solid' | 'dashed' | 'dotted';\n  /**\n   * @deprecated Use `borderColor` instead.\n   */\n  stroke?: string;\n  /**\n   * @deprecated Use `background` instead.\n   */\n  fill?: string;\n}\n\nconst props = withDefaults(defineProps<MarqueeSelectionProps>(), {\n  borderStyle: 'dashed',\n});\n\n// Resolve deprecated props: new CSS-standard props take precedence\nconst resolvedBorderColor = computed(\n  () => props.borderColor ?? props.stroke ?? 'rgba(0,122,204,0.8)',\n);\nconst resolvedBackground = computed(() => props.background ?? props.fill ?? 'rgba(0,122,204,0.15)');\nconst resolvedBorderStyle = computed(() => props.borderStyle);\n\nconst { plugin: selPlugin } = useSelectionPlugin();\nconst documentState = useDocumentState(() => props.documentId);\nconst rect = ref<Rect | null>(null);\n\nconst actualScale = computed(() => {\n  if (props.scale !== undefined) return props.scale;\n  return documentState.value?.scale ?? 1;\n});\n\nwatch(\n  [selPlugin, () => props.documentId, () => props.pageIndex, actualScale],\n  ([plugin, docId, pageIdx, scale], _, onCleanup) => {\n    rect.value = null;\n\n    if (!plugin) {\n      return;\n    }\n\n    const unregister = plugin.registerMarqueeOnPage({\n      documentId: docId,\n      pageIndex: pageIdx,\n      scale,\n      onRectChange: (newRect) => {\n        rect.value = newRect;\n      },\n    });\n\n    onCleanup(() => {\n      unregister?.();\n    });\n  },\n  { immediate: true },\n);\n</script>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rotation } from '@embedpdf/models';\nimport type { TextSelectionStyle, MarqueeSelectionStyle } from '@embedpdf/plugin-selection';\nimport type { SelectionSelectionMenuRenderFn } from '../types';\nimport TextSelection from './text-selection.vue';\nimport MarqueeSelection from './marquee-selection.vue';\n\ninterface SelectionLayerProps {\n  documentId: string;\n  pageIndex: number;\n  scale?: number;\n  rotation?: Rotation;\n  /**\n   * @deprecated Use `textStyle.background` instead.\n   * Background color for selection rectangles.\n   */\n  background?: string;\n  /** Styling options for text selection highlights */\n  textStyle?: TextSelectionStyle;\n  /** Styling options for the marquee selection rectangle */\n  marqueeStyle?: MarqueeSelectionStyle;\n  /** Optional CSS class applied to the marquee rectangle */\n  marqueeClassName?: string;\n  /** Render function for selection menu (schema-driven approach) */\n  selectionMenu?: SelectionSelectionMenuRenderFn;\n}\n\nconst props = withDefaults(defineProps<SelectionLayerProps>(), {\n  rotation: Rotation.Degree0,\n});\n\nconst resolvedTextBackground = computed(() => props.textStyle?.background ?? props.background);\n</script>\n\n<template>\n  <TextSelection\n    :document-id=\"documentId\"\n    :page-index=\"pageIndex\"\n    :scale=\"scale\"\n    :rotation=\"rotation\"\n    :background=\"resolvedTextBackground\"\n    :selection-menu=\"selectionMenu\"\n  >\n    <template #selection-menu=\"menuProps\">\n      <slot name=\"selection-menu\" v-bind=\"menuProps\" />\n    </template>\n  </TextSelection>\n  <MarqueeSelection\n    :document-id=\"documentId\"\n    :page-index=\"pageIndex\"\n    :scale=\"scale\"\n    :background=\"marqueeStyle?.background\"\n    :border-color=\"marqueeStyle?.borderColor\"\n    :border-style=\"marqueeStyle?.borderStyle\"\n    :class-name=\"marqueeClassName\"\n  />\n</template>\n","<script setup lang=\"ts\">\nimport { watchEffect } from 'vue';\nimport { useSelectionCapability } from '../hooks';\n\nconst { provides: sel } = useSelectionCapability();\n\n// This effect runs when the component is mounted and the capability is available.\n// It automatically handles unsubscribing when the component is unmounted.\nwatchEffect((onCleanup) => {\n  if (sel.value) {\n    const unsubscribe = sel.value.onCopyToClipboard(({ text }) => {\n      // Use the Clipboard API to write the text\n      navigator.clipboard.writeText(text).catch((err) => {\n        console.error('Failed to copy text to clipboard:', err);\n      });\n    });\n\n    // Register the cleanup function to run on unmount or re-run\n    onCleanup(unsubscribe);\n  }\n});\n</script>\n\n<template>\n  <!-- This component renders nothing to the DOM -->\n</template>\n","import { createPluginPackage } from '@embedpdf/core';\nimport { SelectionPluginPackage as BaseSelectionPluginPackage } from '@embedpdf/plugin-selection';\n\nimport { CopyToClipboard } from './components';\n\nexport * from './hooks';\nexport * from './components';\nexport * from './types';\nexport * from '@embedpdf/plugin-selection';\n\nexport const SelectionPluginPackage = createPluginPackage(BaseSelectionPluginPackage)\n  .addUtility(CopyToClipboard)\n  .build();\n"],"names":["useSelectionCapability","useCapability","SelectionPlugin","id","useSelectionPlugin","usePlugin","props","__props","slots","useSlots","plugin","selPlugin","documentState","useDocumentState","documentId","page","computed","_c","_b","_a","value","document","pages","pageIndex","rects","ref","boundingRect","placement","actualScale","scale","actualRotation","rotation","shouldRenderMenu","isVisible","selectionMenu","watch","docId","pageIdx","_","onCleanup","registerSelectionOnPage","onRectsChange","newRects","newBoundingRect","immediate","onMenuPlacement","newPlacement","buildContext","type","buildMenuPlacement","suggestTop","spaceAbove","spaceBelow","renderSelectionMenu","rect","menuWrapperProps","selected","context","_createElementBlock","_Fragment","key","_createElementVNode","style","_normalizeStyle","left","origin","x","top","y","width","size","height","_openBlock","_renderList","i","background","_createBlock","_unref","CounterRotate","default","_withCtx","_resolveDynamicComponent","_renderSlot","_ctx","$slots","resolvedBorderColor","borderColor","stroke","resolvedBackground","fill","resolvedBorderStyle","borderStyle","unregister","registerMarqueeOnPage","onRectChange","newRect","border","class","className","resolvedTextBackground","textStyle","_createVNode","TextSelection","menuProps","MarqueeSelection","marqueeStyle","marqueeClassName","provides","sel","watchEffect","onCopyToClipboard","text","navigator","clipboard","writeText","catch","err","console","error","SelectionPluginPackage","createPluginPackage","BaseSelectionPluginPackage","addUtility","CopyToClipboard","build"],"mappings":"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"}