{
  "schema_version": "1.0.0",
  "namespaces": [
    {
      "name": "Polymer",
      "description": "",
      "summary": "Polymer is a lightweight library built on top of the web\nstandards-based Web Components API's, and makes it easy to build your\nown custom HTML elements.",
      "sourceRange": {
        "file": "lib/utils/boot.html",
        "start": {
          "line": 27,
          "column": 2
        },
        "end": {
          "line": 29,
          "column": 3
        }
      },
      "namespaces": [
        {
          "name": "Polymer.CaseMap",
          "description": "Module with utilities for converting between \"dash-case\" and \"camelCase\"\nidentifiers.",
          "summary": "Module that provides utilities for converting between \"dash-case\"\n  and \"camelCase\".",
          "sourceRange": {
            "file": "lib/utils/case-map.html",
            "start": {
              "line": 27,
              "column": 2
            },
            "end": {
              "line": 59,
              "column": 4
            }
          },
          "functions": [
            {
              "name": "Polymer.CaseMap.dashToCamelCase",
              "description": "Converts \"dash-case\" identifier (e.g. `foo-bar-baz`) to \"camelCase\"\n(e.g. `fooBarBaz`).",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/case-map.html",
                "start": {
                  "line": 37,
                  "column": 4
                },
                "end": {
                  "line": 43,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Dash-case identifier",
                  "name": "dash"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Camel-case representation of the identifier"
              }
            },
            {
              "name": "Polymer.CaseMap.camelToDashCase",
              "description": "Converts \"camelCase\" identifier (e.g. `fooBarBaz`) to \"dash-case\"\n(e.g. `foo-bar-baz`).",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/case-map.html",
                "start": {
                  "line": 53,
                  "column": 4
                },
                "end": {
                  "line": 57,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Camel-case identifier",
                  "name": "camel"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Dash-case representation of the identifier"
              }
            }
          ]
        },
        {
          "name": "Polymer.Async",
          "description": "Module that provides a number of strategies for enqueuing asynchronous\ntasks.  Each sub-module provides a standard `run(fn)` interface that returns a\nhandle, and a `cancel(handle)` interface for canceling async tasks before\nthey run.",
          "summary": "Module that provides a number of strategies for enqueuing asynchronous\ntasks.",
          "sourceRange": {
            "file": "lib/utils/async.html",
            "start": {
              "line": 54,
              "column": 2
            },
            "end": {
              "line": 200,
              "column": 4
            }
          },
          "namespaces": [
            {
              "name": "Polymer.Async.timeOut",
              "description": "Async interface wrapper around `setTimeout`.",
              "summary": "Async interface wrapper around `setTimeout`.",
              "sourceRange": {
                "file": "lib/utils/async.html",
                "start": {
                  "line": 63,
                  "column": 4
                },
                "end": {
                  "line": 93,
                  "column": 5
                }
              },
              "functions": [
                {
                  "name": "Polymer.Async.timeOut.after",
                  "description": "Returns a sub-module with the async interface providing the provided\ndelay.",
                  "summary": "",
                  "sourceRange": {
                    "file": "lib/utils/async.html",
                    "start": {
                      "line": 72,
                      "column": 6
                    },
                    "end": {
                      "line": 77,
                      "column": 7
                    }
                  },
                  "privacy": "public",
                  "params": [
                    {
                      "type": "number",
                      "desc": "Time to wait before calling callbacks in ms",
                      "name": "delay"
                    }
                  ],
                  "return": {
                    "type": "AsyncInterface",
                    "desc": "An async timeout interface"
                  }
                }
              ]
            },
            {
              "name": "Polymer.Async.animationFrame",
              "description": "Async interface wrapper around `requestAnimationFrame`.",
              "summary": "Async interface wrapper around `requestAnimationFrame`.",
              "sourceRange": {
                "file": "lib/utils/async.html",
                "start": {
                  "line": 102,
                  "column": 4
                },
                "end": {
                  "line": 118,
                  "column": 5
                }
              }
            },
            {
              "name": "Polymer.Async.idlePeriod",
              "description": "Async interface wrapper around `requestIdleCallback`.  Falls back to\n`setTimeout` on browsers that do not support `requestIdleCallback`.",
              "summary": "Async interface wrapper around `requestIdleCallback`.",
              "sourceRange": {
                "file": "lib/utils/async.html",
                "start": {
                  "line": 128,
                  "column": 4
                },
                "end": {
                  "line": 152,
                  "column": 5
                }
              },
              "functions": [
                {
                  "name": "Polymer.Async.idlePeriod.run",
                  "description": "Enqueues a function called at `requestIdleCallback` timing.",
                  "summary": "",
                  "sourceRange": {
                    "file": "lib/utils/async.html",
                    "start": {
                      "line": 136,
                      "column": 6
                    },
                    "end": {
                      "line": 140,
                      "column": 7
                    }
                  },
                  "privacy": "public",
                  "params": [
                    {
                      "type": "function (IdleDeadline)",
                      "desc": "Callback to run",
                      "name": "fn"
                    }
                  ],
                  "return": {
                    "type": "number",
                    "desc": "Handle used for canceling task"
                  }
                },
                {
                  "name": "Polymer.Async.idlePeriod.cancel",
                  "description": "Cancels a previously enqueued `idlePeriod` callback.",
                  "summary": "",
                  "sourceRange": {
                    "file": "lib/utils/async.html",
                    "start": {
                      "line": 147,
                      "column": 6
                    },
                    "end": {
                      "line": 151,
                      "column": 7
                    }
                  },
                  "privacy": "public",
                  "params": [
                    {
                      "type": "number",
                      "desc": "Handle returned from `run` of callback to cancel",
                      "name": "handle"
                    }
                  ]
                }
              ]
            },
            {
              "name": "Polymer.Async.microTask",
              "description": "Async interface for enqueueing callbacks that run at microtask timing.\n\nNote that microtask timing is achieved via a single `MutationObserver`,\nand thus callbacks enqueued with this API will all run in a single\nbatch, and not interleaved with other microtasks such as promises.\nPromises are avoided as an implementation choice for the time being\ndue to Safari bugs that cause Promises to lack microtask guarantees.",
              "summary": "Async interface for enqueueing callbacks that run at microtask\n  timing.",
              "sourceRange": {
                "file": "lib/utils/async.html",
                "start": {
                  "line": 168,
                  "column": 4
                },
                "end": {
                  "line": 199,
                  "column": 5
                }
              },
              "functions": [
                {
                  "name": "Polymer.Async.microTask.run",
                  "description": "Enqueues a function called at microtask timing.",
                  "summary": "",
                  "sourceRange": {
                    "file": "lib/utils/async.html",
                    "start": {
                      "line": 177,
                      "column": 6
                    },
                    "end": {
                      "line": 181,
                      "column": 7
                    }
                  },
                  "privacy": "public",
                  "params": [
                    {
                      "type": "Function",
                      "desc": "Callback to run",
                      "name": "callback"
                    }
                  ],
                  "return": {
                    "type": "*",
                    "desc": "Handle used for canceling task"
                  }
                },
                {
                  "name": "Polymer.Async.microTask.cancel",
                  "description": "Cancels a previously enqueued `microTask` callback.",
                  "summary": "",
                  "sourceRange": {
                    "file": "lib/utils/async.html",
                    "start": {
                      "line": 189,
                      "column": 6
                    },
                    "end": {
                      "line": 197,
                      "column": 7
                    }
                  },
                  "privacy": "public",
                  "params": [
                    {
                      "type": "number",
                      "desc": "Handle returned from `run` of callback to cancel",
                      "name": "handle"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name": "Polymer.ResolveUrl",
          "description": "Module with utilities for resolving relative URL's.",
          "summary": "Module with utilities for resolving relative URL's.",
          "sourceRange": {
            "file": "lib/utils/resolve-url.html",
            "start": {
              "line": 99,
              "column": 4
            },
            "end": {
              "line": 103,
              "column": 6
            }
          },
          "functions": [
            {
              "name": "Polymer.ResolveUrl.resolveUrl",
              "description": "Resolves the given URL against the provided `baseUri'.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/resolve-url.html",
                "start": {
                  "line": 28,
                  "column": 4
                },
                "end": {
                  "line": 61,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Input URL to resolve",
                  "name": "url"
                },
                {
                  "type": "string",
                  "desc": "Base URI to resolve the URL against",
                  "name": "baseURI"
                }
              ],
              "return": {
                "type": "string",
                "desc": "resolved URL"
              }
            },
            {
              "name": "Polymer.ResolveUrl.resolveCss",
              "description": "Resolves any relative URL's in the given CSS text against the provided\n`ownerDocument`'s `baseURI`.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/resolve-url.html",
                "start": {
                  "line": 72,
                  "column": 4
                },
                "end": {
                  "line": 78,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "CSS text to process",
                  "name": "cssText"
                },
                {
                  "type": "string",
                  "desc": "Base URI to resolve the URL against",
                  "name": "baseURI"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Processed CSS text with resolved URL's"
              }
            },
            {
              "name": "Polymer.ResolveUrl.pathFromUrl",
              "description": "Returns a path from a given `url`. The path includes the trailing\n`/` from the url.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/resolve-url.html",
                "start": {
                  "line": 88,
                  "column": 4
                },
                "end": {
                  "line": 90,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Input URL to transform",
                  "name": "url"
                }
              ],
              "return": {
                "type": "string",
                "desc": "resolved path"
              }
            }
          ]
        },
        {
          "name": "Polymer.settings",
          "description": "Legacy settings.",
          "summary": "",
          "sourceRange": {
            "file": "lib/utils/settings.html",
            "start": {
              "line": 22,
              "column": 2
            },
            "end": {
              "line": 22,
              "column": 42
            }
          }
        },
        {
          "name": "Polymer.StyleGather",
          "description": "Module with utilities for collection CSS text from `<templates>`, external\nstylesheets, and `dom-module`s.",
          "summary": "Module with utilities for collection CSS text from various sources.",
          "sourceRange": {
            "file": "lib/utils/style-gather.html",
            "start": {
              "line": 32,
              "column": 2
            },
            "end": {
              "line": 141,
              "column": 4
            }
          },
          "functions": [
            {
              "name": "Polymer.StyleGather.cssFromModules",
              "description": "Returns CSS text of styles in a space-separated list of `dom-module`s.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/style-gather.html",
                "start": {
                  "line": 42,
                  "column": 4
                },
                "end": {
                  "line": 49,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "List of dom-module id's within which to\nsearch for css.",
                  "name": "moduleIds"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Concatenated CSS content from specified `dom-module`s"
              }
            },
            {
              "name": "Polymer.StyleGather.cssFromModule",
              "description": "Returns CSS text of styles in a given `dom-module`.  CSS in a `dom-module`\ncan come either from `<style>`s within the first `<template>`, or else\nfrom one or more `<link rel=\"import\" type=\"css\">` links outside the\ntemplate.\n\nAny `<styles>` processed are removed from their original location.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/style-gather.html",
                "start": {
                  "line": 63,
                  "column": 4
                },
                "end": {
                  "line": 80,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "dom-module id to gather styles from",
                  "name": "moduleId"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Concatenated CSS content from specified `dom-module`"
              }
            },
            {
              "name": "Polymer.StyleGather.cssFromTemplate",
              "description": "Returns CSS text of `<styles>` within a given template.\n\nAny `<styles>` processed are removed from their original location.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/style-gather.html",
                "start": {
                  "line": 92,
                  "column": 4
                },
                "end": {
                  "line": 109,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "HTMLTemplateElement",
                  "desc": "Template to gather styles from",
                  "name": "template"
                },
                {
                  "type": "string",
                  "desc": "Base URI to resolve the URL against",
                  "name": "baseURI"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Concatenated CSS content from specified template"
              }
            },
            {
              "name": "Polymer.StyleGather.cssFromModuleImports",
              "description": "Returns CSS text from stylsheets loaded via `<link rel=\"import\" type=\"css\">`\nlinks within the specified `dom-module`.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/style-gather.html",
                "start": {
                  "line": 119,
                  "column": 4
                },
                "end": {
                  "line": 140,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Id of `dom-module` to gather CSS from",
                  "name": "moduleId"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Concatenated CSS content from links in specified `dom-module`"
              }
            }
          ]
        },
        {
          "name": "Polymer.Path",
          "description": "Module with utilities for manipulating structured data path strings.",
          "summary": "Module with utilities for manipulating structured data path strings.",
          "sourceRange": {
            "file": "lib/utils/path.html",
            "start": {
              "line": 23,
              "column": 2
            },
            "end": {
              "line": 249,
              "column": 4
            }
          },
          "functions": [
            {
              "name": "Polymer.Path.isPath",
              "description": "Returns true if the given string is a structured data path (has dots).\n\nExample:\n\n```\nPolymer.Path.isPath('foo.bar.baz') // true\nPolymer.Path.isPath('foo')         // false\n```",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/path.html",
                "start": {
                  "line": 39,
                  "column": 4
                },
                "end": {
                  "line": 41,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Path string",
                  "name": "path"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the string contained one or more dots"
              }
            },
            {
              "name": "Polymer.Path.root",
              "description": "Returns the root property name for the given path.\n\nExample:\n\n```\nPolymer.Path.root('foo.bar.baz') // 'foo'\nPolymer.Path.root('foo')         // 'foo'\n```",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/path.html",
                "start": {
                  "line": 57,
                  "column": 4
                },
                "end": {
                  "line": 63,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Path string",
                  "name": "path"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Root property name"
              }
            },
            {
              "name": "Polymer.Path.isAncestor",
              "description": "Given `base` is `foo.bar`, `foo` is an ancestor, `foo.bar` is not\nReturns true if the given path is an ancestor of the base path.\n\nExample:\n\n```\nPolymer.Path.isAncestor('foo.bar', 'foo')         // true\nPolymer.Path.isAncestor('foo.bar', 'foo.bar')     // false\nPolymer.Path.isAncestor('foo.bar', 'foo.bar.baz') // false\n```",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/path.html",
                "start": {
                  "line": 82,
                  "column": 4
                },
                "end": {
                  "line": 85,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Path string to test against.",
                  "name": "base"
                },
                {
                  "type": "string",
                  "desc": "Path string to test.",
                  "name": "path"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if `path` is an ancestor of `base`."
              }
            },
            {
              "name": "Polymer.Path.isDescendant",
              "description": "Given `base` is `foo.bar`, `foo.bar.baz` is an descendant\n\nExample:\n\n```\nPolymer.Path.isDescendant('foo.bar', 'foo.bar.baz') // true\nPolymer.Path.isDescendant('foo.bar', 'foo.bar')     // false\nPolymer.Path.isDescendant('foo.bar', 'foo')         // false\n```",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/path.html",
                "start": {
                  "line": 103,
                  "column": 4
                },
                "end": {
                  "line": 106,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Path string to test against.",
                  "name": "base"
                },
                {
                  "type": "string",
                  "desc": "Path string to test.",
                  "name": "path"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if `path` is a descendant of `base`."
              }
            },
            {
              "name": "Polymer.Path.translate",
              "description": "Replaces a previous base path with a new base path, preserving the\nremainder of the path.\n\nUser must ensure `path` has a prefix of `base`.\n\nExample:\n\n```\nPolymer.Path.translate('foo.bar', 'zot' 'foo.bar.baz') // 'zot.baz'\n```",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/path.html",
                "start": {
                  "line": 126,
                  "column": 4
                },
                "end": {
                  "line": 128,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Current base string to remove",
                  "name": "base"
                },
                {
                  "type": "string",
                  "desc": "New base string to replace with",
                  "name": "newBase"
                },
                {
                  "type": "string",
                  "desc": "Path to translate",
                  "name": "path"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Translated string"
              }
            },
            {
              "name": "Polymer.Path.normalize",
              "description": "Converts array-based paths to flattened path.  String-based paths\nare returned as-is.\n\nExample:\n\n```\nPolymer.Path.normalize(['foo.bar', 0, 'baz'])  // 'foo.bar.0.baz'\nPolymer.Path.normalize('foo.bar.0.baz')        // 'foo.bar.0.baz'\n```",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/path.html",
                "start": {
                  "line": 151,
                  "column": 4
                },
                "end": {
                  "line": 164,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "(string|!Array.<(string|number)>)",
                  "desc": "Input path",
                  "name": "path"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Flattened path"
              }
            },
            {
              "name": "Polymer.Path.split",
              "description": "Splits a path into an array of property names. Accepts either arrays\nof path parts or strings.\n\nExample:\n\n```\nPolymer.Path.split(['foo.bar', 0, 'baz'])  // ['foo', 'bar', '0', 'baz']\nPolymer.Path.split('foo.bar.0.baz')        // ['foo', 'bar', '0', 'baz']\n```",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/path.html",
                "start": {
                  "line": 181,
                  "column": 4
                },
                "end": {
                  "line": 186,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "(string|!Array.<(string|number)>)",
                  "desc": "Input path",
                  "name": "path"
                }
              ],
              "return": {
                "type": "!Array.<string>",
                "desc": "Array of path parts"
              }
            },
            {
              "name": "Polymer.Path.get",
              "description": "Reads a value from a path.  If any sub-property in the path is `undefined`,\nthis method returns `undefined` (will never throw.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/path.html",
                "start": {
                  "line": 200,
                  "column": 4
                },
                "end": {
                  "line": 215,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "Object",
                  "desc": "Object from which to dereference path from",
                  "name": "root"
                },
                {
                  "type": "(string|!Array.<(string|number)>)",
                  "desc": "Path to read",
                  "name": "path"
                },
                {
                  "type": "Object=",
                  "desc": "If an object is provided to `info`, the normalized\n (flattened) path will be set to `info.path`.",
                  "name": "info"
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value at path, or `undefined` if the path could not be\n fully dereferenced."
              }
            },
            {
              "name": "Polymer.Path.set",
              "description": "Sets a value to a path.  If any sub-property in the path is `undefined`,\nthis method will no-op.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/path.html",
                "start": {
                  "line": 227,
                  "column": 4
                },
                "end": {
                  "line": 247,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "Object",
                  "desc": "Object from which to dereference path from",
                  "name": "root"
                },
                {
                  "type": "(string|!Array.<(string|number)>)",
                  "desc": "Path to set",
                  "name": "path"
                },
                {
                  "type": "*",
                  "desc": "Value to set to path",
                  "name": "value"
                }
              ],
              "return": {
                "type": "(string|undefined)",
                "desc": "The normalized version of the input path"
              }
            }
          ]
        },
        {
          "name": "Polymer.telemetry",
          "description": "Provides basic tracking of element definitions (registrations) and\ninstance counts.",
          "summary": "Provides basic tracking of element definitions (registrations) and\ninstance counts.",
          "sourceRange": {
            "file": "lib/mixins/element-mixin.html",
            "start": {
              "line": 793,
              "column": 2
            },
            "end": {
              "line": 827,
              "column": 4
            }
          }
        },
        {
          "name": "Polymer.Gestures",
          "description": "Module for adding listeners to a node for the following normalized\ncross-platform \"gesture\" events:\n- `down` - mouse or touch went down\n- `up` - mouse or touch went up\n- `tap` - mouse click or finger tap\n- `track` - mouse drag or touch move",
          "summary": "Module for adding cross-platform gesture event listeners.",
          "sourceRange": {
            "file": "lib/utils/gestures.html",
            "start": {
              "line": 224,
              "column": 2
            },
            "end": {
              "line": 571,
              "column": 4
            }
          },
          "functions": [
            {
              "name": "Polymer.Gestures.deepTargetFind",
              "description": "Finds the element rendered on the screen at the provided coordinates.\n\nSimilar to `document.elementFromPoint`, but pierces through\nshadow roots.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/gestures.html",
                "start": {
                  "line": 240,
                  "column": 4
                },
                "end": {
                  "line": 259,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "number",
                  "desc": "Horizontal pixel coordinate",
                  "name": "x"
                },
                {
                  "type": "number",
                  "desc": "Vertical pixel coordinate",
                  "name": "y"
                }
              ],
              "return": {
                "type": "HTMLElement",
                "desc": "Returns the deepest shadowRoot inclusive element\nfound at the screen position given."
              }
            },
            {
              "name": "Polymer.Gestures.addListener",
              "description": "Adds an event listener to a node for the given gesture type.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/gestures.html",
                "start": {
                  "line": 383,
                  "column": 4
                },
                "end": {
                  "line": 388,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "Node",
                  "desc": "Node to add listener on",
                  "name": "node"
                },
                {
                  "type": "string",
                  "desc": "Gesture type: `down`, `up`, `track`, or `tap`",
                  "name": "evType"
                },
                {
                  "type": "Function",
                  "desc": "Event listener function to call",
                  "name": "handler"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if a gesture event listener was added."
              }
            },
            {
              "name": "Polymer.Gestures.removeListener",
              "description": "Removes an event listener from a node for the given gesture type.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/gestures.html",
                "start": {
                  "line": 400,
                  "column": 4
                },
                "end": {
                  "line": 405,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "Node",
                  "desc": "Node to remove listener from",
                  "name": "node"
                },
                {
                  "type": "string",
                  "desc": "Gesture type: `down`, `up`, `track`, or `tap`",
                  "name": "evType"
                },
                {
                  "type": "Function",
                  "desc": "Event listener function previously passed to\n `addListener`.",
                  "name": "handler"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if a gesture event listener was removed."
              }
            },
            {
              "name": "Polymer.Gestures.register",
              "description": "Registers a new gesture event recognizer for adding new custom\ngesture event types.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/gestures.html",
                "start": {
                  "line": 481,
                  "column": 4
                },
                "end": {
                  "line": 486,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "Object",
                  "desc": "Gesture recognizer descriptor",
                  "name": "recog"
                }
              ]
            },
            {
              "name": "Polymer.Gestures.setTouchAction",
              "description": "Sets scrolling direction on node.\n\nThis value is checked on first move, thus it should be called prior to\nadding event listeners.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/gestures.html",
                "start": {
                  "line": 516,
                  "column": 4
                },
                "end": {
                  "line": 521,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "Node",
                  "desc": "Node to set touch action setting on",
                  "name": "node"
                },
                {
                  "type": "string",
                  "desc": "Touch action value",
                  "name": "value"
                }
              ]
            },
            {
              "name": "Polymer.Gestures.prevent",
              "description": "Prevents the dispatch and default action of the given event name.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/gestures.html",
                "start": {
                  "line": 550,
                  "column": 4
                },
                "end": {
                  "line": 555,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "string",
                  "desc": "Event name.",
                  "name": "evName"
                }
              ]
            },
            {
              "name": "Polymer.Gestures.resetMouseCanceller",
              "description": "Reset the 2500ms timeout on processing mouse input after detecting touch input.\n\nTouch inputs create synthesized mouse inputs anywhere from 0 to 2000ms after the touch.\nThis method should only be called during testing with simulated touch inputs.\nCalling this method in production may cause duplicate taps or other Gestures.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/gestures.html",
                "start": {
                  "line": 566,
                  "column": 4
                },
                "end": {
                  "line": 570,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": []
            }
          ]
        },
        {
          "name": "Polymer.RenderStatus",
          "description": "Module for scheduling flushable pre-render and post-render tasks.",
          "summary": "Module for scheduling flushable pre-render and post-render tasks.",
          "sourceRange": {
            "file": "lib/utils/render-status.html",
            "start": {
              "line": 73,
              "column": 2
            },
            "end": {
              "line": 126,
              "column": 4
            }
          },
          "functions": [
            {
              "name": "Polymer.RenderStatus.beforeNextRender",
              "description": "Enqueues a callback which will be run before the next render, at\n`requestAnimationFrame` timing.\n\nThis method is useful for enqueuing work that requires DOM measurement,\nsince measurement may not be reliable in custom element callbacks before\nthe first render, as well as for batching measurement tasks in general.\n\nTasks in this queue may be flushed by calling `Polymer.RenderStatus.flush()`.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/render-status.html",
                "start": {
                  "line": 90,
                  "column": 4
                },
                "end": {
                  "line": 95,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "*",
                  "desc": "Context object the callback function will be bound to",
                  "name": "context"
                },
                {
                  "type": "function ()",
                  "desc": "Callback function",
                  "name": "callback"
                },
                {
                  "type": "Array",
                  "desc": "An array of arguments to call the callback function with",
                  "name": "args"
                }
              ]
            },
            {
              "name": "Polymer.RenderStatus.afterNextRender",
              "description": "Enqueues a callback which will be run after the next render, equivalent\nto one task (`setTimeout`) after the next `requestAnimationFrame`.\n\nThis method is useful for tuning the first-render performance of an\nelement or application by deferring non-critical work until after the\nfirst paint.  Typical non-render-critical work may include adding UI\nevent listeners and aria attributes.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/render-status.html",
                "start": {
                  "line": 111,
                  "column": 4
                },
                "end": {
                  "line": 116,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "*",
                  "desc": "Context object the callback function will be bound to",
                  "name": "context"
                },
                {
                  "type": "function ()",
                  "desc": "Callback function",
                  "name": "callback"
                },
                {
                  "type": "Array",
                  "desc": "An array of arguments to call the callback function with",
                  "name": "args"
                }
              ]
            }
          ]
        },
        {
          "name": "Polymer.ArraySplice",
          "description": "",
          "summary": "Module that provides utilities for diffing arrays.",
          "sourceRange": {
            "file": "lib/utils/array-splice.html",
            "start": {
              "line": 282,
              "column": 2
            },
            "end": {
              "line": 317,
              "column": 3
            }
          },
          "functions": [
            {
              "name": "Polymer.ArraySplice.calculateSplices",
              "description": "Returns an array of splice records indicating the minimum edits required\nto transform the `previous` array into the `current` array.\n\nSplice records are ordered by index and contain the following fields:\n- `index`: index where edit started\n- `removed`: array of removed items from this index\n- `addedCount`: number of items added at this index\n\nThis function is based on the Levenshtein \"minimum edit distance\"\nalgorithm. Note that updates are treated as removal followed by addition.\n\nThe worst-case time complexity of this algorithm is `O(l * p)`\n  l: The length of the current array\n  p: The length of the previous array\n\nHowever, the worst-case complexity is reduced by an `O(n)` optimization\nto detect any shared prefix & suffix between the two arrays and only\nperform the more expensive minimum edit distance calculation over the\nnon-shared portions of the arrays.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/array-splice.html",
                "start": {
                  "line": 314,
                  "column": 4
                },
                "end": {
                  "line": 316,
                  "column": 5
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "Array",
                  "desc": "The \"changed\" array for which splices will be\ncalculated.",
                  "name": "current"
                },
                {
                  "type": "Array",
                  "desc": "The \"unchanged\" original array to compare\n`current` against to determine the splices.",
                  "name": "previous"
                }
              ],
              "return": {
                "type": "Array",
                "desc": "Returns an array of splice record objects. Each of these\ncontains: `index` the location where the splice occurred; `removed`\nthe array of removed items from this location; `addedCount` the number\nof items added at this location."
              }
            }
          ]
        },
        {
          "name": "Polymer.dom",
          "description": "Legacy DOM and Event manipulation API wrapper factory used to abstract\ndifferences between native Shadow DOM and \"Shady DOM\" when polyfilling on\nolder browsers.\n\nNote that in Polymer 2.x use of `Polymer.dom` is no longer required and\nin the majority of cases simply facades directly to the standard native\nAPI.",
          "summary": "Legacy DOM and Event manipulation API wrapper factory used to\nabstract differences between native Shadow DOM and \"Shady DOM.\"",
          "sourceRange": {
            "file": "lib/legacy/polymer.dom.html",
            "start": {
              "line": 294,
              "column": 2
            },
            "end": {
              "line": 301,
              "column": 4
            }
          },
          "functions": [
            {
              "name": "Polymer.dom.matchesSelector",
              "description": "Cross-platform `element.matches` shim.",
              "summary": "",
              "sourceRange": {
                "file": "lib/legacy/polymer.dom.html",
                "start": {
                  "line": 31,
                  "column": 2
                },
                "end": {
                  "line": 33,
                  "column": 3
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "Node",
                  "desc": "Node to check selector against",
                  "name": "node"
                },
                {
                  "type": "string",
                  "desc": "Selector to match",
                  "name": "selector"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if node matched selector"
              }
            }
          ]
        },
        {
          "name": "Polymer.Templatize",
          "description": "Module for preparing and stamping instances of templates that utilize\nPolymer's data-binding and declarative event listener features.\n\nExample:\n\n    // Get a template from somewhere, e.g. light DOM\n    let template = this.querySelector('template');\n    // Prepare the template\n    let TemplateClass = Polymer.Templatize.templatize(template);\n    // Instance the template with an initial data model\n    let instance = new TemplateClass({myProp: 'initial'});\n    // Insert the instance's DOM somewhere, e.g. element's shadow DOM\n    this.shadowRoot.appendChild(instance.root);\n    // Changing a property on the instance will propagate to bindings\n    // in the template\n    instance.myProp = 'new value';\n\nThe `options` dictionary passed to `templatize` allows for customizing\nfeatures of the generated template class, including how outer-scope host\nproperties should be forwarded into template instances, how any instance\nproperties added into the template's scope should be notified out to\nthe host, and whether the instance should be decorated as a \"parent model\"\nof any event handlers.\n\n    // Customze property forwarding and event model decoration\n    let TemplateClass = Polymer.Templatize.templatize(template, this, {\n      parentModel: true,\n      instanceProps: {...},\n      forwardHostProp(property, value) {...},\n      notifyInstanceProp(instance, property, value) {...},\n    });",
          "summary": "Module for preparing and stamping instances of templates\n  utilizing Polymer templating features.",
          "sourceRange": {
            "file": "lib/utils/templatize.html",
            "start": {
              "line": 336,
              "column": 4
            },
            "end": {
              "line": 466,
              "column": 5
            }
          },
          "functions": [
            {
              "name": "Polymer.Templatize.templatize",
              "description": "Returns an anonymous `Polymer.PropertyEffects` class bound to the\n`<template>` provided.  Instancing the class will result in the\ntemplate being stamped into document fragment stored as the instance's\n`root` property, after which it can be appended to the DOM.\n\nTemplates may utilize all Polymer data-binding features as well as\ndeclarative event listeners.  Event listeners and inline computing\nfunctions in the template will be called on the host of the template.\n\nThe constructor returned takes a single argument dictionary of initial\nproperty values to propagate into template bindings.  Additionally\nhost properties can be forwarded in, and instance properties can be\nnotified out by providing optional callbacks in the `options` dictionary.\n\nValid configuration in `options` are as follows:\n\n- `forwardHostProp(property, value)`: Called when a property referenced\n  in the template changed on the template's host. As this library does\n  not retain references to templates instanced by the user, it is the\n  templatize owner's responsibility to forward host property changes into\n  user-stamped instances.  The `instance.forwardHostProp(property, value)`\n   method on the generated class should be called to forward host\n  properties into the template to prevent unnecessary property-changed\n  notifications. Any properties referenced in the template that are not\n  defined in `instanceProps` will be notified up to the template's host\n  automatically.\n- `instanceProps`: Dictionary of property names that will be added\n  to the instance by the templatize owner.  These properties shadow any\n  host properties, and changes within the template to these properties\n  will result in `notifyInstanceProp` being called.\n- `mutableData`: When `true`, the generated class will skip strict\n  dirty-checking for objects and arrays (always consider them to be\n  \"dirty\").\n- `notifyInstanceProp(instance, property, value)`: Called when\n  an instance property changes.  Users may choose to call `notifyPath`\n  on e.g. the owner to notify the change.\n- `parentModel`: When `true`, events handled by declarative event listeners\n  (`on-event=\"handler\"`) will be decorated with a `model` property pointing\n  to the template instance that stamped it.  It will also be returned\n  from `instance.parentModel` in cases where template instance nesting\n  causes an inner model to shadow an outer model.\n\nNote that the class returned from `templatize` is generated only once\nfor a given `<template>` using `options` from the first call for that\ntemplate, and the cached class is returned for all subsequent calls to\n`templatize` for that template.  As such, `options` callbacks should not\nclose over owner-specific properties since only the first `options` is\nused; rather, callbacks are called bound to the `owner`, and so context\nneeded from the callbacks (such as references to `instances` stamped)\nshould be stored on the `owner` such that they can be retrieved via `this`.",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/templatize.html",
                "start": {
                  "line": 398,
                  "column": 6
                },
                "end": {
                  "line": 421,
                  "column": 7
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "HTMLTemplateElement",
                  "desc": "Template to templatize",
                  "name": "template"
                },
                {
                  "type": "*",
                  "desc": "Owner of the template instances; any optional callbacks\n  will be bound to this owner.",
                  "name": "owner"
                },
                {
                  "type": "*=",
                  "desc": "Options dictionary (see summary for details)",
                  "name": "options"
                }
              ],
              "return": {
                "type": "TemplateInstanceBase",
                "desc": "Generated class bound to the template\n  provided"
              }
            },
            {
              "name": "Polymer.Templatize.modelForElement",
              "description": "Returns the template \"model\" associated with a given element, which\nserves as the binding scope for the template instance the element is\ncontained in. A template model is an instance of\n`TemplateInstanceBase`, and should be used to manipulate data\nassociated with this template instance.\n\nExample:\n\n  let model = modelForElement(el);\n  if (model.index < 10) {\n    model.set('item.checked', true);\n  }",
              "summary": "",
              "sourceRange": {
                "file": "lib/utils/templatize.html",
                "start": {
                  "line": 444,
                  "column": 6
                },
                "end": {
                  "line": 465,
                  "column": 7
                }
              },
              "privacy": "public",
              "params": [
                {
                  "type": "HTMLTemplateElement",
                  "desc": "The model will be returned for\n  elements stamped from this template",
                  "name": "template"
                },
                {
                  "type": "HTMLElement",
                  "desc": "Element for which to return a template model.",
                  "name": "el"
                }
              ],
              "return": {
                "type": "TemplateInstanceBase",
                "desc": "Template instance representing the\n  binding scope for the element"
              }
            }
          ]
        }
      ],
      "elements": [
        {
          "description": "The `dom-module` element registers the dom it contains to the name given\nby the module's id attribute. It provides a unified database of dom\naccessible via its static `import` API.\n\nA key use case of `dom-module` is for providing custom element `<template>`s\nvia HTML imports that are parsed by the native HTML parser, that can be\nrelocated during a bundling pass and still looked up by `id`.\n\nExample:\n\n    <dom-module id=\"foo\">\n      <img src=\"stuff.png\">\n    </dom-module>\n\nThen in code in some other location that cannot access the dom-module above\n\n    let img = document.createElement('dom-module').import('foo', 'img');",
          "summary": "Custom element that provides a registry of relocatable DOM content\n  by `id` that is agnostic to bundling.",
          "path": "lib/elements/dom-module.html",
          "properties": [],
          "methods": [
            {
              "name": "attributeChangedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 74,
                  "column": 4
                },
                "end": {
                  "line": 78,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name"
                },
                {
                  "name": "old"
                },
                {
                  "name": "value"
                }
              ]
            },
            {
              "name": "register",
              "description": "Registers the dom-module at a given id. This method should only be called\nwhen a dom-module is imperatively created. For\nexample, `document.createElement('dom-module').register('foo')`.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 111,
                  "column": 4
                },
                "end": {
                  "line": 122,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "id",
                  "type": "string=",
                  "description": "The id at which to register the dom-module."
                }
              ]
            }
          ],
          "staticMethods": [],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 51,
              "column": 2
            },
            "end": {
              "line": 123,
              "column": 3
            }
          },
          "privacy": "public",
          "superclass": "HTMLElement",
          "name": "Polymer.DomModule",
          "attributes": [
            {
              "name": "id",
              "description": "",
              "sourceRange": {
                "start": {
                  "line": 53,
                  "column": 46
                },
                "end": {
                  "line": 53,
                  "column": 50
                }
              },
              "metadata": {}
            }
          ],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": [],
          "tagname": "dom-module"
        },
        {
          "description": "Base class that provides the core API for Polymer's meta-programming\nfeatures including template stamping, data-binding, attribute deserialization,\nand property change observation.",
          "summary": "Custom element base class that provides the core API for Polymer's\n  key meta-programming features including template stamping, data-binding,\n  attribute deserialization, and property change observation",
          "path": "polymer-element.html",
          "properties": [],
          "methods": [
            {
              "name": "_stampTemplate",
              "description": "Stamps the provided template and performs instance-time setup for\nPolymer template features, including data bindings, declarative event\nlisteners, and the `this.$` map of `id`'s to nodes.  A document fragment\nis returned containing the stamped DOM, ready for insertion into the\nDOM.\n\nThis method may be called more than once; however note that due to\n`shadycss` polyfill limitations, only styles from templates prepared\nusing `ShadyCSS.prepareTemplate` will be correctly polyfilled (scoped\nto the shadow root and support CSS custom properties), and note that\n`ShadyCSS.prepareTemplate` may only be called once per element. As such,\nany styles required by in runtime-stamped templates must be included\nin the main element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2235,
                  "column": 6
                },
                "end": {
                  "line": 2260,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to stamp"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Cloned template content"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addMethodEventListenerToNode",
              "description": "Adds an event listener by method name for the event provided.\n\nThis method generates a handler function that looks up the method\nname at handling time.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/template-stamp.html",
                "start": {
                  "line": 443,
                  "column": 6
                },
                "end": {
                  "line": 448,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add listener on"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of method"
                },
                {
                  "name": "context",
                  "type": "*=",
                  "description": "Context the method will be called on (defaults\n  to `node`)"
                }
              ],
              "return": {
                "type": "Function",
                "desc": "Generated handler function"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_addEventListenerToNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/template-stamp.html",
                "start": {
                  "line": 457,
                  "column": 6
                },
                "end": {
                  "line": 459,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add event listener to"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to add"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_removeEventListenerFromNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/template-stamp.html",
                "start": {
                  "line": 468,
                  "column": 6
                },
                "end": {
                  "line": 470,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to remove event listener from"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to remove"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "attributeChangedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`attributeChangedCallback`.\n\nBy default, attributes declared in `properties` metadata are\ndeserialized using their `type` information to properties of the\nsame name.  \"Dash-cased\" attributes are deserialzed to \"camelCase\"\nproperties.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 717,
                  "column": 6
                },
                "end": {
                  "line": 725,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name"
                },
                {
                  "name": "old"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_initializeProperties",
              "description": "Overrides the default `Polymer.PropertyAccessors` to ensure class\nmetaprogramming related to property accessors and effects has\ncompleted (calls `finalize`).\n\nIt also initializes any property defaults provided via `value` in\n`properties` metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 577,
                  "column": 6
                },
                "end": {
                  "line": 617,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_initializeProtoProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to provide a\nmore efficient implementation of initializing properties from\nthe prototype on the instance.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1107,
                  "column": 6
                },
                "end": {
                  "line": 1111,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_initializeInstanceProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to avoid setting\n`_setProperty`'s `shouldNotify: true`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1119,
                  "column": 6
                },
                "end": {
                  "line": 1128,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_ensureAttribute",
              "description": "Ensures the element has the given attribute. If it does not,\nassigns the given value to the attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 204,
                  "column": 6
                },
                "end": {
                  "line": 208,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to ensure is set."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_attributeToProperty",
              "description": "Deserializes an attribute to its associated property.\n\nThis method calls the `_deserializeValue` method to convert the string to\na typed value.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 220,
                  "column": 6
                },
                "end": {
                  "line": 226,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to deserialize."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "type to deserialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_propertyToAttribute",
              "description": "Serializes a property to its associated attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 235,
                  "column": 6
                },
                "end": {
                  "line": 241,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name to reflect."
                },
                {
                  "name": "attribute",
                  "type": "string=",
                  "description": "Attribute name to reflect."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Property value to refect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_valueToNodeAttribute",
              "description": "Sets a typed value to an HTML attribute on a node.\n\nThis method calls the `_serializeValue` method to convert the typed\nvalue to a string.  If the `_serializeValue` method returns `undefined`,\nthe attribute will be removed (this is the default for boolean\ntype `false`).",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 255,
                  "column": 6
                },
                "end": {
                  "line": 262,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to set attribute to."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to serialize."
                },
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Attribute name to serialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_serializeValue",
              "description": "Converts a typed JavaScript value to a string.\n\nThis method is called by Polymer when setting JS property values to\nHTML attributes.  Users may override this method on Polymer element\nprototypes to provide serialization for custom types.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 274,
                  "column": 6
                },
                "end": {
                  "line": 294,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Property value to serialize."
                }
              ],
              "return": {
                "type": "(string|undefined)",
                "desc": "String serialized from the provided property value."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_deserializeValue",
              "description": "Converts a string to a typed JavaScript value.\n\nThis method is called by Polymer when reading HTML attribute values to\nJS properties.  Users may override this method on Polymer element\nprototypes to provide deserialization for custom `type`s.  Note,\nthe `type` argument is the value of the `type` field provided in the\n`properties` configuration object for a given property, and is\nby convention the constructor for the type to deserialize.\n\nNote: The return value of `undefined` is used as a sentinel value to\nindicate the attribute should be removed.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 313,
                  "column": 6
                },
                "end": {
                  "line": 355,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "string",
                  "description": "Attribute value to deserialize."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "Type to deserialize the string to."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Typed value deserialized from the provided string."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_createPropertyAccessor",
              "description": "Creates a setter/getter pair for the named property with its own\nlocal storage.  The getter returns the value in the local storage,\nand the setter calls `_setProperty`, which updates the local storage\nfor the property and enqueues a `_propertiesChanged` callback.\n\nThis method may be called on a prototype or an instance.  Calling\nthis method may overwrite a property value that already exists on\nthe prototype/instance by creating the accessor.  When calling on\na prototype, any overwritten values are saved in `__dataProto`,\nand it is up to the subclasser to decide how/when to set those\nproperties back into the accessor.  When calling on an instance,\nthe overwritten value is set via `_setPendingProperty`, and the\nuser should call `_invalidateProperties` or `_flushProperties`\nfor the values to take effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 379,
                  "column": 6
                },
                "end": {
                  "line": 395,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "readOnly",
                  "type": "boolean=",
                  "description": "When true, no setter is created; the\n  protected `_setProperty` function must be used to set the property"
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_hasAccessor",
              "description": "Returns true if this library created an accessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 403,
                  "column": 6
                },
                "end": {
                  "line": 405,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if an accessor was created"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_setProperty",
              "description": "Overrides base implementation to ensure all accessors set `shouldNotify`\nto true, for per-property notification tracking.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1389,
                  "column": 6
                },
                "end": {
                  "line": 1393,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingProperty",
              "description": "Overrides the `PropertyAccessors` implementation to introduce special\ndirty check logic depending on the property & value being set:\n\n1. Any value set to a path (e.g. 'obj.prop': 42 or 'obj.prop': {...})\n   Stored in `__dataTemp`, dirty checked against `__dataTemp`\n2. Object set to simple property (e.g. 'prop': {...})\n   Stored in `__dataTemp` and `__data`, dirty checked against\n   `__dataTemp` by default implementation of `_shouldPropertyChange`\n3. Primitive value set to simple property (e.g. 'prop': 42)\n   Stored in `__data`, dirty checked against `__data`\n\nThe dirty-check is important to prevent cycles due to two-way\nnotification, but paths and objects are only dirty checked against any\nprevious value set during this turn via a \"temporary cache\" that is\ncleared when the last `_propertiesChaged` exits. This is so:\na. any cached array paths (e.g. 'array.3.prop') may be invalidated\n   due to array mutations like shift/unshift/splice; this is fine\n   since path changes are dirty-checked at user entry points like `set`\nb. dirty-checking for objects only lasts one turn to allow the user\n   to mutate the object in-place and re-set it with the same identity\n   and have all sub-properties re-propagated in a subsequent turn.\n\nThe temp cache is not necessarily sufficient to prevent invalid array\npaths, since a splice can happen during the same turn (with pathological\nuser code); we could introduce a \"fixup\" for temporarily cached array\npaths if needed: https://github.com/Polymer/polymer/issues/4227",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1353,
                  "column": 6
                },
                "end": {
                  "line": 1381,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                },
                {
                  "name": "shouldNotify"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_isPropertyPending",
              "description": "Returns true if the specified property has a pending change.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 456,
                  "column": 6
                },
                "end": {
                  "line": 458,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if property has a pending change"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_invalidateProperties",
              "description": "Overrides `PropertyAccessor`'s default async queuing of\n`_propertiesChanged`: if `__dataReady` is false (has not yet been\nmanually flushed), the function no-ops; otherwise flushes\n`_propertiesChanged` synchronously.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1403,
                  "column": 6
                },
                "end": {
                  "line": 1407,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enableProperties",
              "description": "Call to enable property accessor processing. Before this method is\ncalled accessor values will be set but side effects are\nqueued. When called, any pending side effects occur immediately.\nFor elements, generally `connectedCallback` is a normal spot to do so.\nIt is safe to call this method multiple times as it only turns on\nproperty accessors once.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 486,
                  "column": 6
                },
                "end": {
                  "line": 495,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_flushProperties",
              "description": "Calls the `_propertiesChanged` callback with the current set of\npending changes (and old values recorded when pending changes were\nset), and resets the pending set of changes. Generally, this method\nshould not be called in user code.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 506,
                  "column": 6
                },
                "end": {
                  "line": 514,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "ready",
              "description": "Stamps the element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 649,
                  "column": 6
                },
                "end": {
                  "line": 655,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_propertiesChanged",
              "description": "Implements `PropertyAccessors`'s properties changed callback.\n\nRuns each class of effects for the batch of changed properties in\na specific order (compute, propagate, reflect, observe, notify).",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1542,
                  "column": 6
                },
                "end": {
                  "line": 1575,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "currentProps"
                },
                {
                  "name": "changedProps"
                },
                {
                  "name": "oldProps"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_shouldPropertyChange",
              "description": "Method called to determine whether a property value should be\nconsidered as a change and cause the `_propertiesChanged` callback\nto be enqueued.\n\nThe default implementation returns `true` for primitive types if a\nstrict equality check fails, and returns `true` for all Object/Arrays.\nThe method always returns false for `NaN`.\n\nOverride this method to e.g. provide stricter checking for\nObjects/Arrays when using immutable patterns.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 569,
                  "column": 6
                },
                "end": {
                  "line": 576,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change\n  and enqueue a `_proeprtiesChanged` callback"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_addPropertyEffect",
              "description": "Equivalent to static `addPropertyEffect` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1142,
                  "column": 6
                },
                "end": {
                  "line": 1150,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removePropertyEffect",
              "description": "Removes the given property effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1159,
                  "column": 6
                },
                "end": {
                  "line": 1165,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property the effect was associated with"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object to remove"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasPropertyEffect",
              "description": "Returns whether the current prototype/instance has a property effect\nof a certain type.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1176,
                  "column": 6
                },
                "end": {
                  "line": 1179,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "type",
                  "type": "string=",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReadOnlyEffect",
              "description": "Returns whether the current prototype/instance has a \"read only\"\naccessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1189,
                  "column": 6
                },
                "end": {
                  "line": 1191,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasNotifyEffect",
              "description": "Returns whether the current prototype/instance has a \"notify\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1201,
                  "column": 6
                },
                "end": {
                  "line": 1203,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReflectEffect",
              "description": "Returns whether the current prototype/instance has a \"reflect to attribute\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1213,
                  "column": 6
                },
                "end": {
                  "line": 1215,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasComputedEffect",
              "description": "Returns whether the current prototype/instance has a \"computed\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1225,
                  "column": 6
                },
                "end": {
                  "line": 1227,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingPropertyOrPath",
              "description": "Sets a pending property or path.  If the root property of the path in\nquestion had no accessor, the path is set, otherwise it is enqueued\nvia `_setPendingProperty`.\n\nThis function isolates relatively expensive functionality necessary\nfor the public API (`set`, `setProperties`, `notifyPath`, and property\nchange listeners via {{...}} bindings), such that it is only done\nwhen paths enter the system, and not at every propagation step.  It\nalso sets a `__dataHasPaths` flag on the instance which is used to\nfast-path slower path-matching code in the property effects host paths.\n\n`path` can be a path string or array of path parts as accepted by the\npublic API.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1259,
                  "column": 6
                },
                "end": {
                  "line": 1291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(number|string)>)",
                  "description": "Path to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set"
                },
                {
                  "name": "shouldNotify",
                  "type": "boolean=",
                  "description": "Set to true if this change should\n cause a property notification event dispatch"
                },
                {
                  "name": "isPathNotification",
                  "type": "boolean=",
                  "description": "If the path being set is a path\n  notification of an already changed value, as opposed to a request\n  to set and notify the change.  In the latter `false` case, a dirty\n  check is performed and then the value is set to the path before\n  enqueuing the pending property change."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if the property/path was enqueued in\n  the pending changes bag."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setUnmanagedPropertyToNode",
              "description": "Applies a value to a non-Polymer element/node's property.\n\nThe implementation makes a best-effort at binding interop:\nSome native element properties have side-effects when\nre-setting the same value (e.g. setting `<input>.value` resets the\ncursor position), so we do a dirty-check before setting the value.\nHowever, for better interop with non-Polymer custom elements that\naccept objects, we explicitly re-set object changes coming from the\nPolymer world (which may include deep object changes without the\ntop reference changing), erring on the side of providing more\ninformation.\n\nUsers may override this method to provide alternate approaches.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1313,
                  "column": 6
                },
                "end": {
                  "line": 1321,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "The node to set a property on"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "The property to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "The value to set"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enqueueClient",
              "description": "Enqueues the given client on a list of pending clients, whose\npending property changes can later be flushed via a call to\n`_flushClients`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1417,
                  "column": 6
                },
                "end": {
                  "line": 1422,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "client",
                  "type": "Object",
                  "description": "PropertyEffects client to enqueue"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_flushClients",
              "description": "Flushes any clients previously enqueued via `_enqueueClient`, causing\ntheir `_flushProperties` method to run.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1430,
                  "column": 6
                },
                "end": {
                  "line": 1441,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "__enableOrFlushClients",
              "description": "(c) the stamped dom enables.",
              "privacy": "private",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1455,
                  "column": 6
                },
                "end": {
                  "line": 1468,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_readyClients",
              "description": "Implements `PropertyEffects`'s `_readyClients` call. Attaches\nelement dom by calling `_attachDom` with the dom stamped from the\nelement's template via `_stampTemplate`. Note that this allows\nclient dom to be attached to the element prior to any observers\nrunning.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 666,
                  "column": 6
                },
                "end": {
                  "line": 675,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "setProperties",
              "description": "Sets a bag of property changes to this instance, and\nsynchronously processes all effects of the properties as a batch.\n\nProperty names must be simple properties, not paths.  Batched\npath propagation is not supported.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1495,
                  "column": 6
                },
                "end": {
                  "line": 1506,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of one or more key-value pairs whose key is\n  a property and value is the new value to set for that property."
                },
                {
                  "name": "setReadOnly",
                  "type": "boolean=",
                  "description": "When true, any private values set in\n  `props` will be set. By default, `setProperties` will not set\n  `readOnly: true` root properties."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_propagatePropertyChanges",
              "description": "Called to propagate any property changes to stamped template nodes\nmanaged by this element.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1586,
                  "column": 6
                },
                "end": {
                  "line": 1596,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "changedProps",
                  "type": "Object",
                  "description": "Bag of changed properties"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "linkPaths",
              "description": "Aliases one data path as another, such that path notifications from one\nare routed to the other.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1606,
                  "column": 6
                },
                "end": {
                  "line": 1611,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "to",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to link."
                },
                {
                  "name": "from",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Source path to link."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unlinkPaths",
              "description": "Removes a data path alias previously established with `_linkPaths`.\n\nNote, the path to unlink should be the target (`to`) used when\nlinking the paths.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1622,
                  "column": 6
                },
                "end": {
                  "line": 1627,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to unlink."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifySplices",
              "description": "Notify that an array has changed.\n\nExample:\n\n    this.items = [ {name: 'Jim'}, {name: 'Todd'}, {name: 'Bill'} ];\n    ...\n    this.items.splice(1, 1, {name: 'Sam'});\n    this.items.push({name: 'Bob'});\n    this.notifySplices('items', [\n      { index: 1, removed: [{name: 'Todd'}], addedCount: 1, obect: this.items, type: 'splice' },\n      { index: 3, removed: [], addedCount: 1, object: this.items, type: 'splice'}\n    ]);",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1658,
                  "column": 6
                },
                "end": {
                  "line": 1662,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "splices",
                  "type": "Array",
                  "description": "Array of splice records indicating ordered\n  changes that occurred to the array. Each record should have the\n  following fields:\n   * index: index at which the change occurred\n   * removed: array of items that were removed from this index\n   * addedCount: number of new items added at this index\n   * object: a reference to the array in question\n   * type: the string literal 'splice'\n\n  Note that splice records _must_ be normalized such that they are\n  reported in index order (raw results from `Object.observe` are not\n  ordered and must be normalized/merged before notifying)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "get",
              "description": "Convenience method for reading a value from a path.\n\nNote, if any part in the path is undefined, this method returns\n`undefined` (this method does not throw when dereferencing undefined\npaths).",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1683,
                  "column": 6
                },
                "end": {
                  "line": 1685,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to read.  The path may be specified as a string (e.g. `foo.bar.baz`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `users.12.name` or `['users', 12, 'name']`)."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value at the path, or `undefined` if any part of the path\n  is undefined."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "set",
              "description": "Convenience method for setting a value to a path and notifying any\nelements bound to the same path.\n\nNote, if any part in the path except for the last is undefined,\nthis method does nothing (this method does not throw when\ndereferencing undefined paths).",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1707,
                  "column": 6
                },
                "end": {
                  "line": 1717,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to write.  The path may be specified as a string (e.g. `'foo.bar.baz'`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `'users.12.name'` or `['users', 12, 'name']`)."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set at the specified path."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated.\n  When specified, no notification will occur."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "push",
              "description": "Adds items onto the end of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1733,
                  "column": 6
                },
                "end": {
                  "line": 1742,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "pop",
              "description": "Removes an item from the end of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1757,
                  "column": 6
                },
                "end": {
                  "line": 1766,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "splice",
              "description": "Starting from the start index specified, removes 0 or more items\nfrom the array and inserts 0 or more new items in their place.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.splice`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1785,
                  "column": 6
                },
                "end": {
                  "line": 1802,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "start",
                  "type": "number",
                  "description": "Index from which to start removing/inserting."
                },
                {
                  "name": "deleteCount",
                  "type": "number",
                  "description": "Number of items to remove."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "Array",
                "desc": "Array of removed items."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "shift",
              "description": "Removes an item from the beginning of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1817,
                  "column": 6
                },
                "end": {
                  "line": 1826,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unshift",
              "description": "Adds items onto the beginning of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1842,
                  "column": 6
                },
                "end": {
                  "line": 1850,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifyPath",
              "description": "Notify that a path has changed.\n\nExample:\n\n    this.item.user.name = 'Bob';\n    this.notifyPath('item.user.name');",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1864,
                  "column": 6
                },
                "end": {
                  "line": 1881,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Value at the path (optional)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReadOnlyProperty",
              "description": "Equivalent to static `createReadOnlyProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1893,
                  "column": 6
                },
                "end": {
                  "line": 1900,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createPropertyObserver",
              "description": "Equivalent to static `createPropertyObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1913,
                  "column": 6
                },
                "end": {
                  "line": 1923,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createMethodObserver",
              "description": "Equivalent to static `createMethodObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1935,
                  "column": 6
                },
                "end": {
                  "line": 1941,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createNotifyingProperty",
              "description": "Equivalent to static `createNotifyingProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1951,
                  "column": 6
                },
                "end": {
                  "line": 1959,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReflectedProperty",
              "description": "Equivalent to static `createReflectedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1969,
                  "column": 6
                },
                "end": {
                  "line": 1982,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createComputedProperty",
              "description": "Equivalent to static `createComputedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 1995,
                  "column": 6
                },
                "end": {
                  "line": 2001,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_bindTemplate",
              "description": "Equivalent to static `bindTemplate` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.\n\nThis method may be called on the prototype (for prototypical template\nbinding, to avoid creating accessors every instance) once per prototype,\nand will be called with `runtimeBinding: true` by `_stampTemplate` to\ncreate and link an instance of the template metadata associated with a\nparticular stamping.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2171,
                  "column": 6
                },
                "end": {
                  "line": 2194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                },
                {
                  "name": "instanceBinding",
                  "type": "boolean=",
                  "description": "When false (default), performs\n  \"prototypical\" binding of the template and overwrites any previously\n  bound template for the class. When true (as passed from\n  `_stampTemplate`), the template info is instanced and linked into\n  the list of bound templates."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object; for `runtimeBinding`,\n  this is an instance of the prototypical template info"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removeBoundDom",
              "description": "Removes and unbinds the nodes previously contained in the provided\nDocumentFragment returned from `_stampTemplate`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2270,
                  "column": 6
                },
                "end": {
                  "line": 2291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "DocumentFragment",
                  "description": "DocumentFragment previously returned\n  from `_stampTemplate` associated with the nodes to be removed"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "connectedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`connectedCallback`.\n\nThe default implementation enables the property effects system and\nflushes any pending properties, and updates shimmed CSS properties\nwhen using the ShadyCSS scoping/custom properties polyfill.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 629,
                  "column": 6
                },
                "end": {
                  "line": 634,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "disconnectedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`disconnectedCallback`.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 642,
                  "column": 6
                },
                "end": {
                  "line": 642,
                  "column": 31
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_attachDom",
              "description": "Attaches an element's stamped dom to itself. By default,\nthis method creates a `shadowRoot` and adds the dom to it.\nHowever, this method may be overridden to allow an element\nto put its dom in another location.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 689,
                  "column": 6
                },
                "end": {
                  "line": 704,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "NodeList",
                  "description": "to attach to the element."
                }
              ],
              "return": {
                "type": "Node",
                "desc": "node to which the dom has been attached."
              },
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "updateStyles",
              "description": "When using the ShadyCSS scoping and custom property shim, causes all\nshimmed styles in this element (and its subtree) to be updated\nbased on current custom property values.\n\nThe optional parameter overrides inline custom property styles with an\nobject of properties where the keys are CSS properties, and the values\nare strings.\n\nExample: `this.updateStyles({'--color': 'blue'})`\n\nThese properties are retained unless a value of `null` is set.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 743,
                  "column": 6
                },
                "end": {
                  "line": 747,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "properties",
                  "type": "Object=",
                  "description": "Bag of custom property key/values to\n  apply to this element."
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "resolveUrl",
              "description": "Rewrites a given URL relative to a base URL. The base URL defaults to\nthe original location of the document containing the `dom-module` for\nthis element. This method will return the same URL before and after\nbundling.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 760,
                  "column": 6
                },
                "end": {
                  "line": 765,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "url",
                  "type": "string",
                  "description": "URL to resolve."
                },
                {
                  "name": "base",
                  "type": "string=",
                  "description": "Optional base URL to resolve against, defaults\nto the element's `importPath`"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Rewritten URL relative to base"
              },
              "inheritedFrom": "Polymer.ElementMixin"
            }
          ],
          "staticMethods": [
            {
              "name": "_parseTemplate",
              "description": "Scans a template to produce template metadata.\n\nTemplate-specific metadata are stored in the object returned, and node-\nspecific metadata are stored in objects in its flattened `nodeInfoList`\narray.  Only nodes in the template that were parsed as nodes of\ninterest contain an object in `nodeInfoList`.  Each `nodeInfo` object\ncontains an `index` (`childNodes` index in parent) and optionally\n`parent`, which points to node info of its parent (including its index).\n\nThe template metadata object returned from this method has the following\nstructure (many fields optional):\n\n```js\n  {\n    // Flattened list of node metadata (for nodes that generated metadata)\n    nodeInfoList: [\n      {\n        // `id` attribute for any nodes with id's for generating `$` map\n        id: {string},\n        // `on-event=\"handler\"` metadata\n        events: [\n          {\n            name: {string},   // event name\n            value: {string},  // handler method name\n          }, ...\n        ],\n        // Notes when the template contained a `<slot>` for shady DOM\n        // optimization purposes\n        hasInsertionPoint: {boolean},\n        // For nested `<template>`` nodes, nested template metadata\n        templateInfo: {object}, // nested template metadata\n        // Metadata to allow efficient retrieval of instanced node\n        // corresponding to this metadata\n        parentInfo: {number},   // reference to parent nodeInfo>\n        parentIndex: {number},  // index in parent's `childNodes` collection\n        infoIndex: {number},    // index of this `nodeInfo` in `templateInfo.nodeInfoList`\n      },\n      ...\n    ],\n    // When true, the template had the `strip-whitespace` attribute\n    // or was nested in a template with that setting\n    stripWhitespace: {boolean},\n    // For nested templates, nested template content is moved into\n    // a document fragment stored here; this is an optimization to\n    // avoid the cost of nested template cloning\n    content: {DocumentFragment}\n  }\n```\n\nThis method kicks off a recursive treewalk as follows:\n\n```\n   _parseTemplate <---------------------+\n     _parseTemplateContent              |\n       _parseTemplateNode  <------------|--+\n         _parseTemplateNestedTemplate --+  |\n         _parseTemplateChildNodes ---------+\n         _parseTemplateNodeAttributes\n           _parseTemplateNodeAttribute\n\n```\n\nThese methods may be overridden to add custom metadata about templates\nto either `templateInfo` or `nodeInfo`.\n\nNote that this method may be destructive to the template, in that\ne.g. event annotations may be removed after being noted in the\ntemplate metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/template-stamp.html",
                "start": {
                  "line": 195,
                  "column": 6
                },
                "end": {
                  "line": 206,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to parse"
                },
                {
                  "name": "outerTemplateInfo",
                  "type": "Object=",
                  "description": "Template metadata from the outer\n  template, for parsing nested templates"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Parsed template metadata"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateContent",
              "description": "Overrides `PropertyAccessors` to add map of dynamic functions on\ntemplate info, for consumption by `PropertyEffects` template binding\ncode. This map determines which method templates should have accessors\ncreated for them.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 775,
                  "column": 6
                },
                "end": {
                  "line": 778,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template"
                },
                {
                  "name": "templateInfo"
                },
                {
                  "name": "nodeInfo"
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_parseTemplateNode",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from `TextNode`'s' `textContent`.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2309,
                  "column": 6
                },
                "end": {
                  "line": 2323,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateChildNodes",
              "description": "Parses template child nodes for the given root node.\n\nThis method also wraps whitelisted legacy template extensions\n(`is=\"dom-if\"` and `is=\"dom-repeat\"`) with their equivalent element\nwrappers, collapses text nodes, and strips whitespace from the template\nif the `templateInfo.stripWhitespace` setting was provided.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/template-stamp.html",
                "start": {
                  "line": 254,
                  "column": 6
                },
                "end": {
                  "line": 288,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "root",
                  "type": "Node",
                  "description": "Root node whose `childNodes` will be parsed"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNestedTemplate",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nbinding the properties that a nested template depends on to the template\nas `_host_<property>`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2392,
                  "column": 6
                },
                "end": {
                  "line": 2402,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateNodeAttributes",
              "description": "Parses template node attributes and adds node metadata to `nodeInfo`\nfor nodes of interest.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/template-stamp.html",
                "start": {
                  "line": 326,
                  "column": 6
                },
                "end": {
                  "line": 335,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNodeAttribute",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from attributes.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2341,
                  "column": 6
                },
                "end": {
                  "line": 2377,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                },
                {
                  "name": "name"
                },
                {
                  "name": "value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_contentForTemplate",
              "description": "Returns the `content` document fragment for a given template.\n\nFor nested templates, Polymer performs an optimization to cache nested\ntemplate content to avoid the cost of cloning deeply nested templates.\nThis method retrieves the cached content for a given template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/template-stamp.html",
                "start": {
                  "line": 380,
                  "column": 6
                },
                "end": {
                  "line": 383,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to retrieve `content` for"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Content fragment"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "createPropertiesForAttributes",
              "description": "Generates property accessors for all attributes in the standard\nstatic `observedAttributes` array.\n\nAttribute names are mapped to property names using the `dash-case` to\n`camelCase` convention",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/property-accessors.html",
                "start": {
                  "line": 110,
                  "column": 6
                },
                "end": {
                  "line": 115,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "addPropertyEffect",
              "description": "Ensures an accessor exists for the specified property, and adds\nto a list of \"property effects\" that will run when the accessor for\nthe specified property is set.  Effects are grouped by \"type\", which\nroughly corresponds to a phase in effect processing.  The effect\nmetadata should be in the following form:\n\n  {\n    fn: effectFunction, // Reference to function to call to perform effect\n    info: { ... }       // Effect metadata passed to function\n    trigger: {          // Optional triggering metadata; if not provided\n      name: string      // the property is treated as a wildcard\n      structured: boolean\n      wildcard: boolean\n    }\n  }\n\nEffects are called from `_propertiesChanged` in the following order by\ntype:\n\n1. COMPUTE\n2. PROPAGATE\n3. REFLECT\n4. OBSERVE\n5. NOTIFY\n\nEffect functions are called with the following signature:\n\n  effectFunction(inst, path, props, oldProps, info, hasPaths)",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2040,
                  "column": 6
                },
                "end": {
                  "line": 2042,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createPropertyObserver",
              "description": "Creates a single-property observer for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2053,
                  "column": 6
                },
                "end": {
                  "line": 2055,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createMethodObserver",
              "description": "Creates a multi-property \"method observer\" based on the provided\nexpression, which should be a string in the form of a normal Javascript\nfunction signature: `'methodName(arg1, [..., argn])'`.  Each argument\nshould correspond to a property or path in the context of this\nprototype (or instance), or may be a literal string or number.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2069,
                  "column": 6
                },
                "end": {
                  "line": 2071,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createNotifyingProperty",
              "description": "Causes the setter for the given property to dispatch `<property>-changed`\nevents to notify of changes to the property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2080,
                  "column": 6
                },
                "end": {
                  "line": 2082,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReadOnlyProperty",
              "description": "Creates a read-only accessor for the given property.\n\nTo set the property, use the protected `_setProperty` API.\nTo create a custom protected setter (e.g. `_setMyProp()` for\nproperty `myProp`), pass `true` for `protectedSetter`.\n\nNote, if the property will have other property effects, this method\nshould be called first, before adding other effects.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2099,
                  "column": 6
                },
                "end": {
                  "line": 2101,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReflectedProperty",
              "description": "Causes the setter for the given property to reflect the property value\nto a (dash-cased) attribute of the same name.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2110,
                  "column": 6
                },
                "end": {
                  "line": 2112,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createComputedProperty",
              "description": "Creates a computed property whose value is set to the result of the\nmethod described by the given `expression` each time one or more\narguments to the method changes.  The expression should be a string\nin the form of a normal Javascript function signature:\n`'methodName(arg1, [..., argn])'`",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2127,
                  "column": 6
                },
                "end": {
                  "line": 2129,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating whether\n  method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "bindTemplate",
              "description": "Parses the provided template to ensure binding effects are created\nfor them, and then ensures property accessors are created for any\ndependent properties in the template.  Binding effects for bound\ntemplates are stored in a linked list on the instance so that\ntemplates can be efficiently stamped and unstamped.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2143,
                  "column": 6
                },
                "end": {
                  "line": 2145,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addTemplatePropertyEffect",
              "description": "Adds a property effect to the given template metadata, which is run\nat the \"propagate\" stage of `_propertiesChanged` when the template\nhas been bound to the element via `_bindTemplate`.\n\nThe `effect` object should match the format in `_addPropertyEffect`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2208,
                  "column": 6
                },
                "end": {
                  "line": 2214,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata to add effect to"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseBindings",
              "description": "Called to parse text in a template (either attribute values or\ntextContent) into binding metadata.\n\nAny overrides of this method should return an array of binding part\nmetadata  representing one or more bindings found in the provided text\nand any \"literal\" text in between.  Any non-literal parts will be passed\nto `_evaluateBinding` when any dependencies change.  The only required\nfields of each \"part\" in the returned array are as follows:\n\n- `dependencies` - Array containing trigger metadata for each property\n  that should trigger the binding to update\n- `literal` - String containing text if the part represents a literal;\n  in this case no `dependencies` are needed\n\nAdditional metadata for use by `_evaluateBinding` may be provided in\neach part object as needed.\n\nThe default implementation handles the following types of bindings\n(one or more may be intermixed with literal strings):\n- Property binding: `[[prop]]`\n- Path binding: `[[object.prop]]`\n- Negated property or path bindings: `[[!prop]]` or `[[!object.prop]]`\n- Two-way property or path bindings (supports negation):\n  `{{prop}}`, `{{object.prop}}`, `{{!prop}}` or `{{!object.prop}}`\n- Inline computed method (supports negation):\n  `[[compute(a, 'literal', b)]]`, `[[!compute(a, 'literal', b)]]`",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2437,
                  "column": 6
                },
                "end": {
                  "line": 2500,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "text",
                  "type": "string",
                  "description": "Text to parse from attribute or textContent"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Current template metadata"
                }
              ],
              "return": {
                "type": "Array.<Object>",
                "desc": "Array of binding part metadata"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_evaluateBinding",
              "description": "Called to evaluate a previously parsed binding part based on a set of\none or more changed dependencies.",
              "privacy": "protected",
              "sourceRange": {
                "file": "lib/mixins/property-effects.html",
                "start": {
                  "line": 2516,
                  "column": 6
                },
                "end": {
                  "line": 2533,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "inst",
                  "type": "HTMLElement",
                  "description": "Element that should be used as scope for\n  binding dependencies"
                },
                {
                  "name": "part",
                  "type": "Object",
                  "description": "Binding part metadata"
                },
                {
                  "name": "path",
                  "type": "string",
                  "description": "Property/path that triggered this effect"
                },
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of current property changes"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value the binding part evaluated to"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "finalize",
              "description": "Called automatically when the first element instance is created to\nensure that class finalization work has been completed.\nMay be called by users to eagerly perform class finalization work\nprior to the creation of the first element instance.\n\nClass finalization work generally includes meta-programming such as\ncreating property accessors and any property effect metadata needed for\nthe features used.",
              "privacy": "public",
              "sourceRange": {
                "file": "lib/mixins/element-mixin.html",
                "start": {
                  "line": 493,
                  "column": 6
                },
                "end": {
                  "line": 497,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 29,
              "column": 18
            },
            "end": {
              "line": 29,
              "column": 51
            }
          },
          "privacy": "public",
          "superclass": "HTMLElement",
          "name": "Polymer.Element",
          "attributes": [],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": [],
          "mixins": [
            "Polymer.ElementMixin"
          ]
        },
        {
          "description": "Custom element to allow using Polymer's template features (data binding,\ndeclarative event listeners, etc.) in the main document without defining\na new custom element.\n\n`<template>` tags utilizing bindings may be wrapped with the `<dom-bind>`\nelement, which will immediately stamp the wrapped template into the main\ndocument and bind elements to the `dom-bind` element itself as the\nbinding scope.",
          "summary": "Custom element to allow using Polymer's template features (data\n  binding, declarative event listeners, etc.) in the main document.",
          "path": "lib/elements/dom-bind.html",
          "properties": [],
          "methods": [
            {
              "name": "_stampTemplate",
              "description": "Stamps the provided template and performs instance-time setup for\nPolymer template features, including data bindings, declarative event\nlisteners, and the `this.$` map of `id`'s to nodes.  A document fragment\nis returned containing the stamped DOM, ready for insertion into the\nDOM.\n\nThis method may be called more than once; however note that due to\n`shadycss` polyfill limitations, only styles from templates prepared\nusing `ShadyCSS.prepareTemplate` will be correctly polyfilled (scoped\nto the shadow root and support CSS custom properties), and note that\n`ShadyCSS.prepareTemplate` may only be called once per element. As such,\nany styles required by in runtime-stamped templates must be included\nin the main element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2235,
                  "column": 6
                },
                "end": {
                  "line": 2260,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to stamp"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Cloned template content"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addMethodEventListenerToNode",
              "description": "Adds an event listener by method name for the event provided.\n\nThis method generates a handler function that looks up the method\nname at handling time.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 443,
                  "column": 6
                },
                "end": {
                  "line": 448,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add listener on"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of method"
                },
                {
                  "name": "context",
                  "type": "*=",
                  "description": "Context the method will be called on (defaults\n  to `node`)"
                }
              ],
              "return": {
                "type": "Function",
                "desc": "Generated handler function"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_addEventListenerToNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 457,
                  "column": 6
                },
                "end": {
                  "line": 459,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add event listener to"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to add"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_removeEventListenerFromNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 468,
                  "column": 6
                },
                "end": {
                  "line": 470,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to remove event listener from"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to remove"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "attributeChangedCallback",
              "description": "assumes only one observed attribute",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 53,
                  "column": 6
                },
                "end": {
                  "line": 55,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_initializeProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to initialize\nadditional property-effect related properties.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1086,
                  "column": 6
                },
                "end": {
                  "line": 1098,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_initializeProtoProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to provide a\nmore efficient implementation of initializing properties from\nthe prototype on the instance.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1107,
                  "column": 6
                },
                "end": {
                  "line": 1111,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_initializeInstanceProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to avoid setting\n`_setProperty`'s `shouldNotify: true`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1119,
                  "column": 6
                },
                "end": {
                  "line": 1128,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_ensureAttribute",
              "description": "Ensures the element has the given attribute. If it does not,\nassigns the given value to the attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 204,
                  "column": 6
                },
                "end": {
                  "line": 208,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to ensure is set."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_attributeToProperty",
              "description": "Deserializes an attribute to its associated property.\n\nThis method calls the `_deserializeValue` method to convert the string to\na typed value.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 220,
                  "column": 6
                },
                "end": {
                  "line": 226,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to deserialize."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "type to deserialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_propertyToAttribute",
              "description": "Serializes a property to its associated attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 235,
                  "column": 6
                },
                "end": {
                  "line": 241,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name to reflect."
                },
                {
                  "name": "attribute",
                  "type": "string=",
                  "description": "Attribute name to reflect."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Property value to refect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_valueToNodeAttribute",
              "description": "Sets a typed value to an HTML attribute on a node.\n\nThis method calls the `_serializeValue` method to convert the typed\nvalue to a string.  If the `_serializeValue` method returns `undefined`,\nthe attribute will be removed (this is the default for boolean\ntype `false`).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 255,
                  "column": 6
                },
                "end": {
                  "line": 262,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to set attribute to."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to serialize."
                },
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Attribute name to serialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_serializeValue",
              "description": "Converts a typed JavaScript value to a string.\n\nThis method is called by Polymer when setting JS property values to\nHTML attributes.  Users may override this method on Polymer element\nprototypes to provide serialization for custom types.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 274,
                  "column": 6
                },
                "end": {
                  "line": 294,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Property value to serialize."
                }
              ],
              "return": {
                "type": "(string|undefined)",
                "desc": "String serialized from the provided property value."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_deserializeValue",
              "description": "Converts a string to a typed JavaScript value.\n\nThis method is called by Polymer when reading HTML attribute values to\nJS properties.  Users may override this method on Polymer element\nprototypes to provide deserialization for custom `type`s.  Note,\nthe `type` argument is the value of the `type` field provided in the\n`properties` configuration object for a given property, and is\nby convention the constructor for the type to deserialize.\n\nNote: The return value of `undefined` is used as a sentinel value to\nindicate the attribute should be removed.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 313,
                  "column": 6
                },
                "end": {
                  "line": 355,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "string",
                  "description": "Attribute value to deserialize."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "Type to deserialize the string to."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Typed value deserialized from the provided string."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_createPropertyAccessor",
              "description": "Creates a setter/getter pair for the named property with its own\nlocal storage.  The getter returns the value in the local storage,\nand the setter calls `_setProperty`, which updates the local storage\nfor the property and enqueues a `_propertiesChanged` callback.\n\nThis method may be called on a prototype or an instance.  Calling\nthis method may overwrite a property value that already exists on\nthe prototype/instance by creating the accessor.  When calling on\na prototype, any overwritten values are saved in `__dataProto`,\nand it is up to the subclasser to decide how/when to set those\nproperties back into the accessor.  When calling on an instance,\nthe overwritten value is set via `_setPendingProperty`, and the\nuser should call `_invalidateProperties` or `_flushProperties`\nfor the values to take effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 379,
                  "column": 6
                },
                "end": {
                  "line": 395,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "readOnly",
                  "type": "boolean=",
                  "description": "When true, no setter is created; the\n  protected `_setProperty` function must be used to set the property"
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_hasAccessor",
              "description": "Returns true if this library created an accessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 403,
                  "column": 6
                },
                "end": {
                  "line": 405,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if an accessor was created"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_setProperty",
              "description": "Overrides base implementation to ensure all accessors set `shouldNotify`\nto true, for per-property notification tracking.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1389,
                  "column": 6
                },
                "end": {
                  "line": 1393,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingProperty",
              "description": "Overrides the `PropertyAccessors` implementation to introduce special\ndirty check logic depending on the property & value being set:\n\n1. Any value set to a path (e.g. 'obj.prop': 42 or 'obj.prop': {...})\n   Stored in `__dataTemp`, dirty checked against `__dataTemp`\n2. Object set to simple property (e.g. 'prop': {...})\n   Stored in `__dataTemp` and `__data`, dirty checked against\n   `__dataTemp` by default implementation of `_shouldPropertyChange`\n3. Primitive value set to simple property (e.g. 'prop': 42)\n   Stored in `__data`, dirty checked against `__data`\n\nThe dirty-check is important to prevent cycles due to two-way\nnotification, but paths and objects are only dirty checked against any\nprevious value set during this turn via a \"temporary cache\" that is\ncleared when the last `_propertiesChaged` exits. This is so:\na. any cached array paths (e.g. 'array.3.prop') may be invalidated\n   due to array mutations like shift/unshift/splice; this is fine\n   since path changes are dirty-checked at user entry points like `set`\nb. dirty-checking for objects only lasts one turn to allow the user\n   to mutate the object in-place and re-set it with the same identity\n   and have all sub-properties re-propagated in a subsequent turn.\n\nThe temp cache is not necessarily sufficient to prevent invalid array\npaths, since a splice can happen during the same turn (with pathological\nuser code); we could introduce a \"fixup\" for temporarily cached array\npaths if needed: https://github.com/Polymer/polymer/issues/4227",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1353,
                  "column": 6
                },
                "end": {
                  "line": 1381,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                },
                {
                  "name": "shouldNotify"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_isPropertyPending",
              "description": "Returns true if the specified property has a pending change.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 456,
                  "column": 6
                },
                "end": {
                  "line": 458,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if property has a pending change"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_invalidateProperties",
              "description": "Overrides `PropertyAccessor`'s default async queuing of\n`_propertiesChanged`: if `__dataReady` is false (has not yet been\nmanually flushed), the function no-ops; otherwise flushes\n`_propertiesChanged` synchronously.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1403,
                  "column": 6
                },
                "end": {
                  "line": 1407,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enableProperties",
              "description": "Call to enable property accessor processing. Before this method is\ncalled accessor values will be set but side effects are\nqueued. When called, any pending side effects occur immediately.\nFor elements, generally `connectedCallback` is a normal spot to do so.\nIt is safe to call this method multiple times as it only turns on\nproperty accessors once.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 486,
                  "column": 6
                },
                "end": {
                  "line": 495,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_flushProperties",
              "description": "Calls the `_propertiesChanged` callback with the current set of\npending changes (and old values recorded when pending changes were\nset), and resets the pending set of changes. Generally, this method\nshould not be called in user code.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 506,
                  "column": 6
                },
                "end": {
                  "line": 514,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "ready",
              "description": "Overrides `PropertyAccessors` so that property accessor\nside effects are not enabled until after client dom is fully ready.\nAlso calls `_flushClients` callback to ensure client dom is enabled\nthat was not enabled as a result of flushing properties.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1516,
                  "column": 6
                },
                "end": {
                  "line": 1532,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_propertiesChanged",
              "description": "Implements `PropertyAccessors`'s properties changed callback.\n\nRuns each class of effects for the batch of changed properties in\na specific order (compute, propagate, reflect, observe, notify).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1542,
                  "column": 6
                },
                "end": {
                  "line": 1575,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "currentProps"
                },
                {
                  "name": "changedProps"
                },
                {
                  "name": "oldProps"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_shouldPropertyChange",
              "description": "Method called to determine whether a property value should be\nconsidered as a change and cause the `_propertiesChanged` callback\nto be enqueued.\n\nThe default implementation returns `true` for primitive types if a\nstrict equality check fails, and returns `true` for all Object/Arrays.\nThe method always returns false for `NaN`.\n\nOverride this method to e.g. provide stricter checking for\nObjects/Arrays when using immutable patterns.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 569,
                  "column": 6
                },
                "end": {
                  "line": 576,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change\n  and enqueue a `_proeprtiesChanged` callback"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_addPropertyEffect",
              "description": "Equivalent to static `addPropertyEffect` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1142,
                  "column": 6
                },
                "end": {
                  "line": 1150,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removePropertyEffect",
              "description": "Removes the given property effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1159,
                  "column": 6
                },
                "end": {
                  "line": 1165,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property the effect was associated with"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object to remove"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasPropertyEffect",
              "description": "Returns whether the current prototype/instance has a property effect\nof a certain type.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1176,
                  "column": 6
                },
                "end": {
                  "line": 1179,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "type",
                  "type": "string=",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReadOnlyEffect",
              "description": "Returns whether the current prototype/instance has a \"read only\"\naccessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1189,
                  "column": 6
                },
                "end": {
                  "line": 1191,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasNotifyEffect",
              "description": "Returns whether the current prototype/instance has a \"notify\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1201,
                  "column": 6
                },
                "end": {
                  "line": 1203,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReflectEffect",
              "description": "Returns whether the current prototype/instance has a \"reflect to attribute\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1213,
                  "column": 6
                },
                "end": {
                  "line": 1215,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasComputedEffect",
              "description": "Returns whether the current prototype/instance has a \"computed\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1225,
                  "column": 6
                },
                "end": {
                  "line": 1227,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingPropertyOrPath",
              "description": "Sets a pending property or path.  If the root property of the path in\nquestion had no accessor, the path is set, otherwise it is enqueued\nvia `_setPendingProperty`.\n\nThis function isolates relatively expensive functionality necessary\nfor the public API (`set`, `setProperties`, `notifyPath`, and property\nchange listeners via {{...}} bindings), such that it is only done\nwhen paths enter the system, and not at every propagation step.  It\nalso sets a `__dataHasPaths` flag on the instance which is used to\nfast-path slower path-matching code in the property effects host paths.\n\n`path` can be a path string or array of path parts as accepted by the\npublic API.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1259,
                  "column": 6
                },
                "end": {
                  "line": 1291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(number|string)>)",
                  "description": "Path to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set"
                },
                {
                  "name": "shouldNotify",
                  "type": "boolean=",
                  "description": "Set to true if this change should\n cause a property notification event dispatch"
                },
                {
                  "name": "isPathNotification",
                  "type": "boolean=",
                  "description": "If the path being set is a path\n  notification of an already changed value, as opposed to a request\n  to set and notify the change.  In the latter `false` case, a dirty\n  check is performed and then the value is set to the path before\n  enqueuing the pending property change."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if the property/path was enqueued in\n  the pending changes bag."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setUnmanagedPropertyToNode",
              "description": "Applies a value to a non-Polymer element/node's property.\n\nThe implementation makes a best-effort at binding interop:\nSome native element properties have side-effects when\nre-setting the same value (e.g. setting `<input>.value` resets the\ncursor position), so we do a dirty-check before setting the value.\nHowever, for better interop with non-Polymer custom elements that\naccept objects, we explicitly re-set object changes coming from the\nPolymer world (which may include deep object changes without the\ntop reference changing), erring on the side of providing more\ninformation.\n\nUsers may override this method to provide alternate approaches.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1313,
                  "column": 6
                },
                "end": {
                  "line": 1321,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "The node to set a property on"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "The property to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "The value to set"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enqueueClient",
              "description": "Enqueues the given client on a list of pending clients, whose\npending property changes can later be flushed via a call to\n`_flushClients`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1417,
                  "column": 6
                },
                "end": {
                  "line": 1422,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "client",
                  "type": "Object",
                  "description": "PropertyEffects client to enqueue"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_flushClients",
              "description": "Flushes any clients previously enqueued via `_enqueueClient`, causing\ntheir `_flushProperties` method to run.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1430,
                  "column": 6
                },
                "end": {
                  "line": 1441,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "__enableOrFlushClients",
              "description": "(c) the stamped dom enables.",
              "privacy": "private",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1455,
                  "column": 6
                },
                "end": {
                  "line": 1468,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_readyClients",
              "description": "Perform any initial setup on client dom. Called before the first\n`_flushProperties` call on client dom and before any element\nobservers are called.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1477,
                  "column": 6
                },
                "end": {
                  "line": 1479,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "setProperties",
              "description": "Sets a bag of property changes to this instance, and\nsynchronously processes all effects of the properties as a batch.\n\nProperty names must be simple properties, not paths.  Batched\npath propagation is not supported.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1495,
                  "column": 6
                },
                "end": {
                  "line": 1506,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of one or more key-value pairs whose key is\n  a property and value is the new value to set for that property."
                },
                {
                  "name": "setReadOnly",
                  "type": "boolean=",
                  "description": "When true, any private values set in\n  `props` will be set. By default, `setProperties` will not set\n  `readOnly: true` root properties."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_propagatePropertyChanges",
              "description": "Called to propagate any property changes to stamped template nodes\nmanaged by this element.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1586,
                  "column": 6
                },
                "end": {
                  "line": 1596,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "changedProps",
                  "type": "Object",
                  "description": "Bag of changed properties"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "linkPaths",
              "description": "Aliases one data path as another, such that path notifications from one\nare routed to the other.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1606,
                  "column": 6
                },
                "end": {
                  "line": 1611,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "to",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to link."
                },
                {
                  "name": "from",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Source path to link."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unlinkPaths",
              "description": "Removes a data path alias previously established with `_linkPaths`.\n\nNote, the path to unlink should be the target (`to`) used when\nlinking the paths.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1622,
                  "column": 6
                },
                "end": {
                  "line": 1627,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to unlink."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifySplices",
              "description": "Notify that an array has changed.\n\nExample:\n\n    this.items = [ {name: 'Jim'}, {name: 'Todd'}, {name: 'Bill'} ];\n    ...\n    this.items.splice(1, 1, {name: 'Sam'});\n    this.items.push({name: 'Bob'});\n    this.notifySplices('items', [\n      { index: 1, removed: [{name: 'Todd'}], addedCount: 1, obect: this.items, type: 'splice' },\n      { index: 3, removed: [], addedCount: 1, object: this.items, type: 'splice'}\n    ]);",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1658,
                  "column": 6
                },
                "end": {
                  "line": 1662,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "splices",
                  "type": "Array",
                  "description": "Array of splice records indicating ordered\n  changes that occurred to the array. Each record should have the\n  following fields:\n   * index: index at which the change occurred\n   * removed: array of items that were removed from this index\n   * addedCount: number of new items added at this index\n   * object: a reference to the array in question\n   * type: the string literal 'splice'\n\n  Note that splice records _must_ be normalized such that they are\n  reported in index order (raw results from `Object.observe` are not\n  ordered and must be normalized/merged before notifying)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "get",
              "description": "Convenience method for reading a value from a path.\n\nNote, if any part in the path is undefined, this method returns\n`undefined` (this method does not throw when dereferencing undefined\npaths).",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1683,
                  "column": 6
                },
                "end": {
                  "line": 1685,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to read.  The path may be specified as a string (e.g. `foo.bar.baz`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `users.12.name` or `['users', 12, 'name']`)."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value at the path, or `undefined` if any part of the path\n  is undefined."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "set",
              "description": "Convenience method for setting a value to a path and notifying any\nelements bound to the same path.\n\nNote, if any part in the path except for the last is undefined,\nthis method does nothing (this method does not throw when\ndereferencing undefined paths).",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1707,
                  "column": 6
                },
                "end": {
                  "line": 1717,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to write.  The path may be specified as a string (e.g. `'foo.bar.baz'`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `'users.12.name'` or `['users', 12, 'name']`)."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set at the specified path."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated.\n  When specified, no notification will occur."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "push",
              "description": "Adds items onto the end of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1733,
                  "column": 6
                },
                "end": {
                  "line": 1742,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "pop",
              "description": "Removes an item from the end of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1757,
                  "column": 6
                },
                "end": {
                  "line": 1766,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "splice",
              "description": "Starting from the start index specified, removes 0 or more items\nfrom the array and inserts 0 or more new items in their place.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.splice`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1785,
                  "column": 6
                },
                "end": {
                  "line": 1802,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "start",
                  "type": "number",
                  "description": "Index from which to start removing/inserting."
                },
                {
                  "name": "deleteCount",
                  "type": "number",
                  "description": "Number of items to remove."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "Array",
                "desc": "Array of removed items."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "shift",
              "description": "Removes an item from the beginning of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1817,
                  "column": 6
                },
                "end": {
                  "line": 1826,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unshift",
              "description": "Adds items onto the beginning of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1842,
                  "column": 6
                },
                "end": {
                  "line": 1850,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifyPath",
              "description": "Notify that a path has changed.\n\nExample:\n\n    this.item.user.name = 'Bob';\n    this.notifyPath('item.user.name');",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1864,
                  "column": 6
                },
                "end": {
                  "line": 1881,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Value at the path (optional)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReadOnlyProperty",
              "description": "Equivalent to static `createReadOnlyProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1893,
                  "column": 6
                },
                "end": {
                  "line": 1900,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createPropertyObserver",
              "description": "Equivalent to static `createPropertyObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1913,
                  "column": 6
                },
                "end": {
                  "line": 1923,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createMethodObserver",
              "description": "Equivalent to static `createMethodObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1935,
                  "column": 6
                },
                "end": {
                  "line": 1941,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createNotifyingProperty",
              "description": "Equivalent to static `createNotifyingProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1951,
                  "column": 6
                },
                "end": {
                  "line": 1959,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReflectedProperty",
              "description": "Equivalent to static `createReflectedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1969,
                  "column": 6
                },
                "end": {
                  "line": 1982,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createComputedProperty",
              "description": "Equivalent to static `createComputedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1995,
                  "column": 6
                },
                "end": {
                  "line": 2001,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_bindTemplate",
              "description": "Equivalent to static `bindTemplate` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.\n\nThis method may be called on the prototype (for prototypical template\nbinding, to avoid creating accessors every instance) once per prototype,\nand will be called with `runtimeBinding: true` by `_stampTemplate` to\ncreate and link an instance of the template metadata associated with a\nparticular stamping.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2171,
                  "column": 6
                },
                "end": {
                  "line": 2194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                },
                {
                  "name": "instanceBinding",
                  "type": "boolean=",
                  "description": "When false (default), performs\n  \"prototypical\" binding of the template and overwrites any previously\n  bound template for the class. When true (as passed from\n  `_stampTemplate`), the template info is instanced and linked into\n  the list of bound templates."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object; for `runtimeBinding`,\n  this is an instance of the prototypical template info"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removeBoundDom",
              "description": "Removes and unbinds the nodes previously contained in the provided\nDocumentFragment returned from `_stampTemplate`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2270,
                  "column": 6
                },
                "end": {
                  "line": 2291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "DocumentFragment",
                  "description": "DocumentFragment previously returned\n  from `_stampTemplate` associated with the nodes to be removed"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "connectedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 57,
                  "column": 6
                },
                "end": {
                  "line": 59,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "disconnectedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 61,
                  "column": 6
                },
                "end": {
                  "line": 63,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__insertChildren",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 65,
                  "column": 6
                },
                "end": {
                  "line": 67,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__removeChildren",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 69,
                  "column": 6
                },
                "end": {
                  "line": 75,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "render",
              "description": "Forces the element to render its content. This is typically only\nnecessary to call if HTMLImports with the async attribute are used.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 81,
                  "column": 6
                },
                "end": {
                  "line": 112,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            }
          ],
          "staticMethods": [
            {
              "name": "_parseTemplate",
              "description": "Scans a template to produce template metadata.\n\nTemplate-specific metadata are stored in the object returned, and node-\nspecific metadata are stored in objects in its flattened `nodeInfoList`\narray.  Only nodes in the template that were parsed as nodes of\ninterest contain an object in `nodeInfoList`.  Each `nodeInfo` object\ncontains an `index` (`childNodes` index in parent) and optionally\n`parent`, which points to node info of its parent (including its index).\n\nThe template metadata object returned from this method has the following\nstructure (many fields optional):\n\n```js\n  {\n    // Flattened list of node metadata (for nodes that generated metadata)\n    nodeInfoList: [\n      {\n        // `id` attribute for any nodes with id's for generating `$` map\n        id: {string},\n        // `on-event=\"handler\"` metadata\n        events: [\n          {\n            name: {string},   // event name\n            value: {string},  // handler method name\n          }, ...\n        ],\n        // Notes when the template contained a `<slot>` for shady DOM\n        // optimization purposes\n        hasInsertionPoint: {boolean},\n        // For nested `<template>`` nodes, nested template metadata\n        templateInfo: {object}, // nested template metadata\n        // Metadata to allow efficient retrieval of instanced node\n        // corresponding to this metadata\n        parentInfo: {number},   // reference to parent nodeInfo>\n        parentIndex: {number},  // index in parent's `childNodes` collection\n        infoIndex: {number},    // index of this `nodeInfo` in `templateInfo.nodeInfoList`\n      },\n      ...\n    ],\n    // When true, the template had the `strip-whitespace` attribute\n    // or was nested in a template with that setting\n    stripWhitespace: {boolean},\n    // For nested templates, nested template content is moved into\n    // a document fragment stored here; this is an optimization to\n    // avoid the cost of nested template cloning\n    content: {DocumentFragment}\n  }\n```\n\nThis method kicks off a recursive treewalk as follows:\n\n```\n   _parseTemplate <---------------------+\n     _parseTemplateContent              |\n       _parseTemplateNode  <------------|--+\n         _parseTemplateNestedTemplate --+  |\n         _parseTemplateChildNodes ---------+\n         _parseTemplateNodeAttributes\n           _parseTemplateNodeAttribute\n\n```\n\nThese methods may be overridden to add custom metadata about templates\nto either `templateInfo` or `nodeInfo`.\n\nNote that this method may be destructive to the template, in that\ne.g. event annotations may be removed after being noted in the\ntemplate metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 195,
                  "column": 6
                },
                "end": {
                  "line": 206,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to parse"
                },
                {
                  "name": "outerTemplateInfo",
                  "type": "Object=",
                  "description": "Template metadata from the outer\n  template, for parsing nested templates"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Parsed template metadata"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateContent",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 208,
                  "column": 6
                },
                "end": {
                  "line": 210,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template"
                },
                {
                  "name": "templateInfo"
                },
                {
                  "name": "nodeInfo"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNode",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from `TextNode`'s' `textContent`.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2309,
                  "column": 6
                },
                "end": {
                  "line": 2323,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateChildNodes",
              "description": "Parses template child nodes for the given root node.\n\nThis method also wraps whitelisted legacy template extensions\n(`is=\"dom-if\"` and `is=\"dom-repeat\"`) with their equivalent element\nwrappers, collapses text nodes, and strips whitespace from the template\nif the `templateInfo.stripWhitespace` setting was provided.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 254,
                  "column": 6
                },
                "end": {
                  "line": 288,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "root",
                  "type": "Node",
                  "description": "Root node whose `childNodes` will be parsed"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNestedTemplate",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nbinding the properties that a nested template depends on to the template\nas `_host_<property>`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2392,
                  "column": 6
                },
                "end": {
                  "line": 2402,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateNodeAttributes",
              "description": "Parses template node attributes and adds node metadata to `nodeInfo`\nfor nodes of interest.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 326,
                  "column": 6
                },
                "end": {
                  "line": 335,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNodeAttribute",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from attributes.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2341,
                  "column": 6
                },
                "end": {
                  "line": 2377,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                },
                {
                  "name": "name"
                },
                {
                  "name": "value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_contentForTemplate",
              "description": "Returns the `content` document fragment for a given template.\n\nFor nested templates, Polymer performs an optimization to cache nested\ntemplate content to avoid the cost of cloning deeply nested templates.\nThis method retrieves the cached content for a given template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 380,
                  "column": 6
                },
                "end": {
                  "line": 383,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to retrieve `content` for"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Content fragment"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "createPropertiesForAttributes",
              "description": "Generates property accessors for all attributes in the standard\nstatic `observedAttributes` array.\n\nAttribute names are mapped to property names using the `dash-case` to\n`camelCase` convention",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 110,
                  "column": 6
                },
                "end": {
                  "line": 115,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "addPropertyEffect",
              "description": "Ensures an accessor exists for the specified property, and adds\nto a list of \"property effects\" that will run when the accessor for\nthe specified property is set.  Effects are grouped by \"type\", which\nroughly corresponds to a phase in effect processing.  The effect\nmetadata should be in the following form:\n\n  {\n    fn: effectFunction, // Reference to function to call to perform effect\n    info: { ... }       // Effect metadata passed to function\n    trigger: {          // Optional triggering metadata; if not provided\n      name: string      // the property is treated as a wildcard\n      structured: boolean\n      wildcard: boolean\n    }\n  }\n\nEffects are called from `_propertiesChanged` in the following order by\ntype:\n\n1. COMPUTE\n2. PROPAGATE\n3. REFLECT\n4. OBSERVE\n5. NOTIFY\n\nEffect functions are called with the following signature:\n\n  effectFunction(inst, path, props, oldProps, info, hasPaths)",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2040,
                  "column": 6
                },
                "end": {
                  "line": 2042,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createPropertyObserver",
              "description": "Creates a single-property observer for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2053,
                  "column": 6
                },
                "end": {
                  "line": 2055,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createMethodObserver",
              "description": "Creates a multi-property \"method observer\" based on the provided\nexpression, which should be a string in the form of a normal Javascript\nfunction signature: `'methodName(arg1, [..., argn])'`.  Each argument\nshould correspond to a property or path in the context of this\nprototype (or instance), or may be a literal string or number.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2069,
                  "column": 6
                },
                "end": {
                  "line": 2071,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createNotifyingProperty",
              "description": "Causes the setter for the given property to dispatch `<property>-changed`\nevents to notify of changes to the property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2080,
                  "column": 6
                },
                "end": {
                  "line": 2082,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReadOnlyProperty",
              "description": "Creates a read-only accessor for the given property.\n\nTo set the property, use the protected `_setProperty` API.\nTo create a custom protected setter (e.g. `_setMyProp()` for\nproperty `myProp`), pass `true` for `protectedSetter`.\n\nNote, if the property will have other property effects, this method\nshould be called first, before adding other effects.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2099,
                  "column": 6
                },
                "end": {
                  "line": 2101,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReflectedProperty",
              "description": "Causes the setter for the given property to reflect the property value\nto a (dash-cased) attribute of the same name.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2110,
                  "column": 6
                },
                "end": {
                  "line": 2112,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createComputedProperty",
              "description": "Creates a computed property whose value is set to the result of the\nmethod described by the given `expression` each time one or more\narguments to the method changes.  The expression should be a string\nin the form of a normal Javascript function signature:\n`'methodName(arg1, [..., argn])'`",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2127,
                  "column": 6
                },
                "end": {
                  "line": 2129,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating whether\n  method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "bindTemplate",
              "description": "Parses the provided template to ensure binding effects are created\nfor them, and then ensures property accessors are created for any\ndependent properties in the template.  Binding effects for bound\ntemplates are stored in a linked list on the instance so that\ntemplates can be efficiently stamped and unstamped.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2143,
                  "column": 6
                },
                "end": {
                  "line": 2145,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addTemplatePropertyEffect",
              "description": "Adds a property effect to the given template metadata, which is run\nat the \"propagate\" stage of `_propertiesChanged` when the template\nhas been bound to the element via `_bindTemplate`.\n\nThe `effect` object should match the format in `_addPropertyEffect`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2208,
                  "column": 6
                },
                "end": {
                  "line": 2214,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata to add effect to"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseBindings",
              "description": "Called to parse text in a template (either attribute values or\ntextContent) into binding metadata.\n\nAny overrides of this method should return an array of binding part\nmetadata  representing one or more bindings found in the provided text\nand any \"literal\" text in between.  Any non-literal parts will be passed\nto `_evaluateBinding` when any dependencies change.  The only required\nfields of each \"part\" in the returned array are as follows:\n\n- `dependencies` - Array containing trigger metadata for each property\n  that should trigger the binding to update\n- `literal` - String containing text if the part represents a literal;\n  in this case no `dependencies` are needed\n\nAdditional metadata for use by `_evaluateBinding` may be provided in\neach part object as needed.\n\nThe default implementation handles the following types of bindings\n(one or more may be intermixed with literal strings):\n- Property binding: `[[prop]]`\n- Path binding: `[[object.prop]]`\n- Negated property or path bindings: `[[!prop]]` or `[[!object.prop]]`\n- Two-way property or path bindings (supports negation):\n  `{{prop}}`, `{{object.prop}}`, `{{!prop}}` or `{{!object.prop}}`\n- Inline computed method (supports negation):\n  `[[compute(a, 'literal', b)]]`, `[[!compute(a, 'literal', b)]]`",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2437,
                  "column": 6
                },
                "end": {
                  "line": 2500,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "text",
                  "type": "string",
                  "description": "Text to parse from attribute or textContent"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Current template metadata"
                }
              ],
              "return": {
                "type": "Array.<Object>",
                "desc": "Array of binding part metadata"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_evaluateBinding",
              "description": "Called to evaluate a previously parsed binding part based on a set of\none or more changed dependencies.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2516,
                  "column": 6
                },
                "end": {
                  "line": 2533,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "inst",
                  "type": "HTMLElement",
                  "description": "Element that should be used as scope for\n  binding dependencies"
                },
                {
                  "name": "part",
                  "type": "Object",
                  "description": "Binding part metadata"
                },
                {
                  "name": "path",
                  "type": "string",
                  "description": "Property/path that triggered this effect"
                },
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of current property changes"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value the binding part evaluated to"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 48,
              "column": 4
            },
            "end": {
              "line": 114,
              "column": 5
            }
          },
          "privacy": "public",
          "superclass": "HTMLElement",
          "name": "Polymer.DomBind",
          "attributes": [
            {
              "name": "mutable-data",
              "description": "",
              "sourceRange": {
                "start": {
                  "line": 50,
                  "column": 48
                },
                "end": {
                  "line": 50,
                  "column": 62
                }
              },
              "metadata": {}
            }
          ],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": [],
          "tagname": "dom-bind",
          "mixins": [
            "Polymer.PropertyEffects"
          ]
        },
        {
          "description": "The `<dom-repeat>` element will automatically stamp and binds one instance\nof template content to each object in a user-provided array.\n`dom-repeat` accepts an `items` property, and one instance of the template\nis stamped for each item into the DOM at the location of the `dom-repeat`\nelement.  The `item` property will be set on each instance's binding\nscope, thus templates should bind to sub-properties of `item`.\n\nExample:\n\n```html\n<dom-module id=\"employee-list\">\n\n  <template>\n\n    <div> Employee list: </div>\n    <template is=\"dom-repeat\" items=\"{{employees}}\">\n        <div>First name: <span>{{item.first}}</span></div>\n        <div>Last name: <span>{{item.last}}</span></div>\n    </template>\n\n  </template>\n\n  <script>\n    Polymer({\n      is: 'employee-list',\n      ready: function() {\n        this.employees = [\n            {first: 'Bob', last: 'Smith'},\n            {first: 'Sally', last: 'Johnson'},\n            ...\n        ];\n      }\n    });\n  < /script>\n\n</dom-module>\n```\n\nNotifications for changes to items sub-properties will be forwarded to template\ninstances, which will update via the normal structured data notification system.\n\nMutations to the `items` array itself should be made using the Array\nmutation API's on `Polymer.Base` (`push`, `pop`, `splice`, `shift`,\n`unshift`), and template instances will be kept in sync with the data in the\narray.\n\nEvents caught by event handlers within the `dom-repeat` template will be\ndecorated with a `model` property, which represents the binding scope for\neach template instance.  The model is an instance of Polymer.Base, and should\nbe used to manipulate data on the instance, for example\n`event.model.set('item.checked', true);`.\n\nAlternatively, the model for a template instance for an element stamped by\na `dom-repeat` can be obtained using the `modelForElement` API on the\n`dom-repeat` that stamped it, for example\n`this.$.domRepeat.modelForElement(event.target).set('item.checked', true);`.\nThis may be useful for manipulating instance data of event targets obtained\nby event handlers on parents of the `dom-repeat` (event delegation).\n\nA view-specific filter/sort may be applied to each `dom-repeat` by supplying a\n`filter` and/or `sort` property.  This may be a string that names a function on\nthe host, or a function may be assigned to the property directly.  The functions\nshould implemented following the standard `Array` filter/sort API.\n\nIn order to re-run the filter or sort functions based on changes to sub-fields\nof `items`, the `observe` property may be set as a space-separated list of\n`item` sub-fields that should cause a re-filter/sort when modified.  If\nthe filter or sort function depends on properties not contained in `items`,\nthe user should observe changes to those properties and call `render` to update\nthe view based on the dependency change.\n\nFor example, for an `dom-repeat` with a filter of the following:\n\n```js\nisEngineer: function(item) {\n    return item.type == 'engineer' || item.manager.type == 'engineer';\n}\n```\n\nThen the `observe` property should be configured as follows:\n\n```html\n<template is=\"dom-repeat\" items=\"{{employees}}\"\n          filter=\"isEngineer\" observe=\"type manager.type\">\n```",
          "summary": "Custom element for stamping instance of a template bound to\n  items in an array.",
          "path": "lib/elements/dom-repeat.html",
          "properties": [
            {
              "name": "items",
              "type": "Array",
              "description": "An array containing items determining how many instances of the template\nto stamp and that that each template instance should bind to.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 144,
                  "column": 8
                },
                "end": {
                  "line": 146,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {}
              }
            },
            {
              "name": "as",
              "type": "string",
              "description": "The name of the variable to add to the binding scope for the array\nelement associated with a given template instance.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 152,
                  "column": 8
                },
                "end": {
                  "line": 155,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {}
              },
              "defaultValue": "\"item\""
            },
            {
              "name": "indexAs",
              "type": "string",
              "description": "The name of the variable to add to the binding scope with the index\nof the instance in the sorted and filtered list of rendered items.\nNote, for the index in the `this.items` array, use the value of the\n`itemsIndexAs` property.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 163,
                  "column": 8
                },
                "end": {
                  "line": 166,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {}
              },
              "defaultValue": "\"index\""
            },
            {
              "name": "itemsIndexAs",
              "type": "string",
              "description": "The name of the variable to add to the binding scope with the index\nof the instance in the `this.items` array. Note, for the index of\nthis instance in the sorted and filtered list of rendered items,\nuse the value of the `indexAs` property.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 174,
                  "column": 8
                },
                "end": {
                  "line": 177,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {}
              },
              "defaultValue": "\"itemsIndex\""
            },
            {
              "name": "sort",
              "type": "Function",
              "description": "A function that should determine the sort order of the items.  This\nproperty should either be provided as a string, indicating a method\nname on the element's host, or else be an actual function.  The\nfunction should match the sort function passed to `Array.sort`.\nUsing a sort function has no effect on the underlying `items` array.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 186,
                  "column": 8
                },
                "end": {
                  "line": 189,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {
                  "observer": "\"__sortChanged\""
                }
              }
            },
            {
              "name": "filter",
              "type": "Function",
              "description": "A function that can be used to filter items out of the view.  This\nproperty should either be provided as a string, indicating a method\nname on the element's host, or else be an actual function.  The\nfunction should match the sort function passed to `Array.filter`.\nUsing a filter function has no effect on the underlying `items` array.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 198,
                  "column": 8
                },
                "end": {
                  "line": 201,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {
                  "observer": "\"__filterChanged\""
                }
              }
            },
            {
              "name": "observe",
              "type": "string",
              "description": "When using a `filter` or `sort` function, the `observe` property\nshould be set to a space-separated list of the names of item\nsub-fields that should trigger a re-sort or re-filter when changed.\nThese should generally be fields of `item` that the sort or filter\nfunction depends on.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 210,
                  "column": 8
                },
                "end": {
                  "line": 213,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {
                  "observer": "\"__observeChanged\""
                }
              }
            },
            {
              "name": "delay",
              "type": "number",
              "description": "When using a `filter` or `sort` function, the `delay` property\ndetermines a debounce time after a change to observed item\nproperties that must pass before the filter or sort is re-run.\nThis is useful in rate-limiting shuffing of the view when\nitem changes may be frequent.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 222,
                  "column": 8
                },
                "end": {
                  "line": 222,
                  "column": 21
                }
              },
              "metadata": {
                "polymer": {}
              }
            },
            {
              "name": "renderedItemCount",
              "type": "number",
              "description": "Count of currently rendered items after `filter` (if any) has been applied.\nIf \"chunking mode\" is enabled, `renderedItemCount` is updated each time a\nset of template instances is rendered.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 230,
                  "column": 8
                },
                "end": {
                  "line": 234,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {
                  "notify": true,
                  "readOnly": true
                }
              }
            },
            {
              "name": "initialCount",
              "type": "number",
              "description": "Defines an initial count of template instances to render after setting\nthe `items` array, before the next paint, and puts the `dom-repeat`\ninto \"chunking mode\".  The remaining items will be created and rendered\nincrementally at each animation frame therof until all instances have\nbeen rendered.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 243,
                  "column": 8
                },
                "end": {
                  "line": 246,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {
                  "observer": "\"__initializeChunking\""
                }
              }
            },
            {
              "name": "targetFramerate",
              "type": "number",
              "description": "When `initialCount` is used, this property defines a frame rate to\ntarget by throttling the number of instances rendered each frame to\nnot exceed the budget for the target frame rate.  Setting this to a\nhigher number will allow lower latency and higher throughput for\nthings like event handlers, but will result in a longer time for the\nremaining items to complete rendering.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 256,
                  "column": 8
                },
                "end": {
                  "line": 259,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {}
              },
              "defaultValue": "20"
            },
            {
              "name": "_targetFrameTime",
              "type": "number",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 261,
                  "column": 8
                },
                "end": {
                  "line": 264,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {
                  "readOnly": true
                }
              }
            }
          ],
          "methods": [
            {
              "name": "_stampTemplate",
              "description": "Stamps the provided template and performs instance-time setup for\nPolymer template features, including data bindings, declarative event\nlisteners, and the `this.$` map of `id`'s to nodes.  A document fragment\nis returned containing the stamped DOM, ready for insertion into the\nDOM.\n\nThis method may be called more than once; however note that due to\n`shadycss` polyfill limitations, only styles from templates prepared\nusing `ShadyCSS.prepareTemplate` will be correctly polyfilled (scoped\nto the shadow root and support CSS custom properties), and note that\n`ShadyCSS.prepareTemplate` may only be called once per element. As such,\nany styles required by in runtime-stamped templates must be included\nin the main element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2235,
                  "column": 6
                },
                "end": {
                  "line": 2260,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to stamp"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Cloned template content"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addMethodEventListenerToNode",
              "description": "Adds an event listener by method name for the event provided.\n\nThis method generates a handler function that looks up the method\nname at handling time.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 443,
                  "column": 6
                },
                "end": {
                  "line": 448,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add listener on"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of method"
                },
                {
                  "name": "context",
                  "type": "*=",
                  "description": "Context the method will be called on (defaults\n  to `node`)"
                }
              ],
              "return": {
                "type": "Function",
                "desc": "Generated handler function"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_addEventListenerToNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 457,
                  "column": 6
                },
                "end": {
                  "line": 459,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add event listener to"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to add"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_removeEventListenerFromNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 468,
                  "column": 6
                },
                "end": {
                  "line": 470,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to remove event listener from"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to remove"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "attributeChangedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`attributeChangedCallback`.\n\nBy default, attributes declared in `properties` metadata are\ndeserialized using their `type` information to properties of the\nsame name.  \"Dash-cased\" attributes are deserialzed to \"camelCase\"\nproperties.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 717,
                  "column": 6
                },
                "end": {
                  "line": 725,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name"
                },
                {
                  "name": "old"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_initializeProperties",
              "description": "Overrides the default `Polymer.PropertyAccessors` to ensure class\nmetaprogramming related to property accessors and effects has\ncompleted (calls `finalize`).\n\nIt also initializes any property defaults provided via `value` in\n`properties` metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 577,
                  "column": 6
                },
                "end": {
                  "line": 617,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_initializeProtoProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to provide a\nmore efficient implementation of initializing properties from\nthe prototype on the instance.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1107,
                  "column": 6
                },
                "end": {
                  "line": 1111,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_initializeInstanceProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to avoid setting\n`_setProperty`'s `shouldNotify: true`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1119,
                  "column": 6
                },
                "end": {
                  "line": 1128,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_ensureAttribute",
              "description": "Ensures the element has the given attribute. If it does not,\nassigns the given value to the attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 204,
                  "column": 6
                },
                "end": {
                  "line": 208,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to ensure is set."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_attributeToProperty",
              "description": "Deserializes an attribute to its associated property.\n\nThis method calls the `_deserializeValue` method to convert the string to\na typed value.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 220,
                  "column": 6
                },
                "end": {
                  "line": 226,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to deserialize."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "type to deserialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_propertyToAttribute",
              "description": "Serializes a property to its associated attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 235,
                  "column": 6
                },
                "end": {
                  "line": 241,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name to reflect."
                },
                {
                  "name": "attribute",
                  "type": "string=",
                  "description": "Attribute name to reflect."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Property value to refect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_valueToNodeAttribute",
              "description": "Sets a typed value to an HTML attribute on a node.\n\nThis method calls the `_serializeValue` method to convert the typed\nvalue to a string.  If the `_serializeValue` method returns `undefined`,\nthe attribute will be removed (this is the default for boolean\ntype `false`).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 255,
                  "column": 6
                },
                "end": {
                  "line": 262,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to set attribute to."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to serialize."
                },
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Attribute name to serialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_serializeValue",
              "description": "Converts a typed JavaScript value to a string.\n\nThis method is called by Polymer when setting JS property values to\nHTML attributes.  Users may override this method on Polymer element\nprototypes to provide serialization for custom types.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 274,
                  "column": 6
                },
                "end": {
                  "line": 294,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Property value to serialize."
                }
              ],
              "return": {
                "type": "(string|undefined)",
                "desc": "String serialized from the provided property value."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_deserializeValue",
              "description": "Converts a string to a typed JavaScript value.\n\nThis method is called by Polymer when reading HTML attribute values to\nJS properties.  Users may override this method on Polymer element\nprototypes to provide deserialization for custom `type`s.  Note,\nthe `type` argument is the value of the `type` field provided in the\n`properties` configuration object for a given property, and is\nby convention the constructor for the type to deserialize.\n\nNote: The return value of `undefined` is used as a sentinel value to\nindicate the attribute should be removed.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 313,
                  "column": 6
                },
                "end": {
                  "line": 355,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "string",
                  "description": "Attribute value to deserialize."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "Type to deserialize the string to."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Typed value deserialized from the provided string."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_createPropertyAccessor",
              "description": "Creates a setter/getter pair for the named property with its own\nlocal storage.  The getter returns the value in the local storage,\nand the setter calls `_setProperty`, which updates the local storage\nfor the property and enqueues a `_propertiesChanged` callback.\n\nThis method may be called on a prototype or an instance.  Calling\nthis method may overwrite a property value that already exists on\nthe prototype/instance by creating the accessor.  When calling on\na prototype, any overwritten values are saved in `__dataProto`,\nand it is up to the subclasser to decide how/when to set those\nproperties back into the accessor.  When calling on an instance,\nthe overwritten value is set via `_setPendingProperty`, and the\nuser should call `_invalidateProperties` or `_flushProperties`\nfor the values to take effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 379,
                  "column": 6
                },
                "end": {
                  "line": 395,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "readOnly",
                  "type": "boolean=",
                  "description": "When true, no setter is created; the\n  protected `_setProperty` function must be used to set the property"
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_hasAccessor",
              "description": "Returns true if this library created an accessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 403,
                  "column": 6
                },
                "end": {
                  "line": 405,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if an accessor was created"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_setProperty",
              "description": "Overrides base implementation to ensure all accessors set `shouldNotify`\nto true, for per-property notification tracking.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1389,
                  "column": 6
                },
                "end": {
                  "line": 1393,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingProperty",
              "description": "Overrides the `PropertyAccessors` implementation to introduce special\ndirty check logic depending on the property & value being set:\n\n1. Any value set to a path (e.g. 'obj.prop': 42 or 'obj.prop': {...})\n   Stored in `__dataTemp`, dirty checked against `__dataTemp`\n2. Object set to simple property (e.g. 'prop': {...})\n   Stored in `__dataTemp` and `__data`, dirty checked against\n   `__dataTemp` by default implementation of `_shouldPropertyChange`\n3. Primitive value set to simple property (e.g. 'prop': 42)\n   Stored in `__data`, dirty checked against `__data`\n\nThe dirty-check is important to prevent cycles due to two-way\nnotification, but paths and objects are only dirty checked against any\nprevious value set during this turn via a \"temporary cache\" that is\ncleared when the last `_propertiesChaged` exits. This is so:\na. any cached array paths (e.g. 'array.3.prop') may be invalidated\n   due to array mutations like shift/unshift/splice; this is fine\n   since path changes are dirty-checked at user entry points like `set`\nb. dirty-checking for objects only lasts one turn to allow the user\n   to mutate the object in-place and re-set it with the same identity\n   and have all sub-properties re-propagated in a subsequent turn.\n\nThe temp cache is not necessarily sufficient to prevent invalid array\npaths, since a splice can happen during the same turn (with pathological\nuser code); we could introduce a \"fixup\" for temporarily cached array\npaths if needed: https://github.com/Polymer/polymer/issues/4227",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1353,
                  "column": 6
                },
                "end": {
                  "line": 1381,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                },
                {
                  "name": "shouldNotify"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_isPropertyPending",
              "description": "Returns true if the specified property has a pending change.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 456,
                  "column": 6
                },
                "end": {
                  "line": 458,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if property has a pending change"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_invalidateProperties",
              "description": "Overrides `PropertyAccessor`'s default async queuing of\n`_propertiesChanged`: if `__dataReady` is false (has not yet been\nmanually flushed), the function no-ops; otherwise flushes\n`_propertiesChanged` synchronously.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1403,
                  "column": 6
                },
                "end": {
                  "line": 1407,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enableProperties",
              "description": "Call to enable property accessor processing. Before this method is\ncalled accessor values will be set but side effects are\nqueued. When called, any pending side effects occur immediately.\nFor elements, generally `connectedCallback` is a normal spot to do so.\nIt is safe to call this method multiple times as it only turns on\nproperty accessors once.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 486,
                  "column": 6
                },
                "end": {
                  "line": 495,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_flushProperties",
              "description": "Calls the `_propertiesChanged` callback with the current set of\npending changes (and old values recorded when pending changes were\nset), and resets the pending set of changes. Generally, this method\nshould not be called in user code.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 506,
                  "column": 6
                },
                "end": {
                  "line": 514,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "ready",
              "description": "Stamps the element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 649,
                  "column": 6
                },
                "end": {
                  "line": 655,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_propertiesChanged",
              "description": "Implements `PropertyAccessors`'s properties changed callback.\n\nRuns each class of effects for the batch of changed properties in\na specific order (compute, propagate, reflect, observe, notify).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1542,
                  "column": 6
                },
                "end": {
                  "line": 1575,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "currentProps"
                },
                {
                  "name": "changedProps"
                },
                {
                  "name": "oldProps"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_shouldPropertyChange",
              "description": "Overrides `Polymer.PropertyEffects` to provide option for skipping\nstrict equality checking for Objects and Arrays.\n\nThis method pulls the value to dirty check against from the `__dataTemp`\ncache (rather than the normal `__data` cache) for Objects.  Since the temp\ncache is cleared at the end of a turn, this implementation allows\nside-effects of deep object changes to be processed by re-setting the\nsame object (using the temp cache as an in-turn backstop to prevent\ncycles due to 2-way notification).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/mutable-data.html",
                "start": {
                  "line": 96,
                  "column": 6
                },
                "end": {
                  "line": 98,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change"
              },
              "inheritedFrom": "Polymer.MutableData"
            },
            {
              "name": "_addPropertyEffect",
              "description": "Equivalent to static `addPropertyEffect` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1142,
                  "column": 6
                },
                "end": {
                  "line": 1150,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removePropertyEffect",
              "description": "Removes the given property effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1159,
                  "column": 6
                },
                "end": {
                  "line": 1165,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property the effect was associated with"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object to remove"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasPropertyEffect",
              "description": "Returns whether the current prototype/instance has a property effect\nof a certain type.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1176,
                  "column": 6
                },
                "end": {
                  "line": 1179,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "type",
                  "type": "string=",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReadOnlyEffect",
              "description": "Returns whether the current prototype/instance has a \"read only\"\naccessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1189,
                  "column": 6
                },
                "end": {
                  "line": 1191,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasNotifyEffect",
              "description": "Returns whether the current prototype/instance has a \"notify\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1201,
                  "column": 6
                },
                "end": {
                  "line": 1203,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReflectEffect",
              "description": "Returns whether the current prototype/instance has a \"reflect to attribute\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1213,
                  "column": 6
                },
                "end": {
                  "line": 1215,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasComputedEffect",
              "description": "Returns whether the current prototype/instance has a \"computed\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1225,
                  "column": 6
                },
                "end": {
                  "line": 1227,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingPropertyOrPath",
              "description": "Sets a pending property or path.  If the root property of the path in\nquestion had no accessor, the path is set, otherwise it is enqueued\nvia `_setPendingProperty`.\n\nThis function isolates relatively expensive functionality necessary\nfor the public API (`set`, `setProperties`, `notifyPath`, and property\nchange listeners via {{...}} bindings), such that it is only done\nwhen paths enter the system, and not at every propagation step.  It\nalso sets a `__dataHasPaths` flag on the instance which is used to\nfast-path slower path-matching code in the property effects host paths.\n\n`path` can be a path string or array of path parts as accepted by the\npublic API.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1259,
                  "column": 6
                },
                "end": {
                  "line": 1291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(number|string)>)",
                  "description": "Path to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set"
                },
                {
                  "name": "shouldNotify",
                  "type": "boolean=",
                  "description": "Set to true if this change should\n cause a property notification event dispatch"
                },
                {
                  "name": "isPathNotification",
                  "type": "boolean=",
                  "description": "If the path being set is a path\n  notification of an already changed value, as opposed to a request\n  to set and notify the change.  In the latter `false` case, a dirty\n  check is performed and then the value is set to the path before\n  enqueuing the pending property change."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if the property/path was enqueued in\n  the pending changes bag."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setUnmanagedPropertyToNode",
              "description": "Applies a value to a non-Polymer element/node's property.\n\nThe implementation makes a best-effort at binding interop:\nSome native element properties have side-effects when\nre-setting the same value (e.g. setting `<input>.value` resets the\ncursor position), so we do a dirty-check before setting the value.\nHowever, for better interop with non-Polymer custom elements that\naccept objects, we explicitly re-set object changes coming from the\nPolymer world (which may include deep object changes without the\ntop reference changing), erring on the side of providing more\ninformation.\n\nUsers may override this method to provide alternate approaches.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1313,
                  "column": 6
                },
                "end": {
                  "line": 1321,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "The node to set a property on"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "The property to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "The value to set"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enqueueClient",
              "description": "Enqueues the given client on a list of pending clients, whose\npending property changes can later be flushed via a call to\n`_flushClients`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1417,
                  "column": 6
                },
                "end": {
                  "line": 1422,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "client",
                  "type": "Object",
                  "description": "PropertyEffects client to enqueue"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_flushClients",
              "description": "Flushes any clients previously enqueued via `_enqueueClient`, causing\ntheir `_flushProperties` method to run.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1430,
                  "column": 6
                },
                "end": {
                  "line": 1441,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "__enableOrFlushClients",
              "description": "(c) the stamped dom enables.",
              "privacy": "private",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1455,
                  "column": 6
                },
                "end": {
                  "line": 1468,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_readyClients",
              "description": "Implements `PropertyEffects`'s `_readyClients` call. Attaches\nelement dom by calling `_attachDom` with the dom stamped from the\nelement's template via `_stampTemplate`. Note that this allows\nclient dom to be attached to the element prior to any observers\nrunning.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 666,
                  "column": 6
                },
                "end": {
                  "line": 675,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "setProperties",
              "description": "Sets a bag of property changes to this instance, and\nsynchronously processes all effects of the properties as a batch.\n\nProperty names must be simple properties, not paths.  Batched\npath propagation is not supported.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1495,
                  "column": 6
                },
                "end": {
                  "line": 1506,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of one or more key-value pairs whose key is\n  a property and value is the new value to set for that property."
                },
                {
                  "name": "setReadOnly",
                  "type": "boolean=",
                  "description": "When true, any private values set in\n  `props` will be set. By default, `setProperties` will not set\n  `readOnly: true` root properties."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_propagatePropertyChanges",
              "description": "Called to propagate any property changes to stamped template nodes\nmanaged by this element.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1586,
                  "column": 6
                },
                "end": {
                  "line": 1596,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "changedProps",
                  "type": "Object",
                  "description": "Bag of changed properties"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "linkPaths",
              "description": "Aliases one data path as another, such that path notifications from one\nare routed to the other.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1606,
                  "column": 6
                },
                "end": {
                  "line": 1611,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "to",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to link."
                },
                {
                  "name": "from",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Source path to link."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unlinkPaths",
              "description": "Removes a data path alias previously established with `_linkPaths`.\n\nNote, the path to unlink should be the target (`to`) used when\nlinking the paths.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1622,
                  "column": 6
                },
                "end": {
                  "line": 1627,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to unlink."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifySplices",
              "description": "Notify that an array has changed.\n\nExample:\n\n    this.items = [ {name: 'Jim'}, {name: 'Todd'}, {name: 'Bill'} ];\n    ...\n    this.items.splice(1, 1, {name: 'Sam'});\n    this.items.push({name: 'Bob'});\n    this.notifySplices('items', [\n      { index: 1, removed: [{name: 'Todd'}], addedCount: 1, obect: this.items, type: 'splice' },\n      { index: 3, removed: [], addedCount: 1, object: this.items, type: 'splice'}\n    ]);",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1658,
                  "column": 6
                },
                "end": {
                  "line": 1662,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "splices",
                  "type": "Array",
                  "description": "Array of splice records indicating ordered\n  changes that occurred to the array. Each record should have the\n  following fields:\n   * index: index at which the change occurred\n   * removed: array of items that were removed from this index\n   * addedCount: number of new items added at this index\n   * object: a reference to the array in question\n   * type: the string literal 'splice'\n\n  Note that splice records _must_ be normalized such that they are\n  reported in index order (raw results from `Object.observe` are not\n  ordered and must be normalized/merged before notifying)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "get",
              "description": "Convenience method for reading a value from a path.\n\nNote, if any part in the path is undefined, this method returns\n`undefined` (this method does not throw when dereferencing undefined\npaths).",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1683,
                  "column": 6
                },
                "end": {
                  "line": 1685,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to read.  The path may be specified as a string (e.g. `foo.bar.baz`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `users.12.name` or `['users', 12, 'name']`)."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value at the path, or `undefined` if any part of the path\n  is undefined."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "set",
              "description": "Convenience method for setting a value to a path and notifying any\nelements bound to the same path.\n\nNote, if any part in the path except for the last is undefined,\nthis method does nothing (this method does not throw when\ndereferencing undefined paths).",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1707,
                  "column": 6
                },
                "end": {
                  "line": 1717,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to write.  The path may be specified as a string (e.g. `'foo.bar.baz'`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `'users.12.name'` or `['users', 12, 'name']`)."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set at the specified path."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated.\n  When specified, no notification will occur."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "push",
              "description": "Adds items onto the end of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1733,
                  "column": 6
                },
                "end": {
                  "line": 1742,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "pop",
              "description": "Removes an item from the end of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1757,
                  "column": 6
                },
                "end": {
                  "line": 1766,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "splice",
              "description": "Starting from the start index specified, removes 0 or more items\nfrom the array and inserts 0 or more new items in their place.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.splice`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1785,
                  "column": 6
                },
                "end": {
                  "line": 1802,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "start",
                  "type": "number",
                  "description": "Index from which to start removing/inserting."
                },
                {
                  "name": "deleteCount",
                  "type": "number",
                  "description": "Number of items to remove."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "Array",
                "desc": "Array of removed items."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "shift",
              "description": "Removes an item from the beginning of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1817,
                  "column": 6
                },
                "end": {
                  "line": 1826,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unshift",
              "description": "Adds items onto the beginning of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1842,
                  "column": 6
                },
                "end": {
                  "line": 1850,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifyPath",
              "description": "Notify that a path has changed.\n\nExample:\n\n    this.item.user.name = 'Bob';\n    this.notifyPath('item.user.name');",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1864,
                  "column": 6
                },
                "end": {
                  "line": 1881,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Value at the path (optional)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReadOnlyProperty",
              "description": "Equivalent to static `createReadOnlyProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1893,
                  "column": 6
                },
                "end": {
                  "line": 1900,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createPropertyObserver",
              "description": "Equivalent to static `createPropertyObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1913,
                  "column": 6
                },
                "end": {
                  "line": 1923,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createMethodObserver",
              "description": "Equivalent to static `createMethodObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1935,
                  "column": 6
                },
                "end": {
                  "line": 1941,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createNotifyingProperty",
              "description": "Equivalent to static `createNotifyingProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1951,
                  "column": 6
                },
                "end": {
                  "line": 1959,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReflectedProperty",
              "description": "Equivalent to static `createReflectedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1969,
                  "column": 6
                },
                "end": {
                  "line": 1982,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createComputedProperty",
              "description": "Equivalent to static `createComputedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1995,
                  "column": 6
                },
                "end": {
                  "line": 2001,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_bindTemplate",
              "description": "Equivalent to static `bindTemplate` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.\n\nThis method may be called on the prototype (for prototypical template\nbinding, to avoid creating accessors every instance) once per prototype,\nand will be called with `runtimeBinding: true` by `_stampTemplate` to\ncreate and link an instance of the template metadata associated with a\nparticular stamping.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2171,
                  "column": 6
                },
                "end": {
                  "line": 2194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                },
                {
                  "name": "instanceBinding",
                  "type": "boolean=",
                  "description": "When false (default), performs\n  \"prototypical\" binding of the template and overwrites any previously\n  bound template for the class. When true (as passed from\n  `_stampTemplate`), the template info is instanced and linked into\n  the list of bound templates."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object; for `runtimeBinding`,\n  this is an instance of the prototypical template info"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removeBoundDom",
              "description": "Removes and unbinds the nodes previously contained in the provided\nDocumentFragment returned from `_stampTemplate`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2270,
                  "column": 6
                },
                "end": {
                  "line": 2291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "DocumentFragment",
                  "description": "DocumentFragment previously returned\n  from `_stampTemplate` associated with the nodes to be removed"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "connectedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 297,
                  "column": 4
                },
                "end": {
                  "line": 307,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "disconnectedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 289,
                  "column": 4
                },
                "end": {
                  "line": 295,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_attachDom",
              "description": "Attaches an element's stamped dom to itself. By default,\nthis method creates a `shadowRoot` and adds the dom to it.\nHowever, this method may be overridden to allow an element\nto put its dom in another location.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 689,
                  "column": 6
                },
                "end": {
                  "line": 704,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "NodeList",
                  "description": "to attach to the element."
                }
              ],
              "return": {
                "type": "Node",
                "desc": "node to which the dom has been attached."
              },
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "updateStyles",
              "description": "When using the ShadyCSS scoping and custom property shim, causes all\nshimmed styles in this element (and its subtree) to be updated\nbased on current custom property values.\n\nThe optional parameter overrides inline custom property styles with an\nobject of properties where the keys are CSS properties, and the values\nare strings.\n\nExample: `this.updateStyles({'--color': 'blue'})`\n\nThese properties are retained unless a value of `null` is set.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 743,
                  "column": 6
                },
                "end": {
                  "line": 747,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "properties",
                  "type": "Object=",
                  "description": "Bag of custom property key/values to\n  apply to this element."
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "resolveUrl",
              "description": "Rewrites a given URL relative to a base URL. The base URL defaults to\nthe original location of the document containing the `dom-module` for\nthis element. This method will return the same URL before and after\nbundling.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 760,
                  "column": 6
                },
                "end": {
                  "line": 765,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "url",
                  "type": "string",
                  "description": "URL to resolve."
                },
                {
                  "name": "base",
                  "type": "string=",
                  "description": "Optional base URL to resolve against, defaults\nto the element's `importPath`"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Rewritten URL relative to base"
              },
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "__ensureTemplatized",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 309,
                  "column": 4
                },
                "end": {
                  "line": 356,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__getMethodHost",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 358,
                  "column": 4
                },
                "end": {
                  "line": 365,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__sortChanged",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 367,
                  "column": 4
                },
                "end": {
                  "line": 374,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "sort"
                }
              ]
            },
            {
              "name": "__filterChanged",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 376,
                  "column": 4
                },
                "end": {
                  "line": 383,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "filter"
                }
              ]
            },
            {
              "name": "__computeFrameTime",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 385,
                  "column": 4
                },
                "end": {
                  "line": 387,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "rate"
                }
              ]
            },
            {
              "name": "__initializeChunking",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 389,
                  "column": 4
                },
                "end": {
                  "line": 395,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__tryRenderChunk",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 397,
                  "column": 4
                },
                "end": {
                  "line": 403,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__requestRenderChunk",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 405,
                  "column": 4
                },
                "end": {
                  "line": 407,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__renderChunk",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 409,
                  "column": 4
                },
                "end": {
                  "line": 419,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__observeChanged",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 421,
                  "column": 4
                },
                "end": {
                  "line": 424,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__itemsChanged",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 426,
                  "column": 4
                },
                "end": {
                  "line": 438,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "change"
                }
              ]
            },
            {
              "name": "__handleObservedPaths",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 440,
                  "column": 4
                },
                "end": {
                  "line": 451,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path"
                }
              ]
            },
            {
              "name": "__debounceRender",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 457,
                  "column": 4
                },
                "end": {
                  "line": 463,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "fn",
                  "type": "function ()",
                  "description": "Function to debounce."
                },
                {
                  "name": "delay",
                  "type": "number=",
                  "description": "Delay in ms to debounce by."
                }
              ]
            },
            {
              "name": "render",
              "description": "Forces the element to render its content. Normally rendering is\nasynchronous to a provoking change. This is done for efficiency so\nthat multiple changes trigger only a single render. The render method\nshould be called if, for example, template rendering is required to\nvalidate application state.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 472,
                  "column": 4
                },
                "end": {
                  "line": 476,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__render",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 478,
                  "column": 4
                },
                "end": {
                  "line": 499,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__applyFullRefresh",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 501,
                  "column": 4
                },
                "end": {
                  "line": 539,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__detachInstance",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 541,
                  "column": 4
                },
                "end": {
                  "line": 548,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx"
                }
              ]
            },
            {
              "name": "__attachInstance",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 550,
                  "column": 4
                },
                "end": {
                  "line": 553,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx"
                },
                {
                  "name": "parent"
                }
              ]
            },
            {
              "name": "__detachAndRemoveInstance",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 555,
                  "column": 4
                },
                "end": {
                  "line": 561,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx"
                }
              ]
            },
            {
              "name": "__stampInstance",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 563,
                  "column": 4
                },
                "end": {
                  "line": 569,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "item"
                },
                {
                  "name": "instIdx"
                },
                {
                  "name": "itemIdx"
                }
              ]
            },
            {
              "name": "__insertInstance",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 571,
                  "column": 4
                },
                "end": {
                  "line": 588,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "item"
                },
                {
                  "name": "instIdx"
                },
                {
                  "name": "itemIdx"
                }
              ]
            },
            {
              "name": "_showHideChildren",
              "description": "Implements extension point from Templatize mixin",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 591,
                  "column": 4
                },
                "end": {
                  "line": 595,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "hidden"
                }
              ]
            },
            {
              "name": "__handleItemPath",
              "description": "responsible for notifying item.<path> changes to inst for key",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 599,
                  "column": 4
                },
                "end": {
                  "line": 623,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path"
                },
                {
                  "name": "value"
                }
              ]
            },
            {
              "name": "itemForElement",
              "description": "Returns the item associated with a given element stamped by\nthis `dom-repeat`.\n\nNote, to modify sub-properties of the item,\n`modelForElement(el).set('item.<sub-prop>', value)`\nshould be used.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 636,
                  "column": 4
                },
                "end": {
                  "line": 639,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "el",
                  "type": "HTMLElement",
                  "description": "Element for which to return the item."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item associated with the element."
              }
            },
            {
              "name": "indexForElement",
              "description": "Returns the inst index for a given element stamped by this `dom-repeat`.\nIf `sort` is provided, the index will reflect the sorted order (rather\nthan the original array order).",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 650,
                  "column": 4
                },
                "end": {
                  "line": 653,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "el",
                  "type": "HTMLElement",
                  "description": "Element for which to return the index."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Row index associated with the element (note this may\n  not correspond to the array index if a user `sort` is applied)."
              }
            },
            {
              "name": "modelForElement",
              "description": "Returns the template \"model\" associated with a given element, which\nserves as the binding scope for the template instance the element is\ncontained in. A template model is an instance of `Polymer.Base`, and\nshould be used to manipulate data associated with this template instance.\n\nExample:\n\n  let model = modelForElement(el);\n  if (model.index < 10) {\n    model.set('item.checked', true);\n  }",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 672,
                  "column": 4
                },
                "end": {
                  "line": 674,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "el",
                  "type": "HTMLElement",
                  "description": "Element for which to return a template model."
                }
              ],
              "return": {
                "type": "TemplateInstanceBase",
                "desc": "Model representing the binding scope for\n  the element."
              }
            }
          ],
          "staticMethods": [
            {
              "name": "_parseTemplate",
              "description": "Scans a template to produce template metadata.\n\nTemplate-specific metadata are stored in the object returned, and node-\nspecific metadata are stored in objects in its flattened `nodeInfoList`\narray.  Only nodes in the template that were parsed as nodes of\ninterest contain an object in `nodeInfoList`.  Each `nodeInfo` object\ncontains an `index` (`childNodes` index in parent) and optionally\n`parent`, which points to node info of its parent (including its index).\n\nThe template metadata object returned from this method has the following\nstructure (many fields optional):\n\n```js\n  {\n    // Flattened list of node metadata (for nodes that generated metadata)\n    nodeInfoList: [\n      {\n        // `id` attribute for any nodes with id's for generating `$` map\n        id: {string},\n        // `on-event=\"handler\"` metadata\n        events: [\n          {\n            name: {string},   // event name\n            value: {string},  // handler method name\n          }, ...\n        ],\n        // Notes when the template contained a `<slot>` for shady DOM\n        // optimization purposes\n        hasInsertionPoint: {boolean},\n        // For nested `<template>`` nodes, nested template metadata\n        templateInfo: {object}, // nested template metadata\n        // Metadata to allow efficient retrieval of instanced node\n        // corresponding to this metadata\n        parentInfo: {number},   // reference to parent nodeInfo>\n        parentIndex: {number},  // index in parent's `childNodes` collection\n        infoIndex: {number},    // index of this `nodeInfo` in `templateInfo.nodeInfoList`\n      },\n      ...\n    ],\n    // When true, the template had the `strip-whitespace` attribute\n    // or was nested in a template with that setting\n    stripWhitespace: {boolean},\n    // For nested templates, nested template content is moved into\n    // a document fragment stored here; this is an optimization to\n    // avoid the cost of nested template cloning\n    content: {DocumentFragment}\n  }\n```\n\nThis method kicks off a recursive treewalk as follows:\n\n```\n   _parseTemplate <---------------------+\n     _parseTemplateContent              |\n       _parseTemplateNode  <------------|--+\n         _parseTemplateNestedTemplate --+  |\n         _parseTemplateChildNodes ---------+\n         _parseTemplateNodeAttributes\n           _parseTemplateNodeAttribute\n\n```\n\nThese methods may be overridden to add custom metadata about templates\nto either `templateInfo` or `nodeInfo`.\n\nNote that this method may be destructive to the template, in that\ne.g. event annotations may be removed after being noted in the\ntemplate metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 195,
                  "column": 6
                },
                "end": {
                  "line": 206,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to parse"
                },
                {
                  "name": "outerTemplateInfo",
                  "type": "Object=",
                  "description": "Template metadata from the outer\n  template, for parsing nested templates"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Parsed template metadata"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateContent",
              "description": "Overrides `PropertyAccessors` to add map of dynamic functions on\ntemplate info, for consumption by `PropertyEffects` template binding\ncode. This map determines which method templates should have accessors\ncreated for them.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 775,
                  "column": 6
                },
                "end": {
                  "line": 778,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template"
                },
                {
                  "name": "templateInfo"
                },
                {
                  "name": "nodeInfo"
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_parseTemplateNode",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from `TextNode`'s' `textContent`.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2309,
                  "column": 6
                },
                "end": {
                  "line": 2323,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateChildNodes",
              "description": "Parses template child nodes for the given root node.\n\nThis method also wraps whitelisted legacy template extensions\n(`is=\"dom-if\"` and `is=\"dom-repeat\"`) with their equivalent element\nwrappers, collapses text nodes, and strips whitespace from the template\nif the `templateInfo.stripWhitespace` setting was provided.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 254,
                  "column": 6
                },
                "end": {
                  "line": 288,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "root",
                  "type": "Node",
                  "description": "Root node whose `childNodes` will be parsed"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNestedTemplate",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nbinding the properties that a nested template depends on to the template\nas `_host_<property>`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2392,
                  "column": 6
                },
                "end": {
                  "line": 2402,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateNodeAttributes",
              "description": "Parses template node attributes and adds node metadata to `nodeInfo`\nfor nodes of interest.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 326,
                  "column": 6
                },
                "end": {
                  "line": 335,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNodeAttribute",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from attributes.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2341,
                  "column": 6
                },
                "end": {
                  "line": 2377,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                },
                {
                  "name": "name"
                },
                {
                  "name": "value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_contentForTemplate",
              "description": "Returns the `content` document fragment for a given template.\n\nFor nested templates, Polymer performs an optimization to cache nested\ntemplate content to avoid the cost of cloning deeply nested templates.\nThis method retrieves the cached content for a given template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 380,
                  "column": 6
                },
                "end": {
                  "line": 383,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to retrieve `content` for"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Content fragment"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "createPropertiesForAttributes",
              "description": "Generates property accessors for all attributes in the standard\nstatic `observedAttributes` array.\n\nAttribute names are mapped to property names using the `dash-case` to\n`camelCase` convention",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 110,
                  "column": 6
                },
                "end": {
                  "line": 115,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "addPropertyEffect",
              "description": "Ensures an accessor exists for the specified property, and adds\nto a list of \"property effects\" that will run when the accessor for\nthe specified property is set.  Effects are grouped by \"type\", which\nroughly corresponds to a phase in effect processing.  The effect\nmetadata should be in the following form:\n\n  {\n    fn: effectFunction, // Reference to function to call to perform effect\n    info: { ... }       // Effect metadata passed to function\n    trigger: {          // Optional triggering metadata; if not provided\n      name: string      // the property is treated as a wildcard\n      structured: boolean\n      wildcard: boolean\n    }\n  }\n\nEffects are called from `_propertiesChanged` in the following order by\ntype:\n\n1. COMPUTE\n2. PROPAGATE\n3. REFLECT\n4. OBSERVE\n5. NOTIFY\n\nEffect functions are called with the following signature:\n\n  effectFunction(inst, path, props, oldProps, info, hasPaths)",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2040,
                  "column": 6
                },
                "end": {
                  "line": 2042,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createPropertyObserver",
              "description": "Creates a single-property observer for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2053,
                  "column": 6
                },
                "end": {
                  "line": 2055,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createMethodObserver",
              "description": "Creates a multi-property \"method observer\" based on the provided\nexpression, which should be a string in the form of a normal Javascript\nfunction signature: `'methodName(arg1, [..., argn])'`.  Each argument\nshould correspond to a property or path in the context of this\nprototype (or instance), or may be a literal string or number.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2069,
                  "column": 6
                },
                "end": {
                  "line": 2071,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createNotifyingProperty",
              "description": "Causes the setter for the given property to dispatch `<property>-changed`\nevents to notify of changes to the property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2080,
                  "column": 6
                },
                "end": {
                  "line": 2082,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReadOnlyProperty",
              "description": "Creates a read-only accessor for the given property.\n\nTo set the property, use the protected `_setProperty` API.\nTo create a custom protected setter (e.g. `_setMyProp()` for\nproperty `myProp`), pass `true` for `protectedSetter`.\n\nNote, if the property will have other property effects, this method\nshould be called first, before adding other effects.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2099,
                  "column": 6
                },
                "end": {
                  "line": 2101,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReflectedProperty",
              "description": "Causes the setter for the given property to reflect the property value\nto a (dash-cased) attribute of the same name.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2110,
                  "column": 6
                },
                "end": {
                  "line": 2112,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createComputedProperty",
              "description": "Creates a computed property whose value is set to the result of the\nmethod described by the given `expression` each time one or more\narguments to the method changes.  The expression should be a string\nin the form of a normal Javascript function signature:\n`'methodName(arg1, [..., argn])'`",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2127,
                  "column": 6
                },
                "end": {
                  "line": 2129,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating whether\n  method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "bindTemplate",
              "description": "Parses the provided template to ensure binding effects are created\nfor them, and then ensures property accessors are created for any\ndependent properties in the template.  Binding effects for bound\ntemplates are stored in a linked list on the instance so that\ntemplates can be efficiently stamped and unstamped.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2143,
                  "column": 6
                },
                "end": {
                  "line": 2145,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addTemplatePropertyEffect",
              "description": "Adds a property effect to the given template metadata, which is run\nat the \"propagate\" stage of `_propertiesChanged` when the template\nhas been bound to the element via `_bindTemplate`.\n\nThe `effect` object should match the format in `_addPropertyEffect`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2208,
                  "column": 6
                },
                "end": {
                  "line": 2214,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata to add effect to"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseBindings",
              "description": "Called to parse text in a template (either attribute values or\ntextContent) into binding metadata.\n\nAny overrides of this method should return an array of binding part\nmetadata  representing one or more bindings found in the provided text\nand any \"literal\" text in between.  Any non-literal parts will be passed\nto `_evaluateBinding` when any dependencies change.  The only required\nfields of each \"part\" in the returned array are as follows:\n\n- `dependencies` - Array containing trigger metadata for each property\n  that should trigger the binding to update\n- `literal` - String containing text if the part represents a literal;\n  in this case no `dependencies` are needed\n\nAdditional metadata for use by `_evaluateBinding` may be provided in\neach part object as needed.\n\nThe default implementation handles the following types of bindings\n(one or more may be intermixed with literal strings):\n- Property binding: `[[prop]]`\n- Path binding: `[[object.prop]]`\n- Negated property or path bindings: `[[!prop]]` or `[[!object.prop]]`\n- Two-way property or path bindings (supports negation):\n  `{{prop}}`, `{{object.prop}}`, `{{!prop}}` or `{{!object.prop}}`\n- Inline computed method (supports negation):\n  `[[compute(a, 'literal', b)]]`, `[[!compute(a, 'literal', b)]]`",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2437,
                  "column": 6
                },
                "end": {
                  "line": 2500,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "text",
                  "type": "string",
                  "description": "Text to parse from attribute or textContent"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Current template metadata"
                }
              ],
              "return": {
                "type": "Array.<Object>",
                "desc": "Array of binding part metadata"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_evaluateBinding",
              "description": "Called to evaluate a previously parsed binding part based on a set of\none or more changed dependencies.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2516,
                  "column": 6
                },
                "end": {
                  "line": 2533,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "inst",
                  "type": "HTMLElement",
                  "description": "Element that should be used as scope for\n  binding dependencies"
                },
                {
                  "name": "part",
                  "type": "Object",
                  "description": "Binding part metadata"
                },
                {
                  "name": "path",
                  "type": "string",
                  "description": "Property/path that triggered this effect"
                },
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of current property changes"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value the binding part evaluated to"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "finalize",
              "description": "Called automatically when the first element instance is created to\nensure that class finalization work has been completed.\nMay be called by users to eagerly perform class finalization work\nprior to the creation of the first element instance.\n\nClass finalization work generally includes meta-programming such as\ncreating property accessors and any property effect metadata needed for\nthe features used.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 493,
                  "column": 6
                },
                "end": {
                  "line": 497,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 121,
              "column": 2
            },
            "end": {
              "line": 676,
              "column": 3
            }
          },
          "privacy": "public",
          "superclass": "HTMLElement",
          "name": "Polymer.DomRepeat",
          "attributes": [
            {
              "name": "items",
              "description": "An array containing items determining how many instances of the template\nto stamp and that that each template instance should bind to.",
              "sourceRange": {
                "start": {
                  "line": 144,
                  "column": 8
                },
                "end": {
                  "line": 146,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "Array"
            },
            {
              "name": "as",
              "description": "The name of the variable to add to the binding scope for the array\nelement associated with a given template instance.",
              "sourceRange": {
                "start": {
                  "line": 152,
                  "column": 8
                },
                "end": {
                  "line": 155,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "string"
            },
            {
              "name": "index-as",
              "description": "The name of the variable to add to the binding scope with the index\nof the instance in the sorted and filtered list of rendered items.\nNote, for the index in the `this.items` array, use the value of the\n`itemsIndexAs` property.",
              "sourceRange": {
                "start": {
                  "line": 163,
                  "column": 8
                },
                "end": {
                  "line": 166,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "string"
            },
            {
              "name": "items-index-as",
              "description": "The name of the variable to add to the binding scope with the index\nof the instance in the `this.items` array. Note, for the index of\nthis instance in the sorted and filtered list of rendered items,\nuse the value of the `indexAs` property.",
              "sourceRange": {
                "start": {
                  "line": 174,
                  "column": 8
                },
                "end": {
                  "line": 177,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "string"
            },
            {
              "name": "sort",
              "description": "A function that should determine the sort order of the items.  This\nproperty should either be provided as a string, indicating a method\nname on the element's host, or else be an actual function.  The\nfunction should match the sort function passed to `Array.sort`.\nUsing a sort function has no effect on the underlying `items` array.",
              "sourceRange": {
                "start": {
                  "line": 186,
                  "column": 8
                },
                "end": {
                  "line": 189,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "Function"
            },
            {
              "name": "filter",
              "description": "A function that can be used to filter items out of the view.  This\nproperty should either be provided as a string, indicating a method\nname on the element's host, or else be an actual function.  The\nfunction should match the sort function passed to `Array.filter`.\nUsing a filter function has no effect on the underlying `items` array.",
              "sourceRange": {
                "start": {
                  "line": 198,
                  "column": 8
                },
                "end": {
                  "line": 201,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "Function"
            },
            {
              "name": "observe",
              "description": "When using a `filter` or `sort` function, the `observe` property\nshould be set to a space-separated list of the names of item\nsub-fields that should trigger a re-sort or re-filter when changed.\nThese should generally be fields of `item` that the sort or filter\nfunction depends on.",
              "sourceRange": {
                "start": {
                  "line": 210,
                  "column": 8
                },
                "end": {
                  "line": 213,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "string"
            },
            {
              "name": "delay",
              "description": "When using a `filter` or `sort` function, the `delay` property\ndetermines a debounce time after a change to observed item\nproperties that must pass before the filter or sort is re-run.\nThis is useful in rate-limiting shuffing of the view when\nitem changes may be frequent.",
              "sourceRange": {
                "start": {
                  "line": 222,
                  "column": 8
                },
                "end": {
                  "line": 222,
                  "column": 21
                }
              },
              "metadata": {},
              "type": "number"
            },
            {
              "name": "rendered-item-count",
              "description": "Count of currently rendered items after `filter` (if any) has been applied.\nIf \"chunking mode\" is enabled, `renderedItemCount` is updated each time a\nset of template instances is rendered.",
              "sourceRange": {
                "start": {
                  "line": 230,
                  "column": 8
                },
                "end": {
                  "line": 234,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "number"
            },
            {
              "name": "initial-count",
              "description": "Defines an initial count of template instances to render after setting\nthe `items` array, before the next paint, and puts the `dom-repeat`\ninto \"chunking mode\".  The remaining items will be created and rendered\nincrementally at each animation frame therof until all instances have\nbeen rendered.",
              "sourceRange": {
                "start": {
                  "line": 243,
                  "column": 8
                },
                "end": {
                  "line": 246,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "number"
            },
            {
              "name": "target-framerate",
              "description": "When `initialCount` is used, this property defines a frame rate to\ntarget by throttling the number of instances rendered each frame to\nnot exceed the budget for the target frame rate.  Setting this to a\nhigher number will allow lower latency and higher throughput for\nthings like event handlers, but will result in a longer time for the\nremaining items to complete rendering.",
              "sourceRange": {
                "start": {
                  "line": 256,
                  "column": 8
                },
                "end": {
                  "line": 259,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "number"
            }
          ],
          "events": [
            {
              "type": "CustomEvent",
              "name": "dom-change",
              "description": "dom-change",
              "metadata": {}
            },
            {
              "type": "CustomEvent",
              "name": "rendered-item-count-changed",
              "description": "Fired when the `renderedItemCount` property changes.",
              "metadata": {}
            }
          ],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": [],
          "tagname": "dom-repeat",
          "mixins": [
            "Polymer.MutableData"
          ]
        },
        {
          "description": "The `<dom-if>` element will stamp a light-dom `<template>` child when\nthe `if` property becomes truthy, and the template can use Polymer\ndata-binding and declarative event features when used in the context of\na Polymer element's template.\n\nWhen `if` becomes falsey, the stamped content is hidden but not\nremoved from dom. When `if` subsequently becomes truthy again, the content\nis simply re-shown. This approach is used due to its favorable performance\ncharacteristics: the expense of creating template content is paid only\nonce and lazily.\n\nSet the `restamp` property to true to force the stamped content to be\ncreated / destroyed when the `if` condition changes.",
          "summary": "Custom element that conditionally stamps and hides or removes\n  template content based on a boolean flag.",
          "path": "lib/elements/dom-if.html",
          "properties": [
            {
              "name": "if",
              "type": "boolean",
              "description": "A boolean indicating whether this template should stamp.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 64,
                  "column": 8
                },
                "end": {
                  "line": 67,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {
                  "observer": "\"__debounceRender\""
                }
              }
            },
            {
              "name": "restamp",
              "type": "boolean",
              "description": "When true, elements will be removed from DOM and discarded when `if`\nbecomes false and re-created and added back to the DOM when `if`\nbecomes true.  By default, stamped elements will be hidden but left\nin the DOM when `if` becomes false, which is generally results\nin better performance.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 76,
                  "column": 8
                },
                "end": {
                  "line": 79,
                  "column": 9
                }
              },
              "metadata": {
                "polymer": {
                  "observer": "\"__debounceRender\""
                }
              }
            }
          ],
          "methods": [
            {
              "name": "_stampTemplate",
              "description": "Stamps the provided template and performs instance-time setup for\nPolymer template features, including data bindings, declarative event\nlisteners, and the `this.$` map of `id`'s to nodes.  A document fragment\nis returned containing the stamped DOM, ready for insertion into the\nDOM.\n\nThis method may be called more than once; however note that due to\n`shadycss` polyfill limitations, only styles from templates prepared\nusing `ShadyCSS.prepareTemplate` will be correctly polyfilled (scoped\nto the shadow root and support CSS custom properties), and note that\n`ShadyCSS.prepareTemplate` may only be called once per element. As such,\nany styles required by in runtime-stamped templates must be included\nin the main element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2235,
                  "column": 6
                },
                "end": {
                  "line": 2260,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to stamp"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Cloned template content"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addMethodEventListenerToNode",
              "description": "Adds an event listener by method name for the event provided.\n\nThis method generates a handler function that looks up the method\nname at handling time.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 443,
                  "column": 6
                },
                "end": {
                  "line": 448,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add listener on"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of method"
                },
                {
                  "name": "context",
                  "type": "*=",
                  "description": "Context the method will be called on (defaults\n  to `node`)"
                }
              ],
              "return": {
                "type": "Function",
                "desc": "Generated handler function"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_addEventListenerToNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 457,
                  "column": 6
                },
                "end": {
                  "line": 459,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add event listener to"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to add"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_removeEventListenerFromNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 468,
                  "column": 6
                },
                "end": {
                  "line": 470,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to remove event listener from"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to remove"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "attributeChangedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`attributeChangedCallback`.\n\nBy default, attributes declared in `properties` metadata are\ndeserialized using their `type` information to properties of the\nsame name.  \"Dash-cased\" attributes are deserialzed to \"camelCase\"\nproperties.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 717,
                  "column": 6
                },
                "end": {
                  "line": 725,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name"
                },
                {
                  "name": "old"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_initializeProperties",
              "description": "Overrides the default `Polymer.PropertyAccessors` to ensure class\nmetaprogramming related to property accessors and effects has\ncompleted (calls `finalize`).\n\nIt also initializes any property defaults provided via `value` in\n`properties` metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 577,
                  "column": 6
                },
                "end": {
                  "line": 617,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_initializeProtoProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to provide a\nmore efficient implementation of initializing properties from\nthe prototype on the instance.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1107,
                  "column": 6
                },
                "end": {
                  "line": 1111,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_initializeInstanceProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to avoid setting\n`_setProperty`'s `shouldNotify: true`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1119,
                  "column": 6
                },
                "end": {
                  "line": 1128,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_ensureAttribute",
              "description": "Ensures the element has the given attribute. If it does not,\nassigns the given value to the attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 204,
                  "column": 6
                },
                "end": {
                  "line": 208,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to ensure is set."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_attributeToProperty",
              "description": "Deserializes an attribute to its associated property.\n\nThis method calls the `_deserializeValue` method to convert the string to\na typed value.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 220,
                  "column": 6
                },
                "end": {
                  "line": 226,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to deserialize."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "type to deserialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_propertyToAttribute",
              "description": "Serializes a property to its associated attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 235,
                  "column": 6
                },
                "end": {
                  "line": 241,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name to reflect."
                },
                {
                  "name": "attribute",
                  "type": "string=",
                  "description": "Attribute name to reflect."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Property value to refect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_valueToNodeAttribute",
              "description": "Sets a typed value to an HTML attribute on a node.\n\nThis method calls the `_serializeValue` method to convert the typed\nvalue to a string.  If the `_serializeValue` method returns `undefined`,\nthe attribute will be removed (this is the default for boolean\ntype `false`).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 255,
                  "column": 6
                },
                "end": {
                  "line": 262,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to set attribute to."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to serialize."
                },
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Attribute name to serialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_serializeValue",
              "description": "Converts a typed JavaScript value to a string.\n\nThis method is called by Polymer when setting JS property values to\nHTML attributes.  Users may override this method on Polymer element\nprototypes to provide serialization for custom types.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 274,
                  "column": 6
                },
                "end": {
                  "line": 294,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Property value to serialize."
                }
              ],
              "return": {
                "type": "(string|undefined)",
                "desc": "String serialized from the provided property value."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_deserializeValue",
              "description": "Converts a string to a typed JavaScript value.\n\nThis method is called by Polymer when reading HTML attribute values to\nJS properties.  Users may override this method on Polymer element\nprototypes to provide deserialization for custom `type`s.  Note,\nthe `type` argument is the value of the `type` field provided in the\n`properties` configuration object for a given property, and is\nby convention the constructor for the type to deserialize.\n\nNote: The return value of `undefined` is used as a sentinel value to\nindicate the attribute should be removed.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 313,
                  "column": 6
                },
                "end": {
                  "line": 355,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "string",
                  "description": "Attribute value to deserialize."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "Type to deserialize the string to."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Typed value deserialized from the provided string."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_createPropertyAccessor",
              "description": "Creates a setter/getter pair for the named property with its own\nlocal storage.  The getter returns the value in the local storage,\nand the setter calls `_setProperty`, which updates the local storage\nfor the property and enqueues a `_propertiesChanged` callback.\n\nThis method may be called on a prototype or an instance.  Calling\nthis method may overwrite a property value that already exists on\nthe prototype/instance by creating the accessor.  When calling on\na prototype, any overwritten values are saved in `__dataProto`,\nand it is up to the subclasser to decide how/when to set those\nproperties back into the accessor.  When calling on an instance,\nthe overwritten value is set via `_setPendingProperty`, and the\nuser should call `_invalidateProperties` or `_flushProperties`\nfor the values to take effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 379,
                  "column": 6
                },
                "end": {
                  "line": 395,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "readOnly",
                  "type": "boolean=",
                  "description": "When true, no setter is created; the\n  protected `_setProperty` function must be used to set the property"
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_hasAccessor",
              "description": "Returns true if this library created an accessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 403,
                  "column": 6
                },
                "end": {
                  "line": 405,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if an accessor was created"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_setProperty",
              "description": "Overrides base implementation to ensure all accessors set `shouldNotify`\nto true, for per-property notification tracking.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1389,
                  "column": 6
                },
                "end": {
                  "line": 1393,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingProperty",
              "description": "Overrides the `PropertyAccessors` implementation to introduce special\ndirty check logic depending on the property & value being set:\n\n1. Any value set to a path (e.g. 'obj.prop': 42 or 'obj.prop': {...})\n   Stored in `__dataTemp`, dirty checked against `__dataTemp`\n2. Object set to simple property (e.g. 'prop': {...})\n   Stored in `__dataTemp` and `__data`, dirty checked against\n   `__dataTemp` by default implementation of `_shouldPropertyChange`\n3. Primitive value set to simple property (e.g. 'prop': 42)\n   Stored in `__data`, dirty checked against `__data`\n\nThe dirty-check is important to prevent cycles due to two-way\nnotification, but paths and objects are only dirty checked against any\nprevious value set during this turn via a \"temporary cache\" that is\ncleared when the last `_propertiesChaged` exits. This is so:\na. any cached array paths (e.g. 'array.3.prop') may be invalidated\n   due to array mutations like shift/unshift/splice; this is fine\n   since path changes are dirty-checked at user entry points like `set`\nb. dirty-checking for objects only lasts one turn to allow the user\n   to mutate the object in-place and re-set it with the same identity\n   and have all sub-properties re-propagated in a subsequent turn.\n\nThe temp cache is not necessarily sufficient to prevent invalid array\npaths, since a splice can happen during the same turn (with pathological\nuser code); we could introduce a \"fixup\" for temporarily cached array\npaths if needed: https://github.com/Polymer/polymer/issues/4227",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1353,
                  "column": 6
                },
                "end": {
                  "line": 1381,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                },
                {
                  "name": "shouldNotify"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_isPropertyPending",
              "description": "Returns true if the specified property has a pending change.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 456,
                  "column": 6
                },
                "end": {
                  "line": 458,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if property has a pending change"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_invalidateProperties",
              "description": "Overrides `PropertyAccessor`'s default async queuing of\n`_propertiesChanged`: if `__dataReady` is false (has not yet been\nmanually flushed), the function no-ops; otherwise flushes\n`_propertiesChanged` synchronously.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1403,
                  "column": 6
                },
                "end": {
                  "line": 1407,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enableProperties",
              "description": "Call to enable property accessor processing. Before this method is\ncalled accessor values will be set but side effects are\nqueued. When called, any pending side effects occur immediately.\nFor elements, generally `connectedCallback` is a normal spot to do so.\nIt is safe to call this method multiple times as it only turns on\nproperty accessors once.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 486,
                  "column": 6
                },
                "end": {
                  "line": 495,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_flushProperties",
              "description": "Calls the `_propertiesChanged` callback with the current set of\npending changes (and old values recorded when pending changes were\nset), and resets the pending set of changes. Generally, this method\nshould not be called in user code.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 506,
                  "column": 6
                },
                "end": {
                  "line": 514,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "ready",
              "description": "Stamps the element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 649,
                  "column": 6
                },
                "end": {
                  "line": 655,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_propertiesChanged",
              "description": "Implements `PropertyAccessors`'s properties changed callback.\n\nRuns each class of effects for the batch of changed properties in\na specific order (compute, propagate, reflect, observe, notify).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1542,
                  "column": 6
                },
                "end": {
                  "line": 1575,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "currentProps"
                },
                {
                  "name": "changedProps"
                },
                {
                  "name": "oldProps"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_shouldPropertyChange",
              "description": "Method called to determine whether a property value should be\nconsidered as a change and cause the `_propertiesChanged` callback\nto be enqueued.\n\nThe default implementation returns `true` for primitive types if a\nstrict equality check fails, and returns `true` for all Object/Arrays.\nThe method always returns false for `NaN`.\n\nOverride this method to e.g. provide stricter checking for\nObjects/Arrays when using immutable patterns.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 569,
                  "column": 6
                },
                "end": {
                  "line": 576,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change\n  and enqueue a `_proeprtiesChanged` callback"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_addPropertyEffect",
              "description": "Equivalent to static `addPropertyEffect` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1142,
                  "column": 6
                },
                "end": {
                  "line": 1150,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removePropertyEffect",
              "description": "Removes the given property effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1159,
                  "column": 6
                },
                "end": {
                  "line": 1165,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property the effect was associated with"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object to remove"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasPropertyEffect",
              "description": "Returns whether the current prototype/instance has a property effect\nof a certain type.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1176,
                  "column": 6
                },
                "end": {
                  "line": 1179,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "type",
                  "type": "string=",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReadOnlyEffect",
              "description": "Returns whether the current prototype/instance has a \"read only\"\naccessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1189,
                  "column": 6
                },
                "end": {
                  "line": 1191,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasNotifyEffect",
              "description": "Returns whether the current prototype/instance has a \"notify\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1201,
                  "column": 6
                },
                "end": {
                  "line": 1203,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReflectEffect",
              "description": "Returns whether the current prototype/instance has a \"reflect to attribute\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1213,
                  "column": 6
                },
                "end": {
                  "line": 1215,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasComputedEffect",
              "description": "Returns whether the current prototype/instance has a \"computed\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1225,
                  "column": 6
                },
                "end": {
                  "line": 1227,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingPropertyOrPath",
              "description": "Sets a pending property or path.  If the root property of the path in\nquestion had no accessor, the path is set, otherwise it is enqueued\nvia `_setPendingProperty`.\n\nThis function isolates relatively expensive functionality necessary\nfor the public API (`set`, `setProperties`, `notifyPath`, and property\nchange listeners via {{...}} bindings), such that it is only done\nwhen paths enter the system, and not at every propagation step.  It\nalso sets a `__dataHasPaths` flag on the instance which is used to\nfast-path slower path-matching code in the property effects host paths.\n\n`path` can be a path string or array of path parts as accepted by the\npublic API.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1259,
                  "column": 6
                },
                "end": {
                  "line": 1291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(number|string)>)",
                  "description": "Path to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set"
                },
                {
                  "name": "shouldNotify",
                  "type": "boolean=",
                  "description": "Set to true if this change should\n cause a property notification event dispatch"
                },
                {
                  "name": "isPathNotification",
                  "type": "boolean=",
                  "description": "If the path being set is a path\n  notification of an already changed value, as opposed to a request\n  to set and notify the change.  In the latter `false` case, a dirty\n  check is performed and then the value is set to the path before\n  enqueuing the pending property change."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if the property/path was enqueued in\n  the pending changes bag."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setUnmanagedPropertyToNode",
              "description": "Applies a value to a non-Polymer element/node's property.\n\nThe implementation makes a best-effort at binding interop:\nSome native element properties have side-effects when\nre-setting the same value (e.g. setting `<input>.value` resets the\ncursor position), so we do a dirty-check before setting the value.\nHowever, for better interop with non-Polymer custom elements that\naccept objects, we explicitly re-set object changes coming from the\nPolymer world (which may include deep object changes without the\ntop reference changing), erring on the side of providing more\ninformation.\n\nUsers may override this method to provide alternate approaches.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1313,
                  "column": 6
                },
                "end": {
                  "line": 1321,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "The node to set a property on"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "The property to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "The value to set"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enqueueClient",
              "description": "Enqueues the given client on a list of pending clients, whose\npending property changes can later be flushed via a call to\n`_flushClients`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1417,
                  "column": 6
                },
                "end": {
                  "line": 1422,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "client",
                  "type": "Object",
                  "description": "PropertyEffects client to enqueue"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_flushClients",
              "description": "Flushes any clients previously enqueued via `_enqueueClient`, causing\ntheir `_flushProperties` method to run.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1430,
                  "column": 6
                },
                "end": {
                  "line": 1441,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "__enableOrFlushClients",
              "description": "(c) the stamped dom enables.",
              "privacy": "private",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1455,
                  "column": 6
                },
                "end": {
                  "line": 1468,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_readyClients",
              "description": "Implements `PropertyEffects`'s `_readyClients` call. Attaches\nelement dom by calling `_attachDom` with the dom stamped from the\nelement's template via `_stampTemplate`. Note that this allows\nclient dom to be attached to the element prior to any observers\nrunning.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 666,
                  "column": 6
                },
                "end": {
                  "line": 675,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "setProperties",
              "description": "Sets a bag of property changes to this instance, and\nsynchronously processes all effects of the properties as a batch.\n\nProperty names must be simple properties, not paths.  Batched\npath propagation is not supported.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1495,
                  "column": 6
                },
                "end": {
                  "line": 1506,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of one or more key-value pairs whose key is\n  a property and value is the new value to set for that property."
                },
                {
                  "name": "setReadOnly",
                  "type": "boolean=",
                  "description": "When true, any private values set in\n  `props` will be set. By default, `setProperties` will not set\n  `readOnly: true` root properties."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_propagatePropertyChanges",
              "description": "Called to propagate any property changes to stamped template nodes\nmanaged by this element.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1586,
                  "column": 6
                },
                "end": {
                  "line": 1596,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "changedProps",
                  "type": "Object",
                  "description": "Bag of changed properties"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "linkPaths",
              "description": "Aliases one data path as another, such that path notifications from one\nare routed to the other.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1606,
                  "column": 6
                },
                "end": {
                  "line": 1611,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "to",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to link."
                },
                {
                  "name": "from",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Source path to link."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unlinkPaths",
              "description": "Removes a data path alias previously established with `_linkPaths`.\n\nNote, the path to unlink should be the target (`to`) used when\nlinking the paths.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1622,
                  "column": 6
                },
                "end": {
                  "line": 1627,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to unlink."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifySplices",
              "description": "Notify that an array has changed.\n\nExample:\n\n    this.items = [ {name: 'Jim'}, {name: 'Todd'}, {name: 'Bill'} ];\n    ...\n    this.items.splice(1, 1, {name: 'Sam'});\n    this.items.push({name: 'Bob'});\n    this.notifySplices('items', [\n      { index: 1, removed: [{name: 'Todd'}], addedCount: 1, obect: this.items, type: 'splice' },\n      { index: 3, removed: [], addedCount: 1, object: this.items, type: 'splice'}\n    ]);",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1658,
                  "column": 6
                },
                "end": {
                  "line": 1662,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "splices",
                  "type": "Array",
                  "description": "Array of splice records indicating ordered\n  changes that occurred to the array. Each record should have the\n  following fields:\n   * index: index at which the change occurred\n   * removed: array of items that were removed from this index\n   * addedCount: number of new items added at this index\n   * object: a reference to the array in question\n   * type: the string literal 'splice'\n\n  Note that splice records _must_ be normalized such that they are\n  reported in index order (raw results from `Object.observe` are not\n  ordered and must be normalized/merged before notifying)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "get",
              "description": "Convenience method for reading a value from a path.\n\nNote, if any part in the path is undefined, this method returns\n`undefined` (this method does not throw when dereferencing undefined\npaths).",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1683,
                  "column": 6
                },
                "end": {
                  "line": 1685,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to read.  The path may be specified as a string (e.g. `foo.bar.baz`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `users.12.name` or `['users', 12, 'name']`)."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value at the path, or `undefined` if any part of the path\n  is undefined."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "set",
              "description": "Convenience method for setting a value to a path and notifying any\nelements bound to the same path.\n\nNote, if any part in the path except for the last is undefined,\nthis method does nothing (this method does not throw when\ndereferencing undefined paths).",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1707,
                  "column": 6
                },
                "end": {
                  "line": 1717,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to write.  The path may be specified as a string (e.g. `'foo.bar.baz'`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `'users.12.name'` or `['users', 12, 'name']`)."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set at the specified path."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated.\n  When specified, no notification will occur."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "push",
              "description": "Adds items onto the end of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1733,
                  "column": 6
                },
                "end": {
                  "line": 1742,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "pop",
              "description": "Removes an item from the end of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1757,
                  "column": 6
                },
                "end": {
                  "line": 1766,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "splice",
              "description": "Starting from the start index specified, removes 0 or more items\nfrom the array and inserts 0 or more new items in their place.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.splice`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1785,
                  "column": 6
                },
                "end": {
                  "line": 1802,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "start",
                  "type": "number",
                  "description": "Index from which to start removing/inserting."
                },
                {
                  "name": "deleteCount",
                  "type": "number",
                  "description": "Number of items to remove."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "Array",
                "desc": "Array of removed items."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "shift",
              "description": "Removes an item from the beginning of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1817,
                  "column": 6
                },
                "end": {
                  "line": 1826,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unshift",
              "description": "Adds items onto the beginning of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1842,
                  "column": 6
                },
                "end": {
                  "line": 1850,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifyPath",
              "description": "Notify that a path has changed.\n\nExample:\n\n    this.item.user.name = 'Bob';\n    this.notifyPath('item.user.name');",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1864,
                  "column": 6
                },
                "end": {
                  "line": 1881,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Value at the path (optional)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReadOnlyProperty",
              "description": "Equivalent to static `createReadOnlyProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1893,
                  "column": 6
                },
                "end": {
                  "line": 1900,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createPropertyObserver",
              "description": "Equivalent to static `createPropertyObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1913,
                  "column": 6
                },
                "end": {
                  "line": 1923,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createMethodObserver",
              "description": "Equivalent to static `createMethodObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1935,
                  "column": 6
                },
                "end": {
                  "line": 1941,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createNotifyingProperty",
              "description": "Equivalent to static `createNotifyingProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1951,
                  "column": 6
                },
                "end": {
                  "line": 1959,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReflectedProperty",
              "description": "Equivalent to static `createReflectedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1969,
                  "column": 6
                },
                "end": {
                  "line": 1982,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createComputedProperty",
              "description": "Equivalent to static `createComputedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1995,
                  "column": 6
                },
                "end": {
                  "line": 2001,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_bindTemplate",
              "description": "Equivalent to static `bindTemplate` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.\n\nThis method may be called on the prototype (for prototypical template\nbinding, to avoid creating accessors every instance) once per prototype,\nand will be called with `runtimeBinding: true` by `_stampTemplate` to\ncreate and link an instance of the template metadata associated with a\nparticular stamping.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2171,
                  "column": 6
                },
                "end": {
                  "line": 2194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                },
                {
                  "name": "instanceBinding",
                  "type": "boolean=",
                  "description": "When false (default), performs\n  \"prototypical\" binding of the template and overwrites any previously\n  bound template for the class. When true (as passed from\n  `_stampTemplate`), the template info is instanced and linked into\n  the list of bound templates."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object; for `runtimeBinding`,\n  this is an instance of the prototypical template info"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removeBoundDom",
              "description": "Removes and unbinds the nodes previously contained in the provided\nDocumentFragment returned from `_stampTemplate`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2270,
                  "column": 6
                },
                "end": {
                  "line": 2291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "DocumentFragment",
                  "description": "DocumentFragment previously returned\n  from `_stampTemplate` associated with the nodes to be removed"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "connectedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 125,
                  "column": 4
                },
                "end": {
                  "line": 130,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "disconnectedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 116,
                  "column": 4
                },
                "end": {
                  "line": 123,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_attachDom",
              "description": "Attaches an element's stamped dom to itself. By default,\nthis method creates a `shadowRoot` and adds the dom to it.\nHowever, this method may be overridden to allow an element\nto put its dom in another location.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 689,
                  "column": 6
                },
                "end": {
                  "line": 704,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "NodeList",
                  "description": "to attach to the element."
                }
              ],
              "return": {
                "type": "Node",
                "desc": "node to which the dom has been attached."
              },
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "updateStyles",
              "description": "When using the ShadyCSS scoping and custom property shim, causes all\nshimmed styles in this element (and its subtree) to be updated\nbased on current custom property values.\n\nThe optional parameter overrides inline custom property styles with an\nobject of properties where the keys are CSS properties, and the values\nare strings.\n\nExample: `this.updateStyles({'--color': 'blue'})`\n\nThese properties are retained unless a value of `null` is set.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 743,
                  "column": 6
                },
                "end": {
                  "line": 747,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "properties",
                  "type": "Object=",
                  "description": "Bag of custom property key/values to\n  apply to this element."
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "resolveUrl",
              "description": "Rewrites a given URL relative to a base URL. The base URL defaults to\nthe original location of the document containing the `dom-module` for\nthis element. This method will return the same URL before and after\nbundling.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 760,
                  "column": 6
                },
                "end": {
                  "line": 765,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "url",
                  "type": "string",
                  "description": "URL to resolve."
                },
                {
                  "name": "base",
                  "type": "string=",
                  "description": "Optional base URL to resolve against, defaults\nto the element's `importPath`"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Rewritten URL relative to base"
              },
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "__debounceRender",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 92,
                  "column": 4
                },
                "end": {
                  "line": 114,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "render",
              "description": "Forces the element to render its content. Normally rendering is\nasynchronous to a provoking change. This is done for efficiency so\nthat multiple changes trigger only a single render. The render method\nshould be called if, for example, template rendering is required to\nvalidate application state.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 139,
                  "column": 4
                },
                "end": {
                  "line": 141,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__render",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 143,
                  "column": 4
                },
                "end": {
                  "line": 163,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__ensureInstance",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 165,
                  "column": 4
                },
                "end": {
                  "line": 222,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__syncHostProperties",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 224,
                  "column": 4
                },
                "end": {
                  "line": 233,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__teardownInstance",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 235,
                  "column": 4
                },
                "end": {
                  "line": 248,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_showHideChildren",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 250,
                  "column": 4
                },
                "end": {
                  "line": 255,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            }
          ],
          "staticMethods": [
            {
              "name": "_parseTemplate",
              "description": "Scans a template to produce template metadata.\n\nTemplate-specific metadata are stored in the object returned, and node-\nspecific metadata are stored in objects in its flattened `nodeInfoList`\narray.  Only nodes in the template that were parsed as nodes of\ninterest contain an object in `nodeInfoList`.  Each `nodeInfo` object\ncontains an `index` (`childNodes` index in parent) and optionally\n`parent`, which points to node info of its parent (including its index).\n\nThe template metadata object returned from this method has the following\nstructure (many fields optional):\n\n```js\n  {\n    // Flattened list of node metadata (for nodes that generated metadata)\n    nodeInfoList: [\n      {\n        // `id` attribute for any nodes with id's for generating `$` map\n        id: {string},\n        // `on-event=\"handler\"` metadata\n        events: [\n          {\n            name: {string},   // event name\n            value: {string},  // handler method name\n          }, ...\n        ],\n        // Notes when the template contained a `<slot>` for shady DOM\n        // optimization purposes\n        hasInsertionPoint: {boolean},\n        // For nested `<template>`` nodes, nested template metadata\n        templateInfo: {object}, // nested template metadata\n        // Metadata to allow efficient retrieval of instanced node\n        // corresponding to this metadata\n        parentInfo: {number},   // reference to parent nodeInfo>\n        parentIndex: {number},  // index in parent's `childNodes` collection\n        infoIndex: {number},    // index of this `nodeInfo` in `templateInfo.nodeInfoList`\n      },\n      ...\n    ],\n    // When true, the template had the `strip-whitespace` attribute\n    // or was nested in a template with that setting\n    stripWhitespace: {boolean},\n    // For nested templates, nested template content is moved into\n    // a document fragment stored here; this is an optimization to\n    // avoid the cost of nested template cloning\n    content: {DocumentFragment}\n  }\n```\n\nThis method kicks off a recursive treewalk as follows:\n\n```\n   _parseTemplate <---------------------+\n     _parseTemplateContent              |\n       _parseTemplateNode  <------------|--+\n         _parseTemplateNestedTemplate --+  |\n         _parseTemplateChildNodes ---------+\n         _parseTemplateNodeAttributes\n           _parseTemplateNodeAttribute\n\n```\n\nThese methods may be overridden to add custom metadata about templates\nto either `templateInfo` or `nodeInfo`.\n\nNote that this method may be destructive to the template, in that\ne.g. event annotations may be removed after being noted in the\ntemplate metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 195,
                  "column": 6
                },
                "end": {
                  "line": 206,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to parse"
                },
                {
                  "name": "outerTemplateInfo",
                  "type": "Object=",
                  "description": "Template metadata from the outer\n  template, for parsing nested templates"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Parsed template metadata"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateContent",
              "description": "Overrides `PropertyAccessors` to add map of dynamic functions on\ntemplate info, for consumption by `PropertyEffects` template binding\ncode. This map determines which method templates should have accessors\ncreated for them.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 775,
                  "column": 6
                },
                "end": {
                  "line": 778,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template"
                },
                {
                  "name": "templateInfo"
                },
                {
                  "name": "nodeInfo"
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_parseTemplateNode",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from `TextNode`'s' `textContent`.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2309,
                  "column": 6
                },
                "end": {
                  "line": 2323,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateChildNodes",
              "description": "Parses template child nodes for the given root node.\n\nThis method also wraps whitelisted legacy template extensions\n(`is=\"dom-if\"` and `is=\"dom-repeat\"`) with their equivalent element\nwrappers, collapses text nodes, and strips whitespace from the template\nif the `templateInfo.stripWhitespace` setting was provided.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 254,
                  "column": 6
                },
                "end": {
                  "line": 288,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "root",
                  "type": "Node",
                  "description": "Root node whose `childNodes` will be parsed"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNestedTemplate",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nbinding the properties that a nested template depends on to the template\nas `_host_<property>`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2392,
                  "column": 6
                },
                "end": {
                  "line": 2402,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateNodeAttributes",
              "description": "Parses template node attributes and adds node metadata to `nodeInfo`\nfor nodes of interest.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 326,
                  "column": 6
                },
                "end": {
                  "line": 335,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNodeAttribute",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from attributes.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2341,
                  "column": 6
                },
                "end": {
                  "line": 2377,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                },
                {
                  "name": "name"
                },
                {
                  "name": "value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_contentForTemplate",
              "description": "Returns the `content` document fragment for a given template.\n\nFor nested templates, Polymer performs an optimization to cache nested\ntemplate content to avoid the cost of cloning deeply nested templates.\nThis method retrieves the cached content for a given template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 380,
                  "column": 6
                },
                "end": {
                  "line": 383,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to retrieve `content` for"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Content fragment"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "createPropertiesForAttributes",
              "description": "Generates property accessors for all attributes in the standard\nstatic `observedAttributes` array.\n\nAttribute names are mapped to property names using the `dash-case` to\n`camelCase` convention",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 110,
                  "column": 6
                },
                "end": {
                  "line": 115,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "addPropertyEffect",
              "description": "Ensures an accessor exists for the specified property, and adds\nto a list of \"property effects\" that will run when the accessor for\nthe specified property is set.  Effects are grouped by \"type\", which\nroughly corresponds to a phase in effect processing.  The effect\nmetadata should be in the following form:\n\n  {\n    fn: effectFunction, // Reference to function to call to perform effect\n    info: { ... }       // Effect metadata passed to function\n    trigger: {          // Optional triggering metadata; if not provided\n      name: string      // the property is treated as a wildcard\n      structured: boolean\n      wildcard: boolean\n    }\n  }\n\nEffects are called from `_propertiesChanged` in the following order by\ntype:\n\n1. COMPUTE\n2. PROPAGATE\n3. REFLECT\n4. OBSERVE\n5. NOTIFY\n\nEffect functions are called with the following signature:\n\n  effectFunction(inst, path, props, oldProps, info, hasPaths)",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2040,
                  "column": 6
                },
                "end": {
                  "line": 2042,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createPropertyObserver",
              "description": "Creates a single-property observer for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2053,
                  "column": 6
                },
                "end": {
                  "line": 2055,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createMethodObserver",
              "description": "Creates a multi-property \"method observer\" based on the provided\nexpression, which should be a string in the form of a normal Javascript\nfunction signature: `'methodName(arg1, [..., argn])'`.  Each argument\nshould correspond to a property or path in the context of this\nprototype (or instance), or may be a literal string or number.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2069,
                  "column": 6
                },
                "end": {
                  "line": 2071,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createNotifyingProperty",
              "description": "Causes the setter for the given property to dispatch `<property>-changed`\nevents to notify of changes to the property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2080,
                  "column": 6
                },
                "end": {
                  "line": 2082,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReadOnlyProperty",
              "description": "Creates a read-only accessor for the given property.\n\nTo set the property, use the protected `_setProperty` API.\nTo create a custom protected setter (e.g. `_setMyProp()` for\nproperty `myProp`), pass `true` for `protectedSetter`.\n\nNote, if the property will have other property effects, this method\nshould be called first, before adding other effects.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2099,
                  "column": 6
                },
                "end": {
                  "line": 2101,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReflectedProperty",
              "description": "Causes the setter for the given property to reflect the property value\nto a (dash-cased) attribute of the same name.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2110,
                  "column": 6
                },
                "end": {
                  "line": 2112,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createComputedProperty",
              "description": "Creates a computed property whose value is set to the result of the\nmethod described by the given `expression` each time one or more\narguments to the method changes.  The expression should be a string\nin the form of a normal Javascript function signature:\n`'methodName(arg1, [..., argn])'`",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2127,
                  "column": 6
                },
                "end": {
                  "line": 2129,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating whether\n  method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "bindTemplate",
              "description": "Parses the provided template to ensure binding effects are created\nfor them, and then ensures property accessors are created for any\ndependent properties in the template.  Binding effects for bound\ntemplates are stored in a linked list on the instance so that\ntemplates can be efficiently stamped and unstamped.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2143,
                  "column": 6
                },
                "end": {
                  "line": 2145,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addTemplatePropertyEffect",
              "description": "Adds a property effect to the given template metadata, which is run\nat the \"propagate\" stage of `_propertiesChanged` when the template\nhas been bound to the element via `_bindTemplate`.\n\nThe `effect` object should match the format in `_addPropertyEffect`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2208,
                  "column": 6
                },
                "end": {
                  "line": 2214,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata to add effect to"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseBindings",
              "description": "Called to parse text in a template (either attribute values or\ntextContent) into binding metadata.\n\nAny overrides of this method should return an array of binding part\nmetadata  representing one or more bindings found in the provided text\nand any \"literal\" text in between.  Any non-literal parts will be passed\nto `_evaluateBinding` when any dependencies change.  The only required\nfields of each \"part\" in the returned array are as follows:\n\n- `dependencies` - Array containing trigger metadata for each property\n  that should trigger the binding to update\n- `literal` - String containing text if the part represents a literal;\n  in this case no `dependencies` are needed\n\nAdditional metadata for use by `_evaluateBinding` may be provided in\neach part object as needed.\n\nThe default implementation handles the following types of bindings\n(one or more may be intermixed with literal strings):\n- Property binding: `[[prop]]`\n- Path binding: `[[object.prop]]`\n- Negated property or path bindings: `[[!prop]]` or `[[!object.prop]]`\n- Two-way property or path bindings (supports negation):\n  `{{prop}}`, `{{object.prop}}`, `{{!prop}}` or `{{!object.prop}}`\n- Inline computed method (supports negation):\n  `[[compute(a, 'literal', b)]]`, `[[!compute(a, 'literal', b)]]`",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2437,
                  "column": 6
                },
                "end": {
                  "line": 2500,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "text",
                  "type": "string",
                  "description": "Text to parse from attribute or textContent"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Current template metadata"
                }
              ],
              "return": {
                "type": "Array.<Object>",
                "desc": "Array of binding part metadata"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_evaluateBinding",
              "description": "Called to evaluate a previously parsed binding part based on a set of\none or more changed dependencies.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2516,
                  "column": 6
                },
                "end": {
                  "line": 2533,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "inst",
                  "type": "HTMLElement",
                  "description": "Element that should be used as scope for\n  binding dependencies"
                },
                {
                  "name": "part",
                  "type": "Object",
                  "description": "Binding part metadata"
                },
                {
                  "name": "path",
                  "type": "string",
                  "description": "Property/path that triggered this effect"
                },
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of current property changes"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value the binding part evaluated to"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "finalize",
              "description": "Called automatically when the first element instance is created to\nensure that class finalization work has been completed.\nMay be called by users to eagerly perform class finalization work\nprior to the creation of the first element instance.\n\nClass finalization work generally includes meta-programming such as\ncreating property accessors and any property effect metadata needed for\nthe features used.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 493,
                  "column": 6
                },
                "end": {
                  "line": 497,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 41,
              "column": 2
            },
            "end": {
              "line": 257,
              "column": 3
            }
          },
          "privacy": "public",
          "superclass": "HTMLElement",
          "name": "Polymer.DomIf",
          "attributes": [
            {
              "name": "if",
              "description": "A boolean indicating whether this template should stamp.",
              "sourceRange": {
                "start": {
                  "line": 64,
                  "column": 8
                },
                "end": {
                  "line": 67,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "boolean"
            },
            {
              "name": "restamp",
              "description": "When true, elements will be removed from DOM and discarded when `if`\nbecomes false and re-created and added back to the DOM when `if`\nbecomes true.  By default, stamped elements will be hidden but left\nin the DOM when `if` becomes false, which is generally results\nin better performance.",
              "sourceRange": {
                "start": {
                  "line": 76,
                  "column": 8
                },
                "end": {
                  "line": 79,
                  "column": 9
                }
              },
              "metadata": {},
              "type": "boolean"
            }
          ],
          "events": [
            {
              "type": "CustomEvent",
              "name": "dom-change",
              "description": "dom-change",
              "metadata": {}
            }
          ],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": [],
          "tagname": "dom-if"
        },
        {
          "description": "Element implementing the `Polymer.ArraySelector` mixin, which records\ndynamic associations between item paths in a master `items` array and a\n`selected` array such that path changes to the master array (at the host)\nelement or elsewhere via data-binding) are correctly propagated to items\nin the selected array and vice-versa.\n\nThe `items` property accepts an array of user data, and via the\n`select(item)` and `deselect(item)` API, updates the `selected` property\nwhich may be bound to other parts of the application, and any changes to\nsub-fields of `selected` item(s) will be kept in sync with items in the\n`items` array.  When `multi` is false, `selected` is a property\nrepresenting the last selected item.  When `multi` is true, `selected`\nis an array of multiply selected items.\n\nExample:\n\n```html\n<dom-module id=\"employee-list\">\n\n  <template>\n\n    <div> Employee list: </div>\n    <template is=\"dom-repeat\" id=\"employeeList\" items=\"{{employees}}\">\n        <div>First name: <span>{{item.first}}</span></div>\n        <div>Last name: <span>{{item.last}}</span></div>\n        <button on-click=\"toggleSelection\">Select</button>\n    </template>\n\n    <array-selector id=\"selector\" items=\"{{employees}}\" selected=\"{{selected}}\" multi toggle></array-selector>\n\n    <div> Selected employees: </div>\n    <template is=\"dom-repeat\" items=\"{{selected}}\">\n        <div>First name: <span>{{item.first}}</span></div>\n        <div>Last name: <span>{{item.last}}</span></div>\n    </template>\n\n  </template>\n\n</dom-module>\n```\n\n```js\nPolymer({\n  is: 'employee-list',\n  ready() {\n    this.employees = [\n        {first: 'Bob', last: 'Smith'},\n        {first: 'Sally', last: 'Johnson'},\n        ...\n    ];\n  },\n  toggleSelection(e) {\n    let item = this.$.employeeList.itemForElement(e.target);\n    this.$.selector.select(item);\n  }\n});\n```",
          "summary": "Custom element that links paths between an input `items` array and\n  an output `selected` item or array based on calls to its selection API.",
          "path": "lib/elements/array-selector.html",
          "properties": [
            {
              "name": "items",
              "type": "Array",
              "description": "An array containing items from which selection will be made.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 50,
                  "column": 10
                },
                "end": {
                  "line": 52,
                  "column": 11
                }
              },
              "metadata": {
                "polymer": {}
              },
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "multi",
              "type": "boolean",
              "description": "When `true`, multiple items may be selected at once (in this case,\n`selected` is an array of currently selected items).  When `false`,\nonly one item may be selected at a time.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 59,
                  "column": 10
                },
                "end": {
                  "line": 62,
                  "column": 11
                }
              },
              "metadata": {
                "polymer": {}
              },
              "defaultValue": "false",
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "selected",
              "type": "Object",
              "description": "When `multi` is true, this is an array that contains any selected.\nWhen `multi` is false, this is the currently selected item, or `null`\nif no item is selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 69,
                  "column": 10
                },
                "end": {
                  "line": 72,
                  "column": 11
                }
              },
              "metadata": {
                "polymer": {
                  "notify": true
                }
              },
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "selectedItem",
              "type": "Object",
              "description": "When `multi` is false, this is the currently selected item, or `null`\nif no item is selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 78,
                  "column": 10
                },
                "end": {
                  "line": 81,
                  "column": 11
                }
              },
              "metadata": {
                "polymer": {
                  "notify": true
                }
              },
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "toggle",
              "type": "boolean",
              "description": "When `true`, calling `select` on an item that is already selected\nwill deselect the item.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 87,
                  "column": 10
                },
                "end": {
                  "line": 90,
                  "column": 11
                }
              },
              "metadata": {
                "polymer": {}
              },
              "defaultValue": "false",
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            }
          ],
          "methods": [
            {
              "name": "_stampTemplate",
              "description": "Stamps the provided template and performs instance-time setup for\nPolymer template features, including data bindings, declarative event\nlisteners, and the `this.$` map of `id`'s to nodes.  A document fragment\nis returned containing the stamped DOM, ready for insertion into the\nDOM.\n\nThis method may be called more than once; however note that due to\n`shadycss` polyfill limitations, only styles from templates prepared\nusing `ShadyCSS.prepareTemplate` will be correctly polyfilled (scoped\nto the shadow root and support CSS custom properties), and note that\n`ShadyCSS.prepareTemplate` may only be called once per element. As such,\nany styles required by in runtime-stamped templates must be included\nin the main element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2235,
                  "column": 6
                },
                "end": {
                  "line": 2260,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to stamp"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Cloned template content"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addMethodEventListenerToNode",
              "description": "Adds an event listener by method name for the event provided.\n\nThis method generates a handler function that looks up the method\nname at handling time.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 443,
                  "column": 6
                },
                "end": {
                  "line": 448,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add listener on"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of method"
                },
                {
                  "name": "context",
                  "type": "*=",
                  "description": "Context the method will be called on (defaults\n  to `node`)"
                }
              ],
              "return": {
                "type": "Function",
                "desc": "Generated handler function"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_addEventListenerToNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 457,
                  "column": 6
                },
                "end": {
                  "line": 459,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add event listener to"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to add"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_removeEventListenerFromNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 468,
                  "column": 6
                },
                "end": {
                  "line": 470,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to remove event listener from"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to remove"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "attributeChangedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`attributeChangedCallback`.\n\nBy default, attributes declared in `properties` metadata are\ndeserialized using their `type` information to properties of the\nsame name.  \"Dash-cased\" attributes are deserialzed to \"camelCase\"\nproperties.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 717,
                  "column": 6
                },
                "end": {
                  "line": 725,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name"
                },
                {
                  "name": "old"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_initializeProperties",
              "description": "Overrides the default `Polymer.PropertyAccessors` to ensure class\nmetaprogramming related to property accessors and effects has\ncompleted (calls `finalize`).\n\nIt also initializes any property defaults provided via `value` in\n`properties` metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 577,
                  "column": 6
                },
                "end": {
                  "line": 617,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_initializeProtoProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to provide a\nmore efficient implementation of initializing properties from\nthe prototype on the instance.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1107,
                  "column": 6
                },
                "end": {
                  "line": 1111,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_initializeInstanceProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to avoid setting\n`_setProperty`'s `shouldNotify: true`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1119,
                  "column": 6
                },
                "end": {
                  "line": 1128,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_ensureAttribute",
              "description": "Ensures the element has the given attribute. If it does not,\nassigns the given value to the attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 204,
                  "column": 6
                },
                "end": {
                  "line": 208,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to ensure is set."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_attributeToProperty",
              "description": "Deserializes an attribute to its associated property.\n\nThis method calls the `_deserializeValue` method to convert the string to\na typed value.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 220,
                  "column": 6
                },
                "end": {
                  "line": 226,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to deserialize."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "type to deserialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_propertyToAttribute",
              "description": "Serializes a property to its associated attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 235,
                  "column": 6
                },
                "end": {
                  "line": 241,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name to reflect."
                },
                {
                  "name": "attribute",
                  "type": "string=",
                  "description": "Attribute name to reflect."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Property value to refect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_valueToNodeAttribute",
              "description": "Sets a typed value to an HTML attribute on a node.\n\nThis method calls the `_serializeValue` method to convert the typed\nvalue to a string.  If the `_serializeValue` method returns `undefined`,\nthe attribute will be removed (this is the default for boolean\ntype `false`).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 255,
                  "column": 6
                },
                "end": {
                  "line": 262,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to set attribute to."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to serialize."
                },
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Attribute name to serialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_serializeValue",
              "description": "Converts a typed JavaScript value to a string.\n\nThis method is called by Polymer when setting JS property values to\nHTML attributes.  Users may override this method on Polymer element\nprototypes to provide serialization for custom types.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 274,
                  "column": 6
                },
                "end": {
                  "line": 294,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Property value to serialize."
                }
              ],
              "return": {
                "type": "(string|undefined)",
                "desc": "String serialized from the provided property value."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_deserializeValue",
              "description": "Converts a string to a typed JavaScript value.\n\nThis method is called by Polymer when reading HTML attribute values to\nJS properties.  Users may override this method on Polymer element\nprototypes to provide deserialization for custom `type`s.  Note,\nthe `type` argument is the value of the `type` field provided in the\n`properties` configuration object for a given property, and is\nby convention the constructor for the type to deserialize.\n\nNote: The return value of `undefined` is used as a sentinel value to\nindicate the attribute should be removed.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 313,
                  "column": 6
                },
                "end": {
                  "line": 355,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "string",
                  "description": "Attribute value to deserialize."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "Type to deserialize the string to."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Typed value deserialized from the provided string."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_createPropertyAccessor",
              "description": "Creates a setter/getter pair for the named property with its own\nlocal storage.  The getter returns the value in the local storage,\nand the setter calls `_setProperty`, which updates the local storage\nfor the property and enqueues a `_propertiesChanged` callback.\n\nThis method may be called on a prototype or an instance.  Calling\nthis method may overwrite a property value that already exists on\nthe prototype/instance by creating the accessor.  When calling on\na prototype, any overwritten values are saved in `__dataProto`,\nand it is up to the subclasser to decide how/when to set those\nproperties back into the accessor.  When calling on an instance,\nthe overwritten value is set via `_setPendingProperty`, and the\nuser should call `_invalidateProperties` or `_flushProperties`\nfor the values to take effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 379,
                  "column": 6
                },
                "end": {
                  "line": 395,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "readOnly",
                  "type": "boolean=",
                  "description": "When true, no setter is created; the\n  protected `_setProperty` function must be used to set the property"
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_hasAccessor",
              "description": "Returns true if this library created an accessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 403,
                  "column": 6
                },
                "end": {
                  "line": 405,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if an accessor was created"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_setProperty",
              "description": "Overrides base implementation to ensure all accessors set `shouldNotify`\nto true, for per-property notification tracking.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1389,
                  "column": 6
                },
                "end": {
                  "line": 1393,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingProperty",
              "description": "Overrides the `PropertyAccessors` implementation to introduce special\ndirty check logic depending on the property & value being set:\n\n1. Any value set to a path (e.g. 'obj.prop': 42 or 'obj.prop': {...})\n   Stored in `__dataTemp`, dirty checked against `__dataTemp`\n2. Object set to simple property (e.g. 'prop': {...})\n   Stored in `__dataTemp` and `__data`, dirty checked against\n   `__dataTemp` by default implementation of `_shouldPropertyChange`\n3. Primitive value set to simple property (e.g. 'prop': 42)\n   Stored in `__data`, dirty checked against `__data`\n\nThe dirty-check is important to prevent cycles due to two-way\nnotification, but paths and objects are only dirty checked against any\nprevious value set during this turn via a \"temporary cache\" that is\ncleared when the last `_propertiesChaged` exits. This is so:\na. any cached array paths (e.g. 'array.3.prop') may be invalidated\n   due to array mutations like shift/unshift/splice; this is fine\n   since path changes are dirty-checked at user entry points like `set`\nb. dirty-checking for objects only lasts one turn to allow the user\n   to mutate the object in-place and re-set it with the same identity\n   and have all sub-properties re-propagated in a subsequent turn.\n\nThe temp cache is not necessarily sufficient to prevent invalid array\npaths, since a splice can happen during the same turn (with pathological\nuser code); we could introduce a \"fixup\" for temporarily cached array\npaths if needed: https://github.com/Polymer/polymer/issues/4227",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1353,
                  "column": 6
                },
                "end": {
                  "line": 1381,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                },
                {
                  "name": "shouldNotify"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_isPropertyPending",
              "description": "Returns true if the specified property has a pending change.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 456,
                  "column": 6
                },
                "end": {
                  "line": 458,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if property has a pending change"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_invalidateProperties",
              "description": "Overrides `PropertyAccessor`'s default async queuing of\n`_propertiesChanged`: if `__dataReady` is false (has not yet been\nmanually flushed), the function no-ops; otherwise flushes\n`_propertiesChanged` synchronously.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1403,
                  "column": 6
                },
                "end": {
                  "line": 1407,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enableProperties",
              "description": "Call to enable property accessor processing. Before this method is\ncalled accessor values will be set but side effects are\nqueued. When called, any pending side effects occur immediately.\nFor elements, generally `connectedCallback` is a normal spot to do so.\nIt is safe to call this method multiple times as it only turns on\nproperty accessors once.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 486,
                  "column": 6
                },
                "end": {
                  "line": 495,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_flushProperties",
              "description": "Calls the `_propertiesChanged` callback with the current set of\npending changes (and old values recorded when pending changes were\nset), and resets the pending set of changes. Generally, this method\nshould not be called in user code.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 506,
                  "column": 6
                },
                "end": {
                  "line": 514,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "ready",
              "description": "Stamps the element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 649,
                  "column": 6
                },
                "end": {
                  "line": 655,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_propertiesChanged",
              "description": "Implements `PropertyAccessors`'s properties changed callback.\n\nRuns each class of effects for the batch of changed properties in\na specific order (compute, propagate, reflect, observe, notify).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1542,
                  "column": 6
                },
                "end": {
                  "line": 1575,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "currentProps"
                },
                {
                  "name": "changedProps"
                },
                {
                  "name": "oldProps"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_shouldPropertyChange",
              "description": "Method called to determine whether a property value should be\nconsidered as a change and cause the `_propertiesChanged` callback\nto be enqueued.\n\nThe default implementation returns `true` for primitive types if a\nstrict equality check fails, and returns `true` for all Object/Arrays.\nThe method always returns false for `NaN`.\n\nOverride this method to e.g. provide stricter checking for\nObjects/Arrays when using immutable patterns.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 569,
                  "column": 6
                },
                "end": {
                  "line": 576,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change\n  and enqueue a `_proeprtiesChanged` callback"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_addPropertyEffect",
              "description": "Equivalent to static `addPropertyEffect` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1142,
                  "column": 6
                },
                "end": {
                  "line": 1150,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removePropertyEffect",
              "description": "Removes the given property effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1159,
                  "column": 6
                },
                "end": {
                  "line": 1165,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property the effect was associated with"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object to remove"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasPropertyEffect",
              "description": "Returns whether the current prototype/instance has a property effect\nof a certain type.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1176,
                  "column": 6
                },
                "end": {
                  "line": 1179,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "type",
                  "type": "string=",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReadOnlyEffect",
              "description": "Returns whether the current prototype/instance has a \"read only\"\naccessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1189,
                  "column": 6
                },
                "end": {
                  "line": 1191,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasNotifyEffect",
              "description": "Returns whether the current prototype/instance has a \"notify\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1201,
                  "column": 6
                },
                "end": {
                  "line": 1203,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReflectEffect",
              "description": "Returns whether the current prototype/instance has a \"reflect to attribute\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1213,
                  "column": 6
                },
                "end": {
                  "line": 1215,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasComputedEffect",
              "description": "Returns whether the current prototype/instance has a \"computed\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1225,
                  "column": 6
                },
                "end": {
                  "line": 1227,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingPropertyOrPath",
              "description": "Sets a pending property or path.  If the root property of the path in\nquestion had no accessor, the path is set, otherwise it is enqueued\nvia `_setPendingProperty`.\n\nThis function isolates relatively expensive functionality necessary\nfor the public API (`set`, `setProperties`, `notifyPath`, and property\nchange listeners via {{...}} bindings), such that it is only done\nwhen paths enter the system, and not at every propagation step.  It\nalso sets a `__dataHasPaths` flag on the instance which is used to\nfast-path slower path-matching code in the property effects host paths.\n\n`path` can be a path string or array of path parts as accepted by the\npublic API.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1259,
                  "column": 6
                },
                "end": {
                  "line": 1291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(number|string)>)",
                  "description": "Path to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set"
                },
                {
                  "name": "shouldNotify",
                  "type": "boolean=",
                  "description": "Set to true if this change should\n cause a property notification event dispatch"
                },
                {
                  "name": "isPathNotification",
                  "type": "boolean=",
                  "description": "If the path being set is a path\n  notification of an already changed value, as opposed to a request\n  to set and notify the change.  In the latter `false` case, a dirty\n  check is performed and then the value is set to the path before\n  enqueuing the pending property change."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if the property/path was enqueued in\n  the pending changes bag."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setUnmanagedPropertyToNode",
              "description": "Applies a value to a non-Polymer element/node's property.\n\nThe implementation makes a best-effort at binding interop:\nSome native element properties have side-effects when\nre-setting the same value (e.g. setting `<input>.value` resets the\ncursor position), so we do a dirty-check before setting the value.\nHowever, for better interop with non-Polymer custom elements that\naccept objects, we explicitly re-set object changes coming from the\nPolymer world (which may include deep object changes without the\ntop reference changing), erring on the side of providing more\ninformation.\n\nUsers may override this method to provide alternate approaches.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1313,
                  "column": 6
                },
                "end": {
                  "line": 1321,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "The node to set a property on"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "The property to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "The value to set"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enqueueClient",
              "description": "Enqueues the given client on a list of pending clients, whose\npending property changes can later be flushed via a call to\n`_flushClients`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1417,
                  "column": 6
                },
                "end": {
                  "line": 1422,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "client",
                  "type": "Object",
                  "description": "PropertyEffects client to enqueue"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_flushClients",
              "description": "Flushes any clients previously enqueued via `_enqueueClient`, causing\ntheir `_flushProperties` method to run.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1430,
                  "column": 6
                },
                "end": {
                  "line": 1441,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "__enableOrFlushClients",
              "description": "(c) the stamped dom enables.",
              "privacy": "private",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1455,
                  "column": 6
                },
                "end": {
                  "line": 1468,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_readyClients",
              "description": "Implements `PropertyEffects`'s `_readyClients` call. Attaches\nelement dom by calling `_attachDom` with the dom stamped from the\nelement's template via `_stampTemplate`. Note that this allows\nclient dom to be attached to the element prior to any observers\nrunning.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 666,
                  "column": 6
                },
                "end": {
                  "line": 675,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "setProperties",
              "description": "Sets a bag of property changes to this instance, and\nsynchronously processes all effects of the properties as a batch.\n\nProperty names must be simple properties, not paths.  Batched\npath propagation is not supported.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1495,
                  "column": 6
                },
                "end": {
                  "line": 1506,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of one or more key-value pairs whose key is\n  a property and value is the new value to set for that property."
                },
                {
                  "name": "setReadOnly",
                  "type": "boolean=",
                  "description": "When true, any private values set in\n  `props` will be set. By default, `setProperties` will not set\n  `readOnly: true` root properties."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_propagatePropertyChanges",
              "description": "Called to propagate any property changes to stamped template nodes\nmanaged by this element.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1586,
                  "column": 6
                },
                "end": {
                  "line": 1596,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "changedProps",
                  "type": "Object",
                  "description": "Bag of changed properties"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "linkPaths",
              "description": "Aliases one data path as another, such that path notifications from one\nare routed to the other.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1606,
                  "column": 6
                },
                "end": {
                  "line": 1611,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "to",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to link."
                },
                {
                  "name": "from",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Source path to link."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unlinkPaths",
              "description": "Removes a data path alias previously established with `_linkPaths`.\n\nNote, the path to unlink should be the target (`to`) used when\nlinking the paths.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1622,
                  "column": 6
                },
                "end": {
                  "line": 1627,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to unlink."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifySplices",
              "description": "Notify that an array has changed.\n\nExample:\n\n    this.items = [ {name: 'Jim'}, {name: 'Todd'}, {name: 'Bill'} ];\n    ...\n    this.items.splice(1, 1, {name: 'Sam'});\n    this.items.push({name: 'Bob'});\n    this.notifySplices('items', [\n      { index: 1, removed: [{name: 'Todd'}], addedCount: 1, obect: this.items, type: 'splice' },\n      { index: 3, removed: [], addedCount: 1, object: this.items, type: 'splice'}\n    ]);",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1658,
                  "column": 6
                },
                "end": {
                  "line": 1662,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "splices",
                  "type": "Array",
                  "description": "Array of splice records indicating ordered\n  changes that occurred to the array. Each record should have the\n  following fields:\n   * index: index at which the change occurred\n   * removed: array of items that were removed from this index\n   * addedCount: number of new items added at this index\n   * object: a reference to the array in question\n   * type: the string literal 'splice'\n\n  Note that splice records _must_ be normalized such that they are\n  reported in index order (raw results from `Object.observe` are not\n  ordered and must be normalized/merged before notifying)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "get",
              "description": "Convenience method for reading a value from a path.\n\nNote, if any part in the path is undefined, this method returns\n`undefined` (this method does not throw when dereferencing undefined\npaths).",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1683,
                  "column": 6
                },
                "end": {
                  "line": 1685,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to read.  The path may be specified as a string (e.g. `foo.bar.baz`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `users.12.name` or `['users', 12, 'name']`)."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value at the path, or `undefined` if any part of the path\n  is undefined."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "set",
              "description": "Convenience method for setting a value to a path and notifying any\nelements bound to the same path.\n\nNote, if any part in the path except for the last is undefined,\nthis method does nothing (this method does not throw when\ndereferencing undefined paths).",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1707,
                  "column": 6
                },
                "end": {
                  "line": 1717,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to write.  The path may be specified as a string (e.g. `'foo.bar.baz'`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `'users.12.name'` or `['users', 12, 'name']`)."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set at the specified path."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated.\n  When specified, no notification will occur."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "push",
              "description": "Adds items onto the end of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1733,
                  "column": 6
                },
                "end": {
                  "line": 1742,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "pop",
              "description": "Removes an item from the end of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1757,
                  "column": 6
                },
                "end": {
                  "line": 1766,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "splice",
              "description": "Starting from the start index specified, removes 0 or more items\nfrom the array and inserts 0 or more new items in their place.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.splice`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1785,
                  "column": 6
                },
                "end": {
                  "line": 1802,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "start",
                  "type": "number",
                  "description": "Index from which to start removing/inserting."
                },
                {
                  "name": "deleteCount",
                  "type": "number",
                  "description": "Number of items to remove."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "Array",
                "desc": "Array of removed items."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "shift",
              "description": "Removes an item from the beginning of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1817,
                  "column": 6
                },
                "end": {
                  "line": 1826,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unshift",
              "description": "Adds items onto the beginning of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1842,
                  "column": 6
                },
                "end": {
                  "line": 1850,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifyPath",
              "description": "Notify that a path has changed.\n\nExample:\n\n    this.item.user.name = 'Bob';\n    this.notifyPath('item.user.name');",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1864,
                  "column": 6
                },
                "end": {
                  "line": 1881,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Value at the path (optional)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReadOnlyProperty",
              "description": "Equivalent to static `createReadOnlyProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1893,
                  "column": 6
                },
                "end": {
                  "line": 1900,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createPropertyObserver",
              "description": "Equivalent to static `createPropertyObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1913,
                  "column": 6
                },
                "end": {
                  "line": 1923,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createMethodObserver",
              "description": "Equivalent to static `createMethodObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1935,
                  "column": 6
                },
                "end": {
                  "line": 1941,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createNotifyingProperty",
              "description": "Equivalent to static `createNotifyingProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1951,
                  "column": 6
                },
                "end": {
                  "line": 1959,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReflectedProperty",
              "description": "Equivalent to static `createReflectedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1969,
                  "column": 6
                },
                "end": {
                  "line": 1982,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createComputedProperty",
              "description": "Equivalent to static `createComputedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1995,
                  "column": 6
                },
                "end": {
                  "line": 2001,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_bindTemplate",
              "description": "Equivalent to static `bindTemplate` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.\n\nThis method may be called on the prototype (for prototypical template\nbinding, to avoid creating accessors every instance) once per prototype,\nand will be called with `runtimeBinding: true` by `_stampTemplate` to\ncreate and link an instance of the template metadata associated with a\nparticular stamping.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2171,
                  "column": 6
                },
                "end": {
                  "line": 2194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                },
                {
                  "name": "instanceBinding",
                  "type": "boolean=",
                  "description": "When false (default), performs\n  \"prototypical\" binding of the template and overwrites any previously\n  bound template for the class. When true (as passed from\n  `_stampTemplate`), the template info is instanced and linked into\n  the list of bound templates."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object; for `runtimeBinding`,\n  this is an instance of the prototypical template info"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removeBoundDom",
              "description": "Removes and unbinds the nodes previously contained in the provided\nDocumentFragment returned from `_stampTemplate`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2270,
                  "column": 6
                },
                "end": {
                  "line": 2291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "DocumentFragment",
                  "description": "DocumentFragment previously returned\n  from `_stampTemplate` associated with the nodes to be removed"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "connectedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`connectedCallback`.\n\nThe default implementation enables the property effects system and\nflushes any pending properties, and updates shimmed CSS properties\nwhen using the ShadyCSS scoping/custom properties polyfill.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 629,
                  "column": 6
                },
                "end": {
                  "line": 634,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "disconnectedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`disconnectedCallback`.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 642,
                  "column": 6
                },
                "end": {
                  "line": 642,
                  "column": 31
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_attachDom",
              "description": "Attaches an element's stamped dom to itself. By default,\nthis method creates a `shadowRoot` and adds the dom to it.\nHowever, this method may be overridden to allow an element\nto put its dom in another location.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 689,
                  "column": 6
                },
                "end": {
                  "line": 704,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "NodeList",
                  "description": "to attach to the element."
                }
              ],
              "return": {
                "type": "Node",
                "desc": "node to which the dom has been attached."
              },
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "updateStyles",
              "description": "When using the ShadyCSS scoping and custom property shim, causes all\nshimmed styles in this element (and its subtree) to be updated\nbased on current custom property values.\n\nThe optional parameter overrides inline custom property styles with an\nobject of properties where the keys are CSS properties, and the values\nare strings.\n\nExample: `this.updateStyles({'--color': 'blue'})`\n\nThese properties are retained unless a value of `null` is set.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 743,
                  "column": 6
                },
                "end": {
                  "line": 747,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "properties",
                  "type": "Object=",
                  "description": "Bag of custom property key/values to\n  apply to this element."
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "resolveUrl",
              "description": "Rewrites a given URL relative to a base URL. The base URL defaults to\nthe original location of the document containing the `dom-module` for\nthis element. This method will return the same URL before and after\nbundling.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 760,
                  "column": 6
                },
                "end": {
                  "line": 765,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "url",
                  "type": "string",
                  "description": "URL to resolve."
                },
                {
                  "name": "base",
                  "type": "string=",
                  "description": "Optional base URL to resolve against, defaults\nto the element's `importPath`"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Rewritten URL relative to base"
              },
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "__updateSelection",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 106,
                  "column": 6
                },
                "end": {
                  "line": 136,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "multi"
                },
                {
                  "name": "itemsInfo"
                }
              ],
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "__applySplices",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 138,
                  "column": 6
                },
                "end": {
                  "line": 177,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "splices"
                }
              ],
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "__updateLinks",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 179,
                  "column": 6
                },
                "end": {
                  "line": 194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "clearSelection",
              "description": "Clears the selection state.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 200,
                  "column": 6
                },
                "end": {
                  "line": 211,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "isSelected",
              "description": "Returns whether the item is currently selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 219,
                  "column": 6
                },
                "end": {
                  "line": 221,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "item",
                  "type": "*",
                  "description": "Item from `items` array to test"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the item is selected"
              },
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "isIndexSelected",
              "description": "Returns whether the item is currently selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 229,
                  "column": 6
                },
                "end": {
                  "line": 231,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx",
                  "type": "*",
                  "description": "Index from `items` array to test"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the item is selected"
              },
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "__deselectChangedIdx",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 233,
                  "column": 6
                },
                "end": {
                  "line": 243,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx"
                }
              ],
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "__selectedIndexForItemIndex",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 245,
                  "column": 6
                },
                "end": {
                  "line": 250,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx"
                }
              ],
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "deselect",
              "description": "Deselects the given item if it is already selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 257,
                  "column": 6
                },
                "end": {
                  "line": 272,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "item",
                  "type": "*",
                  "description": "Item from `items` array to deselect"
                }
              ],
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "deselectIndex",
              "description": "Deselects the given index if it is already selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 279,
                  "column": 6
                },
                "end": {
                  "line": 281,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx",
                  "type": "number",
                  "description": "Index from `items` array to deselect"
                }
              ],
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "select",
              "description": "Selects the given item.  When `toggle` is true, this will automatically\ndeselect the item if already selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 289,
                  "column": 6
                },
                "end": {
                  "line": 291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "item",
                  "type": "*",
                  "description": "Item from `items` array to select"
                }
              ],
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "selectIndex",
              "description": "Selects the given index.  When `toggle` is true, this will automatically\ndeselect the item if already selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 299,
                  "column": 6
                },
                "end": {
                  "line": 315,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx",
                  "type": "number",
                  "description": "Index from `items` array to select"
                }
              ],
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            }
          ],
          "staticMethods": [
            {
              "name": "_parseTemplate",
              "description": "Scans a template to produce template metadata.\n\nTemplate-specific metadata are stored in the object returned, and node-\nspecific metadata are stored in objects in its flattened `nodeInfoList`\narray.  Only nodes in the template that were parsed as nodes of\ninterest contain an object in `nodeInfoList`.  Each `nodeInfo` object\ncontains an `index` (`childNodes` index in parent) and optionally\n`parent`, which points to node info of its parent (including its index).\n\nThe template metadata object returned from this method has the following\nstructure (many fields optional):\n\n```js\n  {\n    // Flattened list of node metadata (for nodes that generated metadata)\n    nodeInfoList: [\n      {\n        // `id` attribute for any nodes with id's for generating `$` map\n        id: {string},\n        // `on-event=\"handler\"` metadata\n        events: [\n          {\n            name: {string},   // event name\n            value: {string},  // handler method name\n          }, ...\n        ],\n        // Notes when the template contained a `<slot>` for shady DOM\n        // optimization purposes\n        hasInsertionPoint: {boolean},\n        // For nested `<template>`` nodes, nested template metadata\n        templateInfo: {object}, // nested template metadata\n        // Metadata to allow efficient retrieval of instanced node\n        // corresponding to this metadata\n        parentInfo: {number},   // reference to parent nodeInfo>\n        parentIndex: {number},  // index in parent's `childNodes` collection\n        infoIndex: {number},    // index of this `nodeInfo` in `templateInfo.nodeInfoList`\n      },\n      ...\n    ],\n    // When true, the template had the `strip-whitespace` attribute\n    // or was nested in a template with that setting\n    stripWhitespace: {boolean},\n    // For nested templates, nested template content is moved into\n    // a document fragment stored here; this is an optimization to\n    // avoid the cost of nested template cloning\n    content: {DocumentFragment}\n  }\n```\n\nThis method kicks off a recursive treewalk as follows:\n\n```\n   _parseTemplate <---------------------+\n     _parseTemplateContent              |\n       _parseTemplateNode  <------------|--+\n         _parseTemplateNestedTemplate --+  |\n         _parseTemplateChildNodes ---------+\n         _parseTemplateNodeAttributes\n           _parseTemplateNodeAttribute\n\n```\n\nThese methods may be overridden to add custom metadata about templates\nto either `templateInfo` or `nodeInfo`.\n\nNote that this method may be destructive to the template, in that\ne.g. event annotations may be removed after being noted in the\ntemplate metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 195,
                  "column": 6
                },
                "end": {
                  "line": 206,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to parse"
                },
                {
                  "name": "outerTemplateInfo",
                  "type": "Object=",
                  "description": "Template metadata from the outer\n  template, for parsing nested templates"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Parsed template metadata"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateContent",
              "description": "Overrides `PropertyAccessors` to add map of dynamic functions on\ntemplate info, for consumption by `PropertyEffects` template binding\ncode. This map determines which method templates should have accessors\ncreated for them.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 775,
                  "column": 6
                },
                "end": {
                  "line": 778,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template"
                },
                {
                  "name": "templateInfo"
                },
                {
                  "name": "nodeInfo"
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_parseTemplateNode",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from `TextNode`'s' `textContent`.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2309,
                  "column": 6
                },
                "end": {
                  "line": 2323,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateChildNodes",
              "description": "Parses template child nodes for the given root node.\n\nThis method also wraps whitelisted legacy template extensions\n(`is=\"dom-if\"` and `is=\"dom-repeat\"`) with their equivalent element\nwrappers, collapses text nodes, and strips whitespace from the template\nif the `templateInfo.stripWhitespace` setting was provided.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 254,
                  "column": 6
                },
                "end": {
                  "line": 288,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "root",
                  "type": "Node",
                  "description": "Root node whose `childNodes` will be parsed"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNestedTemplate",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nbinding the properties that a nested template depends on to the template\nas `_host_<property>`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2392,
                  "column": 6
                },
                "end": {
                  "line": 2402,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateNodeAttributes",
              "description": "Parses template node attributes and adds node metadata to `nodeInfo`\nfor nodes of interest.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 326,
                  "column": 6
                },
                "end": {
                  "line": 335,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNodeAttribute",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from attributes.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2341,
                  "column": 6
                },
                "end": {
                  "line": 2377,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                },
                {
                  "name": "name"
                },
                {
                  "name": "value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_contentForTemplate",
              "description": "Returns the `content` document fragment for a given template.\n\nFor nested templates, Polymer performs an optimization to cache nested\ntemplate content to avoid the cost of cloning deeply nested templates.\nThis method retrieves the cached content for a given template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 380,
                  "column": 6
                },
                "end": {
                  "line": 383,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to retrieve `content` for"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Content fragment"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "createPropertiesForAttributes",
              "description": "Generates property accessors for all attributes in the standard\nstatic `observedAttributes` array.\n\nAttribute names are mapped to property names using the `dash-case` to\n`camelCase` convention",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 110,
                  "column": 6
                },
                "end": {
                  "line": 115,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "addPropertyEffect",
              "description": "Ensures an accessor exists for the specified property, and adds\nto a list of \"property effects\" that will run when the accessor for\nthe specified property is set.  Effects are grouped by \"type\", which\nroughly corresponds to a phase in effect processing.  The effect\nmetadata should be in the following form:\n\n  {\n    fn: effectFunction, // Reference to function to call to perform effect\n    info: { ... }       // Effect metadata passed to function\n    trigger: {          // Optional triggering metadata; if not provided\n      name: string      // the property is treated as a wildcard\n      structured: boolean\n      wildcard: boolean\n    }\n  }\n\nEffects are called from `_propertiesChanged` in the following order by\ntype:\n\n1. COMPUTE\n2. PROPAGATE\n3. REFLECT\n4. OBSERVE\n5. NOTIFY\n\nEffect functions are called with the following signature:\n\n  effectFunction(inst, path, props, oldProps, info, hasPaths)",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2040,
                  "column": 6
                },
                "end": {
                  "line": 2042,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createPropertyObserver",
              "description": "Creates a single-property observer for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2053,
                  "column": 6
                },
                "end": {
                  "line": 2055,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createMethodObserver",
              "description": "Creates a multi-property \"method observer\" based on the provided\nexpression, which should be a string in the form of a normal Javascript\nfunction signature: `'methodName(arg1, [..., argn])'`.  Each argument\nshould correspond to a property or path in the context of this\nprototype (or instance), or may be a literal string or number.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2069,
                  "column": 6
                },
                "end": {
                  "line": 2071,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createNotifyingProperty",
              "description": "Causes the setter for the given property to dispatch `<property>-changed`\nevents to notify of changes to the property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2080,
                  "column": 6
                },
                "end": {
                  "line": 2082,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReadOnlyProperty",
              "description": "Creates a read-only accessor for the given property.\n\nTo set the property, use the protected `_setProperty` API.\nTo create a custom protected setter (e.g. `_setMyProp()` for\nproperty `myProp`), pass `true` for `protectedSetter`.\n\nNote, if the property will have other property effects, this method\nshould be called first, before adding other effects.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2099,
                  "column": 6
                },
                "end": {
                  "line": 2101,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReflectedProperty",
              "description": "Causes the setter for the given property to reflect the property value\nto a (dash-cased) attribute of the same name.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2110,
                  "column": 6
                },
                "end": {
                  "line": 2112,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createComputedProperty",
              "description": "Creates a computed property whose value is set to the result of the\nmethod described by the given `expression` each time one or more\narguments to the method changes.  The expression should be a string\nin the form of a normal Javascript function signature:\n`'methodName(arg1, [..., argn])'`",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2127,
                  "column": 6
                },
                "end": {
                  "line": 2129,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating whether\n  method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "bindTemplate",
              "description": "Parses the provided template to ensure binding effects are created\nfor them, and then ensures property accessors are created for any\ndependent properties in the template.  Binding effects for bound\ntemplates are stored in a linked list on the instance so that\ntemplates can be efficiently stamped and unstamped.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2143,
                  "column": 6
                },
                "end": {
                  "line": 2145,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addTemplatePropertyEffect",
              "description": "Adds a property effect to the given template metadata, which is run\nat the \"propagate\" stage of `_propertiesChanged` when the template\nhas been bound to the element via `_bindTemplate`.\n\nThe `effect` object should match the format in `_addPropertyEffect`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2208,
                  "column": 6
                },
                "end": {
                  "line": 2214,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata to add effect to"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseBindings",
              "description": "Called to parse text in a template (either attribute values or\ntextContent) into binding metadata.\n\nAny overrides of this method should return an array of binding part\nmetadata  representing one or more bindings found in the provided text\nand any \"literal\" text in between.  Any non-literal parts will be passed\nto `_evaluateBinding` when any dependencies change.  The only required\nfields of each \"part\" in the returned array are as follows:\n\n- `dependencies` - Array containing trigger metadata for each property\n  that should trigger the binding to update\n- `literal` - String containing text if the part represents a literal;\n  in this case no `dependencies` are needed\n\nAdditional metadata for use by `_evaluateBinding` may be provided in\neach part object as needed.\n\nThe default implementation handles the following types of bindings\n(one or more may be intermixed with literal strings):\n- Property binding: `[[prop]]`\n- Path binding: `[[object.prop]]`\n- Negated property or path bindings: `[[!prop]]` or `[[!object.prop]]`\n- Two-way property or path bindings (supports negation):\n  `{{prop}}`, `{{object.prop}}`, `{{!prop}}` or `{{!object.prop}}`\n- Inline computed method (supports negation):\n  `[[compute(a, 'literal', b)]]`, `[[!compute(a, 'literal', b)]]`",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2437,
                  "column": 6
                },
                "end": {
                  "line": 2500,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "text",
                  "type": "string",
                  "description": "Text to parse from attribute or textContent"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Current template metadata"
                }
              ],
              "return": {
                "type": "Array.<Object>",
                "desc": "Array of binding part metadata"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_evaluateBinding",
              "description": "Called to evaluate a previously parsed binding part based on a set of\none or more changed dependencies.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2516,
                  "column": 6
                },
                "end": {
                  "line": 2533,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "inst",
                  "type": "HTMLElement",
                  "description": "Element that should be used as scope for\n  binding dependencies"
                },
                {
                  "name": "part",
                  "type": "Object",
                  "description": "Binding part metadata"
                },
                {
                  "name": "path",
                  "type": "string",
                  "description": "Property/path that triggered this effect"
                },
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of current property changes"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value the binding part evaluated to"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "finalize",
              "description": "Called automatically when the first element instance is created to\nensure that class finalization work has been completed.\nMay be called by users to eagerly perform class finalization work\nprior to the creation of the first element instance.\n\nClass finalization work generally includes meta-programming such as\ncreating property accessors and any property effect metadata needed for\nthe features used.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 493,
                  "column": 6
                },
                "end": {
                  "line": 497,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 399,
              "column": 2
            },
            "end": {
              "line": 403,
              "column": 3
            }
          },
          "privacy": "public",
          "superclass": "HTMLElement",
          "name": "Polymer.ArraySelector",
          "attributes": [
            {
              "name": "items",
              "description": "An array containing items from which selection will be made.",
              "sourceRange": {
                "start": {
                  "line": 50,
                  "column": 10
                },
                "end": {
                  "line": 52,
                  "column": 11
                }
              },
              "metadata": {},
              "type": "Array",
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "multi",
              "description": "When `true`, multiple items may be selected at once (in this case,\n`selected` is an array of currently selected items).  When `false`,\nonly one item may be selected at a time.",
              "sourceRange": {
                "start": {
                  "line": 59,
                  "column": 10
                },
                "end": {
                  "line": 62,
                  "column": 11
                }
              },
              "metadata": {},
              "type": "boolean",
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "selected",
              "description": "When `multi` is true, this is an array that contains any selected.\nWhen `multi` is false, this is the currently selected item, or `null`\nif no item is selected.",
              "sourceRange": {
                "start": {
                  "line": 69,
                  "column": 10
                },
                "end": {
                  "line": 72,
                  "column": 11
                }
              },
              "metadata": {},
              "type": "Object",
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "selected-item",
              "description": "When `multi` is false, this is the currently selected item, or `null`\nif no item is selected.",
              "sourceRange": {
                "start": {
                  "line": 78,
                  "column": 10
                },
                "end": {
                  "line": 81,
                  "column": 11
                }
              },
              "metadata": {},
              "type": "Object",
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            },
            {
              "name": "toggle",
              "description": "When `true`, calling `select` on an item that is already selected\nwill deselect the item.",
              "sourceRange": {
                "start": {
                  "line": 87,
                  "column": 10
                },
                "end": {
                  "line": 90,
                  "column": 11
                }
              },
              "metadata": {},
              "type": "boolean",
              "inheritedFrom": "Polymer.ArraySelectorMixin"
            }
          ],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": [],
          "tagname": "array-selector",
          "mixins": [
            "Polymer.ArraySelectorMixin"
          ]
        },
        {
          "description": "Custom element for defining styles in the main document that can take\nadvantage of several special features of Polymer's styling system:\n\n- Document styles defined in a custom-style are shimmed to ensure they\n  do not leak into local DOM when running on browsers without native\n  Shadow DOM.\n- Custom properties used by Polymer's shim for cross-scope styling may\n  be defined in an custom-style. Use the :root selector to define custom\n  properties that apply to all custom elements.\n\nTo use, simply wrap an inline `<style>` tag in the main document whose\nCSS uses these features with a `<custom-style>` element.",
          "summary": "Custom element for defining styles in the main document that can\n  take advantage of Polymer's style scoping and custom properties shims.",
          "path": "lib/elements/custom-style.html",
          "properties": [],
          "methods": [
            {
              "name": "getStyle",
              "description": "Returns the light-DOM `<style>` child this element wraps.  Upon first\ncall any style modules referenced via the `include` attribute will be\nconcatenated to this element's `<style>`.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 51,
                  "column": 4
                },
                "end": {
                  "line": 66,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [],
              "return": {
                "type": "HTMLStyleElement",
                "desc": "This element's light-DOM `<style>`"
              }
            }
          ],
          "staticMethods": [],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 38,
              "column": 2
            },
            "end": {
              "line": 67,
              "column": 3
            }
          },
          "privacy": "public",
          "superclass": "HTMLElement",
          "name": "Polymer.CustomStyle",
          "attributes": [],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": [],
          "tagname": "custom-style"
        }
      ],
      "mixins": [
        {
          "description": "Element class mixin that provides basic meta-programming for creating one\nor more property accessors (getter/setter pair) that enqueue an async\n(batched) `_propertiesChanged` callback.\n\nFor basic usage of this mixin, simply declare attributes to observe via\nthe standard `static get observedAttributes()`, implement `_propertiesChanged`\non the class, and then call `MyClass.createPropertiesForAttributes()` once\non the class to generate property accessors for each observed attribute\nprior to instancing.  Last, call `this._flushProperties()` once to enable\nthe accessors.\n\nAny `observedAttributes` will automatically be\ndeserialized via `attributeChangedCallback` and set to the associated\nproperty using `dash-case`-to-`camelCase` convention.",
          "summary": "Element class mixin for reacting to property changes from\n  generated property accessors.",
          "path": "lib/mixins/property-accessors.html",
          "properties": [],
          "methods": [
            {
              "name": "attributeChangedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 122,
                  "column": 6
                },
                "end": {
                  "line": 126,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name"
                },
                {
                  "name": "old"
                },
                {
                  "name": "value"
                }
              ]
            },
            {
              "name": "_initializeProperties",
              "description": "Initializes the local storage for property accessors.\n\nProvided as an override point for performing any setup work prior\nto initializing the property accessor system.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 136,
                  "column": 6
                },
                "end": {
                  "line": 160,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_initializeProtoProperties",
              "description": "Called at instance time with bag of properties that were overwritten\nby accessors on the prototype when accessors were created.\n\nThe default implementation sets these properties back into the\nsetter at instance time.  This method is provided as an override\npoint for customizing or providing more efficient initialization.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 174,
                  "column": 6
                },
                "end": {
                  "line": 178,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of property values that were overwritten\n  when creating property accessors."
                }
              ]
            },
            {
              "name": "_initializeInstanceProperties",
              "description": "Called at ready time with bag of instance properties that overwrote\naccessors when the element upgraded.\n\nThe default implementation sets these properties back into the\nsetter at ready time.  This method is provided as an override\npoint for customizing or providing more efficient initialization.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 192,
                  "column": 6
                },
                "end": {
                  "line": 194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of property values that were overwritten\n  when creating property accessors."
                }
              ]
            },
            {
              "name": "_ensureAttribute",
              "description": "Ensures the element has the given attribute. If it does not,\nassigns the given value to the attribute.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 204,
                  "column": 6
                },
                "end": {
                  "line": 208,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to ensure is set."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                }
              ]
            },
            {
              "name": "_attributeToProperty",
              "description": "Deserializes an attribute to its associated property.\n\nThis method calls the `_deserializeValue` method to convert the string to\na typed value.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 220,
                  "column": 6
                },
                "end": {
                  "line": 226,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to deserialize."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "type to deserialize to."
                }
              ]
            },
            {
              "name": "_propertyToAttribute",
              "description": "Serializes a property to its associated attribute.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 235,
                  "column": 6
                },
                "end": {
                  "line": 241,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name to reflect."
                },
                {
                  "name": "attribute",
                  "type": "string=",
                  "description": "Attribute name to reflect."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Property value to refect."
                }
              ]
            },
            {
              "name": "_valueToNodeAttribute",
              "description": "Sets a typed value to an HTML attribute on a node.\n\nThis method calls the `_serializeValue` method to convert the typed\nvalue to a string.  If the `_serializeValue` method returns `undefined`,\nthe attribute will be removed (this is the default for boolean\ntype `false`).",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 255,
                  "column": 6
                },
                "end": {
                  "line": 262,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to set attribute to."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to serialize."
                },
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Attribute name to serialize to."
                }
              ]
            },
            {
              "name": "_serializeValue",
              "description": "Converts a typed JavaScript value to a string.\n\nThis method is called by Polymer when setting JS property values to\nHTML attributes.  Users may override this method on Polymer element\nprototypes to provide serialization for custom types.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 274,
                  "column": 6
                },
                "end": {
                  "line": 294,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Property value to serialize."
                }
              ],
              "return": {
                "type": "(string|undefined)",
                "desc": "String serialized from the provided property value."
              }
            },
            {
              "name": "_deserializeValue",
              "description": "Converts a string to a typed JavaScript value.\n\nThis method is called by Polymer when reading HTML attribute values to\nJS properties.  Users may override this method on Polymer element\nprototypes to provide deserialization for custom `type`s.  Note,\nthe `type` argument is the value of the `type` field provided in the\n`properties` configuration object for a given property, and is\nby convention the constructor for the type to deserialize.\n\nNote: The return value of `undefined` is used as a sentinel value to\nindicate the attribute should be removed.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 313,
                  "column": 6
                },
                "end": {
                  "line": 355,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "string",
                  "description": "Attribute value to deserialize."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "Type to deserialize the string to."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Typed value deserialized from the provided string."
              }
            },
            {
              "name": "_createPropertyAccessor",
              "description": "Creates a setter/getter pair for the named property with its own\nlocal storage.  The getter returns the value in the local storage,\nand the setter calls `_setProperty`, which updates the local storage\nfor the property and enqueues a `_propertiesChanged` callback.\n\nThis method may be called on a prototype or an instance.  Calling\nthis method may overwrite a property value that already exists on\nthe prototype/instance by creating the accessor.  When calling on\na prototype, any overwritten values are saved in `__dataProto`,\nand it is up to the subclasser to decide how/when to set those\nproperties back into the accessor.  When calling on an instance,\nthe overwritten value is set via `_setPendingProperty`, and the\nuser should call `_invalidateProperties` or `_flushProperties`\nfor the values to take effect.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 379,
                  "column": 6
                },
                "end": {
                  "line": 395,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "readOnly",
                  "type": "boolean=",
                  "description": "When true, no setter is created; the\n  protected `_setProperty` function must be used to set the property"
                }
              ]
            },
            {
              "name": "_hasAccessor",
              "description": "Returns true if this library created an accessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 403,
                  "column": 6
                },
                "end": {
                  "line": 405,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if an accessor was created"
              }
            },
            {
              "name": "_setProperty",
              "description": "Updates the local storage for a property (via `_setPendingProperty`)\nand enqueues a `_proeprtiesChanged` callback.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 415,
                  "column": 6
                },
                "end": {
                  "line": 419,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set"
                }
              ]
            },
            {
              "name": "_setPendingProperty",
              "description": "Updates the local storage for a property, records the previous value,\nand adds it to the set of \"pending changes\" that will be passed to the\n`_propertiesChanged` callback.  This method does not enqueue the\n`_propertiesChanged` callback.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 432,
                  "column": 6
                },
                "end": {
                  "line": 447,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if the property changed"
              }
            },
            {
              "name": "_isPropertyPending",
              "description": "Returns true if the specified property has a pending change.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 456,
                  "column": 6
                },
                "end": {
                  "line": 458,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if property has a pending change"
              }
            },
            {
              "name": "_invalidateProperties",
              "description": "Marks the properties as invalid, and enqueues an async\n`_propertiesChanged` callback.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 466,
                  "column": 6
                },
                "end": {
                  "line": 476,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_enableProperties",
              "description": "Call to enable property accessor processing. Before this method is\ncalled accessor values will be set but side effects are\nqueued. When called, any pending side effects occur immediately.\nFor elements, generally `connectedCallback` is a normal spot to do so.\nIt is safe to call this method multiple times as it only turns on\nproperty accessors once.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 486,
                  "column": 6
                },
                "end": {
                  "line": 495,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_flushProperties",
              "description": "Calls the `_propertiesChanged` callback with the current set of\npending changes (and old values recorded when pending changes were\nset), and resets the pending set of changes. Generally, this method\nshould not be called in user code.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 506,
                  "column": 6
                },
                "end": {
                  "line": 514,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "ready",
              "description": "Lifecycle callback called the first time properties are being flushed.\nPrior to `ready`, all property sets through accessors are queued and\ntheir effects are flushed after this method returns.\n\nUsers may override this function to implement behavior that is\ndependent on the element having its properties initialized, e.g.\nfrom defaults (initialized from `constructor`, `_initializeProperties`),\n`attributeChangedCallback`, or values propagated from host e.g. via\nbindings.  `super.ready()` must be called to ensure the data system\nbecomes enabled.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 530,
                  "column": 6
                },
                "end": {
                  "line": 534,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_propertiesChanged",
              "description": "Callback called when any properties with accessors created via\n`_createPropertyAccessor` have been set.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 547,
                  "column": 6
                },
                "end": {
                  "line": 548,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "currentProps",
                  "type": "Object",
                  "description": "Bag of all current accessor values"
                },
                {
                  "name": "changedProps",
                  "type": "Object",
                  "description": "Bag of properties changed since the last\n  call to `_propertiesChanged`"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for each property\n  in `changedProps`"
                }
              ]
            },
            {
              "name": "_shouldPropertyChange",
              "description": "Method called to determine whether a property value should be\nconsidered as a change and cause the `_propertiesChanged` callback\nto be enqueued.\n\nThe default implementation returns `true` for primitive types if a\nstrict equality check fails, and returns `true` for all Object/Arrays.\nThe method always returns false for `NaN`.\n\nOverride this method to e.g. provide stricter checking for\nObjects/Arrays when using immutable patterns.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 569,
                  "column": 6
                },
                "end": {
                  "line": 576,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change\n  and enqueue a `_proeprtiesChanged` callback"
              }
            }
          ],
          "staticMethods": [
            {
              "name": "createPropertiesForAttributes",
              "description": "Generates property accessors for all attributes in the standard\nstatic `observedAttributes` array.\n\nAttribute names are mapped to property names using the `dash-case` to\n`camelCase` convention",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 110,
                  "column": 6
                },
                "end": {
                  "line": 115,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 93,
              "column": 2
            },
            "end": {
              "line": 582,
              "column": 4
            }
          },
          "privacy": "public",
          "name": "Polymer.PropertyAccessors",
          "attributes": [],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": []
        },
        {
          "description": "Element mixin that provides basic template parsing and stamping, including\nthe following template-related features for stamped templates:\n\n- Declarative event listeners (`on-eventname=\"listener\"`)\n- Map of node id's to stamped node instances (`this.$.id`)\n- Nested template content caching/removal and re-installation (performance\n  optimization)",
          "summary": "Element class mixin that provides basic template parsing and stamping",
          "path": "lib/mixins/template-stamp.html",
          "properties": [],
          "methods": [
            {
              "name": "_stampTemplate",
              "description": "Clones the provided template content and returns a document fragment\ncontaining the cloned dom.\n\nThe template is parsed (once and memoized) using this library's\ntemplate parsing features, and provides the following value-added\nfeatures:\n* Adds declarative event listeners for `on-event=\"handler\"` attributes\n* Generates an \"id map\" for all nodes with id's under `$` on returned\n  document fragment\n* Passes template info including `content` back to templates as\n  `_templateInfo` (a performance optimization to avoid deep template\n  cloning)\n\nNote that the memoized template parsing process is destructive to the\ntemplate: attributes for bindings and declarative event listeners are\nremoved after being noted in notes, and any nested `<template>.content`\nis removed and stored in notes as well.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 407,
                  "column": 6
                },
                "end": {
                  "line": 428,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to stamp"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Cloned template content"
              }
            },
            {
              "name": "_addMethodEventListenerToNode",
              "description": "Adds an event listener by method name for the event provided.\n\nThis method generates a handler function that looks up the method\nname at handling time.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 443,
                  "column": 6
                },
                "end": {
                  "line": 448,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add listener on"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of method"
                },
                {
                  "name": "context",
                  "type": "*=",
                  "description": "Context the method will be called on (defaults\n  to `node`)"
                }
              ],
              "return": {
                "type": "Function",
                "desc": "Generated handler function"
              }
            },
            {
              "name": "_addEventListenerToNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 457,
                  "column": 6
                },
                "end": {
                  "line": 459,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add event listener to"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to add"
                }
              ]
            },
            {
              "name": "_removeEventListenerFromNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 468,
                  "column": 6
                },
                "end": {
                  "line": 470,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to remove event listener from"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to remove"
                }
              ]
            }
          ],
          "staticMethods": [
            {
              "name": "_parseTemplate",
              "description": "Scans a template to produce template metadata.\n\nTemplate-specific metadata are stored in the object returned, and node-\nspecific metadata are stored in objects in its flattened `nodeInfoList`\narray.  Only nodes in the template that were parsed as nodes of\ninterest contain an object in `nodeInfoList`.  Each `nodeInfo` object\ncontains an `index` (`childNodes` index in parent) and optionally\n`parent`, which points to node info of its parent (including its index).\n\nThe template metadata object returned from this method has the following\nstructure (many fields optional):\n\n```js\n  {\n    // Flattened list of node metadata (for nodes that generated metadata)\n    nodeInfoList: [\n      {\n        // `id` attribute for any nodes with id's for generating `$` map\n        id: {string},\n        // `on-event=\"handler\"` metadata\n        events: [\n          {\n            name: {string},   // event name\n            value: {string},  // handler method name\n          }, ...\n        ],\n        // Notes when the template contained a `<slot>` for shady DOM\n        // optimization purposes\n        hasInsertionPoint: {boolean},\n        // For nested `<template>`` nodes, nested template metadata\n        templateInfo: {object}, // nested template metadata\n        // Metadata to allow efficient retrieval of instanced node\n        // corresponding to this metadata\n        parentInfo: {number},   // reference to parent nodeInfo>\n        parentIndex: {number},  // index in parent's `childNodes` collection\n        infoIndex: {number},    // index of this `nodeInfo` in `templateInfo.nodeInfoList`\n      },\n      ...\n    ],\n    // When true, the template had the `strip-whitespace` attribute\n    // or was nested in a template with that setting\n    stripWhitespace: {boolean},\n    // For nested templates, nested template content is moved into\n    // a document fragment stored here; this is an optimization to\n    // avoid the cost of nested template cloning\n    content: {DocumentFragment}\n  }\n```\n\nThis method kicks off a recursive treewalk as follows:\n\n```\n   _parseTemplate <---------------------+\n     _parseTemplateContent              |\n       _parseTemplateNode  <------------|--+\n         _parseTemplateNestedTemplate --+  |\n         _parseTemplateChildNodes ---------+\n         _parseTemplateNodeAttributes\n           _parseTemplateNodeAttribute\n\n```\n\nThese methods may be overridden to add custom metadata about templates\nto either `templateInfo` or `nodeInfo`.\n\nNote that this method may be destructive to the template, in that\ne.g. event annotations may be removed after being noted in the\ntemplate metadata.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 195,
                  "column": 6
                },
                "end": {
                  "line": 206,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to parse"
                },
                {
                  "name": "outerTemplateInfo",
                  "type": "Object=",
                  "description": "Template metadata from the outer\n  template, for parsing nested templates"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Parsed template metadata"
              }
            },
            {
              "name": "_parseTemplateContent",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 208,
                  "column": 6
                },
                "end": {
                  "line": 210,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template"
                },
                {
                  "name": "templateInfo"
                },
                {
                  "name": "nodeInfo"
                }
              ]
            },
            {
              "name": "_parseTemplateNode",
              "description": "Parses template node and adds template and node metadata based on\nthe current node, and its `childNodes` and `attributes`.\n\nThis method may be overridden to add custom node or template specific\nmetadata based on this node.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 225,
                  "column": 6
                },
                "end": {
                  "line": 240,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              }
            },
            {
              "name": "_parseTemplateChildNodes",
              "description": "Parses template child nodes for the given root node.\n\nThis method also wraps whitelisted legacy template extensions\n(`is=\"dom-if\"` and `is=\"dom-repeat\"`) with their equivalent element\nwrappers, collapses text nodes, and strips whitespace from the template\nif the `templateInfo.stripWhitespace` setting was provided.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 254,
                  "column": 6
                },
                "end": {
                  "line": 288,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "root",
                  "type": "Node",
                  "description": "Root node whose `childNodes` will be parsed"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ]
            },
            {
              "name": "_parseTemplateNestedTemplate",
              "description": "Parses template content for the given nested `<template>`.\n\nNested template info is stored as `templateInfo` in the current node's\n`nodeInfo`. `template.content` is removed and stored in `templateInfo`.\nIt will then be the responsibility of the host to set it back to the\ntemplate and for users stamping nested templates to use the\n`_contentForTemplate` method to retrieve the content for this template\n(an optimization to avoid the cost of cloning nested template content).",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 307,
                  "column": 6
                },
                "end": {
                  "line": 314,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "HTMLTemplateElement",
                  "description": "Node to parse (a <template>)"
                },
                {
                  "name": "outerTemplateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template\n  that includes the template `node`"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              }
            },
            {
              "name": "_parseTemplateNodeAttributes",
              "description": "Parses template node attributes and adds node metadata to `nodeInfo`\nfor nodes of interest.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 326,
                  "column": 6
                },
                "end": {
                  "line": 335,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              }
            },
            {
              "name": "_parseTemplateNodeAttribute",
              "description": "Parses a single template node attribute and adds node metadata to\n`nodeInfo` for attributes of interest.\n\nThis implementation adds metadata for `on-event=\"handler\"` attributes\nand `id` attributes.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 352,
                  "column": 6
                },
                "end": {
                  "line": 368,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                },
                {
                  "name": "name",
                  "type": "string",
                  "description": "Attribute name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Attribute value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              }
            },
            {
              "name": "_contentForTemplate",
              "description": "Returns the `content` document fragment for a given template.\n\nFor nested templates, Polymer performs an optimization to cache nested\ntemplate content to avoid the cost of cloning deeply nested templates.\nThis method retrieves the cached content for a given template.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 380,
                  "column": 6
                },
                "end": {
                  "line": 383,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to retrieve `content` for"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Content fragment"
              }
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 112,
              "column": 2
            },
            "end": {
              "line": 476,
              "column": 4
            }
          },
          "privacy": "public",
          "name": "Polymer.TemplateStamp",
          "attributes": [],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": []
        },
        {
          "description": "Element class mixin that provides meta-programming for Polymer's template\nbinding and data observation (collectively, \"property effects\") system.\n\nThis mixin uses provides the following key static methods for adding\nproperty effects to an element class:\n- `addPropertyEffect`\n- `createPropertyObserver`\n- `createMethodObserver`\n- `createNotifyingProperty`\n- `createReadOnlyProperty`\n- `createReflectedProperty`\n- `createComputedProperty`\n- `bindTemplate`\n\nEach method creates one or more property accessors, along with metadata\nused by this mixin's implementation of `_propertiesChanged` to perform\nthe property effects.\n\nUnderscored versions of the above methods also exist on the element\nprototype for adding property effects on instances at runtime.\n\nNote that this mixin overrides several `PropertyAccessors` methods, in\nmany cases to maintain guarantees provided by the Polymer 1.x features;\nnotably it changes property accessors to be synchronous by default\nwhereas the default when using `PropertyAccessors` standalone is to be\nasync by default.",
          "summary": "Element class mixin that provides meta-programming for Polymer's\ntemplate binding and data observation system.",
          "path": "lib/mixins/property-effects.html",
          "properties": [],
          "methods": [
            {
              "name": "_stampTemplate",
              "description": "Stamps the provided template and performs instance-time setup for\nPolymer template features, including data bindings, declarative event\nlisteners, and the `this.$` map of `id`'s to nodes.  A document fragment\nis returned containing the stamped DOM, ready for insertion into the\nDOM.\n\nThis method may be called more than once; however note that due to\n`shadycss` polyfill limitations, only styles from templates prepared\nusing `ShadyCSS.prepareTemplate` will be correctly polyfilled (scoped\nto the shadow root and support CSS custom properties), and note that\n`ShadyCSS.prepareTemplate` may only be called once per element. As such,\nany styles required by in runtime-stamped templates must be included\nin the main element template.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2235,
                  "column": 6
                },
                "end": {
                  "line": 2260,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to stamp"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Cloned template content"
              }
            },
            {
              "name": "_addMethodEventListenerToNode",
              "description": "Adds an event listener by method name for the event provided.\n\nThis method generates a handler function that looks up the method\nname at handling time.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 443,
                  "column": 6
                },
                "end": {
                  "line": 448,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add listener on"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of method"
                },
                {
                  "name": "context",
                  "type": "*=",
                  "description": "Context the method will be called on (defaults\n  to `node`)"
                }
              ],
              "return": {
                "type": "Function",
                "desc": "Generated handler function"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_addEventListenerToNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 457,
                  "column": 6
                },
                "end": {
                  "line": 459,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add event listener to"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to add"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_removeEventListenerFromNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 468,
                  "column": 6
                },
                "end": {
                  "line": 470,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to remove event listener from"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to remove"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "attributeChangedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 122,
                  "column": 6
                },
                "end": {
                  "line": 126,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name"
                },
                {
                  "name": "old"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_initializeProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to initialize\nadditional property-effect related properties.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1086,
                  "column": 6
                },
                "end": {
                  "line": 1098,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_initializeProtoProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to provide a\nmore efficient implementation of initializing properties from\nthe prototype on the instance.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1107,
                  "column": 6
                },
                "end": {
                  "line": 1111,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ]
            },
            {
              "name": "_initializeInstanceProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to avoid setting\n`_setProperty`'s `shouldNotify: true`.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1119,
                  "column": 6
                },
                "end": {
                  "line": 1128,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ]
            },
            {
              "name": "_ensureAttribute",
              "description": "Ensures the element has the given attribute. If it does not,\nassigns the given value to the attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 204,
                  "column": 6
                },
                "end": {
                  "line": 208,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to ensure is set."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_attributeToProperty",
              "description": "Deserializes an attribute to its associated property.\n\nThis method calls the `_deserializeValue` method to convert the string to\na typed value.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 220,
                  "column": 6
                },
                "end": {
                  "line": 226,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to deserialize."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "type to deserialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_propertyToAttribute",
              "description": "Serializes a property to its associated attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 235,
                  "column": 6
                },
                "end": {
                  "line": 241,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name to reflect."
                },
                {
                  "name": "attribute",
                  "type": "string=",
                  "description": "Attribute name to reflect."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Property value to refect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_valueToNodeAttribute",
              "description": "Sets a typed value to an HTML attribute on a node.\n\nThis method calls the `_serializeValue` method to convert the typed\nvalue to a string.  If the `_serializeValue` method returns `undefined`,\nthe attribute will be removed (this is the default for boolean\ntype `false`).",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 255,
                  "column": 6
                },
                "end": {
                  "line": 262,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to set attribute to."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to serialize."
                },
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Attribute name to serialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_serializeValue",
              "description": "Converts a typed JavaScript value to a string.\n\nThis method is called by Polymer when setting JS property values to\nHTML attributes.  Users may override this method on Polymer element\nprototypes to provide serialization for custom types.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 274,
                  "column": 6
                },
                "end": {
                  "line": 294,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Property value to serialize."
                }
              ],
              "return": {
                "type": "(string|undefined)",
                "desc": "String serialized from the provided property value."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_deserializeValue",
              "description": "Converts a string to a typed JavaScript value.\n\nThis method is called by Polymer when reading HTML attribute values to\nJS properties.  Users may override this method on Polymer element\nprototypes to provide deserialization for custom `type`s.  Note,\nthe `type` argument is the value of the `type` field provided in the\n`properties` configuration object for a given property, and is\nby convention the constructor for the type to deserialize.\n\nNote: The return value of `undefined` is used as a sentinel value to\nindicate the attribute should be removed.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 313,
                  "column": 6
                },
                "end": {
                  "line": 355,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "string",
                  "description": "Attribute value to deserialize."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "Type to deserialize the string to."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Typed value deserialized from the provided string."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_createPropertyAccessor",
              "description": "Creates a setter/getter pair for the named property with its own\nlocal storage.  The getter returns the value in the local storage,\nand the setter calls `_setProperty`, which updates the local storage\nfor the property and enqueues a `_propertiesChanged` callback.\n\nThis method may be called on a prototype or an instance.  Calling\nthis method may overwrite a property value that already exists on\nthe prototype/instance by creating the accessor.  When calling on\na prototype, any overwritten values are saved in `__dataProto`,\nand it is up to the subclasser to decide how/when to set those\nproperties back into the accessor.  When calling on an instance,\nthe overwritten value is set via `_setPendingProperty`, and the\nuser should call `_invalidateProperties` or `_flushProperties`\nfor the values to take effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 379,
                  "column": 6
                },
                "end": {
                  "line": 395,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "readOnly",
                  "type": "boolean=",
                  "description": "When true, no setter is created; the\n  protected `_setProperty` function must be used to set the property"
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_hasAccessor",
              "description": "Returns true if this library created an accessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 403,
                  "column": 6
                },
                "end": {
                  "line": 405,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if an accessor was created"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_setProperty",
              "description": "Overrides base implementation to ensure all accessors set `shouldNotify`\nto true, for per-property notification tracking.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1389,
                  "column": 6
                },
                "end": {
                  "line": 1393,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                }
              ]
            },
            {
              "name": "_setPendingProperty",
              "description": "Overrides the `PropertyAccessors` implementation to introduce special\ndirty check logic depending on the property & value being set:\n\n1. Any value set to a path (e.g. 'obj.prop': 42 or 'obj.prop': {...})\n   Stored in `__dataTemp`, dirty checked against `__dataTemp`\n2. Object set to simple property (e.g. 'prop': {...})\n   Stored in `__dataTemp` and `__data`, dirty checked against\n   `__dataTemp` by default implementation of `_shouldPropertyChange`\n3. Primitive value set to simple property (e.g. 'prop': 42)\n   Stored in `__data`, dirty checked against `__data`\n\nThe dirty-check is important to prevent cycles due to two-way\nnotification, but paths and objects are only dirty checked against any\nprevious value set during this turn via a \"temporary cache\" that is\ncleared when the last `_propertiesChaged` exits. This is so:\na. any cached array paths (e.g. 'array.3.prop') may be invalidated\n   due to array mutations like shift/unshift/splice; this is fine\n   since path changes are dirty-checked at user entry points like `set`\nb. dirty-checking for objects only lasts one turn to allow the user\n   to mutate the object in-place and re-set it with the same identity\n   and have all sub-properties re-propagated in a subsequent turn.\n\nThe temp cache is not necessarily sufficient to prevent invalid array\npaths, since a splice can happen during the same turn (with pathological\nuser code); we could introduce a \"fixup\" for temporarily cached array\npaths if needed: https://github.com/Polymer/polymer/issues/4227",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1353,
                  "column": 6
                },
                "end": {
                  "line": 1381,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                },
                {
                  "name": "shouldNotify"
                }
              ]
            },
            {
              "name": "_isPropertyPending",
              "description": "Returns true if the specified property has a pending change.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 456,
                  "column": 6
                },
                "end": {
                  "line": 458,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if property has a pending change"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_invalidateProperties",
              "description": "Overrides `PropertyAccessor`'s default async queuing of\n`_propertiesChanged`: if `__dataReady` is false (has not yet been\nmanually flushed), the function no-ops; otherwise flushes\n`_propertiesChanged` synchronously.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1403,
                  "column": 6
                },
                "end": {
                  "line": 1407,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_enableProperties",
              "description": "Call to enable property accessor processing. Before this method is\ncalled accessor values will be set but side effects are\nqueued. When called, any pending side effects occur immediately.\nFor elements, generally `connectedCallback` is a normal spot to do so.\nIt is safe to call this method multiple times as it only turns on\nproperty accessors once.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 486,
                  "column": 6
                },
                "end": {
                  "line": 495,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_flushProperties",
              "description": "Calls the `_propertiesChanged` callback with the current set of\npending changes (and old values recorded when pending changes were\nset), and resets the pending set of changes. Generally, this method\nshould not be called in user code.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 506,
                  "column": 6
                },
                "end": {
                  "line": 514,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "ready",
              "description": "Overrides `PropertyAccessors` so that property accessor\nside effects are not enabled until after client dom is fully ready.\nAlso calls `_flushClients` callback to ensure client dom is enabled\nthat was not enabled as a result of flushing properties.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1516,
                  "column": 6
                },
                "end": {
                  "line": 1532,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_propertiesChanged",
              "description": "Implements `PropertyAccessors`'s properties changed callback.\n\nRuns each class of effects for the batch of changed properties in\na specific order (compute, propagate, reflect, observe, notify).",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1542,
                  "column": 6
                },
                "end": {
                  "line": 1575,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "currentProps"
                },
                {
                  "name": "changedProps"
                },
                {
                  "name": "oldProps"
                }
              ]
            },
            {
              "name": "_shouldPropertyChange",
              "description": "Method called to determine whether a property value should be\nconsidered as a change and cause the `_propertiesChanged` callback\nto be enqueued.\n\nThe default implementation returns `true` for primitive types if a\nstrict equality check fails, and returns `true` for all Object/Arrays.\nThe method always returns false for `NaN`.\n\nOverride this method to e.g. provide stricter checking for\nObjects/Arrays when using immutable patterns.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 569,
                  "column": 6
                },
                "end": {
                  "line": 576,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change\n  and enqueue a `_proeprtiesChanged` callback"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_addPropertyEffect",
              "description": "Equivalent to static `addPropertyEffect` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1142,
                  "column": 6
                },
                "end": {
                  "line": 1150,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ]
            },
            {
              "name": "_removePropertyEffect",
              "description": "Removes the given property effect.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1159,
                  "column": 6
                },
                "end": {
                  "line": 1165,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property the effect was associated with"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object to remove"
                }
              ]
            },
            {
              "name": "_hasPropertyEffect",
              "description": "Returns whether the current prototype/instance has a property effect\nof a certain type.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1176,
                  "column": 6
                },
                "end": {
                  "line": 1179,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "type",
                  "type": "string=",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              }
            },
            {
              "name": "_hasReadOnlyEffect",
              "description": "Returns whether the current prototype/instance has a \"read only\"\naccessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1189,
                  "column": 6
                },
                "end": {
                  "line": 1191,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              }
            },
            {
              "name": "_hasNotifyEffect",
              "description": "Returns whether the current prototype/instance has a \"notify\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1201,
                  "column": 6
                },
                "end": {
                  "line": 1203,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              }
            },
            {
              "name": "_hasReflectEffect",
              "description": "Returns whether the current prototype/instance has a \"reflect to attribute\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1213,
                  "column": 6
                },
                "end": {
                  "line": 1215,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              }
            },
            {
              "name": "_hasComputedEffect",
              "description": "Returns whether the current prototype/instance has a \"computed\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1225,
                  "column": 6
                },
                "end": {
                  "line": 1227,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              }
            },
            {
              "name": "_setPendingPropertyOrPath",
              "description": "Sets a pending property or path.  If the root property of the path in\nquestion had no accessor, the path is set, otherwise it is enqueued\nvia `_setPendingProperty`.\n\nThis function isolates relatively expensive functionality necessary\nfor the public API (`set`, `setProperties`, `notifyPath`, and property\nchange listeners via {{...}} bindings), such that it is only done\nwhen paths enter the system, and not at every propagation step.  It\nalso sets a `__dataHasPaths` flag on the instance which is used to\nfast-path slower path-matching code in the property effects host paths.\n\n`path` can be a path string or array of path parts as accepted by the\npublic API.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1259,
                  "column": 6
                },
                "end": {
                  "line": 1291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(number|string)>)",
                  "description": "Path to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set"
                },
                {
                  "name": "shouldNotify",
                  "type": "boolean=",
                  "description": "Set to true if this change should\n cause a property notification event dispatch"
                },
                {
                  "name": "isPathNotification",
                  "type": "boolean=",
                  "description": "If the path being set is a path\n  notification of an already changed value, as opposed to a request\n  to set and notify the change.  In the latter `false` case, a dirty\n  check is performed and then the value is set to the path before\n  enqueuing the pending property change."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if the property/path was enqueued in\n  the pending changes bag."
              }
            },
            {
              "name": "_setUnmanagedPropertyToNode",
              "description": "Applies a value to a non-Polymer element/node's property.\n\nThe implementation makes a best-effort at binding interop:\nSome native element properties have side-effects when\nre-setting the same value (e.g. setting `<input>.value` resets the\ncursor position), so we do a dirty-check before setting the value.\nHowever, for better interop with non-Polymer custom elements that\naccept objects, we explicitly re-set object changes coming from the\nPolymer world (which may include deep object changes without the\ntop reference changing), erring on the side of providing more\ninformation.\n\nUsers may override this method to provide alternate approaches.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1313,
                  "column": 6
                },
                "end": {
                  "line": 1321,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "The node to set a property on"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "The property to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "The value to set"
                }
              ]
            },
            {
              "name": "_enqueueClient",
              "description": "Enqueues the given client on a list of pending clients, whose\npending property changes can later be flushed via a call to\n`_flushClients`.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1417,
                  "column": 6
                },
                "end": {
                  "line": 1422,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "client",
                  "type": "Object",
                  "description": "PropertyEffects client to enqueue"
                }
              ]
            },
            {
              "name": "_flushClients",
              "description": "Flushes any clients previously enqueued via `_enqueueClient`, causing\ntheir `_flushProperties` method to run.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1430,
                  "column": 6
                },
                "end": {
                  "line": 1441,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "__enableOrFlushClients",
              "description": "(c) the stamped dom enables.",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 1455,
                  "column": 6
                },
                "end": {
                  "line": 1468,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_readyClients",
              "description": "Perform any initial setup on client dom. Called before the first\n`_flushProperties` call on client dom and before any element\nobservers are called.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1477,
                  "column": 6
                },
                "end": {
                  "line": 1479,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "setProperties",
              "description": "Sets a bag of property changes to this instance, and\nsynchronously processes all effects of the properties as a batch.\n\nProperty names must be simple properties, not paths.  Batched\npath propagation is not supported.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1495,
                  "column": 6
                },
                "end": {
                  "line": 1506,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of one or more key-value pairs whose key is\n  a property and value is the new value to set for that property."
                },
                {
                  "name": "setReadOnly",
                  "type": "boolean=",
                  "description": "When true, any private values set in\n  `props` will be set. By default, `setProperties` will not set\n  `readOnly: true` root properties."
                }
              ]
            },
            {
              "name": "_propagatePropertyChanges",
              "description": "Called to propagate any property changes to stamped template nodes\nmanaged by this element.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1586,
                  "column": 6
                },
                "end": {
                  "line": 1596,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "changedProps",
                  "type": "Object",
                  "description": "Bag of changed properties"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ]
            },
            {
              "name": "linkPaths",
              "description": "Aliases one data path as another, such that path notifications from one\nare routed to the other.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1606,
                  "column": 6
                },
                "end": {
                  "line": 1611,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "to",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to link."
                },
                {
                  "name": "from",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Source path to link."
                }
              ]
            },
            {
              "name": "unlinkPaths",
              "description": "Removes a data path alias previously established with `_linkPaths`.\n\nNote, the path to unlink should be the target (`to`) used when\nlinking the paths.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1622,
                  "column": 6
                },
                "end": {
                  "line": 1627,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to unlink."
                }
              ]
            },
            {
              "name": "notifySplices",
              "description": "Notify that an array has changed.\n\nExample:\n\n    this.items = [ {name: 'Jim'}, {name: 'Todd'}, {name: 'Bill'} ];\n    ...\n    this.items.splice(1, 1, {name: 'Sam'});\n    this.items.push({name: 'Bob'});\n    this.notifySplices('items', [\n      { index: 1, removed: [{name: 'Todd'}], addedCount: 1, obect: this.items, type: 'splice' },\n      { index: 3, removed: [], addedCount: 1, object: this.items, type: 'splice'}\n    ]);",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1658,
                  "column": 6
                },
                "end": {
                  "line": 1662,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "splices",
                  "type": "Array",
                  "description": "Array of splice records indicating ordered\n  changes that occurred to the array. Each record should have the\n  following fields:\n   * index: index at which the change occurred\n   * removed: array of items that were removed from this index\n   * addedCount: number of new items added at this index\n   * object: a reference to the array in question\n   * type: the string literal 'splice'\n\n  Note that splice records _must_ be normalized such that they are\n  reported in index order (raw results from `Object.observe` are not\n  ordered and must be normalized/merged before notifying)."
                }
              ]
            },
            {
              "name": "get",
              "description": "Convenience method for reading a value from a path.\n\nNote, if any part in the path is undefined, this method returns\n`undefined` (this method does not throw when dereferencing undefined\npaths).",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1683,
                  "column": 6
                },
                "end": {
                  "line": 1685,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to read.  The path may be specified as a string (e.g. `foo.bar.baz`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `users.12.name` or `['users', 12, 'name']`)."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value at the path, or `undefined` if any part of the path\n  is undefined."
              }
            },
            {
              "name": "set",
              "description": "Convenience method for setting a value to a path and notifying any\nelements bound to the same path.\n\nNote, if any part in the path except for the last is undefined,\nthis method does nothing (this method does not throw when\ndereferencing undefined paths).",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1707,
                  "column": 6
                },
                "end": {
                  "line": 1717,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to write.  The path may be specified as a string (e.g. `'foo.bar.baz'`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `'users.12.name'` or `['users', 12, 'name']`)."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set at the specified path."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated.\n  When specified, no notification will occur."
                }
              ]
            },
            {
              "name": "push",
              "description": "Adds items onto the end of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1733,
                  "column": 6
                },
                "end": {
                  "line": 1742,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              }
            },
            {
              "name": "pop",
              "description": "Removes an item from the end of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1757,
                  "column": 6
                },
                "end": {
                  "line": 1766,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              }
            },
            {
              "name": "splice",
              "description": "Starting from the start index specified, removes 0 or more items\nfrom the array and inserts 0 or more new items in their place.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.splice`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1785,
                  "column": 6
                },
                "end": {
                  "line": 1802,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "start",
                  "type": "number",
                  "description": "Index from which to start removing/inserting."
                },
                {
                  "name": "deleteCount",
                  "type": "number",
                  "description": "Number of items to remove."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "Array",
                "desc": "Array of removed items."
              }
            },
            {
              "name": "shift",
              "description": "Removes an item from the beginning of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1817,
                  "column": 6
                },
                "end": {
                  "line": 1826,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              }
            },
            {
              "name": "unshift",
              "description": "Adds items onto the beginning of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1842,
                  "column": 6
                },
                "end": {
                  "line": 1850,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              }
            },
            {
              "name": "notifyPath",
              "description": "Notify that a path has changed.\n\nExample:\n\n    this.item.user.name = 'Bob';\n    this.notifyPath('item.user.name');",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 1864,
                  "column": 6
                },
                "end": {
                  "line": 1881,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Value at the path (optional)."
                }
              ]
            },
            {
              "name": "_createReadOnlyProperty",
              "description": "Equivalent to static `createReadOnlyProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1893,
                  "column": 6
                },
                "end": {
                  "line": 1900,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ]
            },
            {
              "name": "_createPropertyObserver",
              "description": "Equivalent to static `createPropertyObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1913,
                  "column": 6
                },
                "end": {
                  "line": 1923,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ]
            },
            {
              "name": "_createMethodObserver",
              "description": "Equivalent to static `createMethodObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1935,
                  "column": 6
                },
                "end": {
                  "line": 1941,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ]
            },
            {
              "name": "_createNotifyingProperty",
              "description": "Equivalent to static `createNotifyingProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1951,
                  "column": 6
                },
                "end": {
                  "line": 1959,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ]
            },
            {
              "name": "_createReflectedProperty",
              "description": "Equivalent to static `createReflectedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1969,
                  "column": 6
                },
                "end": {
                  "line": 1982,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ]
            },
            {
              "name": "_createComputedProperty",
              "description": "Equivalent to static `createComputedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 1995,
                  "column": 6
                },
                "end": {
                  "line": 2001,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ]
            },
            {
              "name": "_bindTemplate",
              "description": "Equivalent to static `bindTemplate` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.\n\nThis method may be called on the prototype (for prototypical template\nbinding, to avoid creating accessors every instance) once per prototype,\nand will be called with `runtimeBinding: true` by `_stampTemplate` to\ncreate and link an instance of the template metadata associated with a\nparticular stamping.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2171,
                  "column": 6
                },
                "end": {
                  "line": 2194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                },
                {
                  "name": "instanceBinding",
                  "type": "boolean=",
                  "description": "When false (default), performs\n  \"prototypical\" binding of the template and overwrites any previously\n  bound template for the class. When true (as passed from\n  `_stampTemplate`), the template info is instanced and linked into\n  the list of bound templates."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object; for `runtimeBinding`,\n  this is an instance of the prototypical template info"
              }
            },
            {
              "name": "_removeBoundDom",
              "description": "Removes and unbinds the nodes previously contained in the provided\nDocumentFragment returned from `_stampTemplate`.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2270,
                  "column": 6
                },
                "end": {
                  "line": 2291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "DocumentFragment",
                  "description": "DocumentFragment previously returned\n  from `_stampTemplate` associated with the nodes to be removed"
                }
              ]
            }
          ],
          "staticMethods": [
            {
              "name": "_parseTemplate",
              "description": "Scans a template to produce template metadata.\n\nTemplate-specific metadata are stored in the object returned, and node-\nspecific metadata are stored in objects in its flattened `nodeInfoList`\narray.  Only nodes in the template that were parsed as nodes of\ninterest contain an object in `nodeInfoList`.  Each `nodeInfo` object\ncontains an `index` (`childNodes` index in parent) and optionally\n`parent`, which points to node info of its parent (including its index).\n\nThe template metadata object returned from this method has the following\nstructure (many fields optional):\n\n```js\n  {\n    // Flattened list of node metadata (for nodes that generated metadata)\n    nodeInfoList: [\n      {\n        // `id` attribute for any nodes with id's for generating `$` map\n        id: {string},\n        // `on-event=\"handler\"` metadata\n        events: [\n          {\n            name: {string},   // event name\n            value: {string},  // handler method name\n          }, ...\n        ],\n        // Notes when the template contained a `<slot>` for shady DOM\n        // optimization purposes\n        hasInsertionPoint: {boolean},\n        // For nested `<template>`` nodes, nested template metadata\n        templateInfo: {object}, // nested template metadata\n        // Metadata to allow efficient retrieval of instanced node\n        // corresponding to this metadata\n        parentInfo: {number},   // reference to parent nodeInfo>\n        parentIndex: {number},  // index in parent's `childNodes` collection\n        infoIndex: {number},    // index of this `nodeInfo` in `templateInfo.nodeInfoList`\n      },\n      ...\n    ],\n    // When true, the template had the `strip-whitespace` attribute\n    // or was nested in a template with that setting\n    stripWhitespace: {boolean},\n    // For nested templates, nested template content is moved into\n    // a document fragment stored here; this is an optimization to\n    // avoid the cost of nested template cloning\n    content: {DocumentFragment}\n  }\n```\n\nThis method kicks off a recursive treewalk as follows:\n\n```\n   _parseTemplate <---------------------+\n     _parseTemplateContent              |\n       _parseTemplateNode  <------------|--+\n         _parseTemplateNestedTemplate --+  |\n         _parseTemplateChildNodes ---------+\n         _parseTemplateNodeAttributes\n           _parseTemplateNodeAttribute\n\n```\n\nThese methods may be overridden to add custom metadata about templates\nto either `templateInfo` or `nodeInfo`.\n\nNote that this method may be destructive to the template, in that\ne.g. event annotations may be removed after being noted in the\ntemplate metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 195,
                  "column": 6
                },
                "end": {
                  "line": 206,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to parse"
                },
                {
                  "name": "outerTemplateInfo",
                  "type": "Object=",
                  "description": "Template metadata from the outer\n  template, for parsing nested templates"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Parsed template metadata"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateContent",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 208,
                  "column": 6
                },
                "end": {
                  "line": 210,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template"
                },
                {
                  "name": "templateInfo"
                },
                {
                  "name": "nodeInfo"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNode",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from `TextNode`'s' `textContent`.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2309,
                  "column": 6
                },
                "end": {
                  "line": 2323,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              }
            },
            {
              "name": "_parseTemplateChildNodes",
              "description": "Parses template child nodes for the given root node.\n\nThis method also wraps whitelisted legacy template extensions\n(`is=\"dom-if\"` and `is=\"dom-repeat\"`) with their equivalent element\nwrappers, collapses text nodes, and strips whitespace from the template\nif the `templateInfo.stripWhitespace` setting was provided.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 254,
                  "column": 6
                },
                "end": {
                  "line": 288,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "root",
                  "type": "Node",
                  "description": "Root node whose `childNodes` will be parsed"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNestedTemplate",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nbinding the properties that a nested template depends on to the template\nas `_host_<property>`.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2392,
                  "column": 6
                },
                "end": {
                  "line": 2402,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              }
            },
            {
              "name": "_parseTemplateNodeAttributes",
              "description": "Parses template node attributes and adds node metadata to `nodeInfo`\nfor nodes of interest.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 326,
                  "column": 6
                },
                "end": {
                  "line": 335,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNodeAttribute",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from attributes.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2341,
                  "column": 6
                },
                "end": {
                  "line": 2377,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                },
                {
                  "name": "name"
                },
                {
                  "name": "value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              }
            },
            {
              "name": "_contentForTemplate",
              "description": "Returns the `content` document fragment for a given template.\n\nFor nested templates, Polymer performs an optimization to cache nested\ntemplate content to avoid the cost of cloning deeply nested templates.\nThis method retrieves the cached content for a given template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 380,
                  "column": 6
                },
                "end": {
                  "line": 383,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to retrieve `content` for"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Content fragment"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "createPropertiesForAttributes",
              "description": "Generates property accessors for all attributes in the standard\nstatic `observedAttributes` array.\n\nAttribute names are mapped to property names using the `dash-case` to\n`camelCase` convention",
              "privacy": "public",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 110,
                  "column": 6
                },
                "end": {
                  "line": 115,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "addPropertyEffect",
              "description": "Ensures an accessor exists for the specified property, and adds\nto a list of \"property effects\" that will run when the accessor for\nthe specified property is set.  Effects are grouped by \"type\", which\nroughly corresponds to a phase in effect processing.  The effect\nmetadata should be in the following form:\n\n  {\n    fn: effectFunction, // Reference to function to call to perform effect\n    info: { ... }       // Effect metadata passed to function\n    trigger: {          // Optional triggering metadata; if not provided\n      name: string      // the property is treated as a wildcard\n      structured: boolean\n      wildcard: boolean\n    }\n  }\n\nEffects are called from `_propertiesChanged` in the following order by\ntype:\n\n1. COMPUTE\n2. PROPAGATE\n3. REFLECT\n4. OBSERVE\n5. NOTIFY\n\nEffect functions are called with the following signature:\n\n  effectFunction(inst, path, props, oldProps, info, hasPaths)",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2040,
                  "column": 6
                },
                "end": {
                  "line": 2042,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ]
            },
            {
              "name": "createPropertyObserver",
              "description": "Creates a single-property observer for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2053,
                  "column": 6
                },
                "end": {
                  "line": 2055,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ]
            },
            {
              "name": "createMethodObserver",
              "description": "Creates a multi-property \"method observer\" based on the provided\nexpression, which should be a string in the form of a normal Javascript\nfunction signature: `'methodName(arg1, [..., argn])'`.  Each argument\nshould correspond to a property or path in the context of this\nprototype (or instance), or may be a literal string or number.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2069,
                  "column": 6
                },
                "end": {
                  "line": 2071,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ]
            },
            {
              "name": "createNotifyingProperty",
              "description": "Causes the setter for the given property to dispatch `<property>-changed`\nevents to notify of changes to the property.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2080,
                  "column": 6
                },
                "end": {
                  "line": 2082,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ]
            },
            {
              "name": "createReadOnlyProperty",
              "description": "Creates a read-only accessor for the given property.\n\nTo set the property, use the protected `_setProperty` API.\nTo create a custom protected setter (e.g. `_setMyProp()` for\nproperty `myProp`), pass `true` for `protectedSetter`.\n\nNote, if the property will have other property effects, this method\nshould be called first, before adding other effects.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2099,
                  "column": 6
                },
                "end": {
                  "line": 2101,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ]
            },
            {
              "name": "createReflectedProperty",
              "description": "Causes the setter for the given property to reflect the property value\nto a (dash-cased) attribute of the same name.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2110,
                  "column": 6
                },
                "end": {
                  "line": 2112,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ]
            },
            {
              "name": "createComputedProperty",
              "description": "Creates a computed property whose value is set to the result of the\nmethod described by the given `expression` each time one or more\narguments to the method changes.  The expression should be a string\nin the form of a normal Javascript function signature:\n`'methodName(arg1, [..., argn])'`",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2127,
                  "column": 6
                },
                "end": {
                  "line": 2129,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating whether\n  method names should be included as a dependency to the effect."
                }
              ]
            },
            {
              "name": "bindTemplate",
              "description": "Parses the provided template to ensure binding effects are created\nfor them, and then ensures property accessors are created for any\ndependent properties in the template.  Binding effects for bound\ntemplates are stored in a linked list on the instance so that\ntemplates can be efficiently stamped and unstamped.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2143,
                  "column": 6
                },
                "end": {
                  "line": 2145,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object"
              }
            },
            {
              "name": "_addTemplatePropertyEffect",
              "description": "Adds a property effect to the given template metadata, which is run\nat the \"propagate\" stage of `_propertiesChanged` when the template\nhas been bound to the element via `_bindTemplate`.\n\nThe `effect` object should match the format in `_addPropertyEffect`.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2208,
                  "column": 6
                },
                "end": {
                  "line": 2214,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata to add effect to"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ]
            },
            {
              "name": "_parseBindings",
              "description": "Called to parse text in a template (either attribute values or\ntextContent) into binding metadata.\n\nAny overrides of this method should return an array of binding part\nmetadata  representing one or more bindings found in the provided text\nand any \"literal\" text in between.  Any non-literal parts will be passed\nto `_evaluateBinding` when any dependencies change.  The only required\nfields of each \"part\" in the returned array are as follows:\n\n- `dependencies` - Array containing trigger metadata for each property\n  that should trigger the binding to update\n- `literal` - String containing text if the part represents a literal;\n  in this case no `dependencies` are needed\n\nAdditional metadata for use by `_evaluateBinding` may be provided in\neach part object as needed.\n\nThe default implementation handles the following types of bindings\n(one or more may be intermixed with literal strings):\n- Property binding: `[[prop]]`\n- Path binding: `[[object.prop]]`\n- Negated property or path bindings: `[[!prop]]` or `[[!object.prop]]`\n- Two-way property or path bindings (supports negation):\n  `{{prop}}`, `{{object.prop}}`, `{{!prop}}` or `{{!object.prop}}`\n- Inline computed method (supports negation):\n  `[[compute(a, 'literal', b)]]`, `[[!compute(a, 'literal', b)]]`",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2437,
                  "column": 6
                },
                "end": {
                  "line": 2500,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "text",
                  "type": "string",
                  "description": "Text to parse from attribute or textContent"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Current template metadata"
                }
              ],
              "return": {
                "type": "Array.<Object>",
                "desc": "Array of binding part metadata"
              }
            },
            {
              "name": "_evaluateBinding",
              "description": "Called to evaluate a previously parsed binding part based on a set of\none or more changed dependencies.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 2516,
                  "column": 6
                },
                "end": {
                  "line": 2533,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "inst",
                  "type": "HTMLElement",
                  "description": "Element that should be used as scope for\n  binding dependencies"
                },
                {
                  "name": "part",
                  "type": "Object",
                  "description": "Binding part metadata"
                },
                {
                  "name": "path",
                  "type": "string",
                  "description": "Property/path that triggered this effect"
                },
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of current property changes"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value the binding part evaluated to"
              }
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 1059,
              "column": 2
            },
            "end": {
              "line": 2538,
              "column": 4
            }
          },
          "privacy": "public",
          "name": "Polymer.PropertyEffects",
          "attributes": [],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": [],
          "mixins": [
            "Polymer.TemplateStamp",
            "Polymer.PropertyAccessors"
          ]
        },
        {
          "description": "Element class mixin that provides the core API for Polymer's meta-programming\nfeatures including template stamping, data-binding, attribute deserialization,\nand property change observation.\n\nSubclassers may provide the following static getters to return metadata\nused to configure Polymer's features for the class:\n\n- `static get is()`: When the template is provided via a `dom-module`,\n  users should return the `dom-module` id from a static `is` getter.  If\n  no template is needed or the template is provided directly via the\n  `template` getter, there is no need to define `is` for the element.\n\n- `static get template()`: Users may provide the template directly (as\n  opposed to via `dom-module`) by implementing a static `template` getter.\n  The getter may return an `HTMLTemplateElement` or a string, which will\n  automatically be parsed into a template.\n\n- `static get properties()`: Should return an object describing\n  property-related metadata used by Polymer features (key: property name\n  value: object containing property metadata). Valid keys in per-property\n  metadata include:\n  - `type` (String|Number|Object|Array|...): Used by\n    `attributeChangedCallback` to determine how string-based attributes\n    are deserialized to JavaScript property values.\n  - `notify` (boolean): Causes a change in the property to fire a\n    non-bubbling event called `<property>-changed`. Elements that have\n    enabled two-way binding to the property use this event to observe changes.\n  - `readOnly` (boolean): Creates a getter for the property, but no setter.\n    To set a read-only property, use the private setter method\n    `_setProperty(property, value)`.\n  - `observer` (string): Observer method name that will be called when\n    the property changes. The arguments of the method are\n    `(value, previousValue)`.\n  - `computed` (string): String describing method and dependent properties\n    for computing the value of this property (e.g. `'computeFoo(bar, zot)'`).\n    Computed properties are read-only by default and can only be changed\n    via the return value of the computing method.\n\n- `static get observers()`: Array of strings describing multi-property\n  observer methods and their dependent properties (e.g.\n  `'observeABC(a, b, c)'`).\n\nThe base class provides default implementations for the following standard\ncustom element lifecycle callbacks; users may override these, but should\ncall the super method to ensure\n- `constructor`: Run when the element is created or upgraded\n- `connectedCallback`: Run each time the element is connected to the\n  document\n- `disconnectedCallback`: Run each time the element is disconnected from\n  the document\n- `attributeChangedCallback`: Run each time an attribute in\n  `observedAttributes` is set or removed (note: this element's default\n  `observedAttributes` implementation will automatically return an array\n  of dash-cased attributes based on `properties`)",
          "summary": "",
          "path": "lib/mixins/element-mixin.html",
          "properties": [],
          "methods": [
            {
              "name": "_stampTemplate",
              "description": "Stamps the provided template and performs instance-time setup for\nPolymer template features, including data bindings, declarative event\nlisteners, and the `this.$` map of `id`'s to nodes.  A document fragment\nis returned containing the stamped DOM, ready for insertion into the\nDOM.\n\nThis method may be called more than once; however note that due to\n`shadycss` polyfill limitations, only styles from templates prepared\nusing `ShadyCSS.prepareTemplate` will be correctly polyfilled (scoped\nto the shadow root and support CSS custom properties), and note that\n`ShadyCSS.prepareTemplate` may only be called once per element. As such,\nany styles required by in runtime-stamped templates must be included\nin the main element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2235,
                  "column": 6
                },
                "end": {
                  "line": 2260,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to stamp"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Cloned template content"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addMethodEventListenerToNode",
              "description": "Adds an event listener by method name for the event provided.\n\nThis method generates a handler function that looks up the method\nname at handling time.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 443,
                  "column": 6
                },
                "end": {
                  "line": 448,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add listener on"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of method"
                },
                {
                  "name": "context",
                  "type": "*=",
                  "description": "Context the method will be called on (defaults\n  to `node`)"
                }
              ],
              "return": {
                "type": "Function",
                "desc": "Generated handler function"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_addEventListenerToNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 457,
                  "column": 6
                },
                "end": {
                  "line": 459,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add event listener to"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to add"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_removeEventListenerFromNode",
              "description": "Override point for adding custom or simulated event handling.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 468,
                  "column": 6
                },
                "end": {
                  "line": 470,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to remove event listener from"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "handler",
                  "type": "Function",
                  "description": "Listener function to remove"
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "attributeChangedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`attributeChangedCallback`.\n\nBy default, attributes declared in `properties` metadata are\ndeserialized using their `type` information to properties of the\nsame name.  \"Dash-cased\" attributes are deserialzed to \"camelCase\"\nproperties.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 717,
                  "column": 6
                },
                "end": {
                  "line": 725,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name"
                },
                {
                  "name": "old"
                },
                {
                  "name": "value"
                }
              ]
            },
            {
              "name": "_initializeProperties",
              "description": "Overrides the default `Polymer.PropertyAccessors` to ensure class\nmetaprogramming related to property accessors and effects has\ncompleted (calls `finalize`).\n\nIt also initializes any property defaults provided via `value` in\n`properties` metadata.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 577,
                  "column": 6
                },
                "end": {
                  "line": 617,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_initializeProtoProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to provide a\nmore efficient implementation of initializing properties from\nthe prototype on the instance.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1107,
                  "column": 6
                },
                "end": {
                  "line": 1111,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_initializeInstanceProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to avoid setting\n`_setProperty`'s `shouldNotify: true`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1119,
                  "column": 6
                },
                "end": {
                  "line": 1128,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_ensureAttribute",
              "description": "Ensures the element has the given attribute. If it does not,\nassigns the given value to the attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 204,
                  "column": 6
                },
                "end": {
                  "line": 208,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to ensure is set."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_attributeToProperty",
              "description": "Deserializes an attribute to its associated property.\n\nThis method calls the `_deserializeValue` method to convert the string to\na typed value.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 220,
                  "column": 6
                },
                "end": {
                  "line": 226,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to deserialize."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "type to deserialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_propertyToAttribute",
              "description": "Serializes a property to its associated attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 235,
                  "column": 6
                },
                "end": {
                  "line": 241,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name to reflect."
                },
                {
                  "name": "attribute",
                  "type": "string=",
                  "description": "Attribute name to reflect."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Property value to refect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_valueToNodeAttribute",
              "description": "Sets a typed value to an HTML attribute on a node.\n\nThis method calls the `_serializeValue` method to convert the typed\nvalue to a string.  If the `_serializeValue` method returns `undefined`,\nthe attribute will be removed (this is the default for boolean\ntype `false`).",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 255,
                  "column": 6
                },
                "end": {
                  "line": 262,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to set attribute to."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to serialize."
                },
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Attribute name to serialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_serializeValue",
              "description": "Converts a typed JavaScript value to a string.\n\nThis method is called by Polymer when setting JS property values to\nHTML attributes.  Users may override this method on Polymer element\nprototypes to provide serialization for custom types.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 274,
                  "column": 6
                },
                "end": {
                  "line": 294,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Property value to serialize."
                }
              ],
              "return": {
                "type": "(string|undefined)",
                "desc": "String serialized from the provided property value."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_deserializeValue",
              "description": "Converts a string to a typed JavaScript value.\n\nThis method is called by Polymer when reading HTML attribute values to\nJS properties.  Users may override this method on Polymer element\nprototypes to provide deserialization for custom `type`s.  Note,\nthe `type` argument is the value of the `type` field provided in the\n`properties` configuration object for a given property, and is\nby convention the constructor for the type to deserialize.\n\nNote: The return value of `undefined` is used as a sentinel value to\nindicate the attribute should be removed.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 313,
                  "column": 6
                },
                "end": {
                  "line": 355,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "string",
                  "description": "Attribute value to deserialize."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "Type to deserialize the string to."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Typed value deserialized from the provided string."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_createPropertyAccessor",
              "description": "Creates a setter/getter pair for the named property with its own\nlocal storage.  The getter returns the value in the local storage,\nand the setter calls `_setProperty`, which updates the local storage\nfor the property and enqueues a `_propertiesChanged` callback.\n\nThis method may be called on a prototype or an instance.  Calling\nthis method may overwrite a property value that already exists on\nthe prototype/instance by creating the accessor.  When calling on\na prototype, any overwritten values are saved in `__dataProto`,\nand it is up to the subclasser to decide how/when to set those\nproperties back into the accessor.  When calling on an instance,\nthe overwritten value is set via `_setPendingProperty`, and the\nuser should call `_invalidateProperties` or `_flushProperties`\nfor the values to take effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 379,
                  "column": 6
                },
                "end": {
                  "line": 395,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "readOnly",
                  "type": "boolean=",
                  "description": "When true, no setter is created; the\n  protected `_setProperty` function must be used to set the property"
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_hasAccessor",
              "description": "Returns true if this library created an accessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 403,
                  "column": 6
                },
                "end": {
                  "line": 405,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if an accessor was created"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_setProperty",
              "description": "Overrides base implementation to ensure all accessors set `shouldNotify`\nto true, for per-property notification tracking.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1389,
                  "column": 6
                },
                "end": {
                  "line": 1393,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingProperty",
              "description": "Overrides the `PropertyAccessors` implementation to introduce special\ndirty check logic depending on the property & value being set:\n\n1. Any value set to a path (e.g. 'obj.prop': 42 or 'obj.prop': {...})\n   Stored in `__dataTemp`, dirty checked against `__dataTemp`\n2. Object set to simple property (e.g. 'prop': {...})\n   Stored in `__dataTemp` and `__data`, dirty checked against\n   `__dataTemp` by default implementation of `_shouldPropertyChange`\n3. Primitive value set to simple property (e.g. 'prop': 42)\n   Stored in `__data`, dirty checked against `__data`\n\nThe dirty-check is important to prevent cycles due to two-way\nnotification, but paths and objects are only dirty checked against any\nprevious value set during this turn via a \"temporary cache\" that is\ncleared when the last `_propertiesChaged` exits. This is so:\na. any cached array paths (e.g. 'array.3.prop') may be invalidated\n   due to array mutations like shift/unshift/splice; this is fine\n   since path changes are dirty-checked at user entry points like `set`\nb. dirty-checking for objects only lasts one turn to allow the user\n   to mutate the object in-place and re-set it with the same identity\n   and have all sub-properties re-propagated in a subsequent turn.\n\nThe temp cache is not necessarily sufficient to prevent invalid array\npaths, since a splice can happen during the same turn (with pathological\nuser code); we could introduce a \"fixup\" for temporarily cached array\npaths if needed: https://github.com/Polymer/polymer/issues/4227",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1353,
                  "column": 6
                },
                "end": {
                  "line": 1381,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                },
                {
                  "name": "shouldNotify"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_isPropertyPending",
              "description": "Returns true if the specified property has a pending change.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 456,
                  "column": 6
                },
                "end": {
                  "line": 458,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if property has a pending change"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_invalidateProperties",
              "description": "Overrides `PropertyAccessor`'s default async queuing of\n`_propertiesChanged`: if `__dataReady` is false (has not yet been\nmanually flushed), the function no-ops; otherwise flushes\n`_propertiesChanged` synchronously.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1403,
                  "column": 6
                },
                "end": {
                  "line": 1407,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enableProperties",
              "description": "Call to enable property accessor processing. Before this method is\ncalled accessor values will be set but side effects are\nqueued. When called, any pending side effects occur immediately.\nFor elements, generally `connectedCallback` is a normal spot to do so.\nIt is safe to call this method multiple times as it only turns on\nproperty accessors once.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 486,
                  "column": 6
                },
                "end": {
                  "line": 495,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_flushProperties",
              "description": "Calls the `_propertiesChanged` callback with the current set of\npending changes (and old values recorded when pending changes were\nset), and resets the pending set of changes. Generally, this method\nshould not be called in user code.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 506,
                  "column": 6
                },
                "end": {
                  "line": 514,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "ready",
              "description": "Stamps the element template.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 649,
                  "column": 6
                },
                "end": {
                  "line": 655,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_propertiesChanged",
              "description": "Implements `PropertyAccessors`'s properties changed callback.\n\nRuns each class of effects for the batch of changed properties in\na specific order (compute, propagate, reflect, observe, notify).",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1542,
                  "column": 6
                },
                "end": {
                  "line": 1575,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "currentProps"
                },
                {
                  "name": "changedProps"
                },
                {
                  "name": "oldProps"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_shouldPropertyChange",
              "description": "Method called to determine whether a property value should be\nconsidered as a change and cause the `_propertiesChanged` callback\nto be enqueued.\n\nThe default implementation returns `true` for primitive types if a\nstrict equality check fails, and returns `true` for all Object/Arrays.\nThe method always returns false for `NaN`.\n\nOverride this method to e.g. provide stricter checking for\nObjects/Arrays when using immutable patterns.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 569,
                  "column": 6
                },
                "end": {
                  "line": 576,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change\n  and enqueue a `_proeprtiesChanged` callback"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_addPropertyEffect",
              "description": "Equivalent to static `addPropertyEffect` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1142,
                  "column": 6
                },
                "end": {
                  "line": 1150,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removePropertyEffect",
              "description": "Removes the given property effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1159,
                  "column": 6
                },
                "end": {
                  "line": 1165,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property the effect was associated with"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object to remove"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasPropertyEffect",
              "description": "Returns whether the current prototype/instance has a property effect\nof a certain type.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1176,
                  "column": 6
                },
                "end": {
                  "line": 1179,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "type",
                  "type": "string=",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReadOnlyEffect",
              "description": "Returns whether the current prototype/instance has a \"read only\"\naccessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1189,
                  "column": 6
                },
                "end": {
                  "line": 1191,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasNotifyEffect",
              "description": "Returns whether the current prototype/instance has a \"notify\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1201,
                  "column": 6
                },
                "end": {
                  "line": 1203,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReflectEffect",
              "description": "Returns whether the current prototype/instance has a \"reflect to attribute\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1213,
                  "column": 6
                },
                "end": {
                  "line": 1215,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasComputedEffect",
              "description": "Returns whether the current prototype/instance has a \"computed\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1225,
                  "column": 6
                },
                "end": {
                  "line": 1227,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingPropertyOrPath",
              "description": "Sets a pending property or path.  If the root property of the path in\nquestion had no accessor, the path is set, otherwise it is enqueued\nvia `_setPendingProperty`.\n\nThis function isolates relatively expensive functionality necessary\nfor the public API (`set`, `setProperties`, `notifyPath`, and property\nchange listeners via {{...}} bindings), such that it is only done\nwhen paths enter the system, and not at every propagation step.  It\nalso sets a `__dataHasPaths` flag on the instance which is used to\nfast-path slower path-matching code in the property effects host paths.\n\n`path` can be a path string or array of path parts as accepted by the\npublic API.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1259,
                  "column": 6
                },
                "end": {
                  "line": 1291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(number|string)>)",
                  "description": "Path to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set"
                },
                {
                  "name": "shouldNotify",
                  "type": "boolean=",
                  "description": "Set to true if this change should\n cause a property notification event dispatch"
                },
                {
                  "name": "isPathNotification",
                  "type": "boolean=",
                  "description": "If the path being set is a path\n  notification of an already changed value, as opposed to a request\n  to set and notify the change.  In the latter `false` case, a dirty\n  check is performed and then the value is set to the path before\n  enqueuing the pending property change."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if the property/path was enqueued in\n  the pending changes bag."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setUnmanagedPropertyToNode",
              "description": "Applies a value to a non-Polymer element/node's property.\n\nThe implementation makes a best-effort at binding interop:\nSome native element properties have side-effects when\nre-setting the same value (e.g. setting `<input>.value` resets the\ncursor position), so we do a dirty-check before setting the value.\nHowever, for better interop with non-Polymer custom elements that\naccept objects, we explicitly re-set object changes coming from the\nPolymer world (which may include deep object changes without the\ntop reference changing), erring on the side of providing more\ninformation.\n\nUsers may override this method to provide alternate approaches.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1313,
                  "column": 6
                },
                "end": {
                  "line": 1321,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "The node to set a property on"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "The property to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "The value to set"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enqueueClient",
              "description": "Enqueues the given client on a list of pending clients, whose\npending property changes can later be flushed via a call to\n`_flushClients`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1417,
                  "column": 6
                },
                "end": {
                  "line": 1422,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "client",
                  "type": "Object",
                  "description": "PropertyEffects client to enqueue"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_flushClients",
              "description": "Flushes any clients previously enqueued via `_enqueueClient`, causing\ntheir `_flushProperties` method to run.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1430,
                  "column": 6
                },
                "end": {
                  "line": 1441,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "__enableOrFlushClients",
              "description": "(c) the stamped dom enables.",
              "privacy": "private",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1455,
                  "column": 6
                },
                "end": {
                  "line": 1468,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_readyClients",
              "description": "Implements `PropertyEffects`'s `_readyClients` call. Attaches\nelement dom by calling `_attachDom` with the dom stamped from the\nelement's template via `_stampTemplate`. Note that this allows\nclient dom to be attached to the element prior to any observers\nrunning.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 666,
                  "column": 6
                },
                "end": {
                  "line": 675,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "setProperties",
              "description": "Sets a bag of property changes to this instance, and\nsynchronously processes all effects of the properties as a batch.\n\nProperty names must be simple properties, not paths.  Batched\npath propagation is not supported.",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1495,
                  "column": 6
                },
                "end": {
                  "line": 1506,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of one or more key-value pairs whose key is\n  a property and value is the new value to set for that property."
                },
                {
                  "name": "setReadOnly",
                  "type": "boolean=",
                  "description": "When true, any private values set in\n  `props` will be set. By default, `setProperties` will not set\n  `readOnly: true` root properties."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_propagatePropertyChanges",
              "description": "Called to propagate any property changes to stamped template nodes\nmanaged by this element.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1586,
                  "column": 6
                },
                "end": {
                  "line": 1596,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "changedProps",
                  "type": "Object",
                  "description": "Bag of changed properties"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "linkPaths",
              "description": "Aliases one data path as another, such that path notifications from one\nare routed to the other.",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1606,
                  "column": 6
                },
                "end": {
                  "line": 1611,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "to",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to link."
                },
                {
                  "name": "from",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Source path to link."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unlinkPaths",
              "description": "Removes a data path alias previously established with `_linkPaths`.\n\nNote, the path to unlink should be the target (`to`) used when\nlinking the paths.",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1622,
                  "column": 6
                },
                "end": {
                  "line": 1627,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to unlink."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifySplices",
              "description": "Notify that an array has changed.\n\nExample:\n\n    this.items = [ {name: 'Jim'}, {name: 'Todd'}, {name: 'Bill'} ];\n    ...\n    this.items.splice(1, 1, {name: 'Sam'});\n    this.items.push({name: 'Bob'});\n    this.notifySplices('items', [\n      { index: 1, removed: [{name: 'Todd'}], addedCount: 1, obect: this.items, type: 'splice' },\n      { index: 3, removed: [], addedCount: 1, object: this.items, type: 'splice'}\n    ]);",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1658,
                  "column": 6
                },
                "end": {
                  "line": 1662,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "splices",
                  "type": "Array",
                  "description": "Array of splice records indicating ordered\n  changes that occurred to the array. Each record should have the\n  following fields:\n   * index: index at which the change occurred\n   * removed: array of items that were removed from this index\n   * addedCount: number of new items added at this index\n   * object: a reference to the array in question\n   * type: the string literal 'splice'\n\n  Note that splice records _must_ be normalized such that they are\n  reported in index order (raw results from `Object.observe` are not\n  ordered and must be normalized/merged before notifying)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "get",
              "description": "Convenience method for reading a value from a path.\n\nNote, if any part in the path is undefined, this method returns\n`undefined` (this method does not throw when dereferencing undefined\npaths).",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1683,
                  "column": 6
                },
                "end": {
                  "line": 1685,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to read.  The path may be specified as a string (e.g. `foo.bar.baz`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `users.12.name` or `['users', 12, 'name']`)."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value at the path, or `undefined` if any part of the path\n  is undefined."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "set",
              "description": "Convenience method for setting a value to a path and notifying any\nelements bound to the same path.\n\nNote, if any part in the path except for the last is undefined,\nthis method does nothing (this method does not throw when\ndereferencing undefined paths).",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1707,
                  "column": 6
                },
                "end": {
                  "line": 1717,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to write.  The path may be specified as a string (e.g. `'foo.bar.baz'`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `'users.12.name'` or `['users', 12, 'name']`)."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set at the specified path."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated.\n  When specified, no notification will occur."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "push",
              "description": "Adds items onto the end of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1733,
                  "column": 6
                },
                "end": {
                  "line": 1742,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "pop",
              "description": "Removes an item from the end of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1757,
                  "column": 6
                },
                "end": {
                  "line": 1766,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "splice",
              "description": "Starting from the start index specified, removes 0 or more items\nfrom the array and inserts 0 or more new items in their place.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.splice`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1785,
                  "column": 6
                },
                "end": {
                  "line": 1802,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "start",
                  "type": "number",
                  "description": "Index from which to start removing/inserting."
                },
                {
                  "name": "deleteCount",
                  "type": "number",
                  "description": "Number of items to remove."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "Array",
                "desc": "Array of removed items."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "shift",
              "description": "Removes an item from the beginning of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1817,
                  "column": 6
                },
                "end": {
                  "line": 1826,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unshift",
              "description": "Adds items onto the beginning of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1842,
                  "column": 6
                },
                "end": {
                  "line": 1850,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifyPath",
              "description": "Notify that a path has changed.\n\nExample:\n\n    this.item.user.name = 'Bob';\n    this.notifyPath('item.user.name');",
              "privacy": "public",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1864,
                  "column": 6
                },
                "end": {
                  "line": 1881,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Value at the path (optional)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReadOnlyProperty",
              "description": "Equivalent to static `createReadOnlyProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1893,
                  "column": 6
                },
                "end": {
                  "line": 1900,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createPropertyObserver",
              "description": "Equivalent to static `createPropertyObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1913,
                  "column": 6
                },
                "end": {
                  "line": 1923,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createMethodObserver",
              "description": "Equivalent to static `createMethodObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1935,
                  "column": 6
                },
                "end": {
                  "line": 1941,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createNotifyingProperty",
              "description": "Equivalent to static `createNotifyingProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1951,
                  "column": 6
                },
                "end": {
                  "line": 1959,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReflectedProperty",
              "description": "Equivalent to static `createReflectedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1969,
                  "column": 6
                },
                "end": {
                  "line": 1982,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createComputedProperty",
              "description": "Equivalent to static `createComputedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 1995,
                  "column": 6
                },
                "end": {
                  "line": 2001,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_bindTemplate",
              "description": "Equivalent to static `bindTemplate` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.\n\nThis method may be called on the prototype (for prototypical template\nbinding, to avoid creating accessors every instance) once per prototype,\nand will be called with `runtimeBinding: true` by `_stampTemplate` to\ncreate and link an instance of the template metadata associated with a\nparticular stamping.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2171,
                  "column": 6
                },
                "end": {
                  "line": 2194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                },
                {
                  "name": "instanceBinding",
                  "type": "boolean=",
                  "description": "When false (default), performs\n  \"prototypical\" binding of the template and overwrites any previously\n  bound template for the class. When true (as passed from\n  `_stampTemplate`), the template info is instanced and linked into\n  the list of bound templates."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object; for `runtimeBinding`,\n  this is an instance of the prototypical template info"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removeBoundDom",
              "description": "Removes and unbinds the nodes previously contained in the provided\nDocumentFragment returned from `_stampTemplate`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2270,
                  "column": 6
                },
                "end": {
                  "line": 2291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "DocumentFragment",
                  "description": "DocumentFragment previously returned\n  from `_stampTemplate` associated with the nodes to be removed"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "connectedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`connectedCallback`.\n\nThe default implementation enables the property effects system and\nflushes any pending properties, and updates shimmed CSS properties\nwhen using the ShadyCSS scoping/custom properties polyfill.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 629,
                  "column": 6
                },
                "end": {
                  "line": 634,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "disconnectedCallback",
              "description": "Provides a default implementation of the standard Custom Elements\n`disconnectedCallback`.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 642,
                  "column": 6
                },
                "end": {
                  "line": 642,
                  "column": 31
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_attachDom",
              "description": "Attaches an element's stamped dom to itself. By default,\nthis method creates a `shadowRoot` and adds the dom to it.\nHowever, this method may be overridden to allow an element\nto put its dom in another location.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 689,
                  "column": 6
                },
                "end": {
                  "line": 704,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "NodeList",
                  "description": "to attach to the element."
                }
              ],
              "return": {
                "type": "Node",
                "desc": "node to which the dom has been attached."
              }
            },
            {
              "name": "updateStyles",
              "description": "When using the ShadyCSS scoping and custom property shim, causes all\nshimmed styles in this element (and its subtree) to be updated\nbased on current custom property values.\n\nThe optional parameter overrides inline custom property styles with an\nobject of properties where the keys are CSS properties, and the values\nare strings.\n\nExample: `this.updateStyles({'--color': 'blue'})`\n\nThese properties are retained unless a value of `null` is set.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 743,
                  "column": 6
                },
                "end": {
                  "line": 747,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "properties",
                  "type": "Object=",
                  "description": "Bag of custom property key/values to\n  apply to this element."
                }
              ]
            },
            {
              "name": "resolveUrl",
              "description": "Rewrites a given URL relative to a base URL. The base URL defaults to\nthe original location of the document containing the `dom-module` for\nthis element. This method will return the same URL before and after\nbundling.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 760,
                  "column": 6
                },
                "end": {
                  "line": 765,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "url",
                  "type": "string",
                  "description": "URL to resolve."
                },
                {
                  "name": "base",
                  "type": "string=",
                  "description": "Optional base URL to resolve against, defaults\nto the element's `importPath`"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Rewritten URL relative to base"
              }
            }
          ],
          "staticMethods": [
            {
              "name": "_parseTemplate",
              "description": "Scans a template to produce template metadata.\n\nTemplate-specific metadata are stored in the object returned, and node-\nspecific metadata are stored in objects in its flattened `nodeInfoList`\narray.  Only nodes in the template that were parsed as nodes of\ninterest contain an object in `nodeInfoList`.  Each `nodeInfo` object\ncontains an `index` (`childNodes` index in parent) and optionally\n`parent`, which points to node info of its parent (including its index).\n\nThe template metadata object returned from this method has the following\nstructure (many fields optional):\n\n```js\n  {\n    // Flattened list of node metadata (for nodes that generated metadata)\n    nodeInfoList: [\n      {\n        // `id` attribute for any nodes with id's for generating `$` map\n        id: {string},\n        // `on-event=\"handler\"` metadata\n        events: [\n          {\n            name: {string},   // event name\n            value: {string},  // handler method name\n          }, ...\n        ],\n        // Notes when the template contained a `<slot>` for shady DOM\n        // optimization purposes\n        hasInsertionPoint: {boolean},\n        // For nested `<template>`` nodes, nested template metadata\n        templateInfo: {object}, // nested template metadata\n        // Metadata to allow efficient retrieval of instanced node\n        // corresponding to this metadata\n        parentInfo: {number},   // reference to parent nodeInfo>\n        parentIndex: {number},  // index in parent's `childNodes` collection\n        infoIndex: {number},    // index of this `nodeInfo` in `templateInfo.nodeInfoList`\n      },\n      ...\n    ],\n    // When true, the template had the `strip-whitespace` attribute\n    // or was nested in a template with that setting\n    stripWhitespace: {boolean},\n    // For nested templates, nested template content is moved into\n    // a document fragment stored here; this is an optimization to\n    // avoid the cost of nested template cloning\n    content: {DocumentFragment}\n  }\n```\n\nThis method kicks off a recursive treewalk as follows:\n\n```\n   _parseTemplate <---------------------+\n     _parseTemplateContent              |\n       _parseTemplateNode  <------------|--+\n         _parseTemplateNestedTemplate --+  |\n         _parseTemplateChildNodes ---------+\n         _parseTemplateNodeAttributes\n           _parseTemplateNodeAttribute\n\n```\n\nThese methods may be overridden to add custom metadata about templates\nto either `templateInfo` or `nodeInfo`.\n\nNote that this method may be destructive to the template, in that\ne.g. event annotations may be removed after being noted in the\ntemplate metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 195,
                  "column": 6
                },
                "end": {
                  "line": 206,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to parse"
                },
                {
                  "name": "outerTemplateInfo",
                  "type": "Object=",
                  "description": "Template metadata from the outer\n  template, for parsing nested templates"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Parsed template metadata"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateContent",
              "description": "Overrides `PropertyAccessors` to add map of dynamic functions on\ntemplate info, for consumption by `PropertyEffects` template binding\ncode. This map determines which method templates should have accessors\ncreated for them.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 775,
                  "column": 6
                },
                "end": {
                  "line": 778,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template"
                },
                {
                  "name": "templateInfo"
                },
                {
                  "name": "nodeInfo"
                }
              ]
            },
            {
              "name": "_parseTemplateNode",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from `TextNode`'s' `textContent`.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2309,
                  "column": 6
                },
                "end": {
                  "line": 2323,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateChildNodes",
              "description": "Parses template child nodes for the given root node.\n\nThis method also wraps whitelisted legacy template extensions\n(`is=\"dom-if\"` and `is=\"dom-repeat\"`) with their equivalent element\nwrappers, collapses text nodes, and strips whitespace from the template\nif the `templateInfo.stripWhitespace` setting was provided.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 254,
                  "column": 6
                },
                "end": {
                  "line": 288,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "root",
                  "type": "Node",
                  "description": "Root node whose `childNodes` will be parsed"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNestedTemplate",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nbinding the properties that a nested template depends on to the template\nas `_host_<property>`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2392,
                  "column": 6
                },
                "end": {
                  "line": 2402,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateNodeAttributes",
              "description": "Parses template node attributes and adds node metadata to `nodeInfo`\nfor nodes of interest.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 326,
                  "column": 6
                },
                "end": {
                  "line": 335,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNodeAttribute",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from attributes.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2341,
                  "column": 6
                },
                "end": {
                  "line": 2377,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                },
                {
                  "name": "name"
                },
                {
                  "name": "value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_contentForTemplate",
              "description": "Returns the `content` document fragment for a given template.\n\nFor nested templates, Polymer performs an optimization to cache nested\ntemplate content to avoid the cost of cloning deeply nested templates.\nThis method retrieves the cached content for a given template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "template-stamp.html",
                "start": {
                  "line": 380,
                  "column": 6
                },
                "end": {
                  "line": 383,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to retrieve `content` for"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Content fragment"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "createPropertiesForAttributes",
              "description": "Generates property accessors for all attributes in the standard\nstatic `observedAttributes` array.\n\nAttribute names are mapped to property names using the `dash-case` to\n`camelCase` convention",
              "privacy": "public",
              "sourceRange": {
                "file": "property-accessors.html",
                "start": {
                  "line": 110,
                  "column": 6
                },
                "end": {
                  "line": 115,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "addPropertyEffect",
              "description": "Ensures an accessor exists for the specified property, and adds\nto a list of \"property effects\" that will run when the accessor for\nthe specified property is set.  Effects are grouped by \"type\", which\nroughly corresponds to a phase in effect processing.  The effect\nmetadata should be in the following form:\n\n  {\n    fn: effectFunction, // Reference to function to call to perform effect\n    info: { ... }       // Effect metadata passed to function\n    trigger: {          // Optional triggering metadata; if not provided\n      name: string      // the property is treated as a wildcard\n      structured: boolean\n      wildcard: boolean\n    }\n  }\n\nEffects are called from `_propertiesChanged` in the following order by\ntype:\n\n1. COMPUTE\n2. PROPAGATE\n3. REFLECT\n4. OBSERVE\n5. NOTIFY\n\nEffect functions are called with the following signature:\n\n  effectFunction(inst, path, props, oldProps, info, hasPaths)",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2040,
                  "column": 6
                },
                "end": {
                  "line": 2042,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createPropertyObserver",
              "description": "Creates a single-property observer for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2053,
                  "column": 6
                },
                "end": {
                  "line": 2055,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createMethodObserver",
              "description": "Creates a multi-property \"method observer\" based on the provided\nexpression, which should be a string in the form of a normal Javascript\nfunction signature: `'methodName(arg1, [..., argn])'`.  Each argument\nshould correspond to a property or path in the context of this\nprototype (or instance), or may be a literal string or number.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2069,
                  "column": 6
                },
                "end": {
                  "line": 2071,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createNotifyingProperty",
              "description": "Causes the setter for the given property to dispatch `<property>-changed`\nevents to notify of changes to the property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2080,
                  "column": 6
                },
                "end": {
                  "line": 2082,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReadOnlyProperty",
              "description": "Creates a read-only accessor for the given property.\n\nTo set the property, use the protected `_setProperty` API.\nTo create a custom protected setter (e.g. `_setMyProp()` for\nproperty `myProp`), pass `true` for `protectedSetter`.\n\nNote, if the property will have other property effects, this method\nshould be called first, before adding other effects.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2099,
                  "column": 6
                },
                "end": {
                  "line": 2101,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReflectedProperty",
              "description": "Causes the setter for the given property to reflect the property value\nto a (dash-cased) attribute of the same name.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2110,
                  "column": 6
                },
                "end": {
                  "line": 2112,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createComputedProperty",
              "description": "Creates a computed property whose value is set to the result of the\nmethod described by the given `expression` each time one or more\narguments to the method changes.  The expression should be a string\nin the form of a normal Javascript function signature:\n`'methodName(arg1, [..., argn])'`",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2127,
                  "column": 6
                },
                "end": {
                  "line": 2129,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating whether\n  method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "bindTemplate",
              "description": "Parses the provided template to ensure binding effects are created\nfor them, and then ensures property accessors are created for any\ndependent properties in the template.  Binding effects for bound\ntemplates are stored in a linked list on the instance so that\ntemplates can be efficiently stamped and unstamped.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2143,
                  "column": 6
                },
                "end": {
                  "line": 2145,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addTemplatePropertyEffect",
              "description": "Adds a property effect to the given template metadata, which is run\nat the \"propagate\" stage of `_propertiesChanged` when the template\nhas been bound to the element via `_bindTemplate`.\n\nThe `effect` object should match the format in `_addPropertyEffect`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2208,
                  "column": 6
                },
                "end": {
                  "line": 2214,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata to add effect to"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseBindings",
              "description": "Called to parse text in a template (either attribute values or\ntextContent) into binding metadata.\n\nAny overrides of this method should return an array of binding part\nmetadata  representing one or more bindings found in the provided text\nand any \"literal\" text in between.  Any non-literal parts will be passed\nto `_evaluateBinding` when any dependencies change.  The only required\nfields of each \"part\" in the returned array are as follows:\n\n- `dependencies` - Array containing trigger metadata for each property\n  that should trigger the binding to update\n- `literal` - String containing text if the part represents a literal;\n  in this case no `dependencies` are needed\n\nAdditional metadata for use by `_evaluateBinding` may be provided in\neach part object as needed.\n\nThe default implementation handles the following types of bindings\n(one or more may be intermixed with literal strings):\n- Property binding: `[[prop]]`\n- Path binding: `[[object.prop]]`\n- Negated property or path bindings: `[[!prop]]` or `[[!object.prop]]`\n- Two-way property or path bindings (supports negation):\n  `{{prop}}`, `{{object.prop}}`, `{{!prop}}` or `{{!object.prop}}`\n- Inline computed method (supports negation):\n  `[[compute(a, 'literal', b)]]`, `[[!compute(a, 'literal', b)]]`",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2437,
                  "column": 6
                },
                "end": {
                  "line": 2500,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "text",
                  "type": "string",
                  "description": "Text to parse from attribute or textContent"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Current template metadata"
                }
              ],
              "return": {
                "type": "Array.<Object>",
                "desc": "Array of binding part metadata"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_evaluateBinding",
              "description": "Called to evaluate a previously parsed binding part based on a set of\none or more changed dependencies.",
              "privacy": "protected",
              "sourceRange": {
                "file": "property-effects.html",
                "start": {
                  "line": 2516,
                  "column": 6
                },
                "end": {
                  "line": 2533,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "inst",
                  "type": "HTMLElement",
                  "description": "Element that should be used as scope for\n  binding dependencies"
                },
                {
                  "name": "part",
                  "type": "Object",
                  "description": "Binding part metadata"
                },
                {
                  "name": "path",
                  "type": "string",
                  "description": "Property/path that triggered this effect"
                },
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of current property changes"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value the binding part evaluated to"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "finalize",
              "description": "Called automatically when the first element instance is created to\nensure that class finalization work has been completed.\nMay be called by users to eagerly perform class finalization work\nprior to the creation of the first element instance.\n\nClass finalization work generally includes meta-programming such as\ncreating property accessors and any property effect metadata needed for\nthe features used.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 493,
                  "column": 6
                },
                "end": {
                  "line": 497,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 116,
              "column": 2
            },
            "end": {
              "line": 783,
              "column": 4
            }
          },
          "privacy": "public",
          "name": "Polymer.ElementMixin",
          "attributes": [],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": [],
          "mixins": [
            "Polymer.PropertyEffects"
          ]
        },
        {
          "description": "Element class mixin that provides API for adding Polymer's cross-platform\ngesture events to nodes.\n\nThe API is designed to be compatible with override points implemented\nin `Polymer.TemplateStamp` such that declarative event listeners in\ntemplates will support gesture events when this mixin is applied along with\n`Polymer.TemplateStamp`.",
          "summary": "Element class mixin that provides API for adding Polymer's cross-platform\ngesture events to nodes",
          "path": "lib/mixins/gesture-event-listeners.html",
          "properties": [],
          "methods": [
            {
              "name": "_addEventListenerToNode",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 42,
                  "column": 6
                },
                "end": {
                  "line": 46,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node"
                },
                {
                  "name": "eventName"
                },
                {
                  "name": "handler"
                }
              ]
            },
            {
              "name": "_removeEventListenerFromNode",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 48,
                  "column": 6
                },
                "end": {
                  "line": 52,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node"
                },
                {
                  "name": "eventName"
                },
                {
                  "name": "handler"
                }
              ]
            }
          ],
          "staticMethods": [],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 34,
              "column": 2
            },
            "end": {
              "line": 58,
              "column": 4
            }
          },
          "privacy": "public",
          "name": "Polymer.GestureEventListeners",
          "attributes": [],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": []
        },
        {
          "description": "Element class mixin that provides Polymer's \"legacy\" API intended to be\nbackward-compatible to the greatest extent possible with the API\nfound on the Polymer 1.x `Polymer.Base` prototype applied to all elements\ndefined using the `Polymer({...})` function.",
          "summary": "",
          "path": "lib/legacy/legacy-element-mixin.html",
          "properties": [],
          "methods": [
            {
              "name": "_stampTemplate",
              "description": "Stamps the provided template and performs instance-time setup for\nPolymer template features, including data bindings, declarative event\nlisteners, and the `this.$` map of `id`'s to nodes.  A document fragment\nis returned containing the stamped DOM, ready for insertion into the\nDOM.\n\nThis method may be called more than once; however note that due to\n`shadycss` polyfill limitations, only styles from templates prepared\nusing `ShadyCSS.prepareTemplate` will be correctly polyfilled (scoped\nto the shadow root and support CSS custom properties), and note that\n`ShadyCSS.prepareTemplate` may only be called once per element. As such,\nany styles required by in runtime-stamped templates must be included\nin the main element template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2235,
                  "column": 6
                },
                "end": {
                  "line": 2260,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to stamp"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Cloned template content"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addMethodEventListenerToNode",
              "description": "Adds an event listener by method name for the event provided.\n\nThis method generates a handler function that looks up the method\nname at handling time.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 443,
                  "column": 6
                },
                "end": {
                  "line": 448,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to add listener on"
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of method"
                },
                {
                  "name": "context",
                  "type": "*=",
                  "description": "Context the method will be called on (defaults\n  to `node`)"
                }
              ],
              "return": {
                "type": "Function",
                "desc": "Generated handler function"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_addEventListenerToNode",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/gesture-event-listeners.html",
                "start": {
                  "line": 42,
                  "column": 6
                },
                "end": {
                  "line": 46,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node"
                },
                {
                  "name": "eventName"
                },
                {
                  "name": "handler"
                }
              ],
              "inheritedFrom": "Polymer.GestureEventListeners"
            },
            {
              "name": "_removeEventListenerFromNode",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/gesture-event-listeners.html",
                "start": {
                  "line": 48,
                  "column": 6
                },
                "end": {
                  "line": 52,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node"
                },
                {
                  "name": "eventName"
                },
                {
                  "name": "handler"
                }
              ],
              "inheritedFrom": "Polymer.GestureEventListeners"
            },
            {
              "name": "attributeChangedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 103,
                  "column": 6
                },
                "end": {
                  "line": 108,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name"
                },
                {
                  "name": "old"
                },
                {
                  "name": "value"
                }
              ]
            },
            {
              "name": "_initializeProperties",
              "description": "Overrides the default `Polymer.PropertyEffects` implementation to\nadd support for class initialization via the `_registered` callback.\nThis is called only when the first instance of the element is created.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 123,
                  "column": 6
                },
                "end": {
                  "line": 130,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_initializeProtoProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to provide a\nmore efficient implementation of initializing properties from\nthe prototype on the instance.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1107,
                  "column": 6
                },
                "end": {
                  "line": 1111,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_initializeInstanceProperties",
              "description": "Overrides `Polymer.PropertyAccessors` implementation to avoid setting\n`_setProperty`'s `shouldNotify: true`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1119,
                  "column": 6
                },
                "end": {
                  "line": 1128,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_ensureAttribute",
              "description": "Ensures the element has the given attribute. If it does not,\nassigns the given value to the attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 204,
                  "column": 6
                },
                "end": {
                  "line": 208,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to ensure is set."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_attributeToProperty",
              "description": "Deserializes an attribute to its associated property.\n\nThis method calls the `_deserializeValue` method to convert the string to\na typed value.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 220,
                  "column": 6
                },
                "end": {
                  "line": 226,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Name of attribute to deserialize."
                },
                {
                  "name": "value",
                  "type": "string",
                  "description": "of the attribute."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "type to deserialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_propertyToAttribute",
              "description": "Serializes a property to its associated attribute.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 235,
                  "column": 6
                },
                "end": {
                  "line": 241,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name to reflect."
                },
                {
                  "name": "attribute",
                  "type": "string=",
                  "description": "Attribute name to reflect."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Property value to refect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_valueToNodeAttribute",
              "description": "Sets a typed value to an HTML attribute on a node.\n\nThis method calls the `_serializeValue` method to convert the typed\nvalue to a string.  If the `_serializeValue` method returns `undefined`,\nthe attribute will be removed (this is the default for boolean\ntype `false`).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 255,
                  "column": 6
                },
                "end": {
                  "line": 262,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to set attribute to."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to serialize."
                },
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Attribute name to serialize to."
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_serializeValue",
              "description": "Converts a typed JavaScript value to a string.\n\nThis method is called by Polymer when setting JS property values to\nHTML attributes.  Users may override this method on Polymer element\nprototypes to provide serialization for custom types.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 274,
                  "column": 6
                },
                "end": {
                  "line": 294,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Property value to serialize."
                }
              ],
              "return": {
                "type": "(string|undefined)",
                "desc": "String serialized from the provided property value."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_deserializeValue",
              "description": "Converts a string to a typed JavaScript value.\n\nThis method is called by Polymer when reading HTML attribute values to\nJS properties.  Users may override this method on Polymer element\nprototypes to provide deserialization for custom `type`s.  Note,\nthe `type` argument is the value of the `type` field provided in the\n`properties` configuration object for a given property, and is\nby convention the constructor for the type to deserialize.\n\nNote: The return value of `undefined` is used as a sentinel value to\nindicate the attribute should be removed.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 313,
                  "column": 6
                },
                "end": {
                  "line": 355,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "string",
                  "description": "Attribute value to deserialize."
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "Type to deserialize the string to."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Typed value deserialized from the provided string."
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_createPropertyAccessor",
              "description": "Creates a setter/getter pair for the named property with its own\nlocal storage.  The getter returns the value in the local storage,\nand the setter calls `_setProperty`, which updates the local storage\nfor the property and enqueues a `_propertiesChanged` callback.\n\nThis method may be called on a prototype or an instance.  Calling\nthis method may overwrite a property value that already exists on\nthe prototype/instance by creating the accessor.  When calling on\na prototype, any overwritten values are saved in `__dataProto`,\nand it is up to the subclasser to decide how/when to set those\nproperties back into the accessor.  When calling on an instance,\nthe overwritten value is set via `_setPendingProperty`, and the\nuser should call `_invalidateProperties` or `_flushProperties`\nfor the values to take effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 379,
                  "column": 6
                },
                "end": {
                  "line": 395,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of the property"
                },
                {
                  "name": "readOnly",
                  "type": "boolean=",
                  "description": "When true, no setter is created; the\n  protected `_setProperty` function must be used to set the property"
                }
              ],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_hasAccessor",
              "description": "Returns true if this library created an accessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 403,
                  "column": 6
                },
                "end": {
                  "line": 405,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if an accessor was created"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_setProperty",
              "description": "Overrides base implementation to ensure all accessors set `shouldNotify`\nto true, for per-property notification tracking.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1389,
                  "column": 6
                },
                "end": {
                  "line": 1393,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingProperty",
              "description": "Overrides the `PropertyAccessors` implementation to introduce special\ndirty check logic depending on the property & value being set:\n\n1. Any value set to a path (e.g. 'obj.prop': 42 or 'obj.prop': {...})\n   Stored in `__dataTemp`, dirty checked against `__dataTemp`\n2. Object set to simple property (e.g. 'prop': {...})\n   Stored in `__dataTemp` and `__data`, dirty checked against\n   `__dataTemp` by default implementation of `_shouldPropertyChange`\n3. Primitive value set to simple property (e.g. 'prop': 42)\n   Stored in `__data`, dirty checked against `__data`\n\nThe dirty-check is important to prevent cycles due to two-way\nnotification, but paths and objects are only dirty checked against any\nprevious value set during this turn via a \"temporary cache\" that is\ncleared when the last `_propertiesChaged` exits. This is so:\na. any cached array paths (e.g. 'array.3.prop') may be invalidated\n   due to array mutations like shift/unshift/splice; this is fine\n   since path changes are dirty-checked at user entry points like `set`\nb. dirty-checking for objects only lasts one turn to allow the user\n   to mutate the object in-place and re-set it with the same identity\n   and have all sub-properties re-propagated in a subsequent turn.\n\nThe temp cache is not necessarily sufficient to prevent invalid array\npaths, since a splice can happen during the same turn (with pathological\nuser code); we could introduce a \"fixup\" for temporarily cached array\npaths if needed: https://github.com/Polymer/polymer/issues/4227",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1353,
                  "column": 6
                },
                "end": {
                  "line": 1381,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property"
                },
                {
                  "name": "value"
                },
                {
                  "name": "shouldNotify"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_isPropertyPending",
              "description": "Returns true if the specified property has a pending change.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 456,
                  "column": 6
                },
                "end": {
                  "line": 458,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if property has a pending change"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_invalidateProperties",
              "description": "Overrides `PropertyAccessor`'s default async queuing of\n`_propertiesChanged`: if `__dataReady` is false (has not yet been\nmanually flushed), the function no-ops; otherwise flushes\n`_propertiesChanged` synchronously.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1403,
                  "column": 6
                },
                "end": {
                  "line": 1407,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enableProperties",
              "description": "Call to enable property accessor processing. Before this method is\ncalled accessor values will be set but side effects are\nqueued. When called, any pending side effects occur immediately.\nFor elements, generally `connectedCallback` is a normal spot to do so.\nIt is safe to call this method multiple times as it only turns on\nproperty accessors once.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 486,
                  "column": 6
                },
                "end": {
                  "line": 495,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_flushProperties",
              "description": "Calls the `_propertiesChanged` callback with the current set of\npending changes (and old values recorded when pending changes were\nset), and resets the pending set of changes. Generally, this method\nshould not be called in user code.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 506,
                  "column": 6
                },
                "end": {
                  "line": 514,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "ready",
              "description": "Overrides the default `Polymer.PropertyEffects` implementation to\nadd support for installing `hostAttributes` and `listeners`.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 147,
                  "column": 6
                },
                "end": {
                  "line": 151,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_propertiesChanged",
              "description": "Implements `PropertyAccessors`'s properties changed callback.\n\nRuns each class of effects for the batch of changed properties in\na specific order (compute, propagate, reflect, observe, notify).",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1542,
                  "column": 6
                },
                "end": {
                  "line": 1575,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "currentProps"
                },
                {
                  "name": "changedProps"
                },
                {
                  "name": "oldProps"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_shouldPropertyChange",
              "description": "Method called to determine whether a property value should be\nconsidered as a change and cause the `_propertiesChanged` callback\nto be enqueued.\n\nThe default implementation returns `true` for primitive types if a\nstrict equality check fails, and returns `true` for all Object/Arrays.\nThe method always returns false for `NaN`.\n\nOverride this method to e.g. provide stricter checking for\nObjects/Arrays when using immutable patterns.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 569,
                  "column": 6
                },
                "end": {
                  "line": 576,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change\n  and enqueue a `_proeprtiesChanged` callback"
              },
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "_addPropertyEffect",
              "description": "Equivalent to static `addPropertyEffect` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1142,
                  "column": 6
                },
                "end": {
                  "line": 1150,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removePropertyEffect",
              "description": "Removes the given property effect.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1159,
                  "column": 6
                },
                "end": {
                  "line": 1165,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property the effect was associated with"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object to remove"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasPropertyEffect",
              "description": "Returns whether the current prototype/instance has a property effect\nof a certain type.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1176,
                  "column": 6
                },
                "end": {
                  "line": 1179,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "type",
                  "type": "string=",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReadOnlyEffect",
              "description": "Returns whether the current prototype/instance has a \"read only\"\naccessor for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1189,
                  "column": 6
                },
                "end": {
                  "line": 1191,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasNotifyEffect",
              "description": "Returns whether the current prototype/instance has a \"notify\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1201,
                  "column": 6
                },
                "end": {
                  "line": 1203,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasReflectEffect",
              "description": "Returns whether the current prototype/instance has a \"reflect to attribute\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1213,
                  "column": 6
                },
                "end": {
                  "line": 1215,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_hasComputedEffect",
              "description": "Returns whether the current prototype/instance has a \"computed\"\nproperty effect for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1225,
                  "column": 6
                },
                "end": {
                  "line": 1227,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "True if the prototype/instance has an effect of this type"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setPendingPropertyOrPath",
              "description": "Sets a pending property or path.  If the root property of the path in\nquestion had no accessor, the path is set, otherwise it is enqueued\nvia `_setPendingProperty`.\n\nThis function isolates relatively expensive functionality necessary\nfor the public API (`set`, `setProperties`, `notifyPath`, and property\nchange listeners via {{...}} bindings), such that it is only done\nwhen paths enter the system, and not at every propagation step.  It\nalso sets a `__dataHasPaths` flag on the instance which is used to\nfast-path slower path-matching code in the property effects host paths.\n\n`path` can be a path string or array of path parts as accepted by the\npublic API.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1259,
                  "column": 6
                },
                "end": {
                  "line": 1291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(number|string)>)",
                  "description": "Path to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set"
                },
                {
                  "name": "shouldNotify",
                  "type": "boolean=",
                  "description": "Set to true if this change should\n cause a property notification event dispatch"
                },
                {
                  "name": "isPathNotification",
                  "type": "boolean=",
                  "description": "If the path being set is a path\n  notification of an already changed value, as opposed to a request\n  to set and notify the change.  In the latter `false` case, a dirty\n  check is performed and then the value is set to the path before\n  enqueuing the pending property change."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Returns true if the property/path was enqueued in\n  the pending changes bag."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_setUnmanagedPropertyToNode",
              "description": "Applies a value to a non-Polymer element/node's property.\n\nThe implementation makes a best-effort at binding interop:\nSome native element properties have side-effects when\nre-setting the same value (e.g. setting `<input>.value` resets the\ncursor position), so we do a dirty-check before setting the value.\nHowever, for better interop with non-Polymer custom elements that\naccept objects, we explicitly re-set object changes coming from the\nPolymer world (which may include deep object changes without the\ntop reference changing), erring on the side of providing more\ninformation.\n\nUsers may override this method to provide alternate approaches.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1313,
                  "column": 6
                },
                "end": {
                  "line": 1321,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "The node to set a property on"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "The property to set"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "The value to set"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_enqueueClient",
              "description": "Enqueues the given client on a list of pending clients, whose\npending property changes can later be flushed via a call to\n`_flushClients`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1417,
                  "column": 6
                },
                "end": {
                  "line": 1422,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "client",
                  "type": "Object",
                  "description": "PropertyEffects client to enqueue"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_flushClients",
              "description": "Flushes any clients previously enqueued via `_enqueueClient`, causing\ntheir `_flushProperties` method to run.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1430,
                  "column": 6
                },
                "end": {
                  "line": 1441,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "__enableOrFlushClients",
              "description": "(c) the stamped dom enables.",
              "privacy": "private",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1455,
                  "column": 6
                },
                "end": {
                  "line": 1468,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_readyClients",
              "description": "Implements `PropertyEffects`'s `_readyClients` call. Attaches\nelement dom by calling `_attachDom` with the dom stamped from the\nelement's template via `_stampTemplate`. Note that this allows\nclient dom to be attached to the element prior to any observers\nrunning.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 666,
                  "column": 6
                },
                "end": {
                  "line": 675,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "setProperties",
              "description": "Sets a bag of property changes to this instance, and\nsynchronously processes all effects of the properties as a batch.\n\nProperty names must be simple properties, not paths.  Batched\npath propagation is not supported.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1495,
                  "column": 6
                },
                "end": {
                  "line": 1506,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of one or more key-value pairs whose key is\n  a property and value is the new value to set for that property."
                },
                {
                  "name": "setReadOnly",
                  "type": "boolean=",
                  "description": "When true, any private values set in\n  `props` will be set. By default, `setProperties` will not set\n  `readOnly: true` root properties."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_propagatePropertyChanges",
              "description": "Called to propagate any property changes to stamped template nodes\nmanaged by this element.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1586,
                  "column": 6
                },
                "end": {
                  "line": 1596,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "changedProps",
                  "type": "Object",
                  "description": "Bag of changed properties"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "linkPaths",
              "description": "Aliases one data path as another, such that path notifications from one\nare routed to the other.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1606,
                  "column": 6
                },
                "end": {
                  "line": 1611,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "to",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to link."
                },
                {
                  "name": "from",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Source path to link."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unlinkPaths",
              "description": "Removes a data path alias previously established with `_linkPaths`.\n\nNote, the path to unlink should be the target (`to`) used when\nlinking the paths.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1622,
                  "column": 6
                },
                "end": {
                  "line": 1627,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Target path to unlink."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifySplices",
              "description": "Notify that an array has changed.\n\nExample:\n\n    this.items = [ {name: 'Jim'}, {name: 'Todd'}, {name: 'Bill'} ];\n    ...\n    this.items.splice(1, 1, {name: 'Sam'});\n    this.items.push({name: 'Bob'});\n    this.notifySplices('items', [\n      { index: 1, removed: [{name: 'Todd'}], addedCount: 1, obect: this.items, type: 'splice' },\n      { index: 3, removed: [], addedCount: 1, object: this.items, type: 'splice'}\n    ]);",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1658,
                  "column": 6
                },
                "end": {
                  "line": 1662,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "splices",
                  "type": "Array",
                  "description": "Array of splice records indicating ordered\n  changes that occurred to the array. Each record should have the\n  following fields:\n   * index: index at which the change occurred\n   * removed: array of items that were removed from this index\n   * addedCount: number of new items added at this index\n   * object: a reference to the array in question\n   * type: the string literal 'splice'\n\n  Note that splice records _must_ be normalized such that they are\n  reported in index order (raw results from `Object.observe` are not\n  ordered and must be normalized/merged before notifying)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "get",
              "description": "Convenience method for reading a value from a path.\n\nNote, if any part in the path is undefined, this method returns\n`undefined` (this method does not throw when dereferencing undefined\npaths).",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1683,
                  "column": 6
                },
                "end": {
                  "line": 1685,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to read.  The path may be specified as a string (e.g. `foo.bar.baz`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `users.12.name` or `['users', 12, 'name']`)."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value at the path, or `undefined` if any part of the path\n  is undefined."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "set",
              "description": "Convenience method for setting a value to a path and notifying any\nelements bound to the same path.\n\nNote, if any part in the path except for the last is undefined,\nthis method does nothing (this method does not throw when\ndereferencing undefined paths).",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1707,
                  "column": 6
                },
                "end": {
                  "line": 1717,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "(string|!Array.<(string|number)>)",
                  "description": "Path to the value\n  to write.  The path may be specified as a string (e.g. `'foo.bar.baz'`)\n  or an array of path parts (e.g. `['foo.bar', 'baz']`).  Note that\n  bracketed expressions are not supported; string-based path parts\n  *must* be separated by dots.  Note that when dereferencing array\n  indices, the index may be used as a dotted part directly\n  (e.g. `'users.12.name'` or `['users', 12, 'name']`)."
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to set at the specified path."
                },
                {
                  "name": "root",
                  "type": "Object=",
                  "description": "Root object from which the path is evaluated.\n  When specified, no notification will occur."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "push",
              "description": "Adds items onto the end of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1733,
                  "column": 6
                },
                "end": {
                  "line": 1742,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "pop",
              "description": "Removes an item from the end of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1757,
                  "column": 6
                },
                "end": {
                  "line": 1766,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "splice",
              "description": "Starting from the start index specified, removes 0 or more items\nfrom the array and inserts 0 or more new items in their place.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.splice`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1785,
                  "column": 6
                },
                "end": {
                  "line": 1802,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "start",
                  "type": "number",
                  "description": "Index from which to start removing/inserting."
                },
                {
                  "name": "deleteCount",
                  "type": "number",
                  "description": "Number of items to remove."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "Array",
                "desc": "Array of removed items."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "shift",
              "description": "Removes an item from the beginning of array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.pop`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1817,
                  "column": 6
                },
                "end": {
                  "line": 1826,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                }
              ],
              "return": {
                "type": "*",
                "desc": "Item that was removed."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "unshift",
              "description": "Adds items onto the beginning of the array at the path specified.\n\nThe arguments after `path` and return value match that of\n`Array.prototype.push`.\n\nThis method notifies other paths to the same array that a\nsplice occurred to the array.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1842,
                  "column": 6
                },
                "end": {
                  "line": 1850,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path to array."
                },
                {
                  "name": "...items"
                }
              ],
              "return": {
                "type": "number",
                "desc": "New length of the array."
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "notifyPath",
              "description": "Notify that a path has changed.\n\nExample:\n\n    this.item.user.name = 'Bob';\n    this.notifyPath('item.user.name');",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1864,
                  "column": 6
                },
                "end": {
                  "line": 1881,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "path",
                  "type": "string",
                  "description": "Path that should be notified."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Value at the path (optional)."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReadOnlyProperty",
              "description": "Equivalent to static `createReadOnlyProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1893,
                  "column": 6
                },
                "end": {
                  "line": 1900,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createPropertyObserver",
              "description": "Equivalent to static `createPropertyObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1913,
                  "column": 6
                },
                "end": {
                  "line": 1923,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createMethodObserver",
              "description": "Equivalent to static `createMethodObserver` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1935,
                  "column": 6
                },
                "end": {
                  "line": 1941,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createNotifyingProperty",
              "description": "Equivalent to static `createNotifyingProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1951,
                  "column": 6
                },
                "end": {
                  "line": 1959,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createReflectedProperty",
              "description": "Equivalent to static `createReflectedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1969,
                  "column": 6
                },
                "end": {
                  "line": 1982,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_createComputedProperty",
              "description": "Equivalent to static `createComputedProperty` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 1995,
                  "column": 6
                },
                "end": {
                  "line": 2001,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_bindTemplate",
              "description": "Equivalent to static `bindTemplate` API but can be called on\nan instance to add effects at runtime.  See that method for\nfull API docs.\n\nThis method may be called on the prototype (for prototypical template\nbinding, to avoid creating accessors every instance) once per prototype,\nand will be called with `runtimeBinding: true` by `_stampTemplate` to\ncreate and link an instance of the template metadata associated with a\nparticular stamping.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2171,
                  "column": 6
                },
                "end": {
                  "line": 2194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                },
                {
                  "name": "instanceBinding",
                  "type": "boolean=",
                  "description": "When false (default), performs\n  \"prototypical\" binding of the template and overwrites any previously\n  bound template for the class. When true (as passed from\n  `_stampTemplate`), the template info is instanced and linked into\n  the list of bound templates."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object; for `runtimeBinding`,\n  this is an instance of the prototypical template info"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_removeBoundDom",
              "description": "Removes and unbinds the nodes previously contained in the provided\nDocumentFragment returned from `_stampTemplate`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2270,
                  "column": 6
                },
                "end": {
                  "line": 2291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "DocumentFragment",
                  "description": "DocumentFragment previously returned\n  from `_stampTemplate` associated with the nodes to be removed"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "connectedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 79,
                  "column": 6
                },
                "end": {
                  "line": 83,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "disconnectedCallback",
              "description": "",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 91,
                  "column": 6
                },
                "end": {
                  "line": 95,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_attachDom",
              "description": "Attaches an element's stamped dom to itself. By default,\nthis method creates a `shadowRoot` and adds the dom to it.\nHowever, this method may be overridden to allow an element\nto put its dom in another location.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 689,
                  "column": 6
                },
                "end": {
                  "line": 704,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "dom",
                  "type": "NodeList",
                  "description": "to attach to the element."
                }
              ],
              "return": {
                "type": "Node",
                "desc": "node to which the dom has been attached."
              },
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "updateStyles",
              "description": "When using the ShadyCSS scoping and custom property shim, causes all\nshimmed styles in this element (and its subtree) to be updated\nbased on current custom property values.\n\nThe optional parameter overrides inline custom property styles with an\nobject of properties where the keys are CSS properties, and the values\nare strings.\n\nExample: `this.updateStyles({'--color': 'blue'})`\n\nThese properties are retained unless a value of `null` is set.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 743,
                  "column": 6
                },
                "end": {
                  "line": 747,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "properties",
                  "type": "Object=",
                  "description": "Bag of custom property key/values to\n  apply to this element."
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "resolveUrl",
              "description": "Rewrites a given URL relative to a base URL. The base URL defaults to\nthe original location of the document containing the `dom-module` for\nthis element. This method will return the same URL before and after\nbundling.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 760,
                  "column": 6
                },
                "end": {
                  "line": 765,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "url",
                  "type": "string",
                  "description": "URL to resolve."
                },
                {
                  "name": "base",
                  "type": "string=",
                  "description": "Optional base URL to resolve against, defaults\nto the element's `importPath`"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Rewritten URL relative to base"
              },
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "created",
              "description": "Legacy callback called during the `constructor`, for overriding\nby the user.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 77,
                  "column": 6
                },
                "end": {
                  "line": 77,
                  "column": 18
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "attached",
              "description": "Legacy callback called during `connectedCallback`, for overriding\nby the user.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 89,
                  "column": 6
                },
                "end": {
                  "line": 89,
                  "column": 19
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "detached",
              "description": "Legacy callback called during `disconnectedCallback`, for overriding\nby the user.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 101,
                  "column": 6
                },
                "end": {
                  "line": 101,
                  "column": 19
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "attributeChanged",
              "description": "Legacy callback called during `attributeChangedChallback`, for overriding\nby the user.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 114,
                  "column": 6
                },
                "end": {
                  "line": 114,
                  "column": 27
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_registered",
              "description": "Called automatically when an element is initializing.\nUsers may override this method to perform class registration time\nwork. The implementation should ensure the work is performed\nonly once for the class.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 139,
                  "column": 6
                },
                "end": {
                  "line": 139,
                  "column": 22
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_ensureAttributes",
              "description": "Ensures an element has required attributes. Called when the element\nis being readied via `ready`. Users should override to set the\nelement's required attributes. The implementation should be sure\nto check and not override existing attributes added by\nthe user of the element. Typically, setting attributes should be left\nto the element user and not done here; reasonable exceptions include\nsetting aria roles and focusability.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 163,
                  "column": 6
                },
                "end": {
                  "line": 163,
                  "column": 28
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_applyListeners",
              "description": "Adds element event listeners. Called when the element\nis being readied via `ready`. Users should override to\nadd any required element event listeners.\nIn performance critical elements, the work done here should be kept\nto a minimum since it is done before the element is rendered. In\nthese elements, consider adding listeners asychronously so as not to\nblock render.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 175,
                  "column": 6
                },
                "end": {
                  "line": 175,
                  "column": 26
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "serialize",
              "description": "Converts a typed JavaScript value to a string.\n\nNote this method is provided as backward-compatible legacy API\nonly.  It is not directly called by any Polymer features. To customize\nhow properties are serialized to attributes for attribute bindings and\n`reflectToAttribute: true` properties as well as this method, override\nthe `_serializeValue` method provided by `Polymer.PropertyAccessors`.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 189,
                  "column": 6
                },
                "end": {
                  "line": 191,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to deserialize"
                }
              ],
              "return": {
                "type": "string",
                "desc": "Serialized value"
              }
            },
            {
              "name": "deserialize",
              "description": "Converts a string to a typed JavaScript value.\n\nNote this method is provided as backward-compatible legacy API\nonly.  It is not directly called by any Polymer features.  To customize\nhow attributes are deserialized to properties for in\n`attributeChangedCallback`, override `_deserializeValue` method\nprovided by `Polymer.PropertyAccessors`.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 206,
                  "column": 6
                },
                "end": {
                  "line": 208,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "string",
                  "description": "String to deserialize"
                },
                {
                  "name": "type",
                  "type": "*",
                  "description": "Type to deserialize the string to"
                }
              ],
              "return": {
                "type": "*",
                "desc": "Returns the deserialized value in the `type` given."
              }
            },
            {
              "name": "reflectPropertyToAttribute",
              "description": "Serializes a property to its associated attribute.\n\nNote this method is provided as backward-compatible legacy API\nonly.  It is not directly called by any Polymer features.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 220,
                  "column": 6
                },
                "end": {
                  "line": 222,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name to reflect."
                },
                {
                  "name": "attribute",
                  "type": "string=",
                  "description": "Attribute name to reflect."
                },
                {
                  "name": "value",
                  "type": "*=",
                  "description": "Property value to refect."
                }
              ]
            },
            {
              "name": "serializeValueToAttribute",
              "description": "Sets a typed value to an HTML attribute on a node.\n\nNote this method is provided as backward-compatible legacy API\nonly.  It is not directly called by any Polymer features.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 234,
                  "column": 6
                },
                "end": {
                  "line": 236,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "value",
                  "type": "*",
                  "description": "Value to serialize."
                },
                {
                  "name": "attribute",
                  "type": "string",
                  "description": "Attribute name to serialize to."
                },
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to set attribute to."
                }
              ]
            },
            {
              "name": "extend",
              "description": "Copies own properties (including accessor descriptors) from a source\nobject to a target object.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 246,
                  "column": 6
                },
                "end": {
                  "line": 258,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "prototype",
                  "type": "Object",
                  "description": "Target object to copy properties to."
                },
                {
                  "name": "api",
                  "type": "Object",
                  "description": "Source object to copy properties from."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "prototype object that was passed as first argument."
              }
            },
            {
              "name": "mixin",
              "description": "Copies props from a source object to a target object.\n\nNote, this method uses a simple `for...in` strategy for enumerating\nproperties.  To ensure only `ownProperties` are copied from source\nto target and that accessor implementations are copied, use `extend`.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 271,
                  "column": 6
                },
                "end": {
                  "line": 276,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "target",
                  "type": "Object",
                  "description": "Target object to copy properties to."
                },
                {
                  "name": "source",
                  "type": "Object",
                  "description": "Source object to copy properties from."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Target object that was passed as first argument."
              }
            },
            {
              "name": "chainObject",
              "description": "Sets the prototype of an object.\n\nNote this method is provided as backward-compatible legacy API\nonly.  It is not directly called by any Polymer features.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 289,
                  "column": 6
                },
                "end": {
                  "line": 294,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "object",
                  "type": "Object",
                  "description": "The object on which to set the prototype."
                },
                {
                  "name": "prototype",
                  "type": "Object",
                  "description": "The prototype that will be set on the given\n`object`."
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Returns the given `object` with its prototype set\nto the given `prototype` object."
              }
            },
            {
              "name": "instanceTemplate",
              "description": "Calls `importNode` on the `content` of the `template` specified and\nreturns a document fragment containing the imported content.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 306,
                  "column": 6
                },
                "end": {
                  "line": 311,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "HTML template element to instance."
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Document fragment containing the imported\n  template content."
              }
            },
            {
              "name": "fire",
              "description": "Dispatches a custom event with an optional detail value.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 327,
                  "column": 6
                },
                "end": {
                  "line": 339,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "type",
                  "type": "string",
                  "description": "Name of event type."
                },
                {
                  "name": "detail",
                  "type": "*=",
                  "description": "Detail value containing event-specific\n  payload."
                },
                {
                  "name": "options",
                  "type": "Object=",
                  "description": "Object specifying options.  These may include:\n `bubbles` (boolean, defaults to `true`),\n `cancelable` (boolean, defaults to false), and\n `node` on which to fire the event (HTMLElement, defaults to `this`)."
                }
              ],
              "return": {
                "type": "Event",
                "desc": "The new event that was fired."
              }
            },
            {
              "name": "listen",
              "description": "Convenience method to add an event listener on a given element,\nlate bound to a named method on this element.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 349,
                  "column": 6
                },
                "end": {
                  "line": 363,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to add event listener to."
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event to listen for."
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of handler method on `this` to call."
                }
              ]
            },
            {
              "name": "unlisten",
              "description": "Convenience method to remove an event listener from a given element,\nlate bound to a named method on this element.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 374,
                  "column": 6
                },
                "end": {
                  "line": 383,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Element",
                  "description": "Element to remove event listener from."
                },
                {
                  "name": "eventName",
                  "type": "string",
                  "description": "Name of event to stop listening to."
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of handler method on `this` to not call\n       anymore."
                }
              ]
            },
            {
              "name": "setScrollDirection",
              "description": "Override scrolling behavior to all direction, one direction, or none.\n\nValid scroll directions:\n  - 'all': scroll in any direction\n  - 'x': scroll only in the 'x' direction\n  - 'y': scroll only in the 'y' direction\n  - 'none': disable scrolling for this node",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 399,
                  "column": 6
                },
                "end": {
                  "line": 401,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "direction",
                  "type": "string=",
                  "description": "Direction to allow scrolling\nDefaults to `all`."
                },
                {
                  "name": "node",
                  "type": "HTMLElement=",
                  "description": "Element to apply scroll direction setting.\nDefaults to `this`."
                }
              ]
            },
            {
              "name": "$$",
              "description": "Convenience method to run `querySelector` on this local DOM scope.\n\nThis function calls `Polymer.dom(this.root).querySelector(slctr)`.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 412,
                  "column": 6
                },
                "end": {
                  "line": 414,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "slctr",
                  "type": "string",
                  "description": "Selector to run on this local DOM scope"
                }
              ],
              "return": {
                "type": "Element",
                "desc": "Element found by the selector, or null if not found."
              }
            },
            {
              "name": "distributeContent",
              "description": "Force this element to distribute its children to its local dom.\nThis is necessary only when ShadyDOM is used and only in cases that\nare not automatically handled. For example,\na user should call `distributeContent` if distribution has been\ninvalidated due to an element being added or removed from the shadowRoot\nthat contains an insertion point (`<slot>`) inside its subtree.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 434,
                  "column": 6
                },
                "end": {
                  "line": 438,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "getEffectiveChildNodes",
              "description": "Returns a list of nodes that are the effective childNodes. The effective\nchildNodes list is the same as the element's childNodes except that\nany `<content>` elements are replaced with the list of nodes distributed\nto the `<content>`, the result of its `getDistributedNodes` method.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 448,
                  "column": 6
                },
                "end": {
                  "line": 450,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "return": {
                "type": "Array.<Node>",
                "desc": "List of effctive child nodes."
              }
            },
            {
              "name": "queryDistributedElements",
              "description": "Returns a list of nodes distributed within this element that match\n`selector`. These can be dom children or elements distributed to\nchildren that are insertion points.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 459,
                  "column": 6
                },
                "end": {
                  "line": 461,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "selector",
                  "type": "string",
                  "description": "Selector to run."
                }
              ],
              "return": {
                "type": "Array.<Node>",
                "desc": "List of distributed elements that match selector."
              }
            },
            {
              "name": "getEffectiveChildren",
              "description": "Returns a list of elements that are the effective children. The effective\nchildren list is the same as the element's children except that\nany `<content>` elements are replaced with the list of elements\ndistributed to the `<content>`.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 471,
                  "column": 6
                },
                "end": {
                  "line": 476,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "return": {
                "type": "Array.<Node>",
                "desc": "List of effctive children."
              }
            },
            {
              "name": "getEffectiveTextContent",
              "description": "Returns a string of text content that is the concatenation of the\ntext content's of the element's effective childNodes (the elements\nreturned by <a href=\"#getEffectiveChildNodes>getEffectiveChildNodes</a>.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 485,
                  "column": 6
                },
                "end": {
                  "line": 494,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "return": {
                "type": "string",
                "desc": "List of effctive children."
              }
            },
            {
              "name": "queryEffectiveChildren",
              "description": "Returns the first effective childNode within this element that\nmatch `selector`. These can be dom child nodes or elements distributed\nto children that are insertion points.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 503,
                  "column": 6
                },
                "end": {
                  "line": 506,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "selector",
                  "type": "string",
                  "description": "Selector to run."
                }
              ],
              "return": {
                "type": "Object.<Node>",
                "desc": "First effective child node that matches selector."
              }
            },
            {
              "name": "queryAllEffectiveChildren",
              "description": "Returns a list of effective childNodes within this element that\nmatch `selector`. These can be dom child nodes or elements distributed\nto children that are insertion points.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 515,
                  "column": 6
                },
                "end": {
                  "line": 517,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "selector",
                  "type": "string",
                  "description": "Selector to run."
                }
              ],
              "return": {
                "type": "Array.<Node>",
                "desc": "List of effective child nodes that match selector."
              }
            },
            {
              "name": "getContentChildNodes",
              "description": "Returns a list of nodes distributed to this element's `<slot>`.\n\nIf this element contains more than one `<slot>` in its local DOM,\nan optional selector may be passed to choose the desired content.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 529,
                  "column": 6
                },
                "end": {
                  "line": 532,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "slctr",
                  "type": "string=",
                  "description": "CSS selector to choose the desired\n  `<slot>`.  Defaults to `content`."
                }
              ],
              "return": {
                "type": "Array.<Node>",
                "desc": "List of distributed nodes for the `<slot>`."
              }
            },
            {
              "name": "getContentChildren",
              "description": "Returns a list of element children distributed to this element's\n`<slot>`.\n\nIf this element contains more than one `<slot>` in its\nlocal DOM, an optional selector may be passed to choose the desired\ncontent.  This method differs from `getContentChildNodes` in that only\nelements are returned.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 548,
                  "column": 6
                },
                "end": {
                  "line": 552,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "slctr",
                  "type": "string=",
                  "description": "CSS selector to choose the desired\n  `<content>`.  Defaults to `content`."
                }
              ],
              "return": {
                "type": "Array.<HTMLElement>",
                "desc": "List of distributed nodes for the\n  `<slot>`."
              }
            },
            {
              "name": "isLightDescendant",
              "description": "Checks whether an element is in this element's light DOM tree.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 560,
                  "column": 6
                },
                "end": {
                  "line": 563,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "?Node",
                  "description": "The element to be checked."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "true if node is in this element's light DOM tree."
              }
            },
            {
              "name": "isLocalDescendant",
              "description": "Checks whether an element is in this element's local DOM tree.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 571,
                  "column": 6
                },
                "end": {
                  "line": 573,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "HTMLElement=",
                  "description": "The element to be checked."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "true if node is in this element's local DOM tree."
              }
            },
            {
              "name": "scopeSubtree",
              "description": "NOTE: should now be handled by ShadyCss library.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 576,
                  "column": 6
                },
                "end": {
                  "line": 577,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "container"
                },
                {
                  "name": "shouldObserve"
                }
              ]
            },
            {
              "name": "getComputedStyleValue",
              "description": "Returns the computed style value for the given property.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 585,
                  "column": 6
                },
                "end": {
                  "line": 587,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "The css property name."
                }
              ],
              "return": {
                "type": "string",
                "desc": "Returns the computed css property value for the given\n`property`."
              }
            },
            {
              "name": "debounce",
              "description": "Call `debounce` to collapse multiple requests for a named task into\none invocation which is made after the wait time has elapsed with\nno new request.  If no wait time is given, the callback will be called\nat microtask timing (guaranteed before paint).\n\n    debouncedClickAction(e) {\n      // will not call `processClick` more than once per 100ms\n      this.debounce('click', function() {\n       this.processClick();\n      } 100);\n    }",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 615,
                  "column": 6
                },
                "end": {
                  "line": 621,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "jobName",
                  "type": "string",
                  "description": "String to indentify the debounce job."
                },
                {
                  "name": "callback",
                  "type": "function ()",
                  "description": "Function that is called (with `this`\n  context) when the wait time elapses."
                },
                {
                  "name": "wait",
                  "type": "number",
                  "description": "Optional wait time in milliseconds (ms) after the\n  last signal that must elapse before invoking `callback`"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Returns a debouncer object on which exists the\nfollowing methods: `isActive()` returns true if the debouncer is\nactive; `cancel()` cancels the debouncer if it is active;\n`flush()` immediately invokes the debounced callback if the debouncer\nis active."
              }
            },
            {
              "name": "isDebouncerActive",
              "description": "Returns whether a named debouncer is active.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 629,
                  "column": 6
                },
                "end": {
                  "line": 633,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "jobName",
                  "type": "string",
                  "description": "The name of the debouncer started with `debounce`"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the debouncer is active (has not yet fired)."
              }
            },
            {
              "name": "flushDebouncer",
              "description": "Immediately calls the debouncer `callback` and inactivates it.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 640,
                  "column": 6
                },
                "end": {
                  "line": 646,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "jobName",
                  "type": "string",
                  "description": "The name of the debouncer started with `debounce`"
                }
              ]
            },
            {
              "name": "cancelDebouncer",
              "description": "Cancels an active debouncer.  The `callback` will not be called.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 653,
                  "column": 6
                },
                "end": {
                  "line": 659,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "jobName",
                  "type": "string",
                  "description": "The name of the debouncer started with `debounce`"
                }
              ]
            },
            {
              "name": "async",
              "description": "Runs a callback function asyncronously.\n\nBy default (if no waitTime is specified), async callbacks are run at\nmicrotask timing, which will occur before paint.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 673,
                  "column": 6
                },
                "end": {
                  "line": 676,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "callback",
                  "type": "Function",
                  "description": "The callback function to run, bound to `this`."
                },
                {
                  "name": "waitTime",
                  "type": "number=",
                  "description": "Time to wait before calling the\n  `callback`.  If unspecified or 0, the callback will be run at microtask\n  timing (before paint)."
                }
              ],
              "return": {
                "type": "number",
                "desc": "Handle that may be used to cancel the async job."
              }
            },
            {
              "name": "cancelAsync",
              "description": "Cancels an async operation started with `async`.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 684,
                  "column": 6
                },
                "end": {
                  "line": 687,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "handle",
                  "type": "number",
                  "description": "Handle returned from original `async` call to\n  cancel."
                }
              ]
            },
            {
              "name": "create",
              "description": "Convenience method for creating an element and configuring it.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 699,
                  "column": 6
                },
                "end": {
                  "line": 711,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "tag",
                  "type": "string",
                  "description": "HTML element tag to create."
                },
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Object of properties to configure on the\n   instance."
                }
              ],
              "return": {
                "type": "Element",
                "desc": "Newly created and configured element."
              }
            },
            {
              "name": "importHref",
              "description": "Convenience method for importing an HTML document imperatively.\n\nThis method creates a new `<link rel=\"import\">` element with\nthe provided URL and appends it to the document to start loading.\nIn the `onload` callback, the `import` property of the `link`\nelement will contain the imported document contents.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 730,
                  "column": 6
                },
                "end": {
                  "line": 734,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "href",
                  "type": "string",
                  "description": "URL to document to load."
                },
                {
                  "name": "onload",
                  "type": "Function",
                  "description": "Callback to notify when an import successfully\n  loaded."
                },
                {
                  "name": "onerror",
                  "type": "Function",
                  "description": "Callback to notify when an import\n  unsuccessfully loaded."
                },
                {
                  "name": "optAsync",
                  "type": "boolean",
                  "description": "True if the import should be loaded `async`.\n  Defaults to `false`."
                }
              ],
              "return": {
                "type": "HTMLLinkElement",
                "desc": "The link element for the URL to be loaded."
              }
            },
            {
              "name": "elementMatches",
              "description": "Polyfill for Element.prototype.matches, which is sometimes still\nprefixed.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 744,
                  "column": 6
                },
                "end": {
                  "line": 746,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "selector",
                  "type": "string",
                  "description": "Selector to test."
                },
                {
                  "name": "node",
                  "type": "Element=",
                  "description": "Element to test the selector against."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the element matches the selector."
              }
            },
            {
              "name": "toggleAttribute",
              "description": "Toggles an HTML attribute on or off.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 756,
                  "column": 6
                },
                "end": {
                  "line": 766,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name",
                  "type": "string",
                  "description": "HTML attribute name"
                },
                {
                  "name": "bool",
                  "type": "boolean=",
                  "description": "Boolean to force the attribute on or off.\n   When unspecified, the state of the attribute will be reversed."
                },
                {
                  "name": "node",
                  "type": "HTMLElement=",
                  "description": "Node to target.  Defaults to `this`."
                }
              ]
            },
            {
              "name": "toggleClass",
              "description": "Toggles a CSS class on or off.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 777,
                  "column": 6
                },
                "end": {
                  "line": 787,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "name",
                  "type": "string",
                  "description": "CSS class name"
                },
                {
                  "name": "bool",
                  "type": "boolean=",
                  "description": "Boolean to force the class on or off.\n   When unspecified, the state of the class will be reversed."
                },
                {
                  "name": "node",
                  "type": "HTMLElement=",
                  "description": "Node to target.  Defaults to `this`."
                }
              ]
            },
            {
              "name": "transform",
              "description": "Cross-platform helper for setting an element's CSS `transform` property.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 796,
                  "column": 6
                },
                "end": {
                  "line": 800,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "transformText",
                  "type": "string",
                  "description": "Transform setting."
                },
                {
                  "name": "node",
                  "type": "HTMLElement=",
                  "description": "Element to apply the transform to.\nDefaults to `this`"
                }
              ]
            },
            {
              "name": "translate3d",
              "description": "Cross-platform helper for setting an element's CSS `translate3d`\nproperty.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 812,
                  "column": 6
                },
                "end": {
                  "line": 815,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "x",
                  "type": "number",
                  "description": "X offset."
                },
                {
                  "name": "y",
                  "type": "number",
                  "description": "Y offset."
                },
                {
                  "name": "z",
                  "type": "number",
                  "description": "Z offset."
                },
                {
                  "name": "node",
                  "type": "HTMLElement=",
                  "description": "Element to apply the transform to.\nDefaults to `this`."
                }
              ]
            },
            {
              "name": "arrayDelete",
              "description": "Removes an item from an array, if it exists.\n\nIf the array is specified by path, a change notification is\ngenerated, so that observers, data bindings and computed\nproperties watching that path can update.\n\nIf the array is passed directly, **no change\nnotification is generated**.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 832,
                  "column": 6
                },
                "end": {
                  "line": 847,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "arrayOrPath",
                  "type": "(string|!Array.<(number|string)>)",
                  "description": "Path to array from which to remove the item\n  (or the array itself)."
                },
                {
                  "name": "item",
                  "type": "*",
                  "description": "Item to remove."
                }
              ],
              "return": {
                "type": "Array",
                "desc": "Array containing item removed."
              }
            },
            {
              "name": "_logger",
              "description": "Facades `console.log`/`warn`/`error` as override point.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 857,
                  "column": 6
                },
                "end": {
                  "line": 868,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "level",
                  "type": "string",
                  "description": "One of 'log', 'warn', 'error'"
                },
                {
                  "name": "args",
                  "type": "Array",
                  "description": "Array of strings or objects to log"
                }
              ]
            },
            {
              "name": "_log",
              "description": "Facades `console.log` as an override point.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 875,
                  "column": 6
                },
                "end": {
                  "line": 877,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "...args"
                }
              ]
            },
            {
              "name": "_warn",
              "description": "Facades `console.warn` as an override point.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 884,
                  "column": 6
                },
                "end": {
                  "line": 886,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "...args"
                }
              ]
            },
            {
              "name": "_error",
              "description": "Facades `console.error` as an override point.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 893,
                  "column": 6
                },
                "end": {
                  "line": 895,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "...args"
                }
              ]
            },
            {
              "name": "_logf",
              "description": "Formats a message using the element type an a method name.",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 905,
                  "column": 6
                },
                "end": {
                  "line": 907,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "...args"
                }
              ],
              "return": {
                "type": "string",
                "desc": "String with formatting information for `console`\n  logging."
              }
            }
          ],
          "staticMethods": [
            {
              "name": "_parseTemplate",
              "description": "Scans a template to produce template metadata.\n\nTemplate-specific metadata are stored in the object returned, and node-\nspecific metadata are stored in objects in its flattened `nodeInfoList`\narray.  Only nodes in the template that were parsed as nodes of\ninterest contain an object in `nodeInfoList`.  Each `nodeInfo` object\ncontains an `index` (`childNodes` index in parent) and optionally\n`parent`, which points to node info of its parent (including its index).\n\nThe template metadata object returned from this method has the following\nstructure (many fields optional):\n\n```js\n  {\n    // Flattened list of node metadata (for nodes that generated metadata)\n    nodeInfoList: [\n      {\n        // `id` attribute for any nodes with id's for generating `$` map\n        id: {string},\n        // `on-event=\"handler\"` metadata\n        events: [\n          {\n            name: {string},   // event name\n            value: {string},  // handler method name\n          }, ...\n        ],\n        // Notes when the template contained a `<slot>` for shady DOM\n        // optimization purposes\n        hasInsertionPoint: {boolean},\n        // For nested `<template>`` nodes, nested template metadata\n        templateInfo: {object}, // nested template metadata\n        // Metadata to allow efficient retrieval of instanced node\n        // corresponding to this metadata\n        parentInfo: {number},   // reference to parent nodeInfo>\n        parentIndex: {number},  // index in parent's `childNodes` collection\n        infoIndex: {number},    // index of this `nodeInfo` in `templateInfo.nodeInfoList`\n      },\n      ...\n    ],\n    // When true, the template had the `strip-whitespace` attribute\n    // or was nested in a template with that setting\n    stripWhitespace: {boolean},\n    // For nested templates, nested template content is moved into\n    // a document fragment stored here; this is an optimization to\n    // avoid the cost of nested template cloning\n    content: {DocumentFragment}\n  }\n```\n\nThis method kicks off a recursive treewalk as follows:\n\n```\n   _parseTemplate <---------------------+\n     _parseTemplateContent              |\n       _parseTemplateNode  <------------|--+\n         _parseTemplateNestedTemplate --+  |\n         _parseTemplateChildNodes ---------+\n         _parseTemplateNodeAttributes\n           _parseTemplateNodeAttribute\n\n```\n\nThese methods may be overridden to add custom metadata about templates\nto either `templateInfo` or `nodeInfo`.\n\nNote that this method may be destructive to the template, in that\ne.g. event annotations may be removed after being noted in the\ntemplate metadata.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 195,
                  "column": 6
                },
                "end": {
                  "line": 206,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to parse"
                },
                {
                  "name": "outerTemplateInfo",
                  "type": "Object=",
                  "description": "Template metadata from the outer\n  template, for parsing nested templates"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Parsed template metadata"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateContent",
              "description": "Overrides `PropertyAccessors` to add map of dynamic functions on\ntemplate info, for consumption by `PropertyEffects` template binding\ncode. This map determines which method templates should have accessors\ncreated for them.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 775,
                  "column": 6
                },
                "end": {
                  "line": 778,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template"
                },
                {
                  "name": "templateInfo"
                },
                {
                  "name": "nodeInfo"
                }
              ],
              "inheritedFrom": "Polymer.ElementMixin"
            },
            {
              "name": "_parseTemplateNode",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from `TextNode`'s' `textContent`.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2309,
                  "column": 6
                },
                "end": {
                  "line": 2323,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateChildNodes",
              "description": "Parses template child nodes for the given root node.\n\nThis method also wraps whitelisted legacy template extensions\n(`is=\"dom-if\"` and `is=\"dom-repeat\"`) with their equivalent element\nwrappers, collapses text nodes, and strips whitespace from the template\nif the `templateInfo.stripWhitespace` setting was provided.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 254,
                  "column": 6
                },
                "end": {
                  "line": 288,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "root",
                  "type": "Node",
                  "description": "Root node whose `childNodes` will be parsed"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNestedTemplate",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nbinding the properties that a nested template depends on to the template\nas `_host_<property>`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2392,
                  "column": 6
                },
                "end": {
                  "line": 2402,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseTemplateNodeAttributes",
              "description": "Parses template node attributes and adds node metadata to `nodeInfo`\nfor nodes of interest.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 326,
                  "column": 6
                },
                "end": {
                  "line": 335,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template."
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "_parseTemplateNodeAttribute",
              "description": "Overrides default `TemplateStamp` implementation to add support for\nparsing bindings from attributes.  A `bindings`\narray is added to `nodeInfo` and populated with binding metadata\nwith information capturing the binding target, and a `parts` array\nwith one or more metadata objects capturing the source(s) of the\nbinding.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2341,
                  "column": 6
                },
                "end": {
                  "line": 2377,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "Node to parse"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata for current template"
                },
                {
                  "name": "nodeInfo",
                  "type": "Object",
                  "description": "Node metadata for current template node"
                },
                {
                  "name": "name"
                },
                {
                  "name": "value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "`true` if the visited node added node-specific\n  metadata to `nodeInfo`"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_contentForTemplate",
              "description": "Returns the `content` document fragment for a given template.\n\nFor nested templates, Polymer performs an optimization to cache nested\ntemplate content to avoid the cost of cloning deeply nested templates.\nThis method retrieves the cached content for a given template.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/template-stamp.html",
                "start": {
                  "line": 380,
                  "column": 6
                },
                "end": {
                  "line": 383,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template to retrieve `content` for"
                }
              ],
              "return": {
                "type": "DocumentFragment",
                "desc": "Content fragment"
              },
              "inheritedFrom": "Polymer.TemplateStamp"
            },
            {
              "name": "createPropertiesForAttributes",
              "description": "Generates property accessors for all attributes in the standard\nstatic `observedAttributes` array.\n\nAttribute names are mapped to property names using the `dash-case` to\n`camelCase` convention",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/property-accessors.html",
                "start": {
                  "line": 110,
                  "column": 6
                },
                "end": {
                  "line": 115,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.PropertyAccessors"
            },
            {
              "name": "addPropertyEffect",
              "description": "Ensures an accessor exists for the specified property, and adds\nto a list of \"property effects\" that will run when the accessor for\nthe specified property is set.  Effects are grouped by \"type\", which\nroughly corresponds to a phase in effect processing.  The effect\nmetadata should be in the following form:\n\n  {\n    fn: effectFunction, // Reference to function to call to perform effect\n    info: { ... }       // Effect metadata passed to function\n    trigger: {          // Optional triggering metadata; if not provided\n      name: string      // the property is treated as a wildcard\n      structured: boolean\n      wildcard: boolean\n    }\n  }\n\nEffects are called from `_propertiesChanged` in the following order by\ntype:\n\n1. COMPUTE\n2. PROPAGATE\n3. REFLECT\n4. OBSERVE\n5. NOTIFY\n\nEffect functions are called with the following signature:\n\n  effectFunction(inst, path, props, oldProps, info, hasPaths)",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2040,
                  "column": 6
                },
                "end": {
                  "line": 2042,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "type",
                  "type": "string",
                  "description": "Effect type, from this.PROPERTY_EFFECT_TYPES"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createPropertyObserver",
              "description": "Creates a single-property observer for the given property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2053,
                  "column": 6
                },
                "end": {
                  "line": 2055,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "methodName",
                  "type": "string",
                  "description": "Name of observer method to call"
                },
                {
                  "name": "dynamicFn",
                  "type": "boolean=",
                  "description": "Whether the method name should be included as\n  a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createMethodObserver",
              "description": "Creates a multi-property \"method observer\" based on the provided\nexpression, which should be a string in the form of a normal Javascript\nfunction signature: `'methodName(arg1, [..., argn])'`.  Each argument\nshould correspond to a property or path in the context of this\nprototype (or instance), or may be a literal string or number.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2069,
                  "column": 6
                },
                "end": {
                  "line": 2071,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating\n  whether method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createNotifyingProperty",
              "description": "Causes the setter for the given property to dispatch `<property>-changed`\nevents to notify of changes to the property.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2080,
                  "column": 6
                },
                "end": {
                  "line": 2082,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReadOnlyProperty",
              "description": "Creates a read-only accessor for the given property.\n\nTo set the property, use the protected `_setProperty` API.\nTo create a custom protected setter (e.g. `_setMyProp()` for\nproperty `myProp`), pass `true` for `protectedSetter`.\n\nNote, if the property will have other property effects, this method\nshould be called first, before adding other effects.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2099,
                  "column": 6
                },
                "end": {
                  "line": 2101,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "protectedSetter",
                  "type": "boolean=",
                  "description": "Creates a custom protected setter\n  when `true`."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createReflectedProperty",
              "description": "Causes the setter for the given property to reflect the property value\nto a (dash-cased) attribute of the same name.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2110,
                  "column": 6
                },
                "end": {
                  "line": 2112,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "createComputedProperty",
              "description": "Creates a computed property whose value is set to the result of the\nmethod described by the given `expression` each time one or more\narguments to the method changes.  The expression should be a string\nin the form of a normal Javascript function signature:\n`'methodName(arg1, [..., argn])'`",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2127,
                  "column": 6
                },
                "end": {
                  "line": 2129,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Name of computed property to set"
                },
                {
                  "name": "expression",
                  "type": "string",
                  "description": "Method expression"
                },
                {
                  "name": "dynamicFn",
                  "type": "(boolean|Object)=",
                  "description": "Boolean or object map indicating whether\n  method names should be included as a dependency to the effect."
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "bindTemplate",
              "description": "Parses the provided template to ensure binding effects are created\nfor them, and then ensures property accessors are created for any\ndependent properties in the template.  Binding effects for bound\ntemplates are stored in a linked list on the instance so that\ntemplates can be efficiently stamped and unstamped.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2143,
                  "column": 6
                },
                "end": {
                  "line": 2145,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "template",
                  "type": "HTMLTemplateElement",
                  "description": "Template containing binding\n  bindings"
                }
              ],
              "return": {
                "type": "Object",
                "desc": "Template metadata object"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_addTemplatePropertyEffect",
              "description": "Adds a property effect to the given template metadata, which is run\nat the \"propagate\" stage of `_propertiesChanged` when the template\nhas been bound to the element via `_bindTemplate`.\n\nThe `effect` object should match the format in `_addPropertyEffect`.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2208,
                  "column": 6
                },
                "end": {
                  "line": 2214,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Template metadata to add effect to"
                },
                {
                  "name": "prop",
                  "type": "string",
                  "description": "Property that should trigger the effect"
                },
                {
                  "name": "effect",
                  "type": "Object=",
                  "description": "Effect metadata object"
                }
              ],
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_parseBindings",
              "description": "Called to parse text in a template (either attribute values or\ntextContent) into binding metadata.\n\nAny overrides of this method should return an array of binding part\nmetadata  representing one or more bindings found in the provided text\nand any \"literal\" text in between.  Any non-literal parts will be passed\nto `_evaluateBinding` when any dependencies change.  The only required\nfields of each \"part\" in the returned array are as follows:\n\n- `dependencies` - Array containing trigger metadata for each property\n  that should trigger the binding to update\n- `literal` - String containing text if the part represents a literal;\n  in this case no `dependencies` are needed\n\nAdditional metadata for use by `_evaluateBinding` may be provided in\neach part object as needed.\n\nThe default implementation handles the following types of bindings\n(one or more may be intermixed with literal strings):\n- Property binding: `[[prop]]`\n- Path binding: `[[object.prop]]`\n- Negated property or path bindings: `[[!prop]]` or `[[!object.prop]]`\n- Two-way property or path bindings (supports negation):\n  `{{prop}}`, `{{object.prop}}`, `{{!prop}}` or `{{!object.prop}}`\n- Inline computed method (supports negation):\n  `[[compute(a, 'literal', b)]]`, `[[!compute(a, 'literal', b)]]`",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2437,
                  "column": 6
                },
                "end": {
                  "line": 2500,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "text",
                  "type": "string",
                  "description": "Text to parse from attribute or textContent"
                },
                {
                  "name": "templateInfo",
                  "type": "Object",
                  "description": "Current template metadata"
                }
              ],
              "return": {
                "type": "Array.<Object>",
                "desc": "Array of binding part metadata"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "_evaluateBinding",
              "description": "Called to evaluate a previously parsed binding part based on a set of\none or more changed dependencies.",
              "privacy": "protected",
              "sourceRange": {
                "file": "../mixins/property-effects.html",
                "start": {
                  "line": 2516,
                  "column": 6
                },
                "end": {
                  "line": 2533,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "inst",
                  "type": "HTMLElement",
                  "description": "Element that should be used as scope for\n  binding dependencies"
                },
                {
                  "name": "part",
                  "type": "Object",
                  "description": "Binding part metadata"
                },
                {
                  "name": "path",
                  "type": "string",
                  "description": "Property/path that triggered this effect"
                },
                {
                  "name": "props",
                  "type": "Object",
                  "description": "Bag of current property changes"
                },
                {
                  "name": "oldProps",
                  "type": "Object",
                  "description": "Bag of previous values for changed properties"
                },
                {
                  "name": "hasPaths",
                  "type": "boolean",
                  "description": "True with `props` contains one or more paths"
                }
              ],
              "return": {
                "type": "*",
                "desc": "Value the binding part evaluated to"
              },
              "inheritedFrom": "Polymer.PropertyEffects"
            },
            {
              "name": "finalize",
              "description": "Called automatically when the first element instance is created to\nensure that class finalization work has been completed.\nMay be called by users to eagerly perform class finalization work\nprior to the creation of the first element instance.\n\nClass finalization work generally includes meta-programming such as\ncreating property accessors and any property effect metadata needed for\nthe features used.",
              "privacy": "public",
              "sourceRange": {
                "file": "../mixins/element-mixin.html",
                "start": {
                  "line": 493,
                  "column": 6
                },
                "end": {
                  "line": 497,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [],
              "inheritedFrom": "Polymer.ElementMixin"
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 40,
              "column": 2
            },
            "end": {
              "line": 913,
              "column": 4
            }
          },
          "privacy": "public",
          "name": "Polymer.LegacyElementMixin",
          "attributes": [],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": [],
          "mixins": [
            "Polymer.ElementMixin",
            "Polymer.GestureEventListeners"
          ]
        },
        {
          "description": "Element class mixin to skip strict dirty-checking for objects and arrays\n(always consider them to be \"dirty\"), for use on elements utilizing\n`Polymer.PropertyEffects`\n\nBy default, `Polymer.PropertyEffects` performs strict dirty checking on\nobjects, which means that any deep modifications to an object or array will\nnot be propagated unless \"immutable\" data patterns are used (i.e. all object\nreferences from the root to the mutation were changed).\n\nPolymer also provides a proprietary data mutation and path notification API\n(e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient\nmutation and notification of deep changes in an object graph to all elements\nbound to the same object graph.\n\nIn cases where neither immutable patterns nor the data mutation API can be\nused, applying this mixin will cause Polymer to skip dirty checking for\nobjects and arrays (always consider them to be \"dirty\").  This allows a\nuser to make a deep modification to a bound object graph, and then either\nsimply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`\n(e.g. `this.notifyPath('items')`) to update the tree.  Note that all\nelements that wish to be updated based on deep mutations must apply this\nmixin or otherwise skip strict dirty checking for objects/arrays.\n\nIn order to make the dirty check strategy configurable, see\n`Polymer.OptionalMutableData`.\n\nNote, the performance characteristics of propagating large object graphs\nwill be worse as opposed to using strict dirty checking with immutable\npatterns or Polymer's path notification API.",
          "summary": "Element class mixin to skip strict dirty-checking for objects\n  and arrays",
          "path": "lib/mixins/mutable-data.html",
          "properties": [],
          "methods": [
            {
              "name": "_shouldPropertyChange",
              "description": "Overrides `Polymer.PropertyEffects` to provide option for skipping\nstrict equality checking for Objects and Arrays.\n\nThis method pulls the value to dirty check against from the `__dataTemp`\ncache (rather than the normal `__data` cache) for Objects.  Since the temp\ncache is cleared at the end of a turn, this implementation allows\nside-effects of deep object changes to be processed by re-setting the\nsame object (using the temp cache as an in-turn backstop to prevent\ncycles due to 2-way notification).",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 96,
                  "column": 6
                },
                "end": {
                  "line": 98,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change"
              }
            }
          ],
          "staticMethods": [],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 72,
              "column": 2
            },
            "end": {
              "line": 104,
              "column": 4
            }
          },
          "privacy": "public",
          "name": "Polymer.MutableData",
          "attributes": [],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": []
        },
        {
          "description": "Element class mixin to add the optional ability to skip strict\ndirty-checking for objects and arrays (always consider them to be\n\"dirty\") by setting a `mutable-data` attribute on an element instance.\n\nBy default, `Polymer.PropertyEffects` performs strict dirty checking on\nobjects, which means that any deep modifications to an object or array will\nnot be propagated unless \"immutable\" data patterns are used (i.e. all object\nreferences from the root to the mutation were changed).\n\nPolymer also provides a proprietary data mutation and path notification API\n(e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient\nmutation and notification of deep changes in an object graph to all elements\nbound to the same object graph.\n\nIn cases where neither immutable patterns nor the data mutation API can be\nused, applying this mixin will allow Polymer to skip dirty checking for\nobjects and arrays (always consider them to be \"dirty\").  This allows a\nuser to make a deep modification to a bound object graph, and then either\nsimply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`\n(e.g. `this.notifyPath('items')`) to update the tree.  Note that all\nelements that wish to be updated based on deep mutations must apply this\nmixin or otherwise skip strict dirty checking for objects/arrays.\n\nWhile this mixin adds the ability to forgo Object/Array dirty checking,\nthe `mutableData` flag defaults to false and must be set on the instance.\n\nNote, the performance characteristics of propagating large object graphs\nwill be worse by relying on `mutableData: true` as opposed to using\nstrict dirty checking with immutable patterns or Polymer's path notification\nAPI.",
          "summary": "Element class mixin to optionally skip strict dirty-checking\n  for objects and arrays",
          "path": "lib/mixins/mutable-data.html",
          "properties": [
            {
              "name": "mutableData",
              "type": "boolean",
              "description": "Instance-level flag for configuring the dirty-checking strategy\nfor this element.  When true, Objects and Arrays will skip dirty\nchecking, otherwise strict equality checking will be used.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 158,
                  "column": 10
                },
                "end": {
                  "line": 158,
                  "column": 30
                }
              },
              "metadata": {
                "polymer": {}
              }
            }
          ],
          "methods": [
            {
              "name": "_shouldPropertyChange",
              "description": "Overrides `Polymer.PropertyEffects` to provide option for skipping\nstrict equality checking for Objects and Arrays.\n\nWhen `this.mutableData` is true on this instance, this method\npulls the value to dirty check against from the `__dataTemp` cache\n(rather than the normal `__data` cache) for Objects.  Since the temp\ncache is cleared at the end of a turn, this implementation allows\nside-effects of deep object changes to be processed by re-setting the\nsame object (using the temp cache as an in-turn backstop to prevent\ncycles due to 2-way notification).",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 180,
                  "column": 6
                },
                "end": {
                  "line": 182,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "property",
                  "type": "string",
                  "description": "Property name"
                },
                {
                  "name": "value",
                  "type": "*",
                  "description": "New property value"
                },
                {
                  "name": "old",
                  "type": "*",
                  "description": "Previous property value"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the property should be considered a change"
              }
            }
          ],
          "staticMethods": [],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 143,
              "column": 2
            },
            "end": {
              "line": 187,
              "column": 4
            }
          },
          "privacy": "public",
          "name": "Polymer.OptionalMutableData",
          "attributes": [
            {
              "name": "mutable-data",
              "description": "Instance-level flag for configuring the dirty-checking strategy\nfor this element.  When true, Objects and Arrays will skip dirty\nchecking, otherwise strict equality checking will be used.",
              "sourceRange": {
                "start": {
                  "line": 158,
                  "column": 10
                },
                "end": {
                  "line": 158,
                  "column": 30
                }
              },
              "metadata": {},
              "type": "boolean"
            }
          ],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": []
        },
        {
          "description": "Element mixin for recording  dynamic associations between item paths in a\nmaster `items` array and a `selected` array such that path changes to the\nmaster array (at the host) element or elsewhere via data-binding) are\ncorrectly propagated to items in the selected array and vice-versa.\n\nThe `items` property accepts an array of user data, and via the\n`select(item)` and `deselect(item)` API, updates the `selected` property\nwhich may be bound to other parts of the application, and any changes to\nsub-fields of `selected` item(s) will be kept in sync with items in the\n`items` array.  When `multi` is false, `selected` is a property\nrepresenting the last selected item.  When `multi` is true, `selected`\nis an array of multiply selected items.",
          "summary": "",
          "path": "lib/elements/array-selector.html",
          "properties": [
            {
              "name": "items",
              "type": "Array",
              "description": "An array containing items from which selection will be made.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 50,
                  "column": 10
                },
                "end": {
                  "line": 52,
                  "column": 11
                }
              },
              "metadata": {
                "polymer": {}
              }
            },
            {
              "name": "multi",
              "type": "boolean",
              "description": "When `true`, multiple items may be selected at once (in this case,\n`selected` is an array of currently selected items).  When `false`,\nonly one item may be selected at a time.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 59,
                  "column": 10
                },
                "end": {
                  "line": 62,
                  "column": 11
                }
              },
              "metadata": {
                "polymer": {}
              },
              "defaultValue": "false"
            },
            {
              "name": "selected",
              "type": "Object",
              "description": "When `multi` is true, this is an array that contains any selected.\nWhen `multi` is false, this is the currently selected item, or `null`\nif no item is selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 69,
                  "column": 10
                },
                "end": {
                  "line": 72,
                  "column": 11
                }
              },
              "metadata": {
                "polymer": {
                  "notify": true
                }
              }
            },
            {
              "name": "selectedItem",
              "type": "Object",
              "description": "When `multi` is false, this is the currently selected item, or `null`\nif no item is selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 78,
                  "column": 10
                },
                "end": {
                  "line": 81,
                  "column": 11
                }
              },
              "metadata": {
                "polymer": {
                  "notify": true
                }
              }
            },
            {
              "name": "toggle",
              "type": "boolean",
              "description": "When `true`, calling `select` on an item that is already selected\nwill deselect the item.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 87,
                  "column": 10
                },
                "end": {
                  "line": 90,
                  "column": 11
                }
              },
              "metadata": {
                "polymer": {}
              },
              "defaultValue": "false"
            }
          ],
          "methods": [
            {
              "name": "__updateSelection",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 106,
                  "column": 6
                },
                "end": {
                  "line": 136,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "multi"
                },
                {
                  "name": "itemsInfo"
                }
              ]
            },
            {
              "name": "__applySplices",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 138,
                  "column": 6
                },
                "end": {
                  "line": 177,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "splices"
                }
              ]
            },
            {
              "name": "__updateLinks",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 179,
                  "column": 6
                },
                "end": {
                  "line": 194,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "clearSelection",
              "description": "Clears the selection state.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 200,
                  "column": 6
                },
                "end": {
                  "line": 211,
                  "column": 7
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "isSelected",
              "description": "Returns whether the item is currently selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 219,
                  "column": 6
                },
                "end": {
                  "line": 221,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "item",
                  "type": "*",
                  "description": "Item from `items` array to test"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the item is selected"
              }
            },
            {
              "name": "isIndexSelected",
              "description": "Returns whether the item is currently selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 229,
                  "column": 6
                },
                "end": {
                  "line": 231,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx",
                  "type": "*",
                  "description": "Index from `items` array to test"
                }
              ],
              "return": {
                "type": "boolean",
                "desc": "Whether the item is selected"
              }
            },
            {
              "name": "__deselectChangedIdx",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 233,
                  "column": 6
                },
                "end": {
                  "line": 243,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx"
                }
              ]
            },
            {
              "name": "__selectedIndexForItemIndex",
              "description": "",
              "privacy": "private",
              "sourceRange": {
                "start": {
                  "line": 245,
                  "column": 6
                },
                "end": {
                  "line": 250,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx"
                }
              ]
            },
            {
              "name": "deselect",
              "description": "Deselects the given item if it is already selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 257,
                  "column": 6
                },
                "end": {
                  "line": 272,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "item",
                  "type": "*",
                  "description": "Item from `items` array to deselect"
                }
              ]
            },
            {
              "name": "deselectIndex",
              "description": "Deselects the given index if it is already selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 279,
                  "column": 6
                },
                "end": {
                  "line": 281,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx",
                  "type": "number",
                  "description": "Index from `items` array to deselect"
                }
              ]
            },
            {
              "name": "select",
              "description": "Selects the given item.  When `toggle` is true, this will automatically\ndeselect the item if already selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 289,
                  "column": 6
                },
                "end": {
                  "line": 291,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "item",
                  "type": "*",
                  "description": "Item from `items` array to select"
                }
              ]
            },
            {
              "name": "selectIndex",
              "description": "Selects the given index.  When `toggle` is true, this will automatically\ndeselect the item if already selected.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 299,
                  "column": 6
                },
                "end": {
                  "line": 315,
                  "column": 7
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "idx",
                  "type": "number",
                  "description": "Index from `items` array to select"
                }
              ]
            }
          ],
          "staticMethods": [],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 35,
              "column": 2
            },
            "end": {
              "line": 321,
              "column": 5
            }
          },
          "privacy": "public",
          "name": "Polymer.ArraySelectorMixin",
          "attributes": [
            {
              "name": "items",
              "description": "An array containing items from which selection will be made.",
              "sourceRange": {
                "start": {
                  "line": 50,
                  "column": 10
                },
                "end": {
                  "line": 52,
                  "column": 11
                }
              },
              "metadata": {},
              "type": "Array"
            },
            {
              "name": "multi",
              "description": "When `true`, multiple items may be selected at once (in this case,\n`selected` is an array of currently selected items).  When `false`,\nonly one item may be selected at a time.",
              "sourceRange": {
                "start": {
                  "line": 59,
                  "column": 10
                },
                "end": {
                  "line": 62,
                  "column": 11
                }
              },
              "metadata": {},
              "type": "boolean"
            },
            {
              "name": "selected",
              "description": "When `multi` is true, this is an array that contains any selected.\nWhen `multi` is false, this is the currently selected item, or `null`\nif no item is selected.",
              "sourceRange": {
                "start": {
                  "line": 69,
                  "column": 10
                },
                "end": {
                  "line": 72,
                  "column": 11
                }
              },
              "metadata": {},
              "type": "Object"
            },
            {
              "name": "selected-item",
              "description": "When `multi` is false, this is the currently selected item, or `null`\nif no item is selected.",
              "sourceRange": {
                "start": {
                  "line": 78,
                  "column": 10
                },
                "end": {
                  "line": 81,
                  "column": 11
                }
              },
              "metadata": {},
              "type": "Object"
            },
            {
              "name": "toggle",
              "description": "When `true`, calling `select` on an item that is already selected\nwill deselect the item.",
              "sourceRange": {
                "start": {
                  "line": 87,
                  "column": 10
                },
                "end": {
                  "line": 90,
                  "column": 11
                }
              },
              "metadata": {},
              "type": "boolean"
            }
          ],
          "events": [],
          "styling": {
            "cssVariables": [],
            "selectors": []
          },
          "slots": []
        }
      ],
      "functions": [
        {
          "name": "Polymer.dedupingMixin",
          "description": "Wraps an ES6 class expression mixin such that the mixin is only applied\nif it has not already been applied its base argument.  Also memoizes mixin\napplications.",
          "summary": "",
          "sourceRange": {
            "file": "lib/utils/mixin.html",
            "start": {
              "line": 53,
              "column": 2
            },
            "end": {
              "line": 71,
              "column": 4
            }
          },
          "privacy": "public",
          "params": [
            {
              "type": "Function",
              "desc": "ES6 class expression mixin to wrap",
              "name": "mixin"
            }
          ],
          "return": {
            "type": "Function",
            "desc": "Wrapped mixin that deduplicates and memoizes\n  mixin applications to base"
          }
        },
        {
          "name": "Polymer.setRootPath",
          "description": "Sets the global rootPath property used by `Polymer.ElementMixin` and\navailable via `Polymer.rootPath`.",
          "summary": "",
          "sourceRange": {
            "file": "lib/utils/settings.html",
            "start": {
              "line": 59,
              "column": 2
            },
            "end": {
              "line": 61,
              "column": 3
            }
          },
          "privacy": "public",
          "params": [
            {
              "type": "string",
              "desc": "The new root path",
              "name": "path"
            }
          ]
        },
        {
          "name": "Polymer.importHref",
          "description": "Convenience method for importing an HTML document imperatively.\n\nThis method creates a new `<link rel=\"import\">` element with\nthe provided URL and appends it to the document to start loading.\nIn the `onload` callback, the `import` property of the `link`\nelement will contain the imported document contents.",
          "summary": "",
          "sourceRange": {
            "file": "lib/utils/import-href.html",
            "start": {
              "line": 46,
              "column": 2
            },
            "end": {
              "line": 103,
              "column": 4
            }
          },
          "privacy": "public",
          "params": [
            {
              "type": "string",
              "desc": "URL to document to load.",
              "name": "href"
            },
            {
              "type": "Function=",
              "desc": "Callback to notify when an import successfully\n  loaded.",
              "name": "onload"
            },
            {
              "type": "Function=",
              "desc": "Callback to notify when an import\n  unsuccessfully loaded.",
              "name": "onerror"
            },
            {
              "type": "boolean=",
              "desc": "True if the import should be loaded `async`.\n  Defaults to `false`.",
              "name": "optAsync"
            }
          ],
          "return": {
            "type": "HTMLLinkElement",
            "desc": "The link element for the URL to be loaded."
          }
        },
        {
          "name": "Polymer.enqueueDebouncer",
          "description": "Adds a `Polymer.Debouncer` to a list of globally flushable tasks.",
          "summary": "",
          "sourceRange": {
            "file": "lib/utils/flush.html",
            "start": {
              "line": 22,
              "column": 2
            },
            "end": {
              "line": 24,
              "column": 3
            }
          },
          "privacy": "public",
          "params": [
            {
              "type": "Polymer.Debouncer",
              "desc": "Debouncer to enqueue",
              "name": "debouncer"
            }
          ]
        },
        {
          "name": "Polymer.flush",
          "description": "Forces several classes of asynchronously queued tasks to flush:\n- Debouncers added via `enqueueDebouncer`\n- ShadyDOM distribution",
          "summary": "",
          "sourceRange": {
            "file": "lib/utils/flush.html",
            "start": {
              "line": 47,
              "column": 2
            },
            "end": {
              "line": 56,
              "column": 3
            }
          },
          "privacy": "public",
          "params": []
        },
        {
          "name": "Polymer.dom",
          "description": "Legacy DOM and Event manipulation API wrapper factory used to abstract\ndifferences between native Shadow DOM and \"Shady DOM\" when polyfilling on\nolder browsers.\n\nNote that in Polymer 2.x use of `Polymer.dom` is no longer required and\nin the majority of cases simply facades directly to the standard native\nAPI.",
          "summary": "Legacy DOM and Event manipulation API wrapper factory used to\nabstract differences between native Shadow DOM and \"Shady DOM.\"",
          "sourceRange": {
            "file": "lib/legacy/polymer.dom.html",
            "start": {
              "line": 294,
              "column": 2
            },
            "end": {
              "line": 301,
              "column": 4
            }
          },
          "privacy": "public",
          "params": [
            {
              "type": "(Node|Event)",
              "desc": "Node or event to operate on",
              "name": "obj"
            }
          ],
          "return": {
            "type": "(DomApi|EventApi)",
            "desc": "Wrapper providing either node API or event API"
          }
        },
        {
          "name": "Polymer.mixinBehaviors",
          "description": "Applies a \"legacy\" behavior or array of behaviors to the provided class.\n\nNote: this method will automatically also apply the `Polymer.LegacyElementMixin`\nto ensure that any legacy behaviors can rely on legacy Polymer API on\nthe underlying element.",
          "summary": "",
          "sourceRange": {
            "file": "lib/legacy/class.html",
            "start": {
              "line": 43,
              "column": 4
            },
            "end": {
              "line": 65,
              "column": 5
            }
          },
          "privacy": "public",
          "params": [
            {
              "type": "(Object|Array)",
              "desc": "Behavior object or array of behaviors.",
              "name": "behaviors"
            },
            {
              "type": "HTMLElement",
              "desc": "Element class.",
              "name": "klass"
            }
          ],
          "return": {
            "type": "HTMLElement",
            "desc": "Returns a new Element class extended by the\npassed in `behaviors` and also by `Polymer.LegacyElementMixin`."
          }
        },
        {
          "name": "Polymer.Class",
          "description": "Generates a class that extends `Polymer.LegacyElement` based on the\nprovided info object.  Metadata objects on the `info` object\n(`properties`, `observers`, `listeners`, `behaviors`, `is`) are used\nfor Polymer's meta-programming systems, and any functions are copied\nto the generated class.\n\nValid \"metadata\" values are as follows:\n\n`is`: String providing the tag name to register the element under. In\naddition, if a `dom-module` with the same id exists, the first template\nin that `dom-module` will be stamped into the shadow root of this element,\nwith support for declarative event listeners (`on-...`), Polymer data\nbindings (`[[...]]` and `{{...}}`), and id-based node finding into\n`this.$`.\n\n`properties`: Object describing property-related metadata used by Polymer\nfeatures (key: property names, value: object containing property metadata).\nValid keys in per-property metadata include:\n- `type` (String|Number|Object|Array|...): Used by\n  `attributeChangedCallback` to determine how string-based attributes\n  are deserialized to JavaScript property values.\n- `notify` (boolean): Causes a change in the property to fire a\n  non-bubbling event called `<property>-changed`. Elements that have\n  enabled two-way binding to the property use this event to observe changes.\n- `readOnly` (boolean): Creates a getter for the property, but no setter.\n  To set a read-only property, use the private setter method\n  `_setProperty(property, value)`.\n- `observer` (string): Observer method name that will be called when\n  the property changes. The arguments of the method are\n  `(value, previousValue)`.\n- `computed` (string): String describing method and dependent properties\n  for computing the value of this property (e.g. `'computeFoo(bar, zot)'`).\n  Computed properties are read-only by default and can only be changed\n  via the return value of the computing method.\n\n`observers`: Array of strings describing multi-property observer methods\n and their dependent properties (e.g. `'observeABC(a, b, c)'`).\n\n`listeners`: Object describing event listeners to be added to each\n instance of this element (key: event name, value: method name).\n\n`behaviors`: Array of additional `info` objects containing metadata\nand callbacks in the same format as the `info` object here which are\nmerged into this element.\n\n`hostAttributes`: Object listing attributes to be applied to the host\n once created (key: attribute name, value: attribute value).  Values\n are serialized based on the type of the value.  Host attributes should\n generally be limited to attributes such as `tabIndex` and `aria-...`.\n Attributes in `hostAttributes` are only applied if a user-supplied\n attribute is not already present (attributes in markup override\n `hostAttributes`).\n\nIn addition, the following Polymer-specific callbacks may be provided:\n- `registered`: called after first instance of this element,\n- `created`: called during `constructor`\n- `attached`: called during `connectedCallback`\n- `detached`: called during `disconnectedCallback`\n- `ready`: called before first `attached`, after all properties of\n  this element have been propagated to its template and all observers\n  have run",
          "summary": "",
          "sourceRange": {
            "file": "lib/legacy/class.html",
            "start": {
              "line": 316,
              "column": 4
            },
            "end": {
              "line": 327,
              "column": 5
            }
          },
          "privacy": "public",
          "params": [
            {
              "type": "Object",
              "desc": "Object containing Polymer metadata and functions\n  to become class methods.",
              "name": "info"
            }
          ],
          "return": {
            "type": "Polymer.LegacyElement",
            "desc": "Generated class"
          }
        }
      ],
      "metadata": {
        "polymer": {
          "behaviors": [
            {
              "description": "The `Polymer.Templatizer` behavior adds methods to generate instances of\ntemplates that are each managed by an anonymous `Polymer.PropertyEffects`\ninstance where data-bindings in the stamped template content are bound to\naccessors on itself.\n\nThis behavior is provided in Polymer 2.x as a hybrid-element convenience\nonly.  For non-hybrid usage, the `Polymer.Templatize` library\nshould be used instead.\n\nExample:\n\n    // Get a template from somewhere, e.g. light DOM\n    let template = this.querySelector('template');\n    // Prepare the template\n    this.templatize(template);\n    // Instance the template with an initial data model\n    let instance = this.stamp({myProp: 'initial'});\n    // Insert the instance's DOM somewhere, e.g. light DOM\n    Polymer.dom(this).appendChild(instance.root);\n    // Changing a property on the instance will propagate to bindings\n    // in the template\n    instance.myProp = 'new value';\n\nUsers of `Templatizer` may need to implement the following abstract\nAPI's to determine how properties and paths from the host should be\nforwarded into to instances:\n\n    _forwardHostPropV2: function(prop, value)\n\nLikewise, users may implement these additional abstract API's to determine\nhow instance-specific properties that change on the instance should be\nforwarded out to the host, if necessary.\n\n    _notifyInstancePropV2: function(inst, prop, value)\n\nIn order to determine which properties are instance-specific and require\ncustom notification via `_notifyInstanceProp`, define an `_instanceProps`\nobject containing keys for each instance prop, for example:\n\n    _instanceProps: {\n      item: true,\n      index: true\n    }\n\nAny properties used in the template that are not defined in _instanceProp\nwill be forwarded out to the Templatize `owner` automatically.\n\nUsers may also implement the following abstract function to show or\nhide any DOM generated using `stamp`:\n\n    _showHideChildren: function(shouldHide)\n\nNote that some callbacks are suffixed with `V2` in the Polymer 2.x behavior\nas the implementations will need to differ from the callbacks required\nby the 1.x Templatizer API due to changes in the `TemplateInstance` API\nbetween versions 1.x and 2.x.",
              "summary": "",
              "path": "lib/legacy/templatizer-behavior.html",
              "properties": [],
              "methods": [
                {
                  "name": "templatize",
                  "description": "Generates an anonymous `TemplateInstance` class (stored as `this.ctor`)\nfor the provided template.  This method should be called once per\ntemplate to prepare an element for stamping the template, followed\nby `stamp` to create new instances of the template.",
                  "privacy": "public",
                  "sourceRange": {
                    "start": {
                      "line": 90,
                      "column": 6
                    },
                    "end": {
                      "line": 99,
                      "column": 7
                    }
                  },
                  "metadata": {},
                  "params": [
                    {
                      "name": "template",
                      "type": "HTMLTemplateElement",
                      "description": "Template to prepare"
                    },
                    {
                      "name": "mutableData",
                      "type": "boolean=",
                      "description": "When `true`, the generated class will skip\n  strict dirty-checking for objects and arrays (always consider them to\n  be \"dirty\"). Defaults to false."
                    }
                  ]
                },
                {
                  "name": "stamp",
                  "description": "Creates an instance of the template prepared by `templatize`.  The object\nreturned is an instance of the anonymous class generated by `templatize`\nwhose `root` property is a document fragment containing newly cloned\ntemplate content, and which has property accessors corresponding to\nproperties referenced in template bindings.",
                  "privacy": "public",
                  "sourceRange": {
                    "start": {
                      "line": 113,
                      "column": 6
                    },
                    "end": {
                      "line": 115,
                      "column": 7
                    }
                  },
                  "metadata": {},
                  "params": [
                    {
                      "name": "model",
                      "type": "Object=",
                      "description": "Object containing initial property values to\n  populate into the template bindings."
                    }
                  ],
                  "return": {
                    "type": "TemplateInstanceBase",
                    "desc": "Returns the created instance of\nthe template prepared by `templatize`."
                  }
                },
                {
                  "name": "modelForElement",
                  "description": "Returns the template \"model\" (`TemplateInstance`) associated with\na given element, which serves as the binding scope for the template\ninstance the element is contained in.  A template model should be used\nto manipulate data associated with this template instance.",
                  "privacy": "public",
                  "sourceRange": {
                    "start": {
                      "line": 127,
                      "column": 6
                    },
                    "end": {
                      "line": 129,
                      "column": 7
                    }
                  },
                  "metadata": {},
                  "params": [
                    {
                      "name": "el",
                      "type": "HTMLElement",
                      "description": "Element for which to return a template model."
                    }
                  ],
                  "return": {
                    "type": "TemplateInstanceBase",
                    "desc": "Model representing the binding scope for\n  the element."
                  }
                }
              ],
              "staticMethods": [],
              "demos": [],
              "metadata": {},
              "sourceRange": {
                "start": {
                  "line": 77,
                  "column": 4
                },
                "end": {
                  "line": 130,
                  "column": 6
                }
              },
              "privacy": "public",
              "name": "Polymer.Templatizer",
              "attributes": [],
              "events": [],
              "styling": {
                "cssVariables": [],
                "selectors": []
              },
              "slots": []
            },
            {
              "description": "Legacy element behavior to skip strict dirty-checking for objects and arrays,\n(always consider them to be \"dirty\") for use on legacy API Polymer elements.\n\nBy default, `Polymer.PropertyEffects` performs strict dirty checking on\nobjects, which means that any deep modifications to an object or array will\nnot be propagated unless \"immutable\" data patterns are used (i.e. all object\nreferences from the root to the mutation were changed).\n\nPolymer also provides a proprietary data mutation and path notification API\n(e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient\nmutation and notification of deep changes in an object graph to all elements\nbound to the same object graph.\n\nIn cases where neither immutable patterns nor the data mutation API can be\nused, applying this mixin will cause Polymer to skip dirty checking for\nobjects and arrays (always consider them to be \"dirty\").  This allows a\nuser to make a deep modification to a bound object graph, and then either\nsimply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`\n(e.g. `this.notifyPath('items')`) to update the tree.  Note that all\nelements that wish to be updated based on deep mutations must apply this\nmixin or otherwise skip strict dirty checking for objects/arrays.\n\nIn order to make the dirty check strategy configurable, see\n`Polymer.OptionalMutableDataBehavior`.\n\nNote, the performance characteristics of propagating large object graphs\nwill be worse as opposed to using strict dirty checking with immutable\npatterns or Polymer's path notification API.",
              "summary": "Behavior to skip strict dirty-checking for objects and\n  arrays",
              "path": "lib/legacy/mutable-data-behavior.html",
              "properties": [],
              "methods": [
                {
                  "name": "_shouldPropertyChange",
                  "description": "Overrides `Polymer.PropertyEffects` to provide option for skipping\nstrict equality checking for Objects and Arrays.\n\nThis method pulls the value to dirty check against from the `__dataTemp`\ncache (rather than the normal `__data` cache) for Objects.  Since the temp\ncache is cleared at the end of a turn, this implementation allows\nside-effects of deep object changes to be processed by re-setting the\nsame object (using the temp cache as an in-turn backstop to prevent\ncycles due to 2-way notification).",
                  "privacy": "protected",
                  "sourceRange": {
                    "start": {
                      "line": 72,
                      "column": 4
                    },
                    "end": {
                      "line": 74,
                      "column": 5
                    }
                  },
                  "metadata": {},
                  "params": [
                    {
                      "name": "property",
                      "type": "string",
                      "description": "Property name"
                    },
                    {
                      "name": "value",
                      "type": "*",
                      "description": "New property value"
                    },
                    {
                      "name": "old",
                      "type": "*",
                      "description": "Previous property value"
                    }
                  ],
                  "return": {
                    "type": "boolean",
                    "desc": "Whether the property should be considered a change"
                  }
                }
              ],
              "staticMethods": [],
              "demos": [],
              "metadata": {},
              "sourceRange": {
                "start": {
                  "line": 53,
                  "column": 2
                },
                "end": {
                  "line": 75,
                  "column": 4
                }
              },
              "privacy": "public",
              "name": "Polymer.MutableDataBehavior",
              "attributes": [],
              "events": [],
              "styling": {
                "cssVariables": [],
                "selectors": []
              },
              "slots": []
            },
            {
              "description": "Legacy element behavior to add the optional ability to skip strict\ndirty-checking for objects and arrays (always consider them to be\n\"dirty\") by setting a `mutable-data` attribute on an element instance.\n\nBy default, `Polymer.PropertyEffects` performs strict dirty checking on\nobjects, which means that any deep modifications to an object or array will\nnot be propagated unless \"immutable\" data patterns are used (i.e. all object\nreferences from the root to the mutation were changed).\n\nPolymer also provides a proprietary data mutation and path notification API\n(e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient\nmutation and notification of deep changes in an object graph to all elements\nbound to the same object graph.\n\nIn cases where neither immutable patterns nor the data mutation API can be\nused, applying this mixin will allow Polymer to skip dirty checking for\nobjects and arrays (always consider them to be \"dirty\").  This allows a\nuser to make a deep modification to a bound object graph, and then either\nsimply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`\n(e.g. `this.notifyPath('items')`) to update the tree.  Note that all\nelements that wish to be updated based on deep mutations must apply this\nmixin or otherwise skip strict dirty checking for objects/arrays.\n\nWhile this behavior adds the ability to forgo Object/Array dirty checking,\nthe `mutableData` flag defaults to false and must be set on the instance.\n\nNote, the performance characteristics of propagating large object graphs\nwill be worse by relying on `mutableData: true` as opposed to using\nstrict dirty checking with immutable patterns or Polymer's path notification\nAPI.",
              "summary": "Behavior to optionally skip strict dirty-checking for objects and\n  arrays",
              "path": "lib/legacy/mutable-data-behavior.html",
              "properties": [
                {
                  "name": "mutableData",
                  "type": "boolean",
                  "description": "Instance-level flag for configuring the dirty-checking strategy\nfor this element.  When true, Objects and Arrays will skip dirty\nchecking, otherwise strict equality checking will be used.",
                  "privacy": "public",
                  "sourceRange": {
                    "start": {
                      "line": 122,
                      "column": 6
                    },
                    "end": {
                      "line": 122,
                      "column": 26
                    }
                  },
                  "metadata": {
                    "polymer": {}
                  }
                }
              ],
              "methods": [
                {
                  "name": "_shouldPropertyChange",
                  "description": "Overrides `Polymer.PropertyEffects` to skip strict equality checking\nfor Objects and Arrays.\n\nPulls the value to dirty check against from the `__dataTemp` cache\n(rather than the normal `__data` cache) for Objects.  Since the temp\ncache is cleared at the end of a turn, this implementation allows\nside-effects of deep object changes to be processed by re-setting the\nsame object (using the temp cache as an in-turn backstop to prevent\ncycles due to 2-way notification).",
                  "privacy": "protected",
                  "sourceRange": {
                    "start": {
                      "line": 142,
                      "column": 4
                    },
                    "end": {
                      "line": 144,
                      "column": 5
                    }
                  },
                  "metadata": {},
                  "params": [
                    {
                      "name": "property",
                      "type": "string",
                      "description": "Property name"
                    },
                    {
                      "name": "value",
                      "type": "*",
                      "description": "New property value"
                    },
                    {
                      "name": "old",
                      "type": "*",
                      "description": "Previous property value"
                    }
                  ],
                  "return": {
                    "type": "boolean",
                    "desc": "Whether the property should be considered a change"
                  }
                }
              ],
              "staticMethods": [],
              "demos": [],
              "metadata": {},
              "sourceRange": {
                "start": {
                  "line": 114,
                  "column": 2
                },
                "end": {
                  "line": 145,
                  "column": 4
                }
              },
              "privacy": "public",
              "name": "Polymer.OptionalMutableDataBehavior",
              "attributes": [
                {
                  "name": "mutable-data",
                  "description": "Instance-level flag for configuring the dirty-checking strategy\nfor this element.  When true, Objects and Arrays will skip dirty\nchecking, otherwise strict equality checking will be used.",
                  "sourceRange": {
                    "start": {
                      "line": 122,
                      "column": 6
                    },
                    "end": {
                      "line": 122,
                      "column": 26
                    }
                  },
                  "metadata": {},
                  "type": "boolean"
                }
              ],
              "events": [],
              "styling": {
                "cssVariables": [],
                "selectors": []
              },
              "slots": []
            }
          ]
        }
      },
      "classes": [
        {
          "description": "",
          "summary": "Collapse multiple callbacks into one invocation after a timer.",
          "path": "lib/utils/debounce.html",
          "properties": [],
          "methods": [
            {
              "name": "setConfig",
              "description": "Sets the scheduler; that is, a module with the Async interface,\na callback and optional arguments to be passed to the run function\nfrom the async module.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 38,
                  "column": 4
                },
                "end": {
                  "line": 45,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "asyncModule",
                  "type": "!AsyncModule",
                  "description": "Object with Async interface."
                },
                {
                  "name": "callback",
                  "type": "function ()",
                  "description": "Callback to run."
                }
              ]
            },
            {
              "name": "cancel",
              "description": "Cancels an active debouncer and returns a reference to itself.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 49,
                  "column": 4
                },
                "end": {
                  "line": 54,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "flush",
              "description": "Flushes an active debouncer and returns a reference to itself.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 58,
                  "column": 4
                },
                "end": {
                  "line": 63,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "isActive",
              "description": "Returns true if the debouncer is active.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 69,
                  "column": 4
                },
                "end": {
                  "line": 71,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [],
              "return": {
                "type": "boolean",
                "desc": "True if active."
              }
            }
          ],
          "staticMethods": [
            {
              "name": "debounce",
              "description": "Creates a debouncer if no debouncer is passed as a parameter\nor it cancels an active debouncer otherwise. The following\nexample shows how a debouncer can be called multiple times within a\nmicrotask and \"debounced\" such that the provided callback function is\ncalled once. Add this method to a custom element:\n\n_debounceWork() {\n  this._debounceJob = Polymer.Debouncer.debounce(this._debounceJob,\n      Polymer.Async.microTask, () => {\n    this._doWork();\n  });\n}\n\nIf the `_debounceWork` method is called multiple times within the same\nmicrotask, the `_doWork` function will be called only once at the next\nmicrotask checkpoint.\n\nNote: In testing it is often convenient to avoid asynchrony. To accomplish\nthis with a debouncer, you can use `Polymer.enqueueDebouncer` and\n`Polymer.flush`. For example, extend the above example by adding\n`Polymer.enqueueDebouncer(this._debounceJob)` at the end of the\n`_debounceWork` method. Then in a test, call `Polymer.flush` to ensure\nthe debouncer has completed.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 102,
                  "column": 4
                },
                "end": {
                  "line": 110,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "debouncer",
                  "type": "Polymer.Debouncer?",
                  "description": "Debouncer object."
                },
                {
                  "name": "asyncModule",
                  "type": "!AsyncModule",
                  "description": "Object with Async interface"
                },
                {
                  "name": "callback",
                  "type": "function ()",
                  "description": "Callback to run."
                }
              ],
              "return": {
                "type": "!Debouncer",
                "desc": "Returns a debouncer object."
              }
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 24,
              "column": 2
            },
            "end": {
              "line": 111,
              "column": 3
            }
          },
          "privacy": "public",
          "name": "Polymer.Debouncer"
        },
        {
          "description": "Class that listens for changes (additions or removals) to\n\"flattened nodes\" on a given `node`. The list of flattened nodes consists\nof a node's children and, for any children that are `<slot>` elements,\nthe expanded flattened list of `assignedNodes`.\nFor example, if the observed node has children `<a></a><slot></slot><b></b>`\nand the `<slot>` has one `<div>` assigned to it, then the flattened\nnodes list is `<a></a><div></div><b></b>`. If the `<slot>` has other\n`<slot>` elements assigned to it, these are flattened as well.\n\nThe provided `callback` is called whenever any change to this list\nof flattened nodes occurs, where an addition or removal of a node is\nconsidered a change. The `callback` is called with one argument, an object\ncontaining an array of any `addedNodes` and `removedNodes`.\n\nNote: the callback is called asynchronous to any changes\nat a microtask checkpoint. This is because observation is performed using\n`MutationObserver` and the `<slot>` element's `slotchange` event which\nare asynchronous.",
          "summary": "Class that listens for changes (additions or removals) to\n\"flattened nodes\" on a given `node`.",
          "path": "lib/utils/flattened-nodes-observer.html",
          "properties": [],
          "methods": [
            {
              "name": "connect",
              "description": "Activates an observer. This method is automatically called when\na `FlattenedNodesObserver` is created. It should only be called to\nre-activate an observer that has been deactivated via the `disconnect` method.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 98,
                  "column": 4
                },
                "end": {
                  "line": 117,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "disconnect",
              "description": "Deactivates the flattened nodes observer. After calling this method\nthe observer callback will not be called when changes to flattened nodes\noccur. The `connect` method may be subsequently called to reactivate\nthe observer.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 125,
                  "column": 4
                },
                "end": {
                  "line": 139,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_schedule",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 141,
                  "column": 4
                },
                "end": {
                  "line": 146,
                  "column": 5
                }
              },
              "metadata": {},
              "params": []
            },
            {
              "name": "_processMutations",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 148,
                  "column": 4
                },
                "end": {
                  "line": 151,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "mutations"
                }
              ]
            },
            {
              "name": "_processSlotMutations",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 153,
                  "column": 4
                },
                "end": {
                  "line": 165,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "mutations"
                }
              ]
            },
            {
              "name": "flush",
              "description": "Flushes the observer causing any pending changes to be immediately\ndelivered the observer callback. By default these changes are delivered\nasynchronously at the next microtask checkpoint.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 175,
                  "column": 4
                },
                "end": {
                  "line": 216,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [],
              "return": {
                "type": "boolean",
                "desc": "Returns true if any pending changes caused the observer\ncallback to run."
              }
            },
            {
              "name": "_listenSlots",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 218,
                  "column": 4
                },
                "end": {
                  "line": 225,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "nodeList"
                }
              ]
            },
            {
              "name": "_unlistenSlots",
              "description": "",
              "privacy": "protected",
              "sourceRange": {
                "start": {
                  "line": 227,
                  "column": 4
                },
                "end": {
                  "line": 234,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "nodeList"
                }
              ]
            }
          ],
          "staticMethods": [
            {
              "name": "getFlattenedNodes",
              "description": "Returns the list of flattened nodes for the given `node`.\nThis list consists of a node's children and, for any children\nthat are `<slot>` elements, the expanded flattened list of `assignedNodes`.\nFor example, if the observed node has children `<a></a><slot></slot><b></b>`\nand the `<slot>` has one `<div>` assigned to it, then the flattened\nnodes list is `<a></a><div></div><b></b>`. If the `<slot>` has other\n`<slot>` elements assigned to it, these are flattened as well.",
              "privacy": "public",
              "sourceRange": {
                "start": {
                  "line": 61,
                  "column": 4
                },
                "end": {
                  "line": 73,
                  "column": 5
                }
              },
              "metadata": {},
              "params": [
                {
                  "name": "node",
                  "type": "Node",
                  "description": "The node for which to return the list of flattened nodes."
                }
              ],
              "return": {
                "type": "Array",
                "desc": "The list of flattened nodes for the given `node`."
              }
            }
          ],
          "demos": [],
          "metadata": {},
          "sourceRange": {
            "start": {
              "line": 47,
              "column": 2
            },
            "end": {
              "line": 236,
              "column": 3
            }
          },
          "privacy": "public",
          "name": "Polymer.FlattenedNodesObserver"
        }
      ]
    }
  ],
  "classes": [
    {
      "description": "",
      "summary": "",
      "path": "gulpfile.js",
      "properties": [],
      "methods": [
        {
          "name": "_transform",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 43,
              "column": 2
            },
            "end": {
              "line": 50,
              "column": 3
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "file"
            },
            {
              "name": "enc"
            },
            {
              "name": "cb"
            }
          ]
        },
        {
          "name": "_flush",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 51,
              "column": 2
            },
            "end": {
              "line": 61,
              "column": 3
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "cb"
            }
          ]
        }
      ],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 38,
          "column": 0
        },
        "end": {
          "line": 62,
          "column": 1
        }
      },
      "privacy": "public",
      "superclass": "Transform",
      "name": "OldNameStream"
    },
    {
      "description": "",
      "summary": "",
      "path": "gulpfile.js",
      "properties": [],
      "methods": [
        {
          "name": "_transform",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 69,
              "column": 2
            },
            "end": {
              "line": 72,
              "column": 3
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "file"
            },
            {
              "name": "enc"
            },
            {
              "name": "cb"
            }
          ]
        }
      ],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 64,
          "column": 0
        },
        "end": {
          "line": 73,
          "column": 1
        }
      },
      "privacy": "public",
      "superclass": "Transform",
      "name": "Log"
    },
    {
      "description": "",
      "summary": "",
      "path": "gulpfile.js",
      "properties": [],
      "methods": [
        {
          "name": "_transform",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 80,
              "column": 2
            },
            "end": {
              "line": 83,
              "column": 3
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "file"
            },
            {
              "name": "enc"
            },
            {
              "name": "cb"
            }
          ]
        },
        {
          "name": "_flush",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 84,
              "column": 2
            },
            "end": {
              "line": 90,
              "column": 3
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "done"
            }
          ]
        }
      ],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 75,
          "column": 0
        },
        "end": {
          "line": 91,
          "column": 1
        }
      },
      "privacy": "public",
      "superclass": "Transform",
      "name": "Uniq"
    },
    {
      "description": "Node API wrapper class returned from `Polymer.dom.(target)` when\n`target` is a `Node`.",
      "summary": "",
      "path": "lib/legacy/polymer.dom.html",
      "properties": [],
      "methods": [
        {
          "name": "observeNodes",
          "description": "Returns an instance of `Polymer.FlattenedNodesObserver` that\nlistens for node changes on this element.",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 53,
              "column": 4
            },
            "end": {
              "line": 55,
              "column": 5
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "callback",
              "type": "Function",
              "description": "Called when direct or distributed children\n  of this element changes"
            }
          ],
          "return": {
            "type": "Polymer.FlattenedNodesObserver",
            "desc": "Observer instance"
          }
        },
        {
          "name": "unobserveNodes",
          "description": "Disconnects an observer previously created via `observeNodes`",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 63,
              "column": 4
            },
            "end": {
              "line": 65,
              "column": 5
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "observerHandle",
              "type": "Polymer.FlattenedNodesObserver",
              "description": "Observer instance\n  to disconnect."
            }
          ]
        },
        {
          "name": "notifyObserver",
          "description": "Provided as a backwards-compatible API only.  This method does nothing.",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 70,
              "column": 4
            },
            "end": {
              "line": 70,
              "column": 23
            }
          },
          "metadata": {},
          "params": []
        },
        {
          "name": "deepContains",
          "description": "Returns true if the provided node is contained with this element's\nlight-DOM children or shadow root, including any nested shadow roots\nof children therein.",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 81,
              "column": 4
            },
            "end": {
              "line": 93,
              "column": 5
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "node",
              "type": "Node",
              "description": "Node to test"
            }
          ],
          "return": {
            "type": "boolean",
            "desc": "Returns true if the given `node` is contained within\n  this element's light or shadow DOM."
          }
        },
        {
          "name": "getOwnerRoot",
          "description": "Returns the root node of this node.  Equivalent to `getRoodNode()`.",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 103,
              "column": 4
            },
            "end": {
              "line": 105,
              "column": 5
            }
          },
          "metadata": {},
          "params": [],
          "return": {
            "type": "Node",
            "desc": "Top most element in the dom tree in which the node\nexists. If the node is connected to a document this is either a\nshadowRoot or the document; otherwise, it may be the node\nitself or a node or document fragment containing it."
          }
        },
        {
          "name": "getDistributedNodes",
          "description": "For slot elements, returns the nodes assigned to the slot; otherwise\nan empty array. It is equivalent to `<slot>.addignedNodes({flatten:true})`.",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 113,
              "column": 4
            },
            "end": {
              "line": 117,
              "column": 5
            }
          },
          "metadata": {},
          "params": [],
          "return": {
            "type": "Array.<Node>",
            "desc": "Array of assigned nodes"
          }
        },
        {
          "name": "getDestinationInsertionPoints",
          "description": "Returns an array of all slots this element was distributed to.",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 124,
              "column": 4
            },
            "end": {
              "line": 132,
              "column": 5
            }
          },
          "metadata": {},
          "params": [],
          "return": {
            "type": "Array.<HTMLSlotElement>",
            "desc": "Description"
          }
        },
        {
          "name": "importNode",
          "description": "Calls `importNode` on the `ownerDocument` for this node.",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 142,
              "column": 4
            },
            "end": {
              "line": 146,
              "column": 5
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "node",
              "type": "Node",
              "description": "Node to import"
            },
            {
              "name": "deep",
              "type": "boolean",
              "description": "True if the node should be cloned deeply during\n  import"
            }
          ],
          "return": {
            "type": "Node",
            "desc": "Clone of given node imported to this owner document"
          }
        },
        {
          "name": "getEffectiveChildNodes",
          "description": "Returns a flattened list of all child nodes and nodes distributed\nto child slots.",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 154,
              "column": 4
            },
            "end": {
              "line": 156,
              "column": 5
            }
          },
          "metadata": {},
          "params": [],
          "return": {
            "type": "type",
            "desc": "Description"
          }
        },
        {
          "name": "queryDistributedElements",
          "description": "Returns a filtered list of flattened child elements for this element based\non the given selector.",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 165,
              "column": 4
            },
            "end": {
              "line": 175,
              "column": 5
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "selector",
              "type": "string",
              "description": "Selector to filter nodes against"
            }
          ],
          "return": {
            "type": "Array.<HTMLElement>",
            "desc": "List of flattened child elements"
          }
        }
      ],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 39,
          "column": 2
        },
        "end": {
          "line": 187,
          "column": 3
        }
      },
      "privacy": "public",
      "name": "DomApi"
    },
    {
      "description": "Event API wrapper class returned from `Polymer.dom.(target)` when\n`target` is an `Event`.",
      "summary": "",
      "path": "lib/legacy/polymer.dom.html",
      "properties": [],
      "methods": [],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 247,
          "column": 2
        },
        "end": {
          "line": 276,
          "column": 3
        }
      },
      "privacy": "public",
      "name": "EventApi"
    },
    {
      "description": "",
      "summary": "",
      "path": "lib/legacy/class.html",
      "properties": [],
      "methods": [
        {
          "name": "created",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 158,
              "column": 8
            },
            "end": {
              "line": 163,
              "column": 9
            }
          },
          "metadata": {},
          "params": []
        },
        {
          "name": "_registered",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 165,
              "column": 8
            },
            "end": {
              "line": 180,
              "column": 9
            }
          },
          "metadata": {},
          "params": []
        },
        {
          "name": "_applyListeners",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 182,
              "column": 8
            },
            "end": {
              "line": 189,
              "column": 9
            }
          },
          "metadata": {},
          "params": []
        },
        {
          "name": "_ensureAttributes",
          "description": "only apply if not already set.",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 194,
              "column": 8
            },
            "end": {
              "line": 201,
              "column": 9
            }
          },
          "metadata": {},
          "params": []
        },
        {
          "name": "ready",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 203,
              "column": 8
            },
            "end": {
              "line": 208,
              "column": 9
            }
          },
          "metadata": {},
          "params": []
        },
        {
          "name": "attached",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 210,
              "column": 8
            },
            "end": {
              "line": 215,
              "column": 9
            }
          },
          "metadata": {},
          "params": []
        },
        {
          "name": "detached",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 217,
              "column": 8
            },
            "end": {
              "line": 222,
              "column": 9
            }
          },
          "metadata": {},
          "params": []
        },
        {
          "name": "attributeChanged",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 224,
              "column": 8
            },
            "end": {
              "line": 229,
              "column": 8
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "name"
            },
            {
              "name": "old"
            },
            {
              "name": "value"
            }
          ]
        }
      ],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 136,
          "column": 6
        },
        "end": {
          "line": 230,
          "column": 7
        }
      },
      "privacy": "public",
      "superclass": "Base",
      "name": "PolymerGenerated"
    },
    {
      "description": "",
      "summary": "",
      "path": "lib/utils/templatize.html",
      "properties": [],
      "methods": [],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 46,
          "column": 41
        },
        "end": {
          "line": 46,
          "column": 49
        }
      },
      "privacy": "public"
    },
    {
      "description": "",
      "summary": "",
      "path": "lib/utils/templatize.html",
      "properties": [],
      "methods": [
        {
          "name": "_configureProperties",
          "description": "Configure the given `props` by calling `_setPendingProperty`. Also\nsets any properties stored in `__hostProps`.",
          "privacy": "private",
          "sourceRange": {
            "start": {
              "line": 74,
              "column": 6
            },
            "end": {
              "line": 86,
              "column": 7
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "props",
              "type": "Object",
              "description": "Object of property name-value pairs to set."
            }
          ]
        },
        {
          "name": "forwardHostProp",
          "description": "Forwards a host property to this instance.  This method should be\ncalled on instances from the `options.forwardHostProp` callback\nto propagate changes of host properties to each instance.\n\nNote this method enqueues the change, which are flushed as a batch.",
          "privacy": "public",
          "sourceRange": {
            "start": {
              "line": 97,
              "column": 6
            },
            "end": {
              "line": 101,
              "column": 7
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "prop",
              "type": "string",
              "description": "Property or path name"
            },
            {
              "name": "value",
              "type": "*",
              "description": "Value of the property to forward"
            }
          ]
        },
        {
          "name": "_addEventListenerToNode",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 105,
              "column": 6
            },
            "end": {
              "line": 121,
              "column": 7
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "node"
            },
            {
              "name": "eventName"
            },
            {
              "name": "handler"
            }
          ]
        },
        {
          "name": "_showHideChildren",
          "description": "Shows or hides the template instance top level child elements. For\ntext nodes, `textContent` is removed while \"hidden\" and replaced when\n\"shown.\"",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 130,
              "column": 6
            },
            "end": {
              "line": 157,
              "column": 7
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "hide",
              "type": "boolean",
              "description": "Set to true to hide the children;\nset to false to show them."
            }
          ]
        },
        {
          "name": "_setUnmanagedPropertyToNode",
          "description": "Overrides default property-effects implementation to intercept\ntextContent bindings while children are \"hidden\" and cache in\nprivate storage for later retrieval.",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 165,
              "column": 6
            },
            "end": {
              "line": 172,
              "column": 7
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "node"
            },
            {
              "name": "prop"
            },
            {
              "name": "value"
            }
          ]
        }
      ],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 47,
          "column": 4
        },
        "end": {
          "line": 194,
          "column": 5
        }
      },
      "privacy": "public",
      "superclass": "base",
      "name": "TemplateInstanceBase"
    },
    {
      "description": "",
      "summary": "",
      "path": "lib/utils/templatize.html",
      "properties": [],
      "methods": [],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 215,
          "column": 18
        },
        "end": {
          "line": 215,
          "column": 40
        }
      },
      "privacy": "public",
      "superclass": "base",
      "name": "klass"
    },
    {
      "description": "",
      "summary": "",
      "path": "lib/utils/templatize.html",
      "properties": [],
      "methods": [],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 230,
          "column": 12
        },
        "end": {
          "line": 230,
          "column": 53
        }
      },
      "privacy": "public",
      "superclass": "base",
      "name": "templateInfo.templatizeTemplateClass"
    },
    {
      "description": "Subclass base class and add reference for this specific template",
      "summary": "",
      "path": "lib/utils/templatize.html",
      "properties": [],
      "methods": [],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 415,
          "column": 20
        },
        "end": {
          "line": 415,
          "column": 63
        }
      },
      "privacy": "public",
      "superclass": "baseClass",
      "name": "klass"
    },
    {
      "description": "",
      "summary": "",
      "path": "util/minimalDocument.js",
      "properties": [],
      "methods": [
        {
          "name": "_transform",
          "description": "",
          "privacy": "protected",
          "sourceRange": {
            "start": {
              "line": 60,
              "column": 2
            },
            "end": {
              "line": 93,
              "column": 3
            }
          },
          "metadata": {},
          "params": [
            {
              "name": "file"
            },
            {
              "name": "enc"
            },
            {
              "name": "cb"
            }
          ]
        }
      ],
      "staticMethods": [],
      "demos": [],
      "metadata": {},
      "sourceRange": {
        "start": {
          "line": 56,
          "column": 0
        },
        "end": {
          "line": 94,
          "column": 1
        }
      },
      "privacy": "public",
      "superclass": "Transform",
      "name": "MinimalDocTransform"
    }
  ]
}
