import type { ComponentPublicInstance, ComponentOptions } from 'vue'

export interface QMarkdown extends ComponentPublicInstance {
    /**
     * [optional] Pass markdown in as a property
     */
    src? : string
    /**
     * Disable blockquote conversion
     */
    noBlockquote? : boolean
    /**
     * Disable conversion of `\n` into `&lt;br&gt;`
     */
    noBreaks? : boolean
    /**
     * Disable container conversion
     */
    noContainer? : boolean
    /**
     * Disable code highlighter
     */
    noHighlight? : boolean
    /**
     * Disable HTML tags in source
     */
    noHtml? : boolean
    /**
     * Disable image conversion
     */
    noImage? : boolean
    /**
     * Disable line numbers on code blocks
     */
    noLineNumbers? : boolean
    /**
     * Disable conversion of links
     */
    noLink? : boolean
    /**
     * Disable auto-convert URL-like text to links
     */
    noLinkify? : boolean
    /**
     * Your headings will automatically be turned into anchor links, unless you use this property (default is H1-H3)
     */
    noHeadingAnchorLinks? : boolean
    /**
     * Disable language-neutral replacement + quotes beautification
     */
    noTypographer? : boolean
    /**
     * Provide an alternative character to be used instead of line numbers - must be 1 char in length
     */
    lineNumberAlt? : string
    /**
     * Set to true if you want a TOC automatically generated
     */
    toc? : boolean
    /**
     * The starting Header number for generating a TOC
     */
    tocStart? : number
    /**
     * The ending Header number for generating a TOC. Must be greater than tocStart
     */
    tocEnd? : number
    /**
     * Class definitions to be attributed to the markdown container
     */
    contentClass? : VueClassProp
    /**
     * Style definitions to be attributed to the markdown container
     */
    contentStyle? : VueClassProp
    /**
     * All external links will have the `rel="noopener"` applied if this is not set
     */
    noNoopener? : boolean
    /**
     * All external links will have the `rel="noreferrer"` applied if this is not set
     */
    noNoreferrer? : boolean
    /**
     * Use this property to turn on `Copy to Clipboard` functionality
     */
    showCopy? : boolean
    /**
     * Change the default icon used for `Copy to Clipboard`
     */
    copyIcon? : string
    /**
     * Change the default icon used for notify response after `Copy to Clipboard`
     */
    doneIcon? : string
    /**
     * Turns off the tooltip associated with the `Copy to Clipboard` icon
     */
    noCopyTooltip? : boolean
    /**
     * Change the tooltip text associated with the `Copy to Clipboard` icon
     */
    copyTooltipText? : string
    /**
     * Change the response text associated with the `Copy to Clipboard` icon (note: you **must** have the `Notify` plugin added to your quasar.conf.js)
     */
    copyResponseText? : string
    /**
     * if this is set to `true` then the following regEx is run on the `src` property: `props.src.replace(/\n/gi, '\n')`
     */
    fixCr? : boolean
    /**
     * [optional] An array of `markdown-it!` plugins.
     */
    plugins? : MarkdownItPluginsArray
    /**
     * Pass into this function the results from the `@toc` event to have the data array transformed into a hierarchical tree
     * @param data The results from the `@toc` event
     * @returns A modified version of the passed in data in a hierachical format
     */
    makeTree (data? : TocDefinitionArray): TocDefinitionArray
}

export interface TocDefinitionArray {
    /**
     * The slugified heading used for the html key
     */
    id : string
    /**
     * The original label
     */
    label : string
    /**
     * The heading level: h1 == 1, h2 == 2, etc.
     */
    level : number
    /**
     * If this object is level 1, then any level 2 objects will be in the `children` key and so on
     */
    children : TocDefinitionArray
}

import { VueClassProp, MarkdownItPluginsArray } from './types'

declare module 'vue' {
    interface ComponentCustomProperties {
    }
}
export * from './types'
export as namespace QMarkdown
export const QMarkdown: ComponentOptions

