{
  "parser": "YUIDoc",
  "name": "ember-fountainhead",
  "description": "Robust interactive documentation for your Ember application's source code",
  "version": "3.2.0",
  "repository": "https://github.com/healthsparq/ember-fountainhead",
  "guides": [
    {
      "attributes": {
        "id": "getting-started",
        "linkText": "Getting Started",
        "title": "Getting Started"
      },
      "body": "{{#fountainhead-header tagName=\"h2\" elementId=\"installation\"}}Installation{{/fountainhead-header}}\n<p>Install Ember Fountainhead using Ember CLI:</p>\n<p><code>ember install ember-fountainhead</code></p>\n<p>{{#fountainhead-alert brand='info' dismiss=false}}\n{{fountainhead-svg svgId='info'}}Fountainhead's target Node version is the active LTS,\nas recommended by Ember. Using Fountainhead on previous versions may not be possible.\n{{/fountainhead-alert}}</p>\n<p><em><small>* Currently Ember Fountainhead must be used inside of an Ember application.</small></em></p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"documentation-generation\"}}Documentation Generation{{/fountainhead-header}}\n<p>If you already have YUIDoc documentation comments block <em>(DocBlocks)</em> in your\nsource code, you can generate Fountainhead documentation data files with the\ncommand <code>ember docs</code>.</p>\n<p>By default Fountainhead will generate data files any time you build your app,\nas well as rebuild the files any time your app changes. This can be disabled\nusing the <a href=\"#configuration\">liveEdit</a> configuration.</p>\n<p>If you don't have DocBlock comments to your source code, you can start adding\nthem. Fountainhead uses <a href=\"https://yui.github.io/yuidoc/\">YUIDoc</a> for\nsource code DocBlock parsing. YUIDoc uses a syntax similar to JSDoc, but does not\nparse your source code, only the comments.</p>\n<p><em><small>See <a href=\"https://yui.github.io/yuidoc/syntax/index.html\">YUIDoc Syntax</a> for details\non YUIDoc tags.</small></em></p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"excluding-from-production\"}}Excluding from Production{{/fountainhead-header}}\n<p>To exclude Fountainhead from your production builds you can <strong>blacklist</strong> in your\n<code>ember-cli-build</code> configuration using the <code>addons.blacklist</code> array:</p>\n<div class=\"code-block-file-name\">ember-cli-build.js</div>\n<pre class=\"language-javascript\"><code class=\"language-javascript\">module<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>defaults<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">var</span> app <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">EmberApp</span><span class=\"token punctuation\">(</span>defaults<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n    addons<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n      blacklist<span class=\"token punctuation\">:</span> EmberApp<span class=\"token punctuation\">.</span><span class=\"token function\">env</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">===</span> <span class=\"token string\">'production'</span> <span class=\"token operator\">?</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'ember-fountainhead'</span><span class=\"token punctuation\">]</span> <span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">return</span> app<span class=\"token punctuation\">.</span><span class=\"token function\">toTree</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n</code></pre>\n<!-- TODO: Delete when we add hash fragment nav handling -->\n<div id=\"configuration\"></div>\n{{#fountainhead-header tagName=\"h2\" elementId=\"configuration\"}}Configuration{{/fountainhead-header}}\n<p>The Ember Fountainhead addon as well as the data file generation process can\nbe configured in a <code>fountainhead.js</code> file located in your repo's root:</p>\n<div class=\"code-block-file-name\">fountainhead.js</div>\n<pre class=\"language-javascript\"><code class=\"language-javascript\">module<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  entry<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'app'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token comment\" spellcheck=\"true\">// Defaults to 'app' for apps and 'addon' for addons</span>\n  output<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n    path<span class=\"token punctuation\">:</span> <span class=\"token string\">'docs'</span> <span class=\"token comment\" spellcheck=\"true\">// path to save generated docs to</span>\n    filename<span class=\"token punctuation\">:</span> <span class=\"token string\">'fountainhead-data.json'</span> <span class=\"token comment\" spellcheck=\"true\">// name to save generated file to</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n</code></pre>\n<p>{{#fountainhead-alert brand='info' dismiss=false}}\n{{fountainhead-svg svgId='info'}}See {{link-to 'Configuring Fountainhead' 'guides' 'configuration'}}\nfor all possible configuration options.\n{{/fountainhead-alert}}</p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"addon-styles\"}}Addon Styles{{/fountainhead-header}}\n<p>Ember Fountainhead's styles are bundled into your <code>vendor.css</code> by\ndefault. The styles are scoped to addon namespaces to prevent conflicts with\nyour application's styles. You can disable style sheet bundling by setting\n<code>includeVendorStyles</code> to false in your <code>fountainhead.js</code> configuration file.</p>\n<p>If you'd like to extend Fountainhead's styles and your project uses SASS, you\ncan turn off the auto bundle to the vendor file and directly import Fountainhead\ninto your SASS: <code>@import 'ember-fountainhead'</code></p>\n<p><em><small>See the <a href=\"https://github.com/healthsparq/ember-fountainhead/tree/master/app/styles/ember-fountainhead/themes\">themes</a>\nfor variables you can override.</small></em></p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"ember-component-playground\"}}Ember Component Playground{{/fountainhead-header}}\n<p>The <a href=\"https://github.com/healthsparq/ember-component-playground\">Ember Component Playground</a>\naddon is a great compliment to this addon that allows real time examples of\ncomponents. See the repo for installation.</p>\n",
      "frontmatter": "id: getting-started\nlinkText: Getting Started\ntitle: Getting Started",
      "id": "getting-started",
      "type": "guides"
    },
    {
      "attributes": {
        "id": "configuration",
        "linkText": "Configuring Fountainhead",
        "title": "Configuring Fountainhead"
      },
      "body": "<p>Fountainhead has sane defaults for all configuration options. Standard apps/addons\nshould be able to generate documentation files and use Fountainhead without any\nconfiguration. When needed though, Fountainhead can be customized as desired using\na <code>fountainhead.js</code> file.</p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"fountainhead.js-configuration-options\"}}fountainhead.js Configuration Options{{/fountainhead-header}}\n<div class=\"code-block-file-name\">fountainhead.js</div>\n<pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\" spellcheck=\"true\">/*\n * Fountainhead Default Configurations\n * These are the configuration defaults, they can be overwritten as needed\n */</span>\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Sets url for repository link in top left of API page</span>\n  repository<span class=\"token punctuation\">:</span> <span class=\"token string\">''</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Generate data files before builds for live reloading</span>\n  liveEdit<span class=\"token punctuation\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Import Fountainhead styles into vendor.css</span>\n  includeVendorStyles<span class=\"token punctuation\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Set to true to suppress error logging during data file generation</span>\n  quiet<span class=\"token punctuation\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Fountainhead custom tags not recognized by YUIDoc</span>\n  whiteListTags<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'passed'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'closure'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'action'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Set custom logo path</span>\n  logo<span class=\"token punctuation\">:</span> <span class=\"token string\">''</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Directories to parse for API documentation</span>\n  entry<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'app'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Paths to guide files</span>\n  guides<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Output directory and filename for master data set</span>\n  output<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n    filename<span class=\"token punctuation\">:</span> <span class=\"token string\">'fountainhead-data.json'</span><span class=\"token punctuation\">,</span>\n    path<span class=\"token punctuation\">:</span> path<span class=\"token punctuation\">.</span><span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token string\">'docs'</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Automatically set to consuming application's locationType, but can</span>\n  <span class=\"token comment\" spellcheck=\"true\">// be explicitly specified (sets internal link id target types between</span>\n  <span class=\"token comment\" spellcheck=\"true\">// query params and hash fragments)</span>\n  locationType<span class=\"token punctuation\">:</span> locationType\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n</code></pre>\n<p>{{#fountainhead-alert canDismiss=false brand='info'}}\n{{fountainhead-svg svgId='info'}} All paths are resolved using <code>path.resolve</code>,\nmeaning that either a relative path or paths starting with <code>./</code> will resolve to\nyour project's root directory.\n{{/fountainhead-alert}}</p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"environment-specific-configuration\"}}Environment Specific Configuration{{/fountainhead-header}}\n<p>You can export a function from <code>fountainhead.js</code> that will receive the build\nenvironment as a parameter if you need environment specific configurations:</p>\n<div class=\"code-block-file-name\">fountainhead.js</div>\n<pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\" spellcheck=\"true\">// EG: Include only your app files for production documentation. In dev builds</span>\n<span class=\"token comment\" spellcheck=\"true\">// include internal dev utilities documentation</span>\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> env <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n  entry<span class=\"token punctuation\">:</span> env <span class=\"token operator\">===</span> <span class=\"token string\">'production'</span> <span class=\"token operator\">?</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'app'</span><span class=\"token punctuation\">]</span> <span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'app'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'dev-utilities'</span><span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span>\n</code></pre>\n{{#fountainhead-header tagName=\"h2\" elementId=\"fountainhead-service-namespace\"}}Fountainhead Service Namespace{{/fountainhead-header}}\n<p>You can override the root namespace that all Fountainhead requests use by setting\nthe {{c-l class='Fountainhead' item='apiNamespace'}}. The default value is <code>/docs</code>.</p>\n<div class=\"code-block-file-name\">app.js</div>\n<pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> Fountainhead <span class=\"token keyword\">from</span> <span class=\"token string\">'ember-fountainhead/services/fountainhead'</span><span class=\"token punctuation\">;</span>\n\nFountainhead<span class=\"token punctuation\">.</span><span class=\"token function\">reopen</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> apiNamespace<span class=\"token punctuation\">:</span> <span class=\"token string\">'/special-namespace/v1/'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</code></pre>\n<p>The meta request would now use url: <code>/special-namespace/v1/meta.json</code></p>\n",
      "frontmatter": "id: configuration\nlinkText: Configuring Fountainhead\ntitle: Configuring Fountainhead",
      "id": "configuration",
      "type": "guides"
    },
    {
      "attributes": {
        "id": "writing-guides",
        "linkText": "Writing Guides",
        "title": "Writing Guides with Ember Fountainhead"
      },
      "body": "<p>Fountainhead makes writing guides easy with these features:</p>\n<ul>\n<li>Guides can be written in markdown and include components from your application.</li>\n<li>Meta data for guides can be configured using a front matter block.</li>\n<li>Any guide saved in <code>/guides</code> will be observed by Ember CLI and live reload on change.</li>\n</ul>\n<p>We hope that these conveniences inspire you to write guides for your project!\nSemantically named variables and methods go a long way towards self documenting code,\nand API documentation helps for reference, but guides bridge the gap of providing\nproject overviews, architecture considerations and the <em>why</em> of code. For\ncontributors looking to get started with projects, these aspects can be really hard\nto deciper without a guide!</p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"guide-discovery\"}}Guide Discovery{{/fountainhead-header}}\n<p>There are two ways Fountainhead can be configured to consume guides:</p>\n<ol>\n<li>Automatically, by saving the guide in <code>/guides</code></li>\n<li>Explicitly, by configuring the file path in the <code>fountainhead.guides</code> config.</li>\n</ol>\n{{#fountainhead-header tagName=\"h4\" elementId=\"automatic-discovery\"}}Automatic Discovery{{/fountainhead-header}}\n<p>Fountainhead will automatically consume any guide that is saved in <code>/guides</code>. The\nguides will be consumed alphabetically by file path+name and the order of guides in\nthe the navbar will match this order. See <a href=\"#ordering-guides\">Ordering Guides\n</a> for info on controlling the guide display order.</p>\n{{#fountainhead-header tagName=\"h4\" elementId=\"explicit-configuration\"}}Explicit Configuration{{/fountainhead-header}}\n<p>Guides from any location in your project can be consumed using the\n<code>fountainhead.guides</code> config in your <code>fountainhead.js</code> config file. Guides must be an\narray and can include paths to files or directories.</p>\n<p>{{#fountainhead-alert canDismiss=false brand='info'}}\n{{fountainhead-svg svgId='info'}} PRO TIP<br/>\nYou can create domain specific guides in your project source and include them in your\ndocumentation using the <code>guides</code> config. This can be especially helpful\nfor project features that require architecture/background knowledge that doesn't\nfit explicitly into the API documentation.\n{{/fountainhead-alert}}</p>\n<p>For example, this project has all of the setup and how-to guides in the <code>/guides</code>\ndirectory, but is also configured to include Release guides and an architecture\noverview of scroll targeting using the <code>guides</code> config:</p>\n<div class=\"code-block-file-name\">fountainhead.js</div>\n<pre class=\"language-javascript\"><code class=\"language-javascript\">module<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  guides<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token string\">'addon/scroll-target.md'</span><span class=\"token punctuation\">,</span> <span class=\"token comment\" spellcheck=\"true\">// Specific file in the addon directory</span>\n    <span class=\"token string\">'releases'</span> <span class=\"token comment\" spellcheck=\"true\">// Folder of release guides in project root</span>\n  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\n</code></pre>\n{{#fountainhead-header tagName=\"h2\" elementId=\"adding-meta-data\"}}Adding Meta Data{{/fountainhead-header}}\n<p>You can include a <a href=\"https://www.npmjs.com/package/front-matter\">front matter</a> block in\na guide to easily configure meta data for the guide. The following configurations\ncan be used to control how your guide is displayed:</p>\n<table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th></th>\n<th>Use</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td><strong>Required</strong></td>\n<td>Unique identifier for a guide. Also used as the url model id</td>\n</tr>\n<tr>\n<td><code>[linkText]</code></td>\n<td><em>Optional</em></td>\n<td>Anchor text used in guide navigation</td>\n</tr>\n<tr>\n<td><code>[title]</code></td>\n<td><em>Optional</em></td>\n<td>Page header text</td>\n</tr>\n<tr>\n<td><code>[group]</code></td>\n<td><em>Optional</em></td>\n<td>Parent label to nest a set of groups under</td>\n</tr>\n<tr>\n<td><code>[private]</code></td>\n<td><em>Optional</em></td>\n<td>When true, guide is not parsed or included in nav</td>\n</tr>\n<tr>\n<td><code>[protected]</code></td>\n<td><em>Optional</em></td>\n<td>When true, guide is parsed and saved, but not included in meta</td>\n</tr>\n</tbody>\n</table>\n<div class=\"code-block-file-name\">your-guide&period;md</div>\n<pre class=\"language-markdown\"><code class=\"language-markdown\"><span class=\"token operator\">--</span><span class=\"token operator\">-</span>\nid<span class=\"token punctuation\">:</span> writing<span class=\"token operator\">-</span>guides\nlinkText<span class=\"token punctuation\">:</span> Writing Guides\ntitle<span class=\"token punctuation\">:</span> Writing Guides <span class=\"token keyword\">with</span> Ember Fountainhead\ngroup<span class=\"token punctuation\">:</span> How Tos\n<span class=\"token operator\">--</span><span class=\"token operator\">-</span>\n\nEmber Fountainhead makes writing guides easy<span class=\"token operator\">...</span>\n</code></pre>\n{{#fountainhead-header tagName=\"h4\" elementId=\"guide-access\"}}Guide Access{{/fountainhead-header}}\n<p>The <code>private</code> and <code>protected</code> meta attributes can be used to control what guides are\nconsumed and displayed by Fountainhead.</p>\n<ul>\n<li><code>private</code>: guides marked private are not parsed, saved or included in the meta for\nyour documentation. These guides are ignored by Fountainhead.</li>\n<li><code>protected</code>: guides marked protected are parsed and saved into <code>/docs/guides</code>, but\nthey are not included in your documentation meta. This is useful if you would like\nto write guides to link to interally, but not include them in the guide navigation.</li>\n</ul>\n{{#fountainhead-header tagName=\"h2\" elementId=\"grouping-guides\"}}Grouping Guides{{/fountainhead-header}}\n<p>Sets of guides can be grouped together in the guide navigation using a <code>group</code>\nattribute. This is useful if you have a set of guides that are related, but too long\nto contain in a single guide. You can create groups for your guides in two ways:</p>\n<ol>\n<li>On the fly: Include a <code>group</code> attribute in any guide. If that group doesn't exist\nFountainhead will create one and add that group to it.</li>\n<li>Explicitly: Groups can be configured in the <code>fountainhead.guides</code> config <em>(This\ncan be helfpul for guide ordering)</em>:</li>\n</ol>\n<pre class=\"language-javascript\"><code class=\"language-javascript\">  module<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    guides<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token punctuation\">{</span> id<span class=\"token punctuation\">:</span> <span class=\"token string\">'How Tos'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token comment\" spellcheck=\"true\">// Object literals are interpreted as a group config</span>\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span>\n</code></pre>\n{{#fountainhead-header tagName=\"h4\" elementId=\"ordering-guides\"}}Ordering Guides{{/fountainhead-header}}\n<p>Guides are included in the guide navigation in this order:</p>\n<ol>\n<li>Guides auto discovered in <code>/guides</code> alphabetically by filepath+name</li>\n<li>Configured order of <code>fountainhead.guides</code> configuration array</li>\n</ol>\n<p>If you want to control the order of the guides listed in the navigation, you can use\nordered file names and folders, eg: <code>1_first-guide.md</code>, <code>2_second-guide.md</code>. See the\n<a href=\"https://github.com/healthsparq/ember-fountainhead/tree/master/guides\">guides directory</a>\nfor Fountainhead for a complex example.</p>\n",
      "frontmatter": "id: writing-guides\nlinkText: Writing Guides\ntitle: Writing Guides with Ember Fountainhead",
      "id": "writing-guides",
      "type": "guides"
    },
    {
      "attributes": {
        "id": "tools",
        "linkText": "Fountainhead Tools",
        "title": "Fountainhead Documentation Tools and Features"
      },
      "body": "<p>Fountainhead isn't just about writing <em>beautiful</em> documentation. Fountainhead\ncomes with a set of tools for writing interactive documentation.</p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"runtime-template-compilation\"}}Runtime Template Compilation{{/fountainhead-header}}\n<p>All DocBlock descriptions and guides are compiled to template partials during\nruntime. This lets you use any component available in your app into your descriptions.\nThis means that you're not limited to a predefined set of documentation components\npre-bundled with some library. Want to make a custom drawer component for rendering\nexamples of property values? With Fountainhead all you have to do is add the\ncomponent to your application and use it in a DocBlock.</p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"crosslink-component\"}}CrossLink Component{{/fountainhead-header}}\n<p>Use the {{c-l class='CrossLink'}} component to reference modules, classes, methods\nand properties elsewhere in your documentation:</p>\n<pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\" spellcheck=\"true\">/**\n * DocBlock for some class, with a direct link to the \\{{c-l 'init'}} method.\n * @property active\n * @type {boolean}\n */</span>\n</code></pre>\n<p>{{#c-l class='CrossLink'}}See the CrossLink Component for examples.{{/c-l}}</p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"state-in-docblock-descriptions\"}}State in DocBlock Descriptions{{/fountainhead-header}}\n<p>Your documentation descriptions are wrapped in an instance of\n<a href=\"https://healthsparq.github.io/ember-radical/docs/classes/Component.RadState\">Ember Radical's <code>rad-state</code></a>\nfor a convenient and sandboxed state property and state actions. This is\nconvenient for including examples in your documentation that require simple\nstate management.</p>\n<p>Use <code>state</code> to access the sandboxed state and any of <code>stateActions.open</code>,\n<code>stateActions.close</code> and <code>stateActions.toggleState</code> to mutate the state.</p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"glimmer-code-blocks\"}}Glimmer Code Blocks{{/fountainhead-header}}\n<p>Use the identifier <code>glimmer</code> with a fenced code block to highlight the code block\ncontents and render an unescaped example of the code block immediately after\nthe code block.</p>\n<p>Eg, the following code block:</p>\n<pre class=\"language-markdown\"><code class=\"language-markdown\"><span class=\"token template-string\"><span class=\"token string\">``</span></span><span class=\"token template-string\"><span class=\"token string\">`glimmer\n  \\{{some-component example=true}}\n`</span></span><span class=\"token template-string\"><span class=\"token string\">``</span></span>\n</code></pre>\n<p>Will actually be parsed as:</p>\n<pre class=\"language-markdown\"><code class=\"language-markdown\"><span class=\"token template-string\"><span class=\"token string\">``</span></span><span class=\"token template-string\"><span class=\"token string\">`glimmer\n  \\{{some-component example=true}}\n`</span></span><span class=\"token template-string\"><span class=\"token string\">``</span></span>\n<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span>some<span class=\"token operator\">-</span>component example<span class=\"token operator\">=</span><span class=\"token boolean\">true</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n</code></pre>\n<p>You can also add data when rendering you components, this is super useful for showing\nvariations of a theme or components in different states.</p>\n<p>At the top of your <code>glimmer</code> add data using a JSON string\ne.g. <code>data={'things': ['primary', 'secondary', 'success']}</code>.  This will make every top level key available\nto your example and will be stripped from the displayed code.</p>\n<p>You can then use the properties in the template.</p>\n<pre class=\"language-handlebars\"><code class=\"language-handlebars\"><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span>#each colors <span class=\"token keyword\">as</span> <span class=\"token operator\">|</span>color<span class=\"token operator\">|</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span>#fountainhead<span class=\"token operator\">-</span>button brand<span class=\"token operator\">=</span>color<span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span>color<span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span><span class=\"token operator\">/</span>fountainhead<span class=\"token operator\">-</span>button<span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span><span class=\"token operator\">/</span>each<span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n</code></pre>\n<p>data={\"colors\": [\"primary\", \"secondary\", \"success\"]}\n{{#each colors as |color|}}\n{{#fountainhead-button brand=color}}{{color}}{{/fountainhead-button}}\n{{/each}}</p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"markdown-in-docblock-descriptions-and-guides\"}}Markdown in DocBlock Descriptions and Guides{{/fountainhead-header}}\n<p>Fountainhead has full support for markdown in documentation blocks and guides.\nIf you're not familiar with markdown, you can start with a tutorial at\n<a href=\"http://www.markdowntutorial.com/\">Markdown Tutorial</a></p>\n<p><em><small>(Markdown is parsed using <a href=\"https://markdown-it.github.io/markdown-it/\">markdown-it</a>)</small></em></p>\n",
      "frontmatter": "id: tools\nlinkText: Fountainhead Tools\ntitle: Fountainhead Documentation Tools and Features",
      "id": "tools",
      "type": "guides"
    },
    {
      "id": "Architecture",
      "linkText": "Architecture",
      "guideGroup": true,
      "type": "guides",
      "guides": [
        {
          "attributes": {
            "id": "scroll-targeting",
            "linkText": "Scroll Targets",
            "title": "Automatic Scrolling and Click To Copy Headers",
            "group": "Architecture"
          },
          "body": "<p>Fountainhead has different automatic scrolling to header and property ids for <em>Hash\nLocation</em> consumers and <em>History Location</em> consumers. The goal of this is to offer very\nclean URLs for consumers using history location routing, while still supporting targeted\nscrolling for consumers using hash location routing. History routing consumers will\ngenerate URLs with fragment ids. Hash routing consumers will generate URLs with <code>id</code>\nquery params:</p>\n<p><strong>History Location Routing:</strong><br/>\n<code>your-docs.com/guides/your-guide#header-id</code><br/>\n<strong>Hash Location Routing:</strong><br/>\n<code>your-docs.com/#/guides/your-guide?id=header-id</code></p>\n{{#fountainhead-header tagName=\"h2\" elementId=\"feature-overview\"}}Feature Overview{{/fountainhead-header}}\n<p>If you need to make an update or log a bug against the feature this overview will\nprovide background information on how the overall flow executes.</p>\n<ol>\n<li>Addon <code>index.js</code> reads consuming application's <code>locationType</code> in addon <code>config</code>\nhook. The <code>locationType</code> is passed into every call to generate documentation data.\nIn data generation, if the <code>locationType</code> is <code>hash</code>, the flag <code>hashRouting</code> is\nset to true and added to the documentation meta. <em>(History routing is the\ndefault routing expected. hashRouting is only set as an override)</em></li>\n<li>Addon begins tracking the location hash in order to pass the hash down as a data\nelement. Routes <code>/api</code> and <code>/guides</code> activate hook trigger the <code>fountainhead</code>\nservice to set an event listener for the <code>hashchange</code> event. This event fires\nanytime an in page url with a hash fragment is clicked. All routes will reset the\ntracked fragment id and then update it after the url changes <em>(Required due to\nroute changes not firing the hashChange event)</em>.</li>\n<li>Routes will reset the page scroll to the top on every transition. This ensures\nthat if the page is scrolled, and the new route doesn't have a scroll target, the\npage is correctly scrolled to the top.</li>\n<li>Page templates pass either the tracked hash fragment or the controller <code>id</code> query\nparam to page components depending on the consuming routing type.</li>\n<li>Any change in the model or passed scroll target will trigger the page's\n<code>didReceiveAttrs</code> hook, which is used to scroll to the passed target, or scroll to\ntop of page if no target is present.</li>\n<li>Headers and property links are wrapped in either an anchor with the href set to a\nfragment id for history location consumers or a <code>link-to</code> with the id query param\nfor hash location users.</li>\n</ol>\n{{#fountainhead-header tagName=\"h2\" elementId=\"feature-overview-ii\"}}Feature Overview II{{/fountainhead-header}}\n<ol>\n<li>Addon checks if consumer is using Hash or History location, updates Fountainhead's\ndocumentation meta with flag.</li>\n<li>IF HASH =&gt; Use query params, and everything will Just Work™. Router, link-tos and\ncontrollers automatically track <code>id</code> query param. Passed down into page components\nwe can use <code>didReceiveAttrs</code> hook to execute scrolling.</li>\n<li>IF HISTORY =&gt; Hash has to be tracked:\n<ul>\n<li>Ember will leave fragment ids in urls on page reload</li>\n<li>Anchors with ONLY fragment ids do not trigger Ember route changes, url updates\nwith new hash (hashChange event fires) (this is 👍 for copyable headers and\nproperty links in class page index tab)</li>\n<li>Link-tos (even with forced hash addition) have hash stripped from url at some\npoint. (this is a problem for cross-link)</li>\n</ul>\n</li>\n<li>On route activation, send <code>trackHash</code>, creates new listener for hash change AND\nsets current hash if one has been set (this is how page reload still triggers a\na scroll).</li>\n<li>Clicking an anchor with fragment ONLY will fire a hash change event, but clicking\na link-to to a different route OR clicking browser back button will NOT fire a\nhash change event.</li>\n<li>For route changes:\n<ul>\n<li>Default behavior is to update the tracked fragment using <code>scheduleOnce</code> <code>render</code>\nqueue. At that time the url is updated. (When clicking the back button, the url\nat this point may have a previous scroll target.)</li>\n<li>For cross-links pointing to some target, Ember strips out the fragment during\ntransition. Cross-links handle this by looking up current route and setting a\n<code>crossLinkFragmentOverride</code> on click of a cross link. Then in the <code>scheduleOnce</code>\nhandler we can check for the fragment override to know that there SHOULD be a\nfragment in the url. (this is the navigating forward with hash scenario).</li>\n</ul>\n</li>\n</ol>\n",
          "frontmatter": "id: scroll-targeting\nlinkText: Scroll Targets\ntitle: Automatic Scrolling and Click To Copy Headers\ngroup: Architecture",
          "id": "scroll-targeting",
          "type": "guides"
        }
      ]
    },
    {
      "attributes": {
        "id": "releases",
        "linkText": "Releases",
        "title": "Release Notes"
      },
      "body": "<div>\n  {{#link-to 'guides' 'v4.0.0-guides-update'}}\n    <h2>v4.0.0 Guides Enhancements</h2>\n  {{/link-to}}\n</div>\n<p><em>Fountainhead v4 is focused on enhancing the guides feature. API documentation is\nimportant for end consumers of any library or application, but we think that guides\nhelp contributors and maintainers more than any resource. How many times have you\nwanted to contribute to a project, but then spent hours trying to decipher how the\nproject is structured, how…</em></p>\n",
      "frontmatter": "id: releases\nlinkText: Releases\ntitle: Release Notes",
      "id": "releases",
      "type": "guides"
    }
  ],
  "modules": [
    {
      "name": "Addon",
      "type": "modules"
    },
    {
      "name": "App",
      "type": "modules"
    },
    {
      "name": "Blueprints",
      "type": "modules"
    },
    {
      "name": "Lib",
      "type": "modules"
    }
  ],
  "classes": [
    {
      "name": "API",
      "type": "classes"
    },
    {
      "name": "API.Classes",
      "type": "classes"
    },
    {
      "name": "API.Files",
      "type": "classes"
    },
    {
      "name": "API.Modules",
      "type": "classes"
    },
    {
      "name": "BaseController",
      "type": "classes"
    },
    {
      "name": "BaseRoute",
      "type": "classes"
    },
    {
      "name": "CrossLink",
      "type": "classes"
    },
    {
      "name": "DataTypes.GenerateClasses",
      "type": "classes"
    },
    {
      "name": "DataTypes.GenerateGuide",
      "type": "classes"
    },
    {
      "name": "DataTypes.GenerateModules",
      "type": "classes"
    },
    {
      "name": "DataTypes.GenerateSrcFile",
      "type": "classes"
    },
    {
      "name": "Docs.Classes",
      "type": "classes"
    },
    {
      "name": "Docs.Files",
      "type": "classes"
    },
    {
      "name": "Docs.Modules",
      "type": "classes"
    },
    {
      "name": "EmberFountainhead.Index",
      "type": "classes"
    },
    {
      "name": "FHHref",
      "type": "classes"
    },
    {
      "name": "FounatianheadHeader",
      "type": "classes"
    },
    {
      "name": "FountaineadClass.Header",
      "type": "classes"
    },
    {
      "name": "FountaineadClass.Item",
      "type": "classes"
    },
    {
      "name": "Fountainhead",
      "type": "classes"
    },
    {
      "name": "FountainheadAlert",
      "type": "classes"
    },
    {
      "name": "FountainheadButton",
      "type": "classes"
    },
    {
      "name": "FountainheadClass.ItemsContainer",
      "type": "classes"
    },
    {
      "name": "FountainheadClass.Meta",
      "type": "classes"
    },
    {
      "name": "FountainheadClass.PropertyLink",
      "type": "classes"
    },
    {
      "name": "FountainheadGetStarted",
      "type": "classes"
    },
    {
      "name": "FountainheadPages.API",
      "type": "classes"
    },
    {
      "name": "FountainheadPages.APIIndex",
      "type": "classes"
    },
    {
      "name": "FountainheadPages.BasePage",
      "type": "classes"
    },
    {
      "name": "FountainheadPages.Class",
      "type": "classes"
    },
    {
      "name": "FountainheadPages.File",
      "type": "classes"
    },
    {
      "name": "FountainheadPages.Guide",
      "type": "classes"
    },
    {
      "name": "FountainheadPages.Module",
      "type": "classes"
    },
    {
      "name": "FountainheadRepoLink",
      "type": "classes"
    },
    {
      "name": "FountainheadRoutes",
      "type": "classes"
    },
    {
      "name": "FountainheadRuntimeDescription",
      "type": "classes"
    },
    {
      "name": "FountainheadSVG",
      "type": "classes"
    },
    {
      "name": "FountainheadState",
      "type": "classes"
    },
    {
      "name": "FountainheadTabs",
      "type": "classes"
    },
    {
      "name": "FountainheadTabsContent",
      "type": "classes"
    },
    {
      "name": "FountainheadWelcome",
      "type": "classes"
    },
    {
      "name": "Guides",
      "type": "classes"
    },
    {
      "name": "Helper.Eq",
      "type": "classes"
    },
    {
      "name": "Index",
      "type": "classes"
    },
    {
      "name": "NavigationAPI",
      "type": "classes"
    },
    {
      "name": "NavigationAPI.Logo",
      "type": "classes"
    },
    {
      "name": "NavigationAPI.SearchBar",
      "type": "classes"
    },
    {
      "name": "NavigationAPI.Section",
      "type": "classes"
    },
    {
      "name": "NavigationGuides",
      "type": "classes"
    },
    {
      "name": "createDirs",
      "type": "classes"
    },
    {
      "name": "decorateConfig",
      "type": "classes"
    },
    {
      "name": "generateFountainheadData",
      "type": "classes"
    },
    {
      "name": "logger",
      "type": "classes"
    },
    {
      "name": "parseMarkdown",
      "type": "classes"
    },
    {
      "name": "readDirRecursive",
      "type": "classes"
    }
  ]
}