Skip to content

Commit a247af0

Browse files
authored
Merge pull request #17 from privy-open-source/feat/expose-pdf-context
Feat/expose pdf context
2 parents a96b0e0 + f18029f commit a247af0

File tree

5 files changed

+56
-10
lines changed

5 files changed

+56
-10
lines changed

demo/src/App.vue

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<script setup lang="ts">
2-
import { reactive } from 'vue'
2+
import { reactive, ref } from 'vue'
33
import PdfViewer from '@/components/pdf-viewers/PdfViewer.vue'
44
import PdfObject from '@/components/pdf-object/PdfObject.vue'
5-
import type { PdfObject as IPdfObject } from '@/types/ref'
5+
import type { PdfObject as IPdfObject, PdfViewerContext } from '@/types/ref'
66
77
const object = reactive<IPdfObject>({
88
page: undefined,
@@ -11,11 +11,15 @@ const object = reactive<IPdfObject>({
1111
width: undefined,
1212
height: undefined
1313
})
14+
15+
const pdf = ref<PdfViewerContext>()
1416
</script>
1517

1618
<template>
1719
<div class="pdf-example">
20+
{{ pdf }}
1821
<pdf-viewer
22+
ref="pdf"
1923
src="https://privy-open-source.github.io/design-system/assets/Calibrator-v3.e869f66c.pdf"
2024
>
2125
<pdf-object
@@ -32,12 +36,13 @@ const object = reactive<IPdfObject>({
3236
/>
3337
</pdf-object>
3438

35-
<!-- <template #navigation="{ zoomIn, zoomOut, page, totalPage, next, prev }">
39+
<!-- <template #navigation="{ zoomIn, zoomOut, page, totalPage, next, prev, scale }">
3640
<button @click="zoomOut">Zoom Out</button>
3741
<button @click="zoomIn">Zoom In</button>
3842
<div>
3943
Page <span>{{ page }}</span> / {{ totalPage }}
4044
</div>
45+
<div>Scale {{ scale }}</div>
4146
<button @click="prev">Prev</button>
4247
<button @click="next">Next</button>
4348
</template> -->

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@privyid/pdf-ajaib",
3-
"version": "0.1.7",
3+
"version": "0.1.8",
44
"private": false,
55
"license": "MIT",
66
"repository": {

src/components/pdf-viewers/PdfViewer.vue

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import type { PropType } from 'vue-demi'
33
import { computed, defineComponent, onMounted, provide, toRef, watch } from 'vue-demi'
44
import { pAspectRatio } from '@/directives/aspect-ratio'
5-
import { templateRef, useToNumber, useVModel, watchDebounced, syncRef } from '@vueuse/core'
5+
import { templateRef, useToNumber, useVModel, watchDebounced, syncRef, useToggle } from '@vueuse/core'
66
import type { LayoutVariant } from './main'
77
import { PDF_VIEWER_CONTEXT } from './main'
88
import { useSticky } from './utils/use-sticky'
@@ -49,17 +49,23 @@ export default defineComponent({
4949
offsetTop: {
5050
type: [Number, String],
5151
default: 0
52+
},
53+
noNavigation: {
54+
type: Boolean,
55+
default: false,
5256
}
5357
},
5458
emits: ['ready', 'loaded', 'error', 'error-password', 'update:page', 'update:scale'],
55-
setup(props, { emit }) {
59+
setup(props, { emit, expose }) {
5660
const root = templateRef<HTMLDivElement>('root')
5761
const container = templateRef<HTMLDivElement>('container')
5862
const viewer = templateRef<HTMLDivElement>('viewer')
5963
const idle = useIdle(container)
6064
6165
const vPage = useVModel(props, 'page')
6266
const vScale = useVModel(props, 'scale')
67+
const [isReady, toggleReady] = useToggle()
68+
const [isLoaded, toggleLoaded] = useToggle()
6369
6470
const offsetTop = useToNumber(toRef(props, 'offsetTop'), {
6571
nanToZero: true
@@ -112,6 +118,7 @@ export default defineComponent({
112118
})
113119
114120
onLoaded((doc) => {
121+
toggleLoaded(true)
115122
emit('loaded', doc)
116123
})
117124
@@ -121,6 +128,7 @@ export default defineComponent({
121128
})
122129
123130
onReady((pdfViewer) => {
131+
toggleReady(true)
124132
emit('ready', pdfViewer)
125133
})
126134
@@ -149,7 +157,25 @@ export default defineComponent({
149157
pdfPage.value--
150158
}
151159
160+
const calculatedScale = computed<number>(() => {
161+
return Number((pdfScale.value * 100).toFixed(0))
162+
})
163+
164+
expose({
165+
idle,
166+
page: pdfPage,
167+
scale: calculatedScale,
168+
totalPage,
169+
zoomIn: pdfZoomIn,
170+
zoomOut: pdfZoomOut,
171+
next: pdfNextPage,
172+
prev: pdfPrevPage,
173+
isReady,
174+
isLoaded,
175+
})
176+
152177
return {
178+
calculatedScale,
153179
pdfPage,
154180
pdfScale,
155181
classNames,
@@ -164,7 +190,7 @@ export default defineComponent({
164190
pdfZoomIn,
165191
pdfZoomOut,
166192
pdfNextPage,
167-
pdfPrevPage
193+
pdfPrevPage,
168194
}
169195
}
170196
})
@@ -201,12 +227,12 @@ export default defineComponent({
201227
/>
202228

203229
<transition name="slide-up">
204-
<div class="pdf__navigation">
230+
<div v-if="!noNavigation" class="pdf__navigation">
205231
<slot
206232
name="navigation"
207233
:idle="idle"
208234
:page="pdfPage"
209-
:scale="scale"
235+
:scale="calculatedScale"
210236
:totalPage="totalPage"
211237
:zoom-in="pdfZoomIn"
212238
:zoom-out="pdfZoomOut"

src/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
export { default as PdfViewer } from './components/pdf-viewers/PdfViewer.vue'
22
export { default as PdfObject } from './components/pdf-object/PdfObject.vue'
33
export { default as PdfObjectAddon } from './components/pdf-object/PdfObjectAddon.vue'
4-
export type { PdfObject as PdfObjectRef } from './types/ref'
4+
export type { PdfObject as PdfObjectRef, PdfViewerContext } from './types/ref'

src/types/ref.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,22 @@
1+
import type { Ref } from 'vue'
2+
13
export interface PdfObject {
24
page?: number
35
x?: number
46
y?: number
57
width?: number
68
height?: number
79
}
10+
11+
export interface PdfViewerContext {
12+
idle: Ref<boolean>
13+
page: Ref<number>
14+
scale: Ref<number>
15+
totalPage: Ref<number>
16+
zoomIn: () => void
17+
zoomOut: () => void
18+
next: () => void
19+
prev: () => void
20+
isReady: Ref<boolean>
21+
isLoaded: Ref<boolean>
22+
}

0 commit comments

Comments
 (0)