diff --git a/README.md b/README.md index 5f76dec..b2d51df 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ export default defineNuxtConfig({ documentIdParam: 'document_id', backLink: '/', backLinkText: 'Back to dashboard', + showBackLink: true, buttonColor: '#4f46e5', buttonHoverColor: '#4338ca', showDocument: true, @@ -112,6 +113,7 @@ All response fields are treated as strings except the validity flag. If a status | `logo` | Logo URL displayed at the top of the page | `/logo.png` | | `verificationEndpoint` | API endpoint that validates a document | **required** | | `backLink` / `backLinkText` | Destination + label for the back button | `'/'` / `'Back to Home'` | +| `showBackLink` | Toggle visibility of the back button | `true` | | `buttonColor` / `buttonHoverColor` | Primary button colours | `#4f46e5` / `#4338ca` | | `fields` | Array describing the detail rows (label, key, type, optional resolver) | Built-in defaults | | `showDocument` | Toggle document image section (hides it entirely when `false`) | `true` | @@ -153,6 +155,8 @@ Only fields that resolve to a non-empty value are rendered. `type: 'status'` als When `showDocument` is `false`, the asset block is skipped altogether even if the API responds with a URL. Use `showDocumentTitle` to hide the heading while keeping the preview itself, or override `displayTitle` to customise the heading copy. Set `displayType` to `'image'` or `'pdf'` when you know the asset format; otherwise the component falls back to inferring it from the URL (still supporting PDF detection). The `displayField` can point to an image or a PDF; PDFs render inside the viewer with a fallback link. +Turn off the footer back button entirely by setting `showBackLink: false`. + ```ts documentVerification: { // ... diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index ffeb5b0..f60cc77 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -1,4 +1,6 @@ // https://nuxt.com/docs/api/configuration/nuxt-config +import { defineNuxtConfig } from 'nuxt/config' + export default defineNuxtConfig({ modules: ['../nuxt'], documentVerification: { @@ -6,6 +8,7 @@ export default defineNuxtConfig({ verificationEndpoint: '/api/verify-document', backLink: '/', backLinkText: 'Back to Home', + showBackLink: false, buttonColor: '#4f46e5', buttonHoverColor: '#4338ca', fields: [ diff --git a/playground/tsconfig.json b/playground/tsconfig.json new file mode 100644 index 0000000..84c7a77 --- /dev/null +++ b/playground/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "types": ["nuxt"] + }, + "include": ["../src/types/**/*.d.ts", "./**/*"] +} diff --git a/src/types/runtime-config.ts b/playground/types/nuxt-document-verification.d.ts similarity index 61% rename from src/types/runtime-config.ts rename to playground/types/nuxt-document-verification.d.ts index 1b21813..65cf878 100644 --- a/src/types/runtime-config.ts +++ b/playground/types/nuxt-document-verification.d.ts @@ -1,9 +1,10 @@ -import type { DocumentVerificationConfig } from '../runtime/composables/types' +import type { DocumentVerificationConfig } from '../../src/runtime/composables/types' -declare module '@nuxt/schema' { +declare module 'nuxt/schema' { interface NuxtConfig { documentVerification?: DocumentVerificationConfig } + interface PublicRuntimeConfig { documentVerification: DocumentVerificationConfig } diff --git a/src/module.ts b/src/module.ts index 7f8a86a..6147759 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1,5 +1,3 @@ -import './types/runtime-config' - import { defineNuxtModule, createResolver, addComponent, addImportsDir, addPlugin } from '@nuxt/kit' import type { DocumentVerificationConfig } from './runtime/composables/types' import { BASE_FIELD_DEFINITIONS } from './runtime/composables/constants' @@ -17,6 +15,7 @@ export default defineNuxtModule({ verificationEndpoint: '/api/verify-document', backLink: '/', backLinkText: 'Back to Home', + showBackLink: true, buttonColor: '#4f46e5', buttonHoverColor: '#4338ca', fields: BASE_FIELD_DEFINITIONS, diff --git a/src/runtime/components/DocumentFooter.vue b/src/runtime/components/DocumentFooter.vue index 31aef77..9c0e20a 100644 --- a/src/runtime/components/DocumentFooter.vue +++ b/src/runtime/components/DocumentFooter.vue @@ -1,5 +1,5 @@ @@ -15,5 +15,9 @@ defineProps({ type: String, required: true, }, + showBackLink: { + type: Boolean, + default: true, + }, }) diff --git a/src/runtime/components/DocumentVerification.vue b/src/runtime/components/DocumentVerification.vue index 1f39ca6..bbdea06 100644 --- a/src/runtime/components/DocumentVerification.vue +++ b/src/runtime/components/DocumentVerification.vue @@ -30,7 +30,12 @@ /> - + diff --git a/src/runtime/composables/types.ts b/src/runtime/composables/types.ts index 6bbe32f..80f83f1 100644 --- a/src/runtime/composables/types.ts +++ b/src/runtime/composables/types.ts @@ -53,6 +53,7 @@ export interface DocumentVerificationConfig { verificationEndpoint: string backLink: string backLinkText: string + showBackLink?: boolean buttonColor: string buttonHoverColor: string fields?: FieldDefinition[] diff --git a/src/runtime/composables/useDocumentVerification.ts b/src/runtime/composables/useDocumentVerification.ts index 40e037c..6cabbf2 100644 --- a/src/runtime/composables/useDocumentVerification.ts +++ b/src/runtime/composables/useDocumentVerification.ts @@ -32,6 +32,7 @@ export const useDocumentVerification = () => { const cfg = $documentVerification as DocumentVerificationConfig const route = useRoute() const documentIdParam = cfg.documentIdParam || DEFAULT_DOCUMENT_ID_PARAM + const showBackLink = cfg.showBackLink ?? true const showDocument = cfg.showDocument ?? true const displayTitle = cfg.displayTitle ?? 'Document Preview' const showDocumentTitle = cfg.showDocumentTitle ?? true @@ -40,6 +41,7 @@ export const useDocumentVerification = () => { const resolvedConfig: DocumentVerificationConfig = { ...cfg, documentIdParam, + showBackLink, showDocument, showDocumentTitle, displayTitle, diff --git a/src/runtime/plugins/document-verification.ts b/src/runtime/plugins/document-verification.ts index 5eee945..fdab2db 100644 --- a/src/runtime/plugins/document-verification.ts +++ b/src/runtime/plugins/document-verification.ts @@ -17,6 +17,7 @@ export default defineNuxtPlugin<{ documentVerification: DocumentVerificationConf } const documentIdParam = moduleConfig.documentIdParam ?? DEFAULT_DOCUMENT_ID_PARAM + const showBackLink = moduleConfig.showBackLink ?? true const showDocument = moduleConfig.showDocument ?? true const displayTitle = moduleConfig.displayTitle ?? 'Document Preview' const showDocumentTitle = moduleConfig.showDocumentTitle ?? true @@ -26,6 +27,7 @@ export default defineNuxtPlugin<{ documentVerification: DocumentVerificationConf const normalizedConfig: DocumentVerificationConfig = { ...moduleConfig, documentIdParam, + showBackLink, showDocument, displayTitle, showDocumentTitle, diff --git a/src/types/runtime-config.d.ts b/src/types/runtime-config.d.ts new file mode 100644 index 0000000..d2caee8 --- /dev/null +++ b/src/types/runtime-config.d.ts @@ -0,0 +1,33 @@ +import type { DocumentVerificationConfig } from '../runtime/composables/types' + +// Augment both 'nuxt/schema' and '@nuxt/schema' to ensure TS picks it up in different setups + +declare module 'nuxt/schema' { + interface NuxtConfig { + documentVerification?: DocumentVerificationConfig + } + + interface NuxtOptions { + documentVerification?: DocumentVerificationConfig + } + + interface PublicRuntimeConfig { + documentVerification: DocumentVerificationConfig + } +} + +declare module '@nuxt/schema' { + interface NuxtConfig { + documentVerification?: DocumentVerificationConfig + } + + interface NuxtOptions { + documentVerification?: DocumentVerificationConfig + } + + interface PublicRuntimeConfig { + documentVerification: DocumentVerificationConfig + } +} + +export {} diff --git a/tsconfig.json b/tsconfig.json index a482072..d5cbe10 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,14 @@ "esModuleInterop": true, "skipLibCheck": true, "resolveJsonModule": true, + + "declaration": true, + "emitDeclarationOnly": true, + "outDir": "./dist", + "declarationMap": false, + + "sourceMap": true, + "paths": { "#app": ["./src/types/nuxt-app.d.ts"], "@nuxt/schema": ["./node_modules/nuxt/schema"], @@ -15,5 +23,6 @@ "nuxt/dist/app/*": ["./node_modules/nuxt/dist/app/*"] } }, - "include": ["src/**/*.ts", "src/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.d.ts", "types/**/*.d.ts"], + "exclude": ["node_modules", "dist", "playground"] }