propdoc
Version:
quick and easy documentation of Vue.js components
119 lines (84 loc) • 3.77 kB
Markdown
# propdoc [](https://travis-ci.org/propellant/doctor)
> quick and easy documentation of Vue.js components
#### installation
`npm install --save propdoc`
#### example output
This example was solely generated based on the extra fields described below.

#### features
_propdoc_ proposes a new way of documenting Vue components, by including some (or all) of the documentation in the component itself.
Benefits:
- _props_ can be directly annotated, making documentation essentially the same as commenting a prop
- Documentation can live directly in the component - thus centralizing the documentation and hopefully helping the development/documentation cycle
Downsides:
- If all documentation is built into the options object, the component will use additional space
- This can be mitigated by externalizing the larger proposed keys such as `description` and `token`
## new keys for your components
This example showcases all of what _propdoc_ would parse, however, none are required to be used and will not be output if absent.
```javascript
export default {
name: 'checkbox',
introduction: 'an amazing checkbox',
description: `
This \`checkbox\` is amazing, you should _check_ it out.
`,
token: "<checkbox label='foo'></checkbox>",
props: {
label: {
type: String,
default: '',
note: "a label to be appended after the checkbox"
}
}
}
```
#### note
_note_ is used alongside expanded (object-style) props to describe that prop in more detail
#### introduction
a brief summary of what the component is or does
#### description
a more in-depth documentation of the component, will be parsed using Markdown. Note that code will need to be escaped if it's inside of a Javascript string literal.
#### token
a quick example of the component's actual use, great for providing a way to quickly copy/paste in the future
## use in your documentation
```Vue
<script>
import propDoc from 'propdoc'
import myComponent from './myComponent.vue'
export default {
components: { propDoc },
// bind your component to use propdoc's native template output
data() {
return { documentMe: myComponent }
},
// or call getDoc() and use the same data in your own template
computed: {
myComponentDoc() { return propDoc.getDoc(myComponent) }
}
}
</script>
<template>
<section>
<prop-doc :component="documentMe"></prop-doc>
<div>
<h1>{{ myComponentDoc.name }}</h1>
<p>{{ myComponentDoc.introduction }}</p>
</div>
</section>
</template>
```
#### props
- `component`: **required** and should be the component object itself
- `documentation`: optional, can be any subset of `component`, and will take precedence; useful for two functions
- if the component's name or other fields should be output differently for documentation
- for the optional documentation fields, as these will cause some additional space to be used by your components if not separated
#### slots
Two named slots are available for adding content to what _propdoc_ emits
- `pre-use` will add content before the _description_ and _token_ fields
- `pre-props` will add content before the prop tables are emitted
#### propDoc.getDoc
> available in v0.8 onward
`propDoc.getDoc(component, documentation)`
- merges the arguments passed to it, then processes them as described above in _keys_
- the `props` object will be converted into an array instead of an object to simplify parsing in your template
- essentially this means you can do `v-for="prop in myDocumentedComponent.props"` and then `prop.name` instead of having to separate out the key/value