{"version":3,"file":"ractive.mjs","sources":["../../../src/polyfills/Object.assign.js","../../../src/utils/object.js","../../../src/utils/is.js","../../../src/polyfills/array.find.js","../../../src/polyfills/node.contains.js","../../../src/polyfills/performance.now.js","../../../src/polyfills/Promise.js","../../../src/polyfills/requestAnimationFrame.js","../../../src/Ractive/config/defaults.js","../../../src/Ractive/static/easing.js","../../../src/config/environment.js","../../../src/utils/noop.js","../../../src/utils/log.js","../../../src/config/errors.js","../../../src/shared/registry.js","../../../src/shared/interpolate.js","../../../src/Ractive/static/interpolators.js","../../../src/shared/keypaths.js","../../../src/utils/array.js","../../../src/utils/bind.js","../../../src/model/ModelBase.js","../../../src/global/capture.js","../../../src/shared/methodCallers.js","../../../src/shared/rebind.js","../../../src/model/LinkModel.js","../../../src/parse/utils/createFunction.js","../../../src/shared/getFunction.js","../../../src/config/template.js","../../../src/parse/Parser.js","../../../src/config/types.js","../../../src/parse/converters/mustache/readDelimiterChange.js","../../../src/parse/converters/expressions/primary/literal/readRegexpLiteral.js","../../../src/utils/escapeRegExp.js","../../../src/parse/converters/utils/getLowestIndex.js","../../../src/utils/html.js","../../../src/parse/converters/expressions/shared/errors.js","../../../src/parse/converters/expressions/primary/literal/readNumberLiteral.js","../../../src/parse/converters/expressions/primary/literal/readBooleanLiteral.js","../../../src/parse/converters/expressions/primary/literal/stringLiteral/makeQuotedStringMatcher.js","../../../src/parse/converters/expressions/primary/literal/readStringLiteral.js","../../../src/parse/converters/expressions/primary/literal/readTemplateStringLiteral.js","../../../src/parse/converters/expressions/shared/patterns.js","../../../src/parse/converters/expressions/shared/readKey.js","../../../src/parse/converters/expressions/primary/literal/objectLiteral/keyValuePair.js","../../../src/parse/converters/expressions/primary/literal/objectLiteral/keyValuePairs.js","../../../src/parse/converters/expressions/primary/literal/readObjectLiteral.js","../../../src/parse/converters/expressions/primary/literal/readArrayLiteral.js","../../../src/parse/converters/expressions/primary/readLiteral.js","../../../src/parse/converters/expressions/primary/readReference.js","../../../src/parse/converters/expressions/primary/readBracketedExpression.js","../../../src/parse/converters/expressions/readPrimary.js","../../../src/parse/converters/expressions/shared/readRefinement.js","../../../src/parse/converters/expressions/readMemberOrInvocation.js","../../../src/parse/converters/expressions/readTypeof.js","../../../src/parse/converters/expressions/readLogicalOr.js","../../../src/parse/converters/expressions/readConditional.js","../../../src/parse/converters/readExpression.js","../../../src/parse/converters/expressions/shared/readExpressionList.js","../../../src/parse/converters/readExpressionOrReference.js","../../../src/parse/utils/flattenExpression.js","../../../src/parse/utils/refineExpression.js","../../../src/parse/converters/element/readAttribute.js","../../../src/parse/converters/readMustache.js","../../../src/parse/converters/mustache/readTriple.js","../../../src/parse/converters/mustache/readUnescaped.js","../../../src/parse/converters/mustache/readAliases.js","../../../src/parse/converters/mustache/readPartial.js","../../../src/parse/converters/mustache/readMustacheComment.js","../../../src/parse/converters/mustache/readInterpolator.js","../../../src/parse/converters/mustache/section/readClosing.js","../../../src/parse/converters/mustache/section/readInlineBlock.js","../../../src/parse/converters/mustache/handlebarsBlockCodes.js","../../../src/parse/converters/mustache/readSection.js","../../../src/parse/converters/readHtmlComment.js","../../../src/parse/utils/stripStandalones.js","../../../src/parse/utils/trimWhitespace.js","../../../src/parse/utils/cleanup.js","../../../src/parse/converters/element/readClosingTag.js","../../../src/utils/hyphenateCamel.js","../../../src/parse/converters/readElement.js","../../../src/parse/converters/readText.js","../../../src/parse/converters/readPartialDefinitionSection.js","../../../src/parse/converters/readTemplate.js","../../../src/parse/utils/insertExpressions.js","../../../src/Ractive/shared.js","../../../src/parse/_parse.js","../../../src/Ractive/config/runtime-parser.js","../../../src/Ractive/helpers/getComputationSignature.js","../../../src/global/TransitionManager.js","../../../src/global/runloop.js","../../../src/shared/Ticker.js","../../../src/model/helpers/getPrefixer.js","../../../src/model/Model.js","../../../src/model/specials/SharedModel.js","../../../src/view/resolvers/resolveReference.js","../../../src/shared/getRactiveContext.js","../../../src/shared/set.js","../../../src/Ractive/prototype/shared/add.js","../../../src/Ractive/prototype/add.js","../../../src/Ractive/prototype/animate.js","../../../src/events/eventStack.js","../../../src/events/fireEvent.js","../../../src/events/Hook.js","../../../src/shared/anchors.js","../../../src/Ractive/prototype/attachChild.js","../../../src/Ractive/prototype/compute.js","../../../src/Ractive/prototype/detach.js","../../../src/Ractive/prototype/detachChild.js","../../../src/Ractive/prototype/find.js","../../../src/Ractive/prototype/findAll.js","../../../src/Ractive/prototype/findAllComponents.js","../../../src/Ractive/prototype/findComponent.js","../../../src/Ractive/prototype/findContainer.js","../../../src/Ractive/prototype/findParent.js","../../../src/view/items/shared/findElement.js","../../../src/shared/getNewIndices.js","../../../src/Ractive/prototype/shared/makeArrayMethod.js","../../../src/Ractive/prototype/update.js","../../../src/shared/Context.js","../../../src/Ractive/prototype/fire.js","../../../src/Ractive/prototype/get.js","../../../src/Ractive/static/getContext.js","../../../src/Ractive/prototype/getContext.js","../../../src/config/namespaces.js","../../../src/utils/dom.js","../../../src/Ractive/prototype/insert.js","../../../src/Ractive/prototype/link.js","../../../src/Ractive/prototype/observe/Observer.js","../../../src/Ractive/prototype/observe/Pattern.js","../../../src/Ractive/prototype/observe/Array.js","../../../src/Ractive/prototype/observe.js","../../../src/Ractive/prototype/observeOnce.js","../../../src/Ractive/prototype/shared/trim.js","../../../src/Ractive/prototype/shared/notEmptyString.js","../../../src/Ractive/prototype/off.js","../../../src/Ractive/prototype/on.js","../../../src/Ractive/prototype/once.js","../../../src/Ractive/prototype/pop.js","../../../src/Ractive/prototype/push.js","../../../src/Ractive/prototype/readLink.js","../../../src/global/css.js","../../../src/Ractive/config/custom/adapt.js","../../../src/utils/cleanCss.js","../../../src/Ractive/config/custom/css/transform.js","../../../src/utils/id.js","../../../src/Ractive/static/styleSet.js","../../../src/model/specials/CSSModel.js","../../../src/Ractive/config/custom/css/css.js","../../../src/Ractive/config/custom/data.js","../../../src/Ractive/config/custom/template.js","../../../src/Ractive/config/registries.js","../../../src/Ractive/config/wrapPrototypeMethod.js","../../../src/Ractive/config/deprecate.js","../../../src/Ractive/config/config.js","../../../src/view/items/shared/Item.js","../../../src/model/ComputationChild.js","../../../src/model/Computation.js","../../../src/view/resolvers/ExpressionProxy.js","../../../src/view/resolvers/ReferenceExpressionProxy.js","../../../src/view/resolvers/resolve.js","../../../src/view/items/Alias.js","../../../src/view/helpers/specialAttrs.js","../../../src/view/items/element/attribute/getUpdateDelegate.js","../../../src/view/items/element/attribute/propertyNames.js","../../../src/view/items/element/ConditionalAttribute.js","../../../src/view/items/element/Attribute.js","../../../src/view/items/element/BindingFlag.js","../../../src/view/items/Comment.js","../../../src/Ractive/prototype/teardown.js","../../../src/model/specials/RactiveModel.js","../../../src/model/RootModel.js","../../../src/Ractive/helpers/subscribe.js","../../../src/Ractive/construct.js","../../../src/view/items/Component.js","../../../src/view/items/shared/directiveArgs.js","../../../src/view/items/element/Decorator.js","../../../src/view/items/Doctype.js","../../../src/view/items/element/binding/Binding.js","../../../src/view/items/element/binding/handleDomEvent.js","../../../src/view/items/element/binding/CheckboxBinding.js","../../../src/view/items/element/binding/getBindingGroup.js","../../../src/view/items/element/binding/CheckboxNameBinding.js","../../../src/view/items/element/binding/ContentEditableBinding.js","../../../src/view/items/element/binding/GenericBinding.js","../../../src/view/items/element/binding/FileBinding.js","../../../src/utils/getSelectedOptions.js","../../../src/view/items/element/binding/MultipleSelectBinding.js","../../../src/view/items/element/binding/NumericBinding.js","../../../src/view/items/element/binding/RadioBinding.js","../../../src/view/items/element/binding/RadioNameBinding.js","../../../src/view/items/element/binding/SingleSelectBinding.js","../../../src/view/items/element/binding/selectBinding.js","../../../src/view/items/Element.js","../../../src/view/items/element/specials/Form.js","../../../src/view/items/element/ElementEvents.js","../../../src/view/items/component/RactiveEvent.js","../../../src/view/items/shared/EventDirective.js","../../../src/view/items/shared/progressiveText.js","../../../src/view/items/shared/Mustache.js","../../../src/view/items/Interpolator.js","../../../src/view/items/element/specials/Input.js","../../../src/utils/parseJSON.js","../../../src/view/items/component/Mapping.js","../../../src/view/items/element/specials/Option.js","../../../src/view/items/partial/getPartialTemplate.js","../../../src/view/items/Partial.js","../../../src/model/specials/KeyModel.js","../../../src/view/RepeatedFragment.js","../../../src/view/items/Section.js","../../../src/view/items/element/specials/Select.js","../../../src/view/items/element/specials/Textarea.js","../../../src/view/items/Text.js","../../../src/config/visibility.js","../../../src/view/items/element/transitions/prefix.js","../../../src/view/items/element/transitions/hyphenate.js","../../../src/view/items/element/transitions/createTransitions.js","../../../src/view/items/element/Transition.js","../../../src/view/items/triple/insertHtml.js","../../../src/view/items/Triple.js","../../../src/view/items/component/getComponentConstructor.js","../../../src/view/items/asyncProxy.js","../../../src/view/items/Await.js","../../../src/view/items/createItem.js","../../../src/view/helpers/processItems.js","../../../src/view/Fragment.js","../../../src/Ractive/initialise.js","../../../src/Ractive/render.js","../../../src/Ractive/prototype/render.js","../../../src/Ractive/prototype/reset.js","../../../src/Ractive/prototype/resetPartial.js","../../../src/Ractive/prototype/resetTemplate.js","../../../src/Ractive/prototype/reverse.js","../../../src/Ractive/prototype/set.js","../../../src/Ractive/prototype/shift.js","../../../src/Ractive/prototype/sort.js","../../../src/Ractive/prototype/splice.js","../../../src/Ractive/prototype/subtract.js","../../../src/Ractive/prototype/toggle.js","../../../src/Ractive/prototype/toCSS.js","../../../src/Ractive/prototype/toHTML.js","../../../src/Ractive/prototype/toText.js","../../../src/Ractive/prototype/transition.js","../../../src/Ractive/prototype/unlink.js","../../../src/Ractive/prototype/unrender.js","../../../src/Ractive/prototype/unshift.js","../../../src/Ractive/prototype/updateModel.js","../../../src/Ractive/prototype/use.js","../../../src/Ractive/prototype.js","../../../src/Ractive/static/isInstance.js","../../../src/Ractive/static/styleGet.js","../../../src/Ractive/static/styles.js","../../../src/Ractive/static/sharedSet.js","../../../src/Ractive/static/sharedGet.js","../../../src/Ractive/static/use.js","../../../src/extend/_extend.js","../../../src/extend/_macro.js","../../../src/Ractive/static/keypaths.js","../../../src/Ractive/static/findPlugin.js","../../../src/Ractive.js"],"sourcesContent":["/* istanbul ignore if */\nif (!Object.assign) {\n  Object.assign = function(target, ...sources) {\n    if (target == null) throw new TypeError('Cannot convert undefined or null to object');\n\n    const to = Object(target);\n    const sourcesLength = sources.length;\n\n    for (let index = 0; index < sourcesLength; index++) {\n      const nextSource = sources[index];\n      for (const nextKey in nextSource) {\n        if (!Object.prototype.hasOwnProperty.call(nextSource, nextKey)) continue;\n        to[nextKey] = nextSource[nextKey];\n      }\n    }\n\n    return to;\n  };\n}\n","export function hasOwn(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function fillGaps(target, ...sources) {\n  for (let i = 0; i < sources.length; i++) {\n    const source = sources[i];\n    for (const key in source) {\n      // Source can be a prototype-less object.\n      if (key in target || !hasOwn(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nexport function toPairs(obj = {}) {\n  const pairs = [];\n  for (const key in obj) {\n    // Source can be a prototype-less object.\n    if (!hasOwn(obj, key)) continue;\n    pairs.push([key, obj[key]]);\n  }\n  return pairs;\n}\n\nconst obj = Object;\n\nexport const assign = obj.assign;\n\nexport const create = obj.create;\n\nexport const defineProperty = obj.defineProperty;\n\nexport const defineProperties = obj.defineProperties;\n\nexport const keys = obj.keys;\n","const toString = Object.prototype.toString;\nconst arrayLikePattern = /^\\[object (?:Array|FileList)\\]$/;\n\nexport function isArrayLike(obj) {\n  return arrayLikePattern.test(toString.call(obj));\n}\n\nexport const isArray = Array.isArray;\n\nexport function isEqual(a, b) {\n  if (a === null && b === null) {\n    return true;\n  }\n\n  if (isObjectType(a) || isObjectType(b)) {\n    return false;\n  }\n\n  return a === b;\n}\n\n// http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric\nexport function isNumeric(thing) {\n  return !isNaN(parseFloat(thing)) && isFinite(thing);\n}\n\nexport function isObject(thing) {\n  return thing && toString.call(thing) === '[object Object]';\n}\n\nexport function isObjectLike(thing) {\n  return !!(thing && (isObjectType(thing) || isFunction(thing)));\n}\n\nexport function isObjectType(thing) {\n  return typeof thing === 'object';\n}\n\nexport function isFunction(thing) {\n  return typeof thing === 'function';\n}\n\nexport function isString(thing) {\n  return typeof thing === 'string';\n}\n\nexport function isNumber(thing) {\n  return typeof thing === 'number';\n}\n","import { hasOwn, defineProperty } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\n/* istanbul ignore if */\nif (!Array.prototype.find) {\n  defineProperty(Array.prototype, 'find', {\n    value(callback, thisArg) {\n      if (this === null || this === undefined)\n        throw new TypeError('Array.prototype.find called on null or undefined');\n\n      if (!isFunction(callback)) throw new TypeError(`${callback} is not a function`);\n\n      const array = Object(this);\n      const arrayLength = array.length >>> 0;\n\n      for (let index = 0; index < arrayLength; index++) {\n        if (!hasOwn(array, index)) continue;\n        if (!callback.call(thisArg, array[index], index, array)) continue;\n        return array[index];\n      }\n\n      return undefined;\n    },\n    configurable: true,\n    writable: true\n  });\n}\n","// NOTE: Node doesn't exist in IE8. Nothing can be done.\n/* istanbul ignore if */\nif (\n  typeof window !== 'undefined' &&\n  window.Node &&\n  window.Node.prototype &&\n  !window.Node.prototype.contains\n) {\n  Node.prototype.contains = function(node) {\n    if (!node) throw new TypeError('node required');\n\n    do {\n      if (this === node) return true;\n    } while ((node = node && node.parentNode));\n\n    return false;\n  };\n}\n","/* istanbul ignore if */\nif (typeof window !== 'undefined' && window.performance && !window.performance.now) {\n  window.performance = window.performance || {};\n\n  const nowOffset = Date.now();\n\n  window.performance.now = function() {\n    return Date.now() - nowOffset;\n  };\n}\n","import { isFunction, isObjectType } from 'utils/is';\n\n/* istanbul ignore if */\nif (typeof window !== 'undefined' && !window.Promise) {\n  const PENDING = {};\n  const FULFILLED = {};\n  const REJECTED = {};\n\n  const Promise = (window.Promise = function(callback) {\n    const fulfilledHandlers = [];\n    const rejectedHandlers = [];\n    let state = PENDING;\n    let result;\n    let dispatchHandlers;\n\n    const makeResolver = newState => {\n      return function(value) {\n        if (state !== PENDING) return;\n        result = value;\n        state = newState;\n        dispatchHandlers = makeDispatcher(\n          state === FULFILLED ? fulfilledHandlers : rejectedHandlers,\n          result\n        );\n        wait(dispatchHandlers);\n      };\n    };\n\n    const fulfill = makeResolver(FULFILLED);\n    const reject = makeResolver(REJECTED);\n\n    try {\n      callback(fulfill, reject);\n    } catch (err) {\n      reject(err);\n    }\n\n    return {\n      // `then()` returns a Promise - 2.2.7\n      then(onFulfilled, onRejected) {\n        const promise2 = new Promise((fulfill, reject) => {\n          const processResolutionHandler = (handler, handlers, forward) => {\n            if (isFunction(handler)) {\n              handlers.push(p1result => {\n                try {\n                  resolve(promise2, handler(p1result), fulfill, reject);\n                } catch (err) {\n                  reject(err);\n                }\n              });\n            } else {\n              handlers.push(forward);\n            }\n          };\n\n          processResolutionHandler(onFulfilled, fulfilledHandlers, fulfill);\n          processResolutionHandler(onRejected, rejectedHandlers, reject);\n\n          if (state !== PENDING) {\n            wait(dispatchHandlers);\n          }\n        });\n        return promise2;\n      },\n      catch(onRejected) {\n        return this.then(null, onRejected);\n      }\n    };\n  });\n\n  Promise.all = function(promises) {\n    return new Promise((fulfil, reject) => {\n      const result = [];\n      let pending;\n      let i;\n\n      if (!promises.length) {\n        fulfil(result);\n        return;\n      }\n\n      const processPromise = (promise, i) => {\n        if (promise && isFunction(promise.then)) {\n          promise.then(value => {\n            result[i] = value;\n            --pending || fulfil(result);\n          }, reject);\n        } else {\n          result[i] = promise;\n          --pending || fulfil(result);\n        }\n      };\n\n      pending = i = promises.length;\n\n      while (i--) {\n        processPromise(promises[i], i);\n      }\n    });\n  };\n\n  Promise.resolve = function(value) {\n    return new Promise(fulfill => {\n      fulfill(value);\n    });\n  };\n\n  Promise.reject = function(reason) {\n    return new Promise((fulfill, reject) => {\n      reject(reason);\n    });\n  };\n\n  // TODO use MutationObservers or something to simulate setImmediate\n  const wait = function(callback) {\n    setTimeout(callback, 0);\n  };\n\n  const makeDispatcher = function(handlers, result) {\n    return function() {\n      for (let handler; (handler = handlers.shift()); ) {\n        handler(result);\n      }\n    };\n  };\n\n  const resolve = function(promise, x, fulfil, reject) {\n    let then;\n    if (x === promise) {\n      throw new TypeError(`A promise's fulfillment handler cannot return the same promise`);\n    }\n    if (x instanceof Promise) {\n      x.then(fulfil, reject);\n    } else if (x && (isObjectType(x) || isFunction(x))) {\n      try {\n        then = x.then;\n      } catch (e) {\n        reject(e);\n        return;\n      }\n      if (isFunction(then)) {\n        let called;\n\n        const resolvePromise = function(y) {\n          if (called) return;\n          called = true;\n          resolve(promise, y, fulfil, reject);\n        };\n        const rejectPromise = function(r) {\n          if (called) return;\n          called = true;\n          reject(r);\n        };\n\n        try {\n          then.call(x, resolvePromise, rejectPromise);\n        } catch (e) {\n          if (!called) {\n            reject(e);\n            called = true;\n            return;\n          }\n        }\n      } else {\n        fulfil(x);\n      }\n    } else {\n      fulfil(x);\n    }\n  };\n}\n","/* istanbul ignore if */\nif (\n  typeof window !== 'undefined' &&\n  !(window.requestAnimationFrame && window.cancelAnimationFrame)\n) {\n  let lastTime = 0;\n  window.requestAnimationFrame = function(callback) {\n    const currentTime = Date.now();\n    const timeToNextCall = Math.max(0, 16 - (currentTime - lastTime));\n    const id = window.setTimeout(() => {\n      callback(currentTime + timeToNextCall);\n    }, timeToNextCall);\n    lastTime = currentTime + timeToNextCall;\n    return id;\n  };\n  window.cancelAnimationFrame = function(id) {\n    clearTimeout(id);\n  };\n}\n","import { create } from 'utils/object';\n\nexport default {\n  // render placement:\n  el: void 0,\n  append: false,\n  delegate: true,\n  enhance: false,\n\n  // template:\n  template: null,\n\n  // parse:\n  allowExpressions: true,\n  delimiters: ['{{', '}}'],\n  tripleDelimiters: ['{{{', '}}}'],\n  staticDelimiters: ['[[', ']]'],\n  staticTripleDelimiters: ['[[[', ']]]'],\n  csp: true,\n  interpolate: false,\n  preserveWhitespace: false,\n  sanitize: false,\n  stripComments: true,\n  contextLines: 0,\n\n  // data & binding:\n  data: create(null),\n  helpers: create(null),\n  computed: create(null),\n  syncComputedChildren: false,\n  resolveInstanceMembers: false,\n  warnAboutAmbiguity: false,\n  adapt: [],\n  isolated: true,\n  twoway: true,\n  lazy: false,\n\n  // transitions:\n  noIntro: false,\n  noOutro: false,\n  transitionsEnabled: true,\n  complete: void 0,\n  nestedTransitions: true,\n\n  // css:\n  css: null,\n  noCssTransform: false\n};\n","// These are a subset of the easing equations found at\n// https://raw.github.com/danro/easing-js - license info\n// follows:\n\n// --------------------------------------------------\n// easing.js v0.5.4\n// Generic set of easing functions with AMD support\n// https://github.com/danro/easing-js\n// This code may be freely distributed under the MIT license\n// http://danro.mit-license.org/\n// --------------------------------------------------\n// All functions adapted from Thomas Fuchs & Jeremy Kahn\n// Easing Equations (c) 2003 Robert Penner, BSD license\n// https://raw.github.com/danro/easing-js/master/LICENSE\n// --------------------------------------------------\n\n// In that library, the functions named easeIn, easeOut, and\n// easeInOut below are named easeInCubic, easeOutCubic, and\n// (you guessed it) easeInOutCubic.\n//\n// You can add additional easing functions to this list, and they\n// will be globally available.\n\nexport default {\n  linear(pos) {\n    return pos;\n  },\n  easeIn(pos) {\n    /* istanbul ignore next */\n    return Math.pow(pos, 3);\n  },\n  easeOut(pos) {\n    return Math.pow(pos - 1, 3) + 1;\n  },\n  easeInOut(pos) {\n    /* istanbul ignore next */\n    if ((pos /= 0.5) < 1) {\n      return 0.5 * Math.pow(pos, 3);\n    }\n    /* istanbul ignore next */\n    return 0.5 * (Math.pow(pos - 2, 3) + 2);\n  }\n};\n","/* eslint no-console:\"off\" */\nimport { isFunction } from 'utils/is';\n\nconst win = typeof window !== 'undefined' ? window : null;\nconst doc = win ? document : null;\nconst isClient = !!doc;\nconst hasConsole =\n  typeof console !== 'undefined' && isFunction(console.warn) && isFunction(console.warn.apply);\n\nconst svg = doc\n  ? doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')\n  : false;\n\nconst vendors = ['o', 'ms', 'moz', 'webkit'];\n\nexport { win, doc, isClient, hasConsole, svg, vendors };\n","export default function() {}\n","/* global console */\n/* eslint no-console:\"off\" */\n\nimport { hasConsole } from '../config/environment';\nimport Ractive from '../Ractive';\nimport noop from './noop';\nimport { isObjectType } from 'utils/is';\n\nconst alreadyWarned = {};\nlet log, printWarning, welcome;\n\nif (hasConsole) {\n  const welcomeIntro = [\n    `%cRactive.js %c0.10.10 %cin debug mode, %cmore...`,\n    'color: rgb(114, 157, 52); font-weight: normal;',\n    'color: rgb(85, 85, 85); font-weight: normal;',\n    'color: rgb(85, 85, 85); font-weight: normal;',\n    'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'\n  ];\n  const welcomeMessage = `You're running Ractive 0.10.10 in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\n\nTo disable debug mode, add this line at the start of your app:\n  Ractive.DEBUG = false;\n\nTo disable debug mode when your app is minified, add this snippet:\n  Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\n\nGet help and support:\n  http://ractive.js.org\n  http://stackoverflow.com/questions/tagged/ractivejs\n  http://groups.google.com/forum/#!forum/ractive-js\n  http://twitter.com/ractivejs\n\nFound a bug? Raise an issue:\n  https://github.com/ractivejs/ractive/issues\n\n`;\n\n  welcome = () => {\n    if (Ractive.WELCOME_MESSAGE === false) {\n      welcome = noop;\n      return;\n    }\n    const message = 'WELCOME_MESSAGE' in Ractive ? Ractive.WELCOME_MESSAGE : welcomeMessage;\n    const hasGroup = !!console.groupCollapsed;\n    if (hasGroup) console.groupCollapsed.apply(console, welcomeIntro);\n    console.log(message);\n    if (hasGroup) {\n      console.groupEnd(welcomeIntro);\n    }\n\n    welcome = noop;\n  };\n\n  printWarning = (message, args) => {\n    welcome();\n\n    // extract information about the instance this message pertains to, if applicable\n    if (isObjectType(args[args.length - 1])) {\n      const options = args.pop();\n      const ractive = options ? options.ractive : null;\n\n      if (ractive) {\n        // if this is an instance of a component that we know the name of, add\n        // it to the message\n        let name;\n        if (ractive.component && (name = ractive.component.name)) {\n          message = `<${name}> ${message}`;\n        }\n\n        let node;\n        if (\n          (node =\n            options.node || (ractive.fragment && ractive.fragment.rendered && ractive.find('*')))\n        ) {\n          args.push(node);\n        }\n      }\n    }\n\n    console.warn.apply(\n      console,\n      ['%cRactive.js: %c' + message, 'color: rgb(114, 157, 52);', 'color: rgb(85, 85, 85);'].concat(\n        args\n      )\n    );\n  };\n\n  log = function() {\n    console.log.apply(console, arguments);\n  };\n} else {\n  printWarning = log = welcome = noop;\n}\n\nfunction format(message, args) {\n  return message.replace(/%s/g, () => args.shift());\n}\n\nfunction fatal(message, ...args) {\n  message = format(message, args);\n  throw new Error(message);\n}\n\nfunction logIfDebug() {\n  if (Ractive.DEBUG) {\n    log.apply(null, arguments);\n  }\n}\n\nfunction warn(message, ...args) {\n  message = format(message, args);\n  printWarning(message, args);\n}\n\nfunction warnOnce(message, ...args) {\n  message = format(message, args);\n\n  if (alreadyWarned[message]) {\n    return;\n  }\n\n  alreadyWarned[message] = true;\n  printWarning(message, args);\n}\n\nfunction warnIfDebug() {\n  if (Ractive.DEBUG) {\n    warn.apply(null, arguments);\n  }\n}\n\nfunction warnOnceIfDebug() {\n  if (Ractive.DEBUG) {\n    warnOnce.apply(null, arguments);\n  }\n}\n\nexport { fatal, log, logIfDebug, warn, warnOnce, warnIfDebug, warnOnceIfDebug, welcome };\n","// Error messages that are used (or could be) in multiple places\nexport const badArguments = 'Bad arguments';\nexport const noRegistryFunctionReturn =\n  'A function was specified for \"%s\" %s, but no %s was returned';\nexport const missingPlugin = (name, type) =>\n  `Missing \"${name}\" ${type} plugin. You may need to download a plugin via http://ractive.js.org/integrations/#${type}s`;\n","export function findInViewHierarchy(registryName, ractive, name) {\n  const instance = findInstance(registryName, ractive, name);\n  return instance ? instance[registryName][name] : null;\n}\n\nexport function findInstance(registryName, ractive, name) {\n  while (ractive) {\n    if (name in ractive[registryName]) {\n      return ractive;\n    }\n\n    if (ractive.isolated) {\n      return null;\n    }\n\n    ractive = ractive.parent;\n  }\n}\n","import { fatal } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport interpolators from '../Ractive/static/interpolators';\nimport { findInViewHierarchy } from './registry';\n\nexport default function interpolate(from, to, ractive, type) {\n  if (from === to) return null;\n\n  if (type) {\n    const interpol = findInViewHierarchy('interpolators', ractive, type);\n    if (interpol) return interpol(from, to) || null;\n\n    fatal(missingPlugin(type, 'interpolator'));\n  }\n\n  return (\n    interpolators.number(from, to) ||\n    interpolators.array(from, to) ||\n    interpolators.object(from, to) ||\n    null\n  );\n}\n","import { isArray, isObject, isNumeric } from 'utils/is';\nimport interpolate from 'shared/interpolate';\nimport { hasOwn } from 'utils/object';\n\nconst interpolators = {\n  number(from, to) {\n    if (!isNumeric(from) || !isNumeric(to)) {\n      return null;\n    }\n\n    from = +from;\n    to = +to;\n\n    const delta = to - from;\n\n    if (!delta) {\n      return function() {\n        return from;\n      };\n    }\n\n    return function(t) {\n      return from + t * delta;\n    };\n  },\n\n  array(from, to) {\n    let len, i;\n\n    if (!isArray(from) || !isArray(to)) {\n      return null;\n    }\n\n    const intermediate = [];\n    const interpolators = [];\n\n    i = len = Math.min(from.length, to.length);\n    while (i--) {\n      interpolators[i] = interpolate(from[i], to[i]);\n    }\n\n    // surplus values - don't interpolate, but don't exclude them either\n    for (i = len; i < from.length; i += 1) {\n      intermediate[i] = from[i];\n    }\n\n    for (i = len; i < to.length; i += 1) {\n      intermediate[i] = to[i];\n    }\n\n    return function(t) {\n      let i = len;\n\n      while (i--) {\n        intermediate[i] = interpolators[i](t);\n      }\n\n      return intermediate;\n    };\n  },\n\n  object(from, to) {\n    if (!isObject(from) || !isObject(to)) {\n      return null;\n    }\n\n    const properties = [];\n    const intermediate = {};\n    const interpolators = {};\n\n    for (const prop in from) {\n      if (hasOwn(from, prop)) {\n        if (hasOwn(to, prop)) {\n          properties.push(prop);\n          interpolators[prop] = interpolate(from[prop], to[prop]) || (() => to[prop]);\n        } else {\n          intermediate[prop] = from[prop];\n        }\n      }\n    }\n\n    for (const prop in to) {\n      if (hasOwn(to, prop) && !hasOwn(from, prop)) {\n        intermediate[prop] = to[prop];\n      }\n    }\n\n    const len = properties.length;\n\n    return function(t) {\n      let i = len;\n\n      while (i--) {\n        const prop = properties[i];\n\n        intermediate[prop] = interpolators[prop](t);\n      }\n\n      return intermediate;\n    };\n  }\n};\n\nexport default interpolators;\n","import { isString } from 'utils/is';\n\nconst refPattern = /\\[\\s*(\\*|[0-9]|[1-9][0-9]+)\\s*\\]/g;\nconst splitPattern = /([^\\\\](?:\\\\\\\\)*)\\./;\nconst escapeKeyPattern = /\\\\|\\./g;\nconst unescapeKeyPattern = /((?:\\\\)+)\\1|\\\\(\\.)/g;\n\nexport function escapeKey(key) {\n  if (isString(key)) {\n    return key.replace(escapeKeyPattern, '\\\\$&');\n  }\n\n  return key;\n}\n\nexport function normalise(ref) {\n  return ref ? ref.replace(refPattern, '.$1') : '';\n}\n\nexport function splitKeypath(keypath) {\n  const result = [];\n  let match;\n\n  keypath = normalise(keypath);\n\n  while ((match = splitPattern.exec(keypath))) {\n    const index = match.index + match[1].length;\n    result.push(keypath.substr(0, index));\n    keypath = keypath.substr(index + 1);\n  }\n\n  result.push(keypath);\n\n  return result;\n}\n\nexport function unescapeKey(key) {\n  if (isString(key)) {\n    return key.replace(unescapeKeyPattern, '$1$2');\n  }\n\n  return key;\n}\n","import { isArray, isString } from './is';\n\nexport function addToArray(array, value) {\n  const index = array.indexOf(value);\n\n  if (index === -1) {\n    array.push(value);\n  }\n}\n\nexport function arrayContains(array, value) {\n  for (let i = 0, c = array.length; i < c; i++) {\n    if (array[i] == value) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexport function arrayContentsMatch(a, b) {\n  let i;\n\n  if (!isArray(a) || !isArray(b)) {\n    return false;\n  }\n\n  if (a.length !== b.length) {\n    return false;\n  }\n\n  i = a.length;\n  while (i--) {\n    if (a[i] !== b[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexport function ensureArray(x) {\n  if (isString(x)) {\n    return [x];\n  }\n\n  if (x === undefined) {\n    return [];\n  }\n\n  return x;\n}\n\nexport function lastItem(array) {\n  return array[array.length - 1];\n}\n\nexport function removeFromArray(array, member) {\n  if (!array) {\n    return;\n  }\n\n  const index = array.indexOf(member);\n\n  if (index !== -1) {\n    array.splice(index, 1);\n  }\n}\n\nexport function combine(...arrays) {\n  const res = arrays.concat.apply([], arrays);\n  let i = res.length;\n  while (i--) {\n    const idx = res.indexOf(res[i]);\n    if (~idx && idx < i) res.splice(i, 1);\n  }\n\n  return res;\n}\n\nexport function toArray(arrayLike) {\n  const array = [];\n  let i = arrayLike.length;\n  while (i--) {\n    array[i] = arrayLike[i];\n  }\n\n  return array;\n}\n\nexport function findMap(array, fn) {\n  const len = array.length;\n  for (let i = 0; i < len; i++) {\n    const result = fn(array[i]);\n    if (result) return result;\n  }\n}\n\nexport function buildNewIndices(one, two, comparator) {\n  let oldArray = one;\n  let newArray = two;\n  if (comparator) {\n    oldArray = oldArray.map(comparator);\n    newArray = newArray.map(comparator);\n  }\n\n  const oldLength = oldArray.length;\n\n  const usedIndices = {};\n  let firstUnusedIndex = 0;\n\n  return oldArray.map(item => {\n    let index;\n    let start = firstUnusedIndex;\n\n    do {\n      index = newArray.indexOf(item, start);\n\n      if (index === -1) {\n        return -1;\n      }\n\n      start = index + 1;\n    } while (usedIndices[index] === true && start < oldLength);\n\n    // keep track of the first unused index, so we don't search\n    // the whole of newArray for each item in oldArray unnecessarily\n    if (index === firstUnusedIndex) {\n      firstUnusedIndex += 1;\n    }\n    // allow next instance of next \"equal\" to be found item\n    usedIndices[index] = true;\n    return index;\n  });\n}\n","const fnBind = Function.prototype.bind;\n\nexport default function bind(fn, context) {\n  if (!/this/.test(fn.toString())) return fn;\n\n  const bound = fnBind.call(fn, context);\n  for (const prop in fn) bound[prop] = fn[prop];\n\n  return bound;\n}\n","import { escapeKey, unescapeKey } from 'shared/keypaths';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport { isArray, isObject, isFunction } from 'utils/is';\nimport bind from 'utils/bind';\nimport { create, keys as objectKeys } from 'utils/object';\n\nconst shuffleTasks = { early: [], mark: [] };\nconst registerQueue = { early: [], mark: [] };\nexport const noVirtual = { virtual: false };\n\nexport default class ModelBase {\n  constructor(parent) {\n    this.deps = [];\n\n    this.children = [];\n    this.childByKey = {};\n    this.links = [];\n\n    this.bindings = [];\n\n    if (parent) {\n      this.parent = parent;\n      this.root = parent.root;\n    }\n  }\n\n  addShuffleTask(task, stage = 'early') {\n    shuffleTasks[stage].push(task);\n  }\n  addShuffleRegister(item, stage = 'early') {\n    registerQueue[stage].push({ model: this, item });\n  }\n\n  downstreamChanged() {}\n\n  findMatches(keys) {\n    const len = keys.length;\n\n    let existingMatches = [this];\n    let matches;\n    let i;\n\n    for (i = 0; i < len; i += 1) {\n      const key = keys[i];\n\n      if (key === '*') {\n        matches = [];\n        existingMatches.forEach(model => {\n          matches.push.apply(matches, model.getValueChildren(model.get()));\n        });\n      } else {\n        matches = existingMatches.map(model => model.joinKey(key));\n      }\n\n      existingMatches = matches;\n    }\n\n    return matches;\n  }\n\n  getKeypath(ractive) {\n    if (ractive !== this.ractive && this._link) return this._link.target.getKeypath(ractive);\n\n    if (!this.keypath) {\n      const parent = this.parent && this.parent.getKeypath(ractive);\n      this.keypath = parent\n        ? `${this.parent.getKeypath(ractive)}.${escapeKey(this.key)}`\n        : escapeKey(this.key);\n    }\n\n    return this.keypath;\n  }\n\n  getValueChildren(value) {\n    let children;\n    if (isArray(value)) {\n      children = [];\n      if ('length' in this && this.length !== value.length) {\n        children.push(this.joinKey('length'));\n      }\n      value.forEach((m, i) => {\n        children.push(this.joinKey(i));\n      });\n    } else if (isObject(value) || isFunction(value)) {\n      children = objectKeys(value).map(key => this.joinKey(key));\n    } else if (value != null) {\n      children = [];\n    }\n\n    const computed = this.computed;\n    if (computed) {\n      children.push.apply(children, objectKeys(computed).map(k => this.joinKey(k)));\n    }\n\n    return children;\n  }\n\n  getVirtual(shouldCapture) {\n    const value = this.get(shouldCapture, { virtual: false });\n    if (isObject(value)) {\n      const result = isArray(value) ? [] : create(null);\n\n      let keys = objectKeys(value);\n      let i = keys.length;\n      while (i--) {\n        const child = this.childByKey[keys[i]];\n        if (!child) result[keys[i]] = value[keys[i]];\n        else if (child._link) result[keys[i]] = child._link.getVirtual();\n        else result[keys[i]] = child.getVirtual();\n      }\n\n      i = this.children.length;\n      while (i--) {\n        const child = this.children[i];\n        if (!(child.key in result) && child._link) {\n          result[child.key] = child._link.getVirtual();\n        }\n      }\n\n      if (this.computed) {\n        keys = objectKeys(this.computed);\n        i = keys.length;\n        while (i--) {\n          result[keys[i]] = this.computed[keys[i]].get();\n        }\n      }\n\n      return result;\n    } else return value;\n  }\n\n  has(key) {\n    if (this._link) return this._link.has(key);\n\n    const value = this.get(false, noVirtual);\n    if (!value) return false;\n\n    key = unescapeKey(key);\n    if ((isFunction(value) || isObject(value)) && key in value) return true;\n\n    let computed = this.computed;\n    if (computed && key in this.computed) return true;\n\n    computed = this.root.ractive && this.root.ractive.computed;\n    if (computed) {\n      objectKeys(computed).forEach(k => {\n        if (computed[k].pattern && computed[k].pattern.test(this.getKeypath())) return true;\n      });\n    }\n\n    return false;\n  }\n\n  joinAll(keys, opts) {\n    let model = this;\n    for (let i = 0; i < keys.length; i += 1) {\n      if (\n        opts &&\n        opts.lastLink === false &&\n        i + 1 === keys.length &&\n        model.childByKey[keys[i]] &&\n        model.childByKey[keys[i]]._link\n      )\n        return model.childByKey[keys[i]];\n      model = model.joinKey(keys[i], opts);\n    }\n\n    return model;\n  }\n\n  notifyUpstream(startPath) {\n    let parent = this.parent;\n    const path = startPath || [this.key];\n    while (parent) {\n      if (parent.patterns) parent.patterns.forEach(o => o.notify(path.slice()));\n      path.unshift(parent.key);\n      parent.links.forEach(l => l.notifiedUpstream(path, this.root));\n      parent.deps.forEach(d => d.handleChange(path));\n      parent.downstreamChanged(startPath);\n      parent = parent.parent;\n    }\n  }\n\n  rebind(next, previous, safe) {\n    if (this._link) {\n      this._link.rebind(next, previous, false);\n    }\n\n    // tell the deps to move to the new target\n    let i = this.deps.length;\n    while (i--) {\n      if (this.deps[i].rebind) this.deps[i].rebind(next, previous, safe);\n    }\n\n    i = this.links.length;\n    while (i--) {\n      const link = this.links[i];\n      // only relink the root of the link tree\n      if (link.owner && link.owner._link) link.relinking(next, safe);\n    }\n\n    i = this.children.length;\n    while (i--) {\n      const child = this.children[i];\n      child.rebind(next ? next.joinKey(child.key) : undefined, child, safe);\n    }\n\n    i = this.bindings.length;\n    while (i--) {\n      this.bindings[i].rebind(next, previous, safe);\n    }\n  }\n\n  reference() {\n    'refs' in this ? this.refs++ : (this.refs = 1);\n  }\n\n  register(dep) {\n    this.deps.push(dep);\n  }\n\n  registerLink(link) {\n    addToArray(this.links, link);\n  }\n\n  registerPatternObserver(observer) {\n    (this.patterns || (this.patterns = [])).push(observer);\n    this.register(observer);\n  }\n\n  registerTwowayBinding(binding) {\n    this.bindings.push(binding);\n  }\n\n  unreference() {\n    if ('refs' in this) this.refs--;\n  }\n\n  unregister(dep) {\n    removeFromArray(this.deps, dep);\n  }\n\n  unregisterLink(link) {\n    removeFromArray(this.links, link);\n  }\n\n  unregisterPatternObserver(observer) {\n    removeFromArray(this.patterns, observer);\n    this.unregister(observer);\n  }\n\n  unregisterTwowayBinding(binding) {\n    removeFromArray(this.bindings, binding);\n  }\n\n  updateFromBindings(cascade) {\n    let i = this.bindings.length;\n    while (i--) {\n      const value = this.bindings[i].getValue();\n      if (value !== this.value) this.set(value);\n    }\n\n    // check for one-way bindings if there are no two-ways\n    if (!this.bindings.length) {\n      const oneway = findBoundValue(this.deps);\n      if (oneway && oneway.value !== this.value) this.set(oneway.value);\n    }\n\n    if (cascade) {\n      this.children.forEach(updateFromBindings);\n      this.links.forEach(updateFromBindings);\n      if (this._link) this._link.updateFromBindings(cascade);\n    }\n  }\n}\n\n// TODO: this may be better handled by overriding `get` on models with a parent that isRoot\nexport function maybeBind(model, value, shouldBind) {\n  if (shouldBind && isFunction(value) && model.parent && model.parent.isRoot) {\n    if (!model.boundValue) {\n      model.boundValue = bind(value._r_unbound || value, model.parent.ractive);\n    }\n\n    return model.boundValue;\n  }\n\n  return value;\n}\n\nfunction updateFromBindings(model) {\n  model.updateFromBindings(true);\n}\n\nexport function findBoundValue(list) {\n  let i = list.length;\n  while (i--) {\n    if (list[i].bound) {\n      const owner = list[i].owner;\n      if (owner) {\n        const value = owner.name === 'checked' ? owner.node.checked : owner.node.value;\n        return { value };\n      }\n    }\n  }\n}\n\nexport function fireShuffleTasks(stage) {\n  if (!stage) {\n    fireShuffleTasks('early');\n    fireShuffleTasks('mark');\n  } else {\n    const tasks = shuffleTasks[stage];\n    shuffleTasks[stage] = [];\n    let i = tasks.length;\n    while (i--) tasks[i]();\n\n    const register = registerQueue[stage];\n    registerQueue[stage] = [];\n    i = register.length;\n    while (i--) register[i].model.register(register[i].item);\n  }\n}\n\nexport function shuffle(model, newIndices, link, unsafe) {\n  model.shuffling = true;\n\n  let i = newIndices.length;\n  while (i--) {\n    const idx = newIndices[i];\n    // nothing is actually changing, so move in the index and roll on\n    if (i === idx) {\n      continue;\n    }\n\n    // rebind the children on i to idx\n    if (i in model.childByKey)\n      model.childByKey[i].rebind(\n        !~idx ? undefined : model.joinKey(idx),\n        model.childByKey[i],\n        !unsafe\n      );\n  }\n\n  const upstream = model.source().length !== model.source().value.length;\n\n  model.links.forEach(l => l.shuffle(newIndices));\n  if (!link) fireShuffleTasks('early');\n\n  i = model.deps.length;\n  while (i--) {\n    if (model.deps[i].shuffle) model.deps[i].shuffle(newIndices);\n  }\n\n  model[link ? 'marked' : 'mark']();\n  if (!link) fireShuffleTasks('mark');\n\n  if (upstream) model.notifyUpstream();\n\n  model.shuffling = false;\n}\n","const stack = [];\nlet captureGroup;\n\nexport function startCapturing() {\n  stack.push((captureGroup = []));\n}\n\nexport function stopCapturing() {\n  const dependencies = stack.pop();\n  captureGroup = stack[stack.length - 1];\n  return dependencies;\n}\n\nexport function capture(model) {\n  if (captureGroup) {\n    captureGroup.push(model);\n  }\n}\n","export function bind(x) {\n  x.bind();\n}\nexport function cancel(x) {\n  x.cancel();\n}\nexport function destroyed(x) {\n  x.destroyed();\n}\nexport function handleChange(x) {\n  x.handleChange();\n}\nexport function mark(x) {\n  x.mark();\n}\nexport function markForce(x) {\n  x.mark(true);\n}\nexport function marked(x) {\n  x.marked();\n}\nexport function markedAll(x) {\n  x.markedAll();\n}\nexport function render(x) {\n  x.render();\n}\nexport function shuffled(x) {\n  x.shuffled();\n}\nexport function teardown(x) {\n  x.teardown();\n}\nexport function unbind(x) {\n  x.unbind();\n}\nexport function unrender(x) {\n  x.unrender();\n}\nexport function unrenderAndDestroy(x) {\n  x.unrender(true);\n}\nexport function update(x) {\n  x.update();\n}\nexport function toString(x) {\n  return x.toString();\n}\nexport function toEscapedString(x) {\n  return x.toString(true);\n}\n","import { splitKeypath } from './keypaths';\nimport { isString } from 'utils/is';\n\n// this is the dry method of checking to see if a rebind applies to\n// a particular keypath because in some cases, a dep may be bound\n// directly to a particular keypath e.g. foo.bars.0.baz and need\n// to avoid getting kicked to foo.bars.1.baz if foo.bars is unshifted\nexport function rebindMatch(template, next, previous, fragment) {\n  const keypath = template.r || template;\n\n  // no valid keypath, go with next\n  if (!keypath || !isString(keypath)) return next;\n\n  // completely contextual ref, go with next\n  if (\n    keypath === '.' ||\n    keypath[0] === '@' ||\n    (next || previous).isKey ||\n    (next || previous).isKeypath\n  )\n    return next;\n\n  const parts = keypath.split('/');\n  let keys = splitKeypath(parts[parts.length - 1]);\n  const last = keys[keys.length - 1];\n\n  // check the keypath against the model keypath to see if it matches\n  let model = next || previous;\n\n  // check to see if this was an alias\n  if (model && keys.length === 1 && last !== model.key && fragment) {\n    keys = findAlias(last, fragment) || keys;\n  }\n\n  let i = keys.length;\n  let match = true;\n  let shuffling = false;\n\n  while (model && i--) {\n    if (model.shuffling) shuffling = true;\n    // non-strict comparison to account for indices in keypaths\n    if (keys[i] != model.key) match = false;\n    model = model.parent;\n  }\n\n  // next is undefined, but keypath is shuffling and previous matches\n  if (!next && match && shuffling) return previous;\n  else if (next && !match && shuffling)\n    // next is defined, but doesn't match the keypath\n    return previous;\n  else return next;\n}\n\nfunction findAlias(name, fragment) {\n  while (fragment) {\n    const z = fragment.aliases;\n    if (z && z[name]) {\n      const aliases = (fragment.owner.iterations ? fragment.owner : fragment).owner.template.z;\n      for (let i = 0; i < aliases.length; i++) {\n        if (aliases[i].n === name) {\n          const alias = aliases[i].x;\n          if (!alias.r) return false;\n          const parts = alias.r.split('/');\n          return splitKeypath(parts[parts.length - 1]);\n        }\n      }\n      return;\n    }\n\n    fragment = fragment.componentParent || fragment.parent;\n  }\n}\n","import ModelBase, { fireShuffleTasks, maybeBind, shuffle } from './ModelBase';\nimport { capture } from '../global/capture';\nimport { handleChange, marked, markedAll, teardown } from 'shared/methodCallers';\nimport { rebindMatch } from 'shared/rebind';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport noop from 'utils/noop';\nimport { hasOwn } from 'utils/object';\n\n// temporary placeholder target for detached implicit links\nexport const Missing = {\n  key: '@missing',\n  animate: noop,\n  applyValue: noop,\n  get: noop,\n  getKeypath() {\n    return this.key;\n  },\n  joinAll() {\n    return this;\n  },\n  joinKey() {\n    return this;\n  },\n  mark: noop,\n  registerLink: noop,\n  shufle: noop,\n  set: noop,\n  unregisterLink: noop\n};\nMissing.parent = Missing;\n\nexport default class LinkModel extends ModelBase {\n  constructor(parent, owner, target, key) {\n    super(parent);\n\n    this.owner = owner;\n    this.target = target;\n    this.key = key === undefined ? owner.key : key;\n    if (owner && owner.isLink) this.sourcePath = `${owner.sourcePath}.${this.key}`;\n\n    if (target) target.registerLink(this);\n\n    if (parent) this.isReadonly = parent.isReadonly;\n\n    this.isLink = true;\n  }\n\n  animate(from, to, options, interpolator) {\n    return this.target.animate(from, to, options, interpolator);\n  }\n\n  applyValue(value) {\n    if (this.boundValue) this.boundValue = null;\n    this.target.applyValue(value);\n  }\n\n  attach(fragment) {\n    const model = resolveReference(fragment, this.key);\n    if (model) {\n      this.relinking(model, false);\n    } else {\n      // if there is no link available, move everything here to real models\n      this.owner.unlink();\n    }\n  }\n\n  detach() {\n    this.relinking(Missing, false);\n  }\n\n  get(shouldCapture, opts = {}) {\n    if (shouldCapture) {\n      capture(this);\n\n      // may need to tell the target to unwrap\n      opts.unwrap = 'unwrap' in opts ? opts.unwrap : true;\n    }\n\n    const bind = 'shouldBind' in opts ? opts.shouldBind : true;\n    opts.shouldBind = this.mapping && this.target.parent && this.target.parent.isRoot;\n\n    return maybeBind(this, this.target.get(false, opts), bind);\n  }\n\n  getKeypath(ractive) {\n    if (ractive && ractive !== this.root.ractive) return this.target.getKeypath(ractive);\n\n    return super.getKeypath(ractive);\n  }\n\n  handleChange() {\n    this.deps.forEach(handleChange);\n    this.links.forEach(handleChange);\n    this.notifyUpstream();\n  }\n\n  isDetached() {\n    return this.virtual && this.target === Missing;\n  }\n\n  joinKey(key) {\n    // TODO: handle nested links\n    if (key === undefined || key === '') return this;\n\n    if (!hasOwn(this.childByKey, key)) {\n      const child = new LinkModel(this, this, this.target.joinKey(key), key);\n      this.children.push(child);\n      this.childByKey[key] = child;\n    }\n\n    return this.childByKey[key];\n  }\n\n  mark(force) {\n    this.target.mark(force);\n  }\n\n  marked() {\n    if (this.boundValue) this.boundValue = null;\n\n    this.links.forEach(marked);\n\n    this.deps.forEach(handleChange);\n  }\n\n  markedAll() {\n    this.children.forEach(markedAll);\n    this.marked();\n  }\n\n  notifiedUpstream(startPath, root) {\n    this.links.forEach(l => l.notifiedUpstream(startPath, this.root));\n    this.deps.forEach(handleChange);\n    if (startPath && this.rootLink && this.root !== root) {\n      const path = startPath.slice(1);\n      path.unshift(this.key);\n      this.notifyUpstream(path);\n    }\n  }\n\n  relinked() {\n    this.target.registerLink(this);\n    this.children.forEach(c => c.relinked());\n  }\n\n  relinking(target, safe) {\n    if (this.rootLink && this.sourcePath)\n      target = rebindMatch(this.sourcePath, target, this.target);\n    if (!target || this.target === target) return;\n\n    this.target && this.target.unregisterLink(this);\n\n    this.target = target;\n    this.children.forEach(c => {\n      c.relinking(target.joinKey(c.key), safe);\n    });\n\n    if (this.rootLink)\n      this.addShuffleTask(() => {\n        this.relinked();\n        if (!safe) {\n          this.markedAll();\n          this.notifyUpstream();\n        }\n      });\n  }\n\n  set(value) {\n    if (this.boundValue) this.boundValue = null;\n    this.target.set(value);\n  }\n\n  shuffle(newIndices) {\n    // watch for extra shuffles caused by a shuffle in a downstream link\n    if (this.shuffling) return;\n\n    // let the real model handle firing off shuffles\n    if (!this.target.shuffling) {\n      if (this.target.shuffle) {\n        this.target.shuffle(newIndices);\n      } else {\n        // the target is a computation, which can't shuffle\n        this.target.mark();\n      }\n    } else {\n      shuffle(this, newIndices, true);\n    }\n  }\n\n  source() {\n    if (this.target.source) return this.target.source();\n    else return this.target;\n  }\n\n  teardown() {\n    if (this._link) this._link.teardown();\n    this.target.unregisterLink(this);\n    this.children.forEach(teardown);\n  }\n}\n\nModelBase.prototype.link = function link(model, keypath, options) {\n  const lnk = this._link || new LinkModel(this.parent, this, model, this.key);\n  lnk.implicit = options && options.implicit;\n  lnk.mapping = options && options.mapping;\n  lnk.sourcePath = keypath;\n  lnk.rootLink = true;\n  if (this._link) this._link.relinking(model, false);\n  this.rebind(lnk, this, false);\n  fireShuffleTasks();\n\n  this._link = lnk;\n  lnk.markedAll();\n\n  this.notifyUpstream();\n  return lnk;\n};\n\nModelBase.prototype.unlink = function unlink() {\n  if (this._link) {\n    const ln = this._link;\n    this._link = undefined;\n    ln.rebind(this, ln, false);\n    fireShuffleTasks();\n    ln.teardown();\n    this.notifyUpstream();\n  }\n};\n","export function fromExpression(body, length = 0) {\n  const args = new Array(length);\n\n  while (length--) {\n    args[length] = `_${length}`;\n  }\n\n  // Functions created directly with new Function() look like this:\n  //     function anonymous (_0 /**/) { return _0*2 }\n  //\n  // With this workaround, we get a little more compact:\n  //     function (_0){return _0*2}\n  return new Function([], `return function (${args.join(',')}){return(${body});};`)();\n}\n","import { createFunction } from '../Ractive/config/runtime-parser';\nimport { create, keys } from 'utils/object';\n\nconst functions = create(null);\n\nexport default function getFunction(str, i) {\n  if (functions[str]) return functions[str];\n  return (functions[str] = createFunction(str, i));\n}\n\nexport function addFunctions(template) {\n  if (!template) return;\n\n  const exp = template.e;\n\n  if (!exp) return;\n\n  keys(exp).forEach(str => {\n    if (functions[str]) return;\n    functions[str] = exp[str];\n  });\n}\n","export const TEMPLATE_VERSION = 4;\n","import { warnIfDebug } from 'utils/log';\nimport { create, hasOwn } from 'utils/object';\n\nconst leadingWhitespace = /^\\s+/;\n\nconst ParseError = function(message) {\n  this.name = 'ParseError';\n  this.message = message;\n  try {\n    throw new Error(message);\n  } catch (e) {\n    this.stack = e.stack;\n  }\n};\n\nParseError.prototype = Error.prototype;\n\nconst Parser = function(str, options) {\n  let item;\n  let lineStart = 0;\n\n  this.str = str;\n  this.options = options || {};\n  this.pos = 0;\n\n  this.lines = this.str.split('\\n');\n  this.lineEnds = this.lines.map(line => {\n    const lineEnd = lineStart + line.length + 1; // +1 for the newline\n\n    lineStart = lineEnd;\n    return lineEnd;\n  }, 0);\n\n  // Custom init logic\n  if (this.init) this.init(str, options);\n\n  const items = [];\n\n  while (this.pos < this.str.length && (item = this.read())) {\n    items.push(item);\n  }\n\n  this.leftover = this.remaining();\n  this.result = this.postProcess ? this.postProcess(items, options) : items;\n};\n\nParser.prototype = {\n  read(converters) {\n    let i, item;\n\n    if (!converters) converters = this.converters;\n\n    const pos = this.pos;\n\n    const len = converters.length;\n    for (i = 0; i < len; i += 1) {\n      this.pos = pos; // reset for each attempt\n\n      if ((item = converters[i](this))) {\n        return item;\n      }\n    }\n\n    return null;\n  },\n\n  getContextMessage(pos, message) {\n    const [lineNum, columnNum] = this.getLinePos(pos);\n    if (this.options.contextLines === -1) {\n      return [lineNum, columnNum, `${message} at line ${lineNum} character ${columnNum}`];\n    }\n\n    const line = this.lines[lineNum - 1];\n\n    let contextUp = '';\n    let contextDown = '';\n    if (this.options.contextLines) {\n      const start =\n        lineNum - 1 - this.options.contextLines < 0 ? 0 : lineNum - 1 - this.options.contextLines;\n      contextUp = this.lines\n        .slice(start, lineNum - 1 - start)\n        .join('\\n')\n        .replace(/\\t/g, '  ');\n      contextDown = this.lines\n        .slice(lineNum, lineNum + this.options.contextLines)\n        .join('\\n')\n        .replace(/\\t/g, '  ');\n      if (contextUp) {\n        contextUp += '\\n';\n      }\n      if (contextDown) {\n        contextDown = '\\n' + contextDown;\n      }\n    }\n\n    let numTabs = 0;\n    const annotation =\n      contextUp +\n      line.replace(/\\t/g, (match, char) => {\n        if (char < columnNum) {\n          numTabs += 1;\n        }\n\n        return '  ';\n      }) +\n      '\\n' +\n      new Array(columnNum + numTabs).join(' ') +\n      '^----' +\n      contextDown;\n\n    return [\n      lineNum,\n      columnNum,\n      `${message} at line ${lineNum} character ${columnNum}:\\n${annotation}`\n    ];\n  },\n\n  getLinePos(char) {\n    let lineNum = 0;\n    let lineStart = 0;\n\n    while (char >= this.lineEnds[lineNum]) {\n      lineStart = this.lineEnds[lineNum];\n      lineNum += 1;\n    }\n\n    const columnNum = char - lineStart;\n    return [lineNum + 1, columnNum + 1, char]; // line/col should be one-based, not zero-based!\n  },\n\n  error(message) {\n    const [lineNum, columnNum, msg] = this.getContextMessage(this.pos, message);\n\n    const error = new ParseError(msg);\n\n    error.line = lineNum;\n    error.character = columnNum;\n    error.shortMessage = message;\n\n    throw error;\n  },\n\n  matchString(string) {\n    if (this.str.substr(this.pos, string.length) === string) {\n      this.pos += string.length;\n      return string;\n    }\n  },\n\n  matchPattern(pattern) {\n    let match;\n\n    if ((match = pattern.exec(this.remaining()))) {\n      this.pos += match[0].length;\n      return match[1] || match[0];\n    }\n  },\n\n  sp() {\n    this.matchPattern(leadingWhitespace);\n  },\n\n  remaining() {\n    return this.str.substring(this.pos);\n  },\n\n  nextChar() {\n    return this.str.charAt(this.pos);\n  },\n\n  warn(message) {\n    const msg = this.getContextMessage(this.pos, message)[2];\n\n    warnIfDebug(msg);\n  }\n};\n\nParser.extend = function(proto) {\n  const Parent = this;\n  const Child = function(str, options) {\n    Parser.call(this, str, options);\n  };\n\n  Child.prototype = create(Parent.prototype);\n\n  for (const key in proto) {\n    if (hasOwn(proto, key)) {\n      Child.prototype[key] = proto[key];\n    }\n  }\n\n  Child.extend = Parser.extend;\n  return Child;\n};\n\nexport default Parser;\n","export const TEXT = 1;\nexport const INTERPOLATOR = 2;\nexport const TRIPLE = 3;\nexport const SECTION = 4;\nexport const INVERTED = 5;\nexport const CLOSING = 6;\nexport const ELEMENT = 7;\nexport const PARTIAL = 8;\nexport const COMMENT = 9;\nexport const DELIMCHANGE = 10;\nexport const ANCHOR = 11;\nexport const ATTRIBUTE = 13;\nexport const CLOSING_TAG = 14;\nexport const COMPONENT = 15;\nexport const YIELDER = 16;\nexport const INLINE_PARTIAL = 17;\nexport const DOCTYPE = 18;\nexport const ALIAS = 19;\n\nexport const AWAIT = 55;\n\nexport const NUMBER_LITERAL = 20;\nexport const STRING_LITERAL = 21;\nexport const ARRAY_LITERAL = 22;\nexport const OBJECT_LITERAL = 23;\nexport const BOOLEAN_LITERAL = 24;\nexport const REGEXP_LITERAL = 25;\n\nexport const GLOBAL = 26;\nexport const KEY_VALUE_PAIR = 27;\n\nexport const REFERENCE = 30;\nexport const REFINEMENT = 31;\nexport const MEMBER = 32;\nexport const PREFIX_OPERATOR = 33;\nexport const BRACKETED = 34;\nexport const CONDITIONAL = 35;\nexport const INFIX_OPERATOR = 36;\n\nexport const INVOCATION = 40;\n\nexport const SECTION_IF = 50;\nexport const SECTION_UNLESS = 51;\nexport const SECTION_EACH = 52;\nexport const SECTION_WITH = 53;\nexport const SECTION_IF_WITH = 54;\n\nexport const ELSE = 60;\nexport const ELSEIF = 61;\nexport const THEN = 62;\nexport const CATCH = 63;\n\nexport const EVENT = 70;\nexport const DECORATOR = 71;\nexport const TRANSITION = 72;\nexport const BINDING_FLAG = 73;\nexport const DELEGATE_FLAG = 74;\n","const delimiterChangePattern = /^[^\\s=]+/;\nconst whitespacePattern = /^\\s+/;\n\nexport default function readDelimiterChange(parser) {\n  if (!parser.matchString('=')) {\n    return null;\n  }\n\n  const start = parser.pos;\n\n  // allow whitespace before new opening delimiter\n  parser.sp();\n\n  const opening = parser.matchPattern(delimiterChangePattern);\n  if (!opening) {\n    parser.pos = start;\n    return null;\n  }\n\n  // allow whitespace (in fact, it's necessary...)\n  if (!parser.matchPattern(whitespacePattern)) {\n    return null;\n  }\n\n  const closing = parser.matchPattern(delimiterChangePattern);\n  if (!closing) {\n    parser.pos = start;\n    return null;\n  }\n\n  // allow whitespace before closing '='\n  parser.sp();\n\n  if (!parser.matchString('=')) {\n    parser.pos = start;\n    return null;\n  }\n\n  return [opening, closing];\n}\n","import { REGEXP_LITERAL } from '../../../../../config/types';\n\nconst regexpPattern = /^(\\/(?:[^\\n\\r\\u2028\\u2029/\\\\[]|\\\\.|\\[(?:[^\\n\\r\\u2028\\u2029\\]\\\\]|\\\\.)*])+\\/(?:([gimuy])(?![a-z]*\\2))*(?![a-zA-Z_$0-9]))/;\n\nexport default function readNumberLiteral(parser) {\n  let result;\n\n  if ((result = parser.matchPattern(regexpPattern))) {\n    return {\n      t: REGEXP_LITERAL,\n      v: result\n    };\n  }\n\n  return null;\n}\n","const pattern = /[-/\\\\^$*+?.()|[\\]{}]/g;\n\nexport default function escapeRegExp(str) {\n  return str.replace(pattern, '\\\\$&');\n}\n","import escapeRegExp from 'utils/escapeRegExp';\n\nconst regExpCache = {};\n\nexport default function(haystack, needles) {\n  return haystack.search(\n    regExpCache[needles.join()] ||\n      (regExpCache[needles.join()] = new RegExp(needles.map(escapeRegExp).join('|')))\n  );\n}\n","import { keys } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\n// https://github.com/kangax/html-minifier/issues/63#issuecomment-37763316\n//export const booleanAttributes = /^(allowFullscreen|async|autofocus|autoplay|checked|compact|controls|declare|default|defaultChecked|defaultMuted|defaultSelected|defer|disabled|enabled|formNoValidate|hidden|indeterminate|inert|isMap|itemScope|loop|multiple|muted|noHref|noResize|noShade|noValidate|noWrap|open|pauseOnExit|readOnly|required|reversed|scoped|seamless|selected|sortable|translate|trueSpeed|typeMustMatch|visible)$/i;\nexport const booleanAttributes = {\n  allowfullscreen: 1,\n  async: 1,\n  autofocus: 1,\n  autoplay: 1,\n  checked: 1,\n  compact: 1,\n  controls: 1,\n  declare: 1,\n  default: 1,\n  defaultchecked: 1,\n  defaultmuted: 1,\n  defaultselected: 1,\n  defer: 1,\n  disabled: 1,\n  enabled: 1,\n  formnovalidate: 1,\n  hidden: 1,\n  indeterminate: 1,\n  inert: 1,\n  ismap: 1,\n  itemscope: 1,\n  loop: 1,\n  multiple: 1,\n  muted: 1,\n  nohref: 1,\n  noresize: 1,\n  noshade: 1,\n  novalidate: 1,\n  nowrap: 1,\n  open: 1,\n  pauseonexit: 1,\n  readonly: 1,\n  required: 1,\n  reversed: 1,\n  scoped: 1,\n  seamless: 1,\n  selected: 1,\n  sortable: 1,\n  translate: 1,\n  truespeed: 1,\n  typemustmatch: 1,\n  visible: 1\n};\nexport const voidElements = {\n  area: 1,\n  base: 1,\n  br: 1,\n  col: 1,\n  command: 1,\n  doctype: 1,\n  embed: 1,\n  hr: 1,\n  img: 1,\n  input: 1,\n  keygen: 1,\n  link: 1,\n  meta: 1,\n  param: 1,\n  source: 1,\n  track: 1,\n  wbr: 1\n};\n\nconst htmlEntities = {\n  quot: 34,\n  amp: 38,\n  apos: 39,\n  lt: 60,\n  gt: 62,\n  nbsp: 160,\n  iexcl: 161,\n  cent: 162,\n  pound: 163,\n  curren: 164,\n  yen: 165,\n  brvbar: 166,\n  sect: 167,\n  uml: 168,\n  copy: 169,\n  ordf: 170,\n  laquo: 171,\n  not: 172,\n  shy: 173,\n  reg: 174,\n  macr: 175,\n  deg: 176,\n  plusmn: 177,\n  sup2: 178,\n  sup3: 179,\n  acute: 180,\n  micro: 181,\n  para: 182,\n  middot: 183,\n  cedil: 184,\n  sup1: 185,\n  ordm: 186,\n  raquo: 187,\n  frac14: 188,\n  frac12: 189,\n  frac34: 190,\n  iquest: 191,\n  Agrave: 192,\n  Aacute: 193,\n  Acirc: 194,\n  Atilde: 195,\n  Auml: 196,\n  Aring: 197,\n  AElig: 198,\n  Ccedil: 199,\n  Egrave: 200,\n  Eacute: 201,\n  Ecirc: 202,\n  Euml: 203,\n  Igrave: 204,\n  Iacute: 205,\n  Icirc: 206,\n  Iuml: 207,\n  ETH: 208,\n  Ntilde: 209,\n  Ograve: 210,\n  Oacute: 211,\n  Ocirc: 212,\n  Otilde: 213,\n  Ouml: 214,\n  times: 215,\n  Oslash: 216,\n  Ugrave: 217,\n  Uacute: 218,\n  Ucirc: 219,\n  Uuml: 220,\n  Yacute: 221,\n  THORN: 222,\n  szlig: 223,\n  agrave: 224,\n  aacute: 225,\n  acirc: 226,\n  atilde: 227,\n  auml: 228,\n  aring: 229,\n  aelig: 230,\n  ccedil: 231,\n  egrave: 232,\n  eacute: 233,\n  ecirc: 234,\n  euml: 235,\n  igrave: 236,\n  iacute: 237,\n  icirc: 238,\n  iuml: 239,\n  eth: 240,\n  ntilde: 241,\n  ograve: 242,\n  oacute: 243,\n  ocirc: 244,\n  otilde: 245,\n  ouml: 246,\n  divide: 247,\n  oslash: 248,\n  ugrave: 249,\n  uacute: 250,\n  ucirc: 251,\n  uuml: 252,\n  yacute: 253,\n  thorn: 254,\n  yuml: 255,\n  OElig: 338,\n  oelig: 339,\n  Scaron: 352,\n  scaron: 353,\n  Yuml: 376,\n  fnof: 402,\n  circ: 710,\n  tilde: 732,\n  Alpha: 913,\n  Beta: 914,\n  Gamma: 915,\n  Delta: 916,\n  Epsilon: 917,\n  Zeta: 918,\n  Eta: 919,\n  Theta: 920,\n  Iota: 921,\n  Kappa: 922,\n  Lambda: 923,\n  Mu: 924,\n  Nu: 925,\n  Xi: 926,\n  Omicron: 927,\n  Pi: 928,\n  Rho: 929,\n  Sigma: 931,\n  Tau: 932,\n  Upsilon: 933,\n  Phi: 934,\n  Chi: 935,\n  Psi: 936,\n  Omega: 937,\n  alpha: 945,\n  beta: 946,\n  gamma: 947,\n  delta: 948,\n  epsilon: 949,\n  zeta: 950,\n  eta: 951,\n  theta: 952,\n  iota: 953,\n  kappa: 954,\n  lambda: 955,\n  mu: 956,\n  nu: 957,\n  xi: 958,\n  omicron: 959,\n  pi: 960,\n  rho: 961,\n  sigmaf: 962,\n  sigma: 963,\n  tau: 964,\n  upsilon: 965,\n  phi: 966,\n  chi: 967,\n  psi: 968,\n  omega: 969,\n  thetasym: 977,\n  upsih: 978,\n  piv: 982,\n  ensp: 8194,\n  emsp: 8195,\n  thinsp: 8201,\n  zwnj: 8204,\n  zwj: 8205,\n  lrm: 8206,\n  rlm: 8207,\n  ndash: 8211,\n  mdash: 8212,\n  lsquo: 8216,\n  rsquo: 8217,\n  sbquo: 8218,\n  ldquo: 8220,\n  rdquo: 8221,\n  bdquo: 8222,\n  dagger: 8224,\n  Dagger: 8225,\n  bull: 8226,\n  hellip: 8230,\n  permil: 8240,\n  prime: 8242,\n  Prime: 8243,\n  lsaquo: 8249,\n  rsaquo: 8250,\n  oline: 8254,\n  frasl: 8260,\n  euro: 8364,\n  image: 8465,\n  weierp: 8472,\n  real: 8476,\n  trade: 8482,\n  alefsym: 8501,\n  larr: 8592,\n  uarr: 8593,\n  rarr: 8594,\n  darr: 8595,\n  harr: 8596,\n  crarr: 8629,\n  lArr: 8656,\n  uArr: 8657,\n  rArr: 8658,\n  dArr: 8659,\n  hArr: 8660,\n  forall: 8704,\n  part: 8706,\n  exist: 8707,\n  empty: 8709,\n  nabla: 8711,\n  isin: 8712,\n  notin: 8713,\n  ni: 8715,\n  prod: 8719,\n  sum: 8721,\n  minus: 8722,\n  lowast: 8727,\n  radic: 8730,\n  prop: 8733,\n  infin: 8734,\n  ang: 8736,\n  and: 8743,\n  or: 8744,\n  cap: 8745,\n  cup: 8746,\n  int: 8747,\n  there4: 8756,\n  sim: 8764,\n  cong: 8773,\n  asymp: 8776,\n  ne: 8800,\n  equiv: 8801,\n  le: 8804,\n  ge: 8805,\n  sub: 8834,\n  sup: 8835,\n  nsub: 8836,\n  sube: 8838,\n  supe: 8839,\n  oplus: 8853,\n  otimes: 8855,\n  perp: 8869,\n  sdot: 8901,\n  lceil: 8968,\n  rceil: 8969,\n  lfloor: 8970,\n  rfloor: 8971,\n  lang: 9001,\n  rang: 9002,\n  loz: 9674,\n  spades: 9824,\n  clubs: 9827,\n  hearts: 9829,\n  diams: 9830\n};\nconst controlCharacters = [\n  8364,\n  129,\n  8218,\n  402,\n  8222,\n  8230,\n  8224,\n  8225,\n  710,\n  8240,\n  352,\n  8249,\n  338,\n  141,\n  381,\n  143,\n  144,\n  8216,\n  8217,\n  8220,\n  8221,\n  8226,\n  8211,\n  8212,\n  732,\n  8482,\n  353,\n  8250,\n  339,\n  157,\n  382,\n  376\n];\nconst entityPattern = new RegExp(\n  '&(#?(?:x[\\\\w\\\\d]+|\\\\d+|' + keys(htmlEntities).join('|') + '));?',\n  'g'\n);\nconst codePointSupport = isFunction(String.fromCodePoint);\nconst codeToChar = codePointSupport ? String.fromCodePoint : String.fromCharCode;\n\nexport function decodeCharacterReferences(html) {\n  return html.replace(entityPattern, (match, entity) => {\n    let code;\n\n    // Handle named entities\n    if (entity[0] !== '#') {\n      code = htmlEntities[entity];\n    } else if (entity[1] === 'x') {\n      code = parseInt(entity.substring(2), 16);\n    } else {\n      code = parseInt(entity.substring(1), 10);\n    }\n\n    if (!code) {\n      return match;\n    }\n\n    return codeToChar(validateCode(code));\n  });\n}\n\nconst lessThan = /</g;\nconst greaterThan = />/g;\nconst amp = /&/g;\nconst invalid = 65533;\n\nexport function escapeHtml(str) {\n  return str\n    .replace(amp, '&amp;')\n    .replace(lessThan, '&lt;')\n    .replace(greaterThan, '&gt;');\n}\n\n// some code points are verboten. If we were inserting HTML, the browser would replace the illegal\n// code points with alternatives in some cases - since we're bypassing that mechanism, we need\n// to replace them ourselves\n//\n// Source: http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Illegal_characters\n/* istanbul ignore next */\nfunction validateCode(code) {\n  if (!code) {\n    return invalid;\n  }\n\n  // line feed becomes generic whitespace\n  if (code === 10) {\n    return 32;\n  }\n\n  // ASCII range. (Why someone would use HTML entities for ASCII characters I don't know, but...)\n  if (code < 128) {\n    return code;\n  }\n\n  // code points 128-159 are dealt with leniently by browsers, but they're incorrect. We need\n  // to correct the mistake or we'll end up with missing € signs and so on\n  if (code <= 159) {\n    return controlCharacters[code - 128];\n  }\n\n  // basic multilingual plane\n  if (code < 55296) {\n    return code;\n  }\n\n  // UTF-16 surrogate halves\n  if (code <= 57343) {\n    return invalid;\n  }\n\n  // rest of the basic multilingual plane\n  if (code <= 65535) {\n    return code;\n  } else if (!codePointSupport) {\n    return invalid;\n  }\n\n  // supplementary multilingual plane 0x10000 - 0x1ffff\n  if (code >= 65536 && code <= 131071) {\n    return code;\n  }\n\n  // supplementary ideographic plane 0x20000 - 0x2ffff\n  if (code >= 131072 && code <= 196607) {\n    return code;\n  }\n\n  return invalid;\n}\n","export const expectedExpression = 'Expected a JavaScript expression';\nexport const expectedParen = 'Expected closing paren';\n","import { NUMBER_LITERAL } from '../../../../../config/types';\n\n// bulletproof number regex from https://gist.github.com/Rich-Harris/7544330\nconst numberPattern = /^(?:[+-]?)0*(?:(?:(?:[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\n\nexport default function readNumberLiteral(parser) {\n  let result;\n\n  if ((result = parser.matchPattern(numberPattern))) {\n    return {\n      t: NUMBER_LITERAL,\n      v: result\n    };\n  }\n\n  return null;\n}\n","import { BOOLEAN_LITERAL } from '../../../../../config/types';\n\nexport default function readBooleanLiteral(parser) {\n  const remaining = parser.remaining();\n\n  if (remaining.substr(0, 4) === 'true') {\n    parser.pos += 4;\n    return {\n      t: BOOLEAN_LITERAL,\n      v: 'true'\n    };\n  }\n\n  if (remaining.substr(0, 5) === 'false') {\n    parser.pos += 5;\n    return {\n      t: BOOLEAN_LITERAL,\n      v: 'false'\n    };\n  }\n\n  return null;\n}\n","// Match one or more characters until: \", ', \\, or EOL/EOF.\n// EOL/EOF is written as (?!.) (meaning there's no non-newline char next).\nconst stringMiddlePattern = /^(?=.)[^\"'\\\\]+?(?:(?!.)|(?=[\"'\\\\]))/;\n\n// Match one escape sequence, including the backslash.\nexport const escapeSequencePattern = /^\\\\(?:[`'\"\\\\bfnrt]|0(?![0-9])|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|(?=.)[^ux0-9])/;\n\n// Match one ES5 line continuation (backslash + line terminator).\nexport const lineContinuationPattern = /^\\\\(?:\\r\\n|[\\u000A\\u000D\\u2028\\u2029])/;\n\n// Helper for defining getDoubleQuotedString and getSingleQuotedString.\nexport default function(okQuote) {\n  return function(parser) {\n    let literal = '\"';\n    let done = false;\n    let next;\n\n    while (!done) {\n      next =\n        parser.matchPattern(stringMiddlePattern) ||\n        parser.matchPattern(escapeSequencePattern) ||\n        parser.matchString(okQuote);\n      if (next) {\n        if (next === `\"`) {\n          literal += `\\\\\"`;\n        } else if (next === `\\\\'`) {\n          literal += `'`;\n        } else {\n          literal += next;\n        }\n      } else {\n        next = parser.matchPattern(lineContinuationPattern);\n        if (next) {\n          // convert \\(newline-like) into a \\u escape, which is allowed in JSON\n          literal += '\\\\u' + ('000' + next.charCodeAt(1).toString(16)).slice(-4);\n        } else {\n          done = true;\n        }\n      }\n    }\n\n    literal += '\"';\n\n    // use JSON.parse to interpret escapes\n    return JSON.parse(literal);\n  };\n}\n","import { STRING_LITERAL } from '../../../../../config/types';\nimport makeQuotedStringMatcher from './stringLiteral/makeQuotedStringMatcher';\n\nconst singleMatcher = makeQuotedStringMatcher(`\"`);\nconst doubleMatcher = makeQuotedStringMatcher(`'`);\n\nexport default function(parser) {\n  const start = parser.pos;\n  const quote = parser.matchString(`'`) || parser.matchString(`\"`);\n\n  if (quote) {\n    const string = (quote === `'` ? singleMatcher : doubleMatcher)(parser);\n\n    if (!parser.matchString(quote)) {\n      parser.pos = start;\n      return null;\n    }\n\n    return {\n      t: STRING_LITERAL,\n      v: string\n    };\n  }\n\n  return null;\n}\n","import readExpression from '../../../readExpression';\nimport { STRING_LITERAL, BRACKETED, INFIX_OPERATOR } from '../../../../../config/types';\nimport {\n  escapeSequencePattern,\n  lineContinuationPattern\n} from './stringLiteral/makeQuotedStringMatcher';\n\n// Match one or more characters until: \", ', or \\\nconst stringMiddlePattern = /^[^`\"\\\\\\$]+?(?:(?=[`\"\\\\\\$]))/;\n\nconst escapes = /[\\r\\n\\t\\b\\f]/g;\nfunction getString(literal) {\n  return JSON.parse(`\"${literal.replace(escapes, escapeChar)}\"`);\n}\n\nfunction escapeChar(c) {\n  switch (c) {\n    case '\\n':\n      return '\\\\n';\n    case '\\r':\n      return '\\\\r';\n    case '\\t':\n      return '\\\\t';\n    case '\\b':\n      return '\\\\b';\n    case '\\f':\n      return '\\\\f';\n  }\n}\n\nexport default function readTemplateStringLiteral(parser) {\n  if (!parser.matchString('`')) return null;\n\n  let literal = '';\n  let done = false;\n  let next;\n  const parts = [];\n\n  while (!done) {\n    next =\n      parser.matchPattern(stringMiddlePattern) ||\n      parser.matchPattern(escapeSequencePattern) ||\n      parser.matchString('$') ||\n      parser.matchString('\"');\n    if (next) {\n      if (next === `\"`) {\n        literal += `\\\\\"`;\n      } else if (next === '\\\\`') {\n        literal += '`';\n      } else if (next === '$') {\n        if (parser.matchString('{')) {\n          parts.push({ t: STRING_LITERAL, v: getString(literal) });\n          literal = '';\n\n          parser.sp();\n          const expr = readExpression(parser);\n\n          if (!expr) parser.error('Expected valid expression');\n\n          parts.push({ t: BRACKETED, x: expr });\n\n          parser.sp();\n          if (!parser.matchString('}'))\n            parser.error(`Expected closing '}' after interpolated expression`);\n        } else {\n          literal += '$';\n        }\n      } else {\n        literal += next;\n      }\n    } else {\n      next = parser.matchPattern(lineContinuationPattern);\n      if (next) {\n        // convert \\(newline-like) into a \\u escape, which is allowed in JSON\n        literal += '\\\\u' + ('000' + next.charCodeAt(1).toString(16)).slice(-4);\n      } else {\n        done = true;\n      }\n    }\n  }\n\n  if (literal.length) parts.push({ t: STRING_LITERAL, v: getString(literal) });\n\n  if (!parser.matchString('`')) parser.error(\"Expected closing '`'\");\n\n  if (parts.length === 1) {\n    return parts[0];\n  } else {\n    let result = parts.pop();\n    let part;\n\n    while ((part = parts.pop())) {\n      result = {\n        t: INFIX_OPERATOR,\n        s: '+',\n        o: [part, result]\n      };\n    }\n\n    return {\n      t: BRACKETED,\n      x: result\n    };\n  }\n}\n","export const name = /^[a-zA-Z_$][a-zA-Z_$0-9]*/;\nexport const spreadPattern = /^\\s*\\.{3}/;\nexport const legalReference = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:\\.(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nexport const relaxedName = /^[a-zA-Z_$][-\\/a-zA-Z_$0-9]*(?:\\.(?:[a-zA-Z_$][-\\/a-zA-Z_$0-9]*))*/;\n","import readStringLiteral from '../primary/literal/readStringLiteral';\nimport readNumberLiteral from '../primary/literal/readNumberLiteral';\nimport { name as namePattern } from './patterns';\n\nconst identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n// http://mathiasbynens.be/notes/javascript-properties\n// can be any name, string literal, or number literal\nexport default function readKey(parser) {\n  let token;\n\n  if ((token = readStringLiteral(parser))) {\n    return identifier.test(token.v) ? token.v : '\"' + token.v.replace(/\"/g, '\\\\\"') + '\"';\n  }\n\n  if ((token = readNumberLiteral(parser))) {\n    return token.v;\n  }\n\n  if ((token = parser.matchPattern(namePattern))) {\n    return token;\n  }\n\n  return null;\n}\n","import { KEY_VALUE_PAIR, REFERENCE } from 'src/config/types';\nimport readKey from '../../../shared/readKey';\nimport readExpression from '../../../../readExpression';\nimport { name as namePattern, spreadPattern } from '../../../shared/patterns';\n\nexport default function readKeyValuePair(parser) {\n  let spread;\n  const start = parser.pos;\n\n  // allow whitespace between '{' and key\n  parser.sp();\n\n  const refKey = parser.nextChar() !== \"'\" && parser.nextChar() !== '\"';\n  if (refKey) spread = parser.matchPattern(spreadPattern);\n\n  const key = spread ? readExpression(parser) : readKey(parser);\n  if (key === null) {\n    parser.pos = start;\n    return null;\n  }\n\n  // allow whitespace between key and ':'\n  parser.sp();\n\n  // es2015 shorthand property\n  if (refKey && (parser.nextChar() === ',' || parser.nextChar() === '}')) {\n    if (!spread && !namePattern.test(key)) {\n      parser.error(`Expected a valid reference, but found '${key}' instead.`);\n    }\n\n    const pair = {\n      t: KEY_VALUE_PAIR,\n      k: key,\n      v: {\n        t: REFERENCE,\n        n: key\n      }\n    };\n\n    if (spread) {\n      pair.p = true;\n    }\n\n    return pair;\n  }\n\n  // next character must be ':'\n  if (!parser.matchString(':')) {\n    parser.pos = start;\n    return null;\n  }\n\n  // allow whitespace between ':' and value\n  parser.sp();\n\n  // next expression must be a, well... expression\n  const value = readExpression(parser);\n  if (value === null) {\n    parser.pos = start;\n    return null;\n  }\n\n  return {\n    t: KEY_VALUE_PAIR,\n    k: key,\n    v: value\n  };\n}\n","import getKeyValuePair from './keyValuePair';\n\nexport default function readKeyValuePairs(parser) {\n  const start = parser.pos;\n\n  const pair = getKeyValuePair(parser);\n  if (pair === null) {\n    return null;\n  }\n\n  const pairs = [pair];\n\n  if (parser.matchString(',')) {\n    const keyValuePairs = readKeyValuePairs(parser);\n\n    if (!keyValuePairs) {\n      parser.pos = start;\n      return null;\n    }\n\n    return pairs.concat(keyValuePairs);\n  }\n\n  return pairs;\n}\n","import { OBJECT_LITERAL } from '../../../../../config/types';\nimport readKeyValuePairs from './objectLiteral/keyValuePairs';\n\nexport default function(parser) {\n  const start = parser.pos;\n\n  // allow whitespace\n  parser.sp();\n\n  if (!parser.matchString('{')) {\n    parser.pos = start;\n    return null;\n  }\n\n  const keyValuePairs = readKeyValuePairs(parser);\n\n  // allow whitespace between final value and '}'\n  parser.sp();\n\n  if (!parser.matchString('}')) {\n    parser.pos = start;\n    return null;\n  }\n\n  return {\n    t: OBJECT_LITERAL,\n    m: keyValuePairs\n  };\n}\n","import { ARRAY_LITERAL } from 'src/config/types';\nimport readExpressionList from '../../shared/readExpressionList';\n\nexport default function(parser) {\n  const start = parser.pos;\n\n  // allow whitespace before '['\n  parser.sp();\n\n  if (!parser.matchString('[')) {\n    parser.pos = start;\n    return null;\n  }\n\n  const expressionList = readExpressionList(parser, true);\n\n  if (!parser.matchString(']')) {\n    parser.pos = start;\n    return null;\n  }\n\n  return {\n    t: ARRAY_LITERAL,\n    m: expressionList\n  };\n}\n","import readNumberLiteral from './literal/readNumberLiteral';\nimport readBooleanLiteral from './literal/readBooleanLiteral';\nimport readStringLiteral from './literal/readStringLiteral';\nimport readTemplateStringLiteral from './literal/readTemplateStringLiteral';\nimport readObjectLiteral from './literal/readObjectLiteral';\nimport readArrayLiteral from './literal/readArrayLiteral';\nimport readRegexpLiteral from './literal/readRegexpLiteral';\n\nexport default function readLiteral(parser) {\n  return (\n    readNumberLiteral(parser) ||\n    readBooleanLiteral(parser) ||\n    readStringLiteral(parser) ||\n    readTemplateStringLiteral(parser) ||\n    readObjectLiteral(parser) ||\n    readArrayLiteral(parser) ||\n    readRegexpLiteral(parser)\n  );\n}\n","import { BRACKETED, GLOBAL, REFERENCE } from 'src/config/types';\nimport { normalise } from 'src/shared/keypaths';\nimport { legalReference, relaxedName } from '../shared/patterns';\n\n// if a reference is a browser global, we don't deference it later, so it needs special treatment\nconst globals = /^(?:Array|console|Date|RegExp|decodeURIComponent|decodeURI|encodeURIComponent|encodeURI|isFinite|isNaN|parseFloat|parseInt|JSON|Math|NaN|undefined|null|Object|Number|String|Boolean)\\b/;\n\n// keywords are not valid references, with the exception of `this`\nconst keywords = /^(?:break|case|catch|continue|debugger|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|var|void|while|with)$/;\n\nconst prefixPattern = /^(?:\\@\\.|\\@|~\\/|(?:\\^\\^\\/(?:\\^\\^\\/)*(?:\\.\\.\\/)*)|(?:\\.\\.\\/)+|\\.\\/(?:\\.\\.\\/)*|\\.)/;\nconst specials = /^(key|index|keypath|rootpath|this|global|shared|context|event|node|local|style|helpers|last)/;\n\nexport default function readReference(parser) {\n  let prefix, name, global, reference, lastDotIndex;\n\n  const startPos = parser.pos;\n\n  prefix = parser.matchPattern(prefixPattern) || '';\n  name =\n    (!prefix && parser.relaxedNames && parser.matchPattern(relaxedName)) ||\n    parser.matchPattern(legalReference);\n  const actual = prefix.length + ((name && name.length) || 0);\n\n  if (prefix === '@.') {\n    prefix = '@';\n    if (name) name = 'this.' + name;\n    else name = 'this';\n  }\n\n  if (!name && prefix) {\n    name = prefix;\n    prefix = '';\n  }\n\n  if (!name) {\n    return null;\n  }\n\n  if (prefix === '@') {\n    if (!specials.test(name)) {\n      parser.error(`Unrecognized special reference @${name}`);\n    } else if ((~name.indexOf('event') || ~name.indexOf('node')) && !parser.inEvent) {\n      parser.error(`@event and @node are only valid references within an event directive`);\n    } else if (~name.indexOf('context')) {\n      parser.pos = parser.pos - (name.length - 7);\n      return {\n        t: BRACKETED,\n        x: {\n          t: REFERENCE,\n          n: '@context'\n        }\n      };\n    }\n  }\n\n  // bug out if it's a keyword (exception for ancestor/restricted refs - see https://github.com/ractivejs/ractive/issues/1497)\n  if (!prefix && !parser.relaxedNames && keywords.test(name)) {\n    parser.pos = startPos;\n    return null;\n  }\n\n  // if this is a browser global, stop here\n  if (!prefix && globals.test(name)) {\n    global = globals.exec(name)[0];\n    parser.pos = startPos + global.length;\n\n    return {\n      t: GLOBAL,\n      v: global\n    };\n  }\n\n  reference = (prefix || '') + normalise(name);\n\n  if (parser.matchString('(')) {\n    // if this is a method invocation (as opposed to a function) we need\n    // to strip the method name from the reference combo, else the context\n    // will be wrong\n    // but only if the reference was actually a member and not a refinement\n    lastDotIndex = reference.lastIndexOf('.');\n    if (lastDotIndex !== -1 && name[name.length - 1] !== ']') {\n      if (lastDotIndex === 0) {\n        reference = '.';\n        parser.pos = startPos;\n      } else {\n        const refLength = reference.length;\n        reference = reference.substr(0, lastDotIndex);\n        parser.pos = startPos + (actual - (refLength - lastDotIndex));\n      }\n    } else {\n      parser.pos -= 1;\n    }\n  }\n\n  return {\n    t: REFERENCE,\n    n: reference.replace(/^this\\./, './').replace(/^this$/, '.')\n  };\n}\n","import { BRACKETED } from 'src/config/types';\nimport { expectedExpression, expectedParen } from '../shared/errors';\nimport readExpression from '../../readExpression';\n\nexport default function readBracketedExpression(parser) {\n  if (!parser.matchString('(')) return null;\n\n  parser.sp();\n\n  const expr = readExpression(parser);\n\n  if (!expr) parser.error(expectedExpression);\n\n  parser.sp();\n\n  if (!parser.matchString(')')) parser.error(expectedParen);\n\n  return {\n    t: BRACKETED,\n    x: expr\n  };\n}\n","import readLiteral from './primary/readLiteral';\nimport readReference from './primary/readReference';\nimport readBracketedExpression from './primary/readBracketedExpression';\n\nexport default function(parser) {\n  return readLiteral(parser) || readReference(parser) || readBracketedExpression(parser);\n}\n","import { REFINEMENT } from 'config/types';\nimport { expectedExpression } from './errors';\nimport { name as namePattern } from './patterns';\nimport readExpression from '../../readExpression';\n\nexport default function readRefinement(parser) {\n  // some things call for strict refinement (partial names), meaning no space between reference and refinement\n  if (!parser.strictRefinement) {\n    parser.sp();\n  }\n\n  // \".\" name\n  if (parser.matchString('.')) {\n    parser.sp();\n\n    const name = parser.matchPattern(namePattern);\n    if (name) {\n      return {\n        t: REFINEMENT,\n        n: name\n      };\n    }\n\n    parser.error('Expected a property name');\n  }\n\n  // \"[\" expression \"]\"\n  if (parser.matchString('[')) {\n    parser.sp();\n\n    const expr = readExpression(parser);\n    if (!expr) parser.error(expectedExpression);\n\n    parser.sp();\n\n    if (!parser.matchString(']')) parser.error(`Expected ']'`);\n\n    return {\n      t: REFINEMENT,\n      x: expr\n    };\n  }\n\n  return null;\n}\n","import { MEMBER, INVOCATION } from 'config/types';\nimport readPrimary from './readPrimary';\nimport readExpressionList from './shared/readExpressionList';\nimport readRefinement from './shared/readRefinement';\nimport { expectedParen } from './shared/errors';\n\nexport default function(parser) {\n  let expression = readPrimary(parser);\n\n  if (!expression) return null;\n\n  while (expression) {\n    const refinement = readRefinement(parser);\n    if (refinement) {\n      expression = {\n        t: MEMBER,\n        x: expression,\n        r: refinement\n      };\n    } else if (parser.matchString('(')) {\n      parser.sp();\n      const expressionList = readExpressionList(parser, true);\n\n      parser.sp();\n\n      if (!parser.matchString(')')) {\n        parser.error(expectedParen);\n      }\n\n      expression = {\n        t: INVOCATION,\n        x: expression\n      };\n\n      if (expressionList) expression.o = expressionList;\n    } else {\n      break;\n    }\n  }\n\n  return expression;\n}\n","import { PREFIX_OPERATOR } from 'config/types';\nimport { expectedExpression } from './shared/errors';\nimport readMemberOrInvocation from './readMemberOrInvocation';\nimport readExpression from '../readExpression';\n\nlet readTypeOf;\n\nconst makePrefixSequenceMatcher = function(symbol, fallthrough) {\n  return function(parser) {\n    let expression;\n\n    if ((expression = fallthrough(parser))) {\n      return expression;\n    }\n\n    if (!parser.matchString(symbol)) {\n      return null;\n    }\n\n    parser.sp();\n\n    expression = readExpression(parser);\n    if (!expression) {\n      parser.error(expectedExpression);\n    }\n\n    return {\n      s: symbol,\n      o: expression,\n      t: PREFIX_OPERATOR\n    };\n  };\n};\n\n// create all prefix sequence matchers, return readTypeOf\n(function() {\n  let i, len, matcher, fallthrough;\n\n  const prefixOperators = '! ~ + - typeof'.split(' ');\n\n  fallthrough = readMemberOrInvocation;\n  for (i = 0, len = prefixOperators.length; i < len; i += 1) {\n    matcher = makePrefixSequenceMatcher(prefixOperators[i], fallthrough);\n    fallthrough = matcher;\n  }\n\n  // typeof operator is higher precedence than multiplication, so provides the\n  // fallthrough for the multiplication sequence matcher we're about to create\n  // (we're skipping void and delete)\n  readTypeOf = fallthrough;\n})();\n\nexport default readTypeOf;\n","import { INFIX_OPERATOR } from 'config/types';\nimport readTypeof from './readTypeof';\n\nlet readLogicalOr;\n\nconst makeInfixSequenceMatcher = function(symbol, fallthrough) {\n  return function(parser) {\n    // > and / have to be quoted\n    if (parser.inUnquotedAttribute && (symbol === '>' || symbol === '/'))\n      return fallthrough(parser);\n\n    let start, left, right;\n\n    left = fallthrough(parser);\n    if (!left) {\n      return null;\n    }\n\n    // Loop to handle left-recursion in a case like `a * b * c` and produce\n    // left association, i.e. `(a * b) * c`.  The matcher can't call itself\n    // to parse `left` because that would be infinite regress.\n    while (true) {\n      start = parser.pos;\n\n      parser.sp();\n\n      if (!parser.matchString(symbol)) {\n        parser.pos = start;\n        return left;\n      }\n\n      // special case - in operator must not be followed by [a-zA-Z_$0-9]\n      if (symbol === 'in' && /[a-zA-Z_$0-9]/.test(parser.remaining().charAt(0))) {\n        parser.pos = start;\n        return left;\n      }\n\n      parser.sp();\n\n      // right operand must also consist of only higher-precedence operators\n      right = fallthrough(parser);\n      if (!right) {\n        parser.pos = start;\n        return left;\n      }\n\n      left = {\n        t: INFIX_OPERATOR,\n        s: symbol,\n        o: [left, right]\n      };\n\n      // Loop back around.  If we don't see another occurrence of the symbol,\n      // we'll return left.\n    }\n  };\n};\n\n// create all infix sequence matchers, and return readLogicalOr\n(function() {\n  let i, len, matcher, fallthrough;\n\n  // All the infix operators on order of precedence (source: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)\n  // Each sequence matcher will initially fall through to its higher precedence\n  // neighbour, and only attempt to match if one of the higher precedence operators\n  // (or, ultimately, a literal, reference, or bracketed expression) already matched\n  const infixOperators = '* / % + - << >> >>> < <= > >= in instanceof == != === !== & ^ | && ||'.split(\n    ' '\n  );\n\n  // A typeof operator is higher precedence than multiplication\n  fallthrough = readTypeof;\n  for (i = 0, len = infixOperators.length; i < len; i += 1) {\n    matcher = makeInfixSequenceMatcher(infixOperators[i], fallthrough);\n    fallthrough = matcher;\n  }\n\n  // Logical OR is the fallthrough for the conditional matcher\n  readLogicalOr = fallthrough;\n})();\n\nexport default readLogicalOr;\n","import { CONDITIONAL } from 'config/types';\nimport readLogicalOr from './readLogicalOr';\nimport { expectedExpression } from './shared/errors';\nimport readExpression from '../readExpression';\n\n// The conditional operator is the lowest precedence operator, so we start here\nexport default function getConditional(parser) {\n  const expression = readLogicalOr(parser);\n  if (!expression) {\n    return null;\n  }\n\n  const start = parser.pos;\n\n  parser.sp();\n\n  if (!parser.matchString('?')) {\n    parser.pos = start;\n    return expression;\n  }\n\n  parser.sp();\n\n  const ifTrue = readExpression(parser);\n  if (!ifTrue) {\n    parser.error(expectedExpression);\n  }\n\n  parser.sp();\n\n  if (!parser.matchString(':')) {\n    parser.error('Expected \":\"');\n  }\n\n  parser.sp();\n\n  const ifFalse = readExpression(parser);\n  if (!ifFalse) {\n    parser.error(expectedExpression);\n  }\n\n  return {\n    t: CONDITIONAL,\n    o: [expression, ifTrue, ifFalse]\n  };\n}\n","import readConditional from './expressions/readConditional';\nimport readReference from './expressions/primary/readReference';\n\nexport default function readExpression(parser) {\n  // if eval is false, no expressions\n  if (parser.allowExpressions === false) {\n    const ref = readReference(parser);\n    parser.sp();\n    return ref;\n  }\n\n  // The conditional operator is the lowest precedence operator (except yield,\n  // assignment operators, and commas, none of which are supported), so we\n  // start there. If it doesn't match, it 'falls through' to progressively\n  // higher precedence operators, until it eventually matches (or fails to\n  // match) a 'primary' - a literal or a reference. This way, the abstract syntax\n  // tree has everything in its proper place, i.e. 2 + 3 * 4 === 14, not 20.\n  return readConditional(parser);\n}\n","import { expectedExpression } from './errors';\nimport readExpression from '../../readExpression';\nimport { spreadPattern } from './patterns';\n\nexport default function readExpressionList(parser, spread) {\n  let isSpread;\n  const expressions = [];\n\n  const pos = parser.pos;\n\n  do {\n    parser.sp();\n\n    if (spread) {\n      isSpread = parser.matchPattern(spreadPattern);\n    }\n\n    const expr = readExpression(parser);\n\n    if (expr === null && expressions.length) {\n      parser.error(expectedExpression);\n    } else if (expr === null) {\n      parser.pos = pos;\n      return null;\n    }\n\n    if (isSpread) {\n      expr.p = true;\n    }\n\n    expressions.push(expr);\n\n    parser.sp();\n  } while (parser.matchString(','));\n\n  return expressions;\n}\n","import { REFERENCE } from 'config/types';\nimport readExpression from './readExpression';\nimport readReference from './expressions/primary/readReference';\n\nexport default function readExpressionOrReference(parser, expectedFollowers) {\n  const start = parser.pos;\n  const expression = readExpression(parser);\n\n  if (!expression) {\n    // valid reference but invalid expression e.g. `{{new}}`?\n    const ref = parser.matchPattern(/^(\\w+)/);\n    if (ref) {\n      return {\n        t: REFERENCE,\n        n: ref\n      };\n    }\n\n    return null;\n  }\n\n  for (let i = 0; i < expectedFollowers.length; i += 1) {\n    if (parser.remaining().substr(0, expectedFollowers[i].length) === expectedFollowers[i]) {\n      return expression;\n    }\n  }\n\n  parser.pos = start;\n  return readReference(parser);\n}\n","import {\n  REFERENCE,\n  BOOLEAN_LITERAL,\n  GLOBAL,\n  NUMBER_LITERAL,\n  REGEXP_LITERAL,\n  STRING_LITERAL,\n  ARRAY_LITERAL,\n  OBJECT_LITERAL,\n  KEY_VALUE_PAIR,\n  PREFIX_OPERATOR,\n  INFIX_OPERATOR,\n  INVOCATION,\n  BRACKETED,\n  MEMBER,\n  REFINEMENT,\n  CONDITIONAL\n} from 'config/types';\nimport { isObject, isString } from 'utils/is';\n\nexport default function flattenExpression(expression) {\n  let refs;\n  let count = 0;\n\n  extractRefs(expression, (refs = []));\n  const stringified = stringify(expression);\n\n  return {\n    r: refs,\n    s: getVars(stringified)\n  };\n\n  function getVars(expr) {\n    const vars = [];\n    for (let i = count - 1; i >= 0; i--) {\n      vars.push(`x$${i}`);\n    }\n    return vars.length ? `(function(){var ${vars.join(',')};return(${expr});})()` : expr;\n  }\n\n  function stringify(node) {\n    if (isString(node)) {\n      return node;\n    }\n\n    switch (node.t) {\n      case BOOLEAN_LITERAL:\n      case GLOBAL:\n      case NUMBER_LITERAL:\n      case REGEXP_LITERAL:\n        return node.v;\n\n      case STRING_LITERAL:\n        return JSON.stringify(String(node.v));\n\n      case ARRAY_LITERAL:\n        if (node.m && hasSpread(node.m)) {\n          return `[].concat(${makeSpread(node.m, '[', ']', stringify)})`;\n        } else {\n          return '[' + (node.m ? node.m.map(stringify).join(',') : '') + ']';\n        }\n\n      case OBJECT_LITERAL:\n        if (node.m && hasSpread(node.m)) {\n          return `Object.assign({},${makeSpread(node.m, '{', '}', stringifyPair)})`;\n        } else {\n          return '{' + (node.m ? node.m.map(n => `${n.k}:${stringify(n.v)}`).join(',') : '') + '}';\n        }\n\n      case PREFIX_OPERATOR:\n        return (node.s === 'typeof' ? 'typeof ' : node.s) + stringify(node.o);\n\n      case INFIX_OPERATOR:\n        return (\n          stringify(node.o[0]) +\n          (node.s.substr(0, 2) === 'in' ? ' ' + node.s + ' ' : node.s) +\n          stringify(node.o[1])\n        );\n\n      case INVOCATION:\n        if (node.o && hasSpread(node.o)) {\n          const id = count++;\n          return `(x$${id}=${stringify(node.x)}).apply(x$${id},${stringify({\n            t: ARRAY_LITERAL,\n            m: node.o\n          })})`;\n        } else {\n          return stringify(node.x) + '(' + (node.o ? node.o.map(stringify).join(',') : '') + ')';\n        }\n\n      case BRACKETED:\n        return '(' + stringify(node.x) + ')';\n\n      case MEMBER:\n        return stringify(node.x) + stringify(node.r);\n\n      case REFINEMENT:\n        return node.n ? '.' + node.n : '[' + stringify(node.x) + ']';\n\n      case CONDITIONAL:\n        return stringify(node.o[0]) + '?' + stringify(node.o[1]) + ':' + stringify(node.o[2]);\n\n      case REFERENCE:\n        return '_' + refs.indexOf(node.n);\n\n      default:\n        throw new Error('Expected legal JavaScript');\n    }\n  }\n\n  function stringifyPair(node) {\n    return node.p ? stringify(node.k) : `${node.k}:${stringify(node.v)}`;\n  }\n\n  function makeSpread(list, open, close, fn) {\n    const out = list.reduce(\n      (a, c) => {\n        if (c.p) {\n          a.str += `${a.open ? close + ',' : a.str.length ? ',' : ''}${fn(c)}`;\n        } else {\n          a.str += `${!a.str.length ? open : !a.open ? ',' + open : ','}${fn(c)}`;\n        }\n        a.open = !c.p;\n        return a;\n      },\n      { open: false, str: '' }\n    );\n    if (out.open) out.str += close;\n    return out.str;\n  }\n}\n\nfunction hasSpread(list) {\n  for (let i = 0; i < list.length; i++) {\n    if (list[i].p) return true;\n  }\n\n  return false;\n}\n\n// TODO maybe refactor this?\nfunction extractRefs(node, refs) {\n  if (node.t === REFERENCE && isString(node.n)) {\n    if (!~refs.indexOf(node.n)) {\n      refs.unshift(node.n);\n    }\n  }\n\n  const list = node.o || node.m;\n  if (list) {\n    if (isObject(list)) {\n      extractRefs(list, refs);\n    } else {\n      let i = list.length;\n      while (i--) {\n        extractRefs(list[i], refs);\n      }\n    }\n  }\n\n  if (node.k && node.t === KEY_VALUE_PAIR && !isString(node.k)) {\n    extractRefs(node.k, refs);\n  }\n\n  if (node.x) {\n    extractRefs(node.x, refs);\n  }\n\n  if (node.r) {\n    extractRefs(node.r, refs);\n  }\n\n  if (node.v) {\n    extractRefs(node.v, refs);\n  }\n}\n","import { REFERENCE, BRACKETED, MEMBER, REFINEMENT } from 'config/types';\nimport flattenExpression from './flattenExpression';\n\nexport default function refineExpression(expression, mustache) {\n  let referenceExpression;\n\n  if (expression) {\n    while (expression.t === BRACKETED && expression.x) {\n      expression = expression.x;\n    }\n\n    if (expression.t === REFERENCE) {\n      const n = expression.n;\n      if (!~n.indexOf('@context')) {\n        mustache.r = expression.n;\n      } else {\n        mustache.x = flattenExpression(expression);\n      }\n    } else {\n      if ((referenceExpression = getReferenceExpression(expression))) {\n        mustache.rx = referenceExpression;\n      } else {\n        mustache.x = flattenExpression(expression);\n      }\n    }\n\n    return mustache;\n  }\n}\n\n// TODO refactor this! it's bewildering\nfunction getReferenceExpression(expression) {\n  const members = [];\n  let refinement;\n\n  while (expression.t === MEMBER && expression.r.t === REFINEMENT) {\n    refinement = expression.r;\n\n    if (refinement.x) {\n      if (refinement.x.t === REFERENCE) {\n        members.unshift(refinement.x);\n      } else {\n        members.unshift(flattenExpression(refinement.x));\n      }\n    } else {\n      members.unshift(refinement.n);\n    }\n\n    expression = expression.x;\n  }\n\n  if (expression.t !== REFERENCE) {\n    return null;\n  }\n\n  return {\n    r: expression.n,\n    m: members\n  };\n}\n","import {\n  ARRAY_LITERAL,\n  ATTRIBUTE,\n  DECORATOR,\n  DELEGATE_FLAG,\n  BINDING_FLAG,\n  INTERPOLATOR,\n  TRANSITION,\n  EVENT\n} from '../../../config/types';\nimport getLowestIndex from '../utils/getLowestIndex';\nimport readMustache from '../readMustache';\nimport { decodeCharacterReferences } from 'src/utils/html';\nimport readExpressionList from '../expressions/shared/readExpressionList';\nimport readExpressionOrReference from '../readExpressionOrReference';\nimport flattenExpression from 'parse/utils/flattenExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { isString } from 'utils/is';\n\nconst attributeNamePattern = /^[^\\s\"'>\\/=(]+/;\nconst onPattern = /^on/;\nconst eventPattern = /^on-([a-zA-Z\\*\\.$_]((?:[a-zA-Z\\*\\.$_0-9\\-]|\\\\-)+))$/;\nconst reservedEventNames = /^(?:change|reset|teardown|update|construct|config|init|render|complete|unrender|detach|insert|destruct|attachchild|detachchild)$/;\nconst decoratorPattern = /^as-([a-z-A-Z][-a-zA-Z_0-9]*)$/;\nconst transitionPattern = /^([a-zA-Z](?:(?!-in-out)[-a-zA-Z_0-9])*)-(in|out|in-out)$/;\nconst boundPattern = /^((bind|class)-(([-a-zA-Z0-9_])+))$/;\nconst directives = {\n  lazy: { t: BINDING_FLAG, v: 'l' },\n  twoway: { t: BINDING_FLAG, v: 't' },\n  'no-delegation': { t: DELEGATE_FLAG }\n};\nconst unquotedAttributeValueTextPattern = /^[^\\s\"'=<>\\/`]+/;\nconst proxyEvent = /^[^\\s\"'=<>@\\[\\]()]*/;\nconst whitespace = /^\\s+/;\n\nconst slashes = /\\\\/g;\nfunction splitEvent(str) {\n  const result = [];\n  let s = 0;\n\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === '-' && str[i - 1] !== '\\\\') {\n      result.push(str.substring(s, i).replace(slashes, ''));\n      s = i + 1;\n    }\n  }\n\n  result.push(str.substring(s).replace(slashes, ''));\n\n  return result;\n}\n\nexport default function readAttribute(parser) {\n  let name, i, nearest, idx;\n\n  parser.sp();\n\n  name = parser.matchPattern(attributeNamePattern);\n  if (!name) {\n    return null;\n  }\n\n  // check for accidental delimiter consumption e.g. <tag bool{{>attrs}} />\n  nearest = name.length;\n  for (i = 0; i < parser.tags.length; i++) {\n    if (~(idx = name.indexOf(parser.tags[i].open))) {\n      if (idx < nearest) nearest = idx;\n    }\n  }\n  if (nearest < name.length) {\n    parser.pos -= name.length - nearest;\n    name = name.substr(0, nearest);\n    if (!name) return null;\n  }\n\n  return { n: name };\n}\n\nfunction readAttributeValue(parser) {\n  const start = parser.pos;\n\n  // next character must be `=`, `/`, `>` or whitespace\n  if (!/[=\\/>\\s]/.test(parser.nextChar())) {\n    parser.error('Expected `=`, `/`, `>` or whitespace');\n  }\n\n  parser.sp();\n\n  if (!parser.matchString('=')) {\n    parser.pos = start;\n    return null;\n  }\n\n  parser.sp();\n\n  const valueStart = parser.pos;\n  const startDepth = parser.sectionDepth;\n\n  const value =\n    readQuotedAttributeValue(parser, `'`) ||\n    readQuotedAttributeValue(parser, `\"`) ||\n    readUnquotedAttributeValue(parser);\n\n  if (value === null) {\n    parser.error('Expected valid attribute value');\n  }\n\n  if (parser.sectionDepth !== startDepth) {\n    parser.pos = valueStart;\n    parser.error(\n      'An attribute value must contain as many opening section tags as closing section tags'\n    );\n  }\n\n  if (!value.length) {\n    return '';\n  }\n\n  if (value.length === 1 && isString(value[0])) {\n    return decodeCharacterReferences(value[0]);\n  }\n\n  return value;\n}\n\nfunction readUnquotedAttributeValueToken(parser) {\n  let text, index;\n\n  const start = parser.pos;\n\n  text = parser.matchPattern(unquotedAttributeValueTextPattern);\n\n  if (!text) {\n    return null;\n  }\n\n  const haystack = text;\n  const needles = parser.tags.map(t => t.open); // TODO refactor... we do this in readText.js as well\n\n  if ((index = getLowestIndex(haystack, needles)) !== -1) {\n    text = text.substr(0, index);\n    parser.pos = start + text.length;\n  }\n\n  return text;\n}\n\nfunction readUnquotedAttributeValue(parser) {\n  parser.inAttribute = true;\n\n  const tokens = [];\n\n  let token = readMustache(parser) || readUnquotedAttributeValueToken(parser);\n  while (token) {\n    tokens.push(token);\n    token = readMustache(parser) || readUnquotedAttributeValueToken(parser);\n  }\n\n  if (!tokens.length) {\n    return null;\n  }\n\n  parser.inAttribute = false;\n  return tokens;\n}\n\nfunction readQuotedAttributeValue(parser, quoteMark) {\n  const start = parser.pos;\n\n  if (!parser.matchString(quoteMark)) {\n    return null;\n  }\n\n  parser.inAttribute = quoteMark;\n\n  const tokens = [];\n\n  let token = readMustache(parser) || readQuotedStringToken(parser, quoteMark);\n  while (token !== null) {\n    tokens.push(token);\n    token = readMustache(parser) || readQuotedStringToken(parser, quoteMark);\n  }\n\n  if (!parser.matchString(quoteMark)) {\n    parser.pos = start;\n    return null;\n  }\n\n  parser.inAttribute = false;\n\n  return tokens;\n}\n\nfunction readQuotedStringToken(parser, quoteMark) {\n  const haystack = parser.remaining();\n\n  const needles = parser.tags.map(t => t.open); // TODO refactor... we do this in readText.js as well\n  needles.push(quoteMark);\n\n  const index = getLowestIndex(haystack, needles);\n\n  if (index === -1) {\n    parser.error('Quoted attribute value must have a closing quote');\n  }\n\n  if (!index) {\n    return null;\n  }\n\n  parser.pos += index;\n  return haystack.substr(0, index);\n}\n\nexport function readAttributeOrDirective(parser) {\n  let match, directive;\n\n  const attribute = readAttribute(parser, false);\n\n  if (!attribute) return null;\n\n  // lazy, twoway\n  if ((directive = directives[attribute.n])) {\n    attribute.t = directive.t;\n    if (directive.v) attribute.v = directive.v;\n    delete attribute.n; // no name necessary\n    parser.sp();\n    if (parser.nextChar() === '=') attribute.f = readAttributeValue(parser);\n  } else if ((match = decoratorPattern.exec(attribute.n))) {\n    // decorators\n    attribute.n = match[1];\n    attribute.t = DECORATOR;\n    readArguments(parser, attribute);\n  } else if ((match = transitionPattern.exec(attribute.n))) {\n    // transitions\n    attribute.n = match[1];\n    attribute.t = TRANSITION;\n    readArguments(parser, attribute);\n    attribute.v = match[2] === 'in-out' ? 't0' : match[2] === 'in' ? 't1' : 't2';\n  } else if ((match = eventPattern.exec(attribute.n))) {\n    // on-click etc\n    attribute.n = splitEvent(match[1]);\n    attribute.t = EVENT;\n\n    if (parser.matchString('(')) {\n      attribute.a = flattenExpression({\n        t: ARRAY_LITERAL,\n        m: readExpressionList(parser)\n      });\n      if (!parser.matchString(')')) parser.error(`Expected closing ')'`);\n    }\n\n    parser.inEvent = true;\n\n    // check for a proxy event\n    if (!readProxyEvent(parser, attribute)) {\n      // otherwise, it's an expression\n      readArguments(parser, attribute, true);\n    } else if (reservedEventNames.test(attribute.f)) {\n      parser.pos -= attribute.f.length;\n      parser.error(\n        'Cannot use reserved event names (change, reset, teardown, update, construct, config, init, render, unrender, complete, detach, insert, destruct, attachchild, detachchild)'\n      );\n    }\n\n    parser.inEvent = false;\n  } else if ((match = boundPattern.exec(attribute.n))) {\n    // bound directives\n    const bind = match[2] === 'bind';\n    attribute.n = bind ? match[3] : match[1];\n    attribute.t = ATTRIBUTE;\n    readArguments(parser, attribute, false, true);\n\n    if (!attribute.f && bind) {\n      attribute.f = [{ t: INTERPOLATOR, r: match[3] }];\n    }\n  } else {\n    parser.sp();\n    const value = parser.nextChar() === '=' ? readAttributeValue(parser) : null;\n    attribute.f = value != null ? value : attribute.f;\n\n    if (parser.sanitizeEventAttributes && onPattern.test(attribute.n)) {\n      return { exclude: true };\n    } else {\n      attribute.f = attribute.f || (attribute.f === '' ? '' : 0);\n      attribute.t = ATTRIBUTE;\n    }\n  }\n\n  return attribute;\n}\n\nfunction readProxyEvent(parser, attribute) {\n  const start = parser.pos;\n  if (!parser.matchString('=')) parser.error(`Missing required directive arguments`);\n\n  const quote = parser.matchString(`'`) || parser.matchString(`\"`);\n  parser.sp();\n  const proxy = parser.matchPattern(proxyEvent);\n\n  if (proxy !== undefined) {\n    if (quote) {\n      parser.sp();\n      if (!parser.matchString(quote)) parser.pos = start;\n      else return (attribute.f = proxy) || true;\n    } else if (!parser.matchPattern(whitespace)) {\n      parser.pos = start;\n    } else {\n      return (attribute.f = proxy) || true;\n    }\n  } else {\n    parser.pos = start;\n  }\n}\n\nfunction readArguments(parser, attribute, required = false, single = false) {\n  parser.sp();\n  if (!parser.matchString('=')) {\n    if (required) parser.error(`Missing required directive arguments`);\n    return;\n  }\n  parser.sp();\n\n  const quote = parser.matchString('\"') || parser.matchString(\"'\");\n  const spread = parser.spreadArgs;\n  parser.spreadArgs = true;\n  parser.inUnquotedAttribute = !quote;\n  const expr = single\n    ? readExpressionOrReference(parser, [quote || ' ', '/', '>'])\n    : { m: readExpressionList(parser), t: ARRAY_LITERAL };\n  parser.inUnquotedAttribute = false;\n  parser.spreadArgs = spread;\n\n  if (quote) {\n    parser.sp();\n    if (parser.matchString(quote) !== quote) parser.error(`Expected matching quote '${quote}'`);\n  }\n\n  if (single) {\n    const interpolator = { t: INTERPOLATOR };\n    refineExpression(expr, interpolator);\n    attribute.f = [interpolator];\n  } else {\n    attribute.f = flattenExpression(expr);\n  }\n}\n","import { DELIMCHANGE } from 'config/types';\nimport readDelimiterChange from './mustache/readDelimiterChange';\nimport readRegexpLiteral from './expressions/primary/literal/readRegexpLiteral';\nimport { readAttributeOrDirective } from './element/readAttribute';\n\nconst delimiterChangeToken = { t: DELIMCHANGE, exclude: true };\n\nexport default function readMustache(parser) {\n  let mustache, i;\n\n  // If we're inside a <script> or <style> tag, and we're not\n  // interpolating, bug out\n  if (parser.interpolate[parser.inside] === false) {\n    return null;\n  }\n\n  for (i = 0; i < parser.tags.length; i += 1) {\n    if ((mustache = readMustacheOfType(parser, parser.tags[i]))) {\n      return mustache;\n    }\n  }\n\n  if (parser.inTag && !parser.inAttribute) {\n    mustache = readAttributeOrDirective(parser);\n    if (mustache) {\n      parser.sp();\n      return mustache;\n    }\n  }\n}\n\nfunction readMustacheOfType(parser, tag) {\n  let mustache, reader, i;\n\n  const start = parser.pos;\n\n  if (parser.matchString('\\\\' + tag.open)) {\n    if (start === 0 || parser.str[start - 1] !== '\\\\') {\n      return tag.open;\n    }\n  } else if (!parser.matchString(tag.open)) {\n    return null;\n  }\n\n  // delimiter change?\n  if ((mustache = readDelimiterChange(parser))) {\n    // find closing delimiter or abort...\n    if (!parser.matchString(tag.close)) {\n      return null;\n    }\n\n    // ...then make the switch\n    tag.open = mustache[0];\n    tag.close = mustache[1];\n    parser.sortMustacheTags();\n\n    return delimiterChangeToken;\n  }\n\n  parser.sp();\n\n  // illegal section closer\n  if (parser.matchString('/')) {\n    parser.pos -= 1;\n    const rewind = parser.pos;\n    if (!readRegexpLiteral(parser)) {\n      parser.pos = rewind - tag.close.length;\n      if (parser.inAttribute) {\n        parser.pos = start;\n        return null;\n      } else {\n        parser.error(\"Attempted to close a section that wasn't open\");\n      }\n    } else {\n      parser.pos = rewind;\n    }\n  }\n\n  for (i = 0; i < tag.readers.length; i += 1) {\n    reader = tag.readers[i];\n\n    if ((mustache = reader(parser, tag))) {\n      if (tag.isStatic) {\n        mustache.s = 1;\n      }\n\n      if (parser.includeLinePositions) {\n        mustache.q = parser.getLinePos(start);\n      }\n\n      return mustache;\n    }\n  }\n\n  parser.pos = start;\n  return null;\n}\n","import { TRIPLE } from 'config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readTriple(parser, tag) {\n  const expression = readExpression(parser);\n\n  if (!expression) {\n    return null;\n  }\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}'`);\n  }\n\n  const triple = { t: TRIPLE };\n  refineExpression(expression, triple); // TODO handle this differently - it's mysterious\n\n  return triple;\n}\n","import { TRIPLE } from 'config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readUnescaped(parser, tag) {\n  if (!parser.matchString('&')) {\n    return null;\n  }\n\n  parser.sp();\n\n  const expression = readExpression(parser);\n\n  if (!expression) {\n    return null;\n  }\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}'`);\n  }\n\n  const triple = { t: TRIPLE };\n  refineExpression(expression, triple); // TODO handle this differently - it's mysterious\n\n  return triple;\n}\n","import readExpression from '../readExpression';\nimport refineExpression from '../../utils/refineExpression';\n\nconst legalAlias = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nconst asRE = /^as/i;\n\nexport function readAliases(parser) {\n  const aliases = [];\n  let alias;\n  const start = parser.pos;\n\n  parser.sp();\n\n  alias = readAlias(parser);\n\n  if (alias) {\n    alias.x = refineExpression(alias.x, {});\n    aliases.push(alias);\n\n    parser.sp();\n\n    while (parser.matchString(',')) {\n      alias = readAlias(parser);\n\n      if (!alias) {\n        parser.error('Expected another alias.');\n      }\n\n      alias.x = refineExpression(alias.x, {});\n      aliases.push(alias);\n\n      parser.sp();\n    }\n\n    return aliases;\n  }\n\n  parser.pos = start;\n  return null;\n}\n\nexport function readAlias(parser) {\n  const start = parser.pos;\n\n  parser.sp();\n\n  const expr = readExpression(parser, []);\n\n  if (!expr) {\n    parser.pos = start;\n    return null;\n  }\n\n  parser.sp();\n  parser.matchPattern(asRE);\n  parser.sp();\n\n  const alias = parser.matchPattern(legalAlias);\n\n  if (!alias) {\n    parser.pos = start;\n    return null;\n  }\n\n  return { n: alias, x: expr };\n}\n","import { PARTIAL, YIELDER } from 'src/config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { readAliases } from './readAliases';\n\nexport default function readPartial(parser, tag) {\n  const type = parser.matchString('>') || parser.matchString('yield');\n  const partial = { t: type === '>' ? PARTIAL : YIELDER };\n  let aliases;\n\n  if (!type) return null;\n\n  parser.sp();\n\n  if (type === '>' || !(aliases = parser.matchString('with'))) {\n    // Partial names can include hyphens, so we can't use readExpression\n    // blindly. Instead, we use the `relaxedNames` flag to indicate that\n    // `foo-bar` should be read as a single name, rather than 'subtract\n    // bar from foo'\n    parser.relaxedNames = parser.strictRefinement = true;\n    const expression = readExpression(parser);\n    parser.relaxedNames = parser.strictRefinement = false;\n\n    if (!expression && type === '>') return null;\n\n    if (expression) {\n      refineExpression(expression, partial); // TODO...\n      parser.sp();\n      if (type !== '>') aliases = parser.matchString('with');\n    }\n  }\n\n  parser.sp();\n\n  // check for alias context e.g. `{{>foo bar as bat, bip as bop}}`\n  if (aliases || type === '>') {\n    aliases = readAliases(parser);\n    if (aliases && aliases.length) {\n      partial.z = aliases;\n    } else {\n      // otherwise check for literal context e.g. `{{>foo bar}}` then\n      // turn it into `{{#with bar}}{{>foo}}{{/with}}`\n      const context = readExpression(parser);\n      if (context) {\n        partial.c = {};\n        refineExpression(context, partial.c);\n      }\n    }\n\n    if (type !== '>' && (!partial.c && !partial.z)) {\n      // {{yield with}} requires some aliases\n      parser.error(`Expected a context or one or more aliases`);\n    }\n  }\n\n  parser.sp();\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}'`);\n  }\n\n  return partial;\n}\n","import { COMMENT } from 'src/config/types';\n\nexport default function readComment(parser, tag) {\n  if (!parser.matchString('!')) {\n    return null;\n  }\n\n  const index = parser.remaining().indexOf(tag.close);\n\n  if (index !== -1) {\n    parser.pos += index + tag.close.length;\n    return { t: COMMENT };\n  }\n}\n","import { INTERPOLATOR } from 'config/types';\nimport readExpressionOrReference from '../readExpressionOrReference';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readInterpolator(parser, tag) {\n  let expression, err;\n\n  const start = parser.pos;\n\n  // TODO would be good for perf if we could do away with the try-catch\n  try {\n    expression = readExpressionOrReference(parser, [tag.close]);\n  } catch (e) {\n    err = e;\n  }\n\n  if (!expression) {\n    if (parser.str.charAt(start) === '!') {\n      // special case - comment\n      parser.pos = start;\n      return null;\n    }\n\n    if (err) {\n      throw err;\n    }\n  }\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}' after reference`);\n\n    if (!expression) {\n      // special case - comment\n      if (parser.nextChar() === '!') {\n        return null;\n      }\n\n      parser.error(`Expected expression or legal reference`);\n    }\n  }\n\n  const interpolator = { t: INTERPOLATOR };\n  refineExpression(expression, interpolator); // TODO handle this differently - it's mysterious\n\n  return interpolator;\n}\n","import { CLOSING } from 'config/types';\n\nexport default function readClosing(parser, tag) {\n  const start = parser.pos;\n\n  if (!parser.matchString(tag.open)) {\n    return null;\n  }\n\n  parser.sp();\n\n  if (!parser.matchString('/')) {\n    parser.pos = start;\n    return null;\n  }\n\n  parser.sp();\n\n  const remaining = parser.remaining();\n  const index = remaining.indexOf(tag.close);\n\n  if (index !== -1) {\n    const closing = {\n      t: CLOSING,\n      r: remaining.substr(0, index).split(' ')[0]\n    };\n\n    parser.pos += index;\n\n    if (!parser.matchString(tag.close)) {\n      parser.error(`Expected closing delimiter '${tag.close}'`);\n    }\n\n    return closing;\n  }\n\n  parser.pos = start;\n  return null;\n}\n","import { CATCH, ELSE, ELSEIF, THEN } from 'config/types';\nimport readExpression from '../../readExpression';\nimport { name } from '../../expressions/shared/patterns';\n\nconst patterns = {\n  else: /^\\s*else\\s*/,\n  elseif: /^\\s*elseif\\s+/,\n  then: /^\\s*then\\s*/,\n  catch: /^\\s*catch\\s*/\n};\n\nconst types = {\n  else: ELSE,\n  elseif: ELSEIF,\n  then: THEN,\n  catch: CATCH\n};\n\nexport default function readInlineBlock(parser, tag, type) {\n  const start = parser.pos;\n\n  if (!parser.matchString(tag.open)) {\n    return null;\n  }\n\n  if (!parser.matchPattern(patterns[type])) {\n    parser.pos = start;\n    return null;\n  }\n\n  const res = { t: types[type] };\n\n  if (type === 'elseif') {\n    res.x = readExpression(parser);\n  } else if (type === 'catch' || type === 'then') {\n    const nm = parser.matchPattern(name);\n    if (nm) res.n = nm;\n  }\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}'`);\n  }\n\n  return res;\n}\n","import { SECTION_EACH, SECTION_IF, SECTION_IF_WITH, SECTION_UNLESS } from 'config/types';\n\nexport default {\n  each: SECTION_EACH,\n  if: SECTION_IF,\n  with: SECTION_IF_WITH,\n  unless: SECTION_UNLESS\n};\n","import {\n  ALIAS,\n  AWAIT,\n  CATCH,\n  ELSE,\n  ELSEIF,\n  SECTION,\n  SECTION_IF,\n  SECTION_UNLESS,\n  THEN\n} from 'config/types';\nimport { READERS } from 'parse/_parse';\nimport readClosing from './section/readClosing';\nimport readInlineBlock from './section/readInlineBlock';\nimport handlebarsBlockCodes from './handlebarsBlockCodes';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { readAlias, readAliases } from './readAliases';\nimport { keys } from 'utils/object';\nimport { name } from '../expressions/shared/patterns';\n\nconst indexRefPattern = /^\\s*:\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nconst keyIndexRefPattern = /^\\s*,\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nconst handlebarsBlockPattern = new RegExp('^(' + keys(handlebarsBlockCodes).join('|') + ')\\\\b');\n\nexport default function readSection(parser, tag) {\n  let expression,\n    section,\n    child,\n    children,\n    hasElse,\n    block,\n    unlessBlock,\n    closed,\n    i,\n    expectedClose,\n    hasThen,\n    hasCatch,\n    inlineThen;\n  let aliasOnly = false;\n\n  const start = parser.pos;\n\n  if (parser.matchString('^')) {\n    // watch out for parent context refs - {{^^/^^/foo}}\n    if (parser.matchString('^/')) {\n      parser.pos = start;\n      return null;\n    }\n    section = { t: SECTION, f: [], n: SECTION_UNLESS };\n  } else if (parser.matchString('#')) {\n    section = { t: SECTION, f: [] };\n\n    if (parser.matchString('partial')) {\n      parser.pos = start - parser.standardDelimiters[0].length;\n      parser.error(\n        'Partial definitions can only be at the top level of the template, or immediately inside components'\n      );\n    }\n\n    if ((block = parser.matchString('await'))) {\n      expectedClose = block;\n      section.t = AWAIT;\n    } else if ((block = parser.matchPattern(handlebarsBlockPattern))) {\n      expectedClose = block;\n      section.n = handlebarsBlockCodes[block];\n    }\n  } else {\n    return null;\n  }\n\n  parser.sp();\n\n  if (block === 'with') {\n    const aliases = readAliases(parser);\n    if (aliases) {\n      aliasOnly = true;\n      section.z = aliases;\n      section.t = ALIAS;\n    }\n  } else if (block === 'each') {\n    const alias = readAlias(parser);\n    if (alias) {\n      section.z = [{ n: alias.n, x: { r: '.' } }];\n      expression = alias.x;\n    }\n  }\n\n  if (!aliasOnly) {\n    if (!expression) expression = readExpression(parser);\n\n    if (!expression) {\n      parser.error('Expected expression');\n    }\n\n    // extra each aliases\n    if (block === 'each' && parser.matchString(',')) {\n      const aliases = readAliases(parser);\n      if (aliases) {\n        if (section.z) aliases.unshift(section.z[0]);\n        section.z = aliases;\n      }\n    }\n\n    // optional index and key references\n    if ((block === 'each' || !block) && (i = parser.matchPattern(indexRefPattern))) {\n      let extra;\n\n      if ((extra = parser.matchPattern(keyIndexRefPattern))) {\n        section.i = i + ',' + extra;\n      } else {\n        section.i = i;\n      }\n    } else if (block === 'await' && parser.matchString('then')) {\n      parser.sp();\n      hasThen = true;\n      inlineThen = parser.matchPattern(name);\n      if (!inlineThen) inlineThen = true;\n    }\n\n    if (!block && expression.n) {\n      expectedClose = expression.n;\n    }\n  }\n\n  parser.sp();\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}'`);\n  }\n\n  parser.sectionDepth += 1;\n  children = section.f;\n\n  let pos;\n  do {\n    pos = parser.pos;\n    if ((child = readClosing(parser, tag))) {\n      if (expectedClose && child.r !== expectedClose) {\n        if (!block) {\n          if (child.r)\n            parser.warn(\n              `Expected ${tag.open}/${expectedClose}${tag.close} but found ${tag.open}/${child.r}${\n                tag.close\n              }`\n            );\n        } else {\n          parser.pos = pos;\n          parser.error(`Expected ${tag.open}/${expectedClose}${tag.close}`);\n        }\n      }\n\n      parser.sectionDepth -= 1;\n      closed = true;\n    } else if (\n      !aliasOnly &&\n      ((child = readInlineBlock(parser, tag, 'elseif')) ||\n        (child = readInlineBlock(parser, tag, 'else')) ||\n        (block === 'await' &&\n          ((child = readInlineBlock(parser, tag, 'then')) ||\n            (child = readInlineBlock(parser, tag, 'catch')))))\n    ) {\n      if (section.n === SECTION_UNLESS) {\n        parser.error('{{else}} not allowed in {{#unless}}');\n      }\n\n      if (hasElse) {\n        if (child.t === ELSE) {\n          parser.error('there can only be one {{else}} block, at the end of a section');\n        } else if (child.t === ELSEIF) {\n          parser.error('illegal {{elseif...}} after {{else}}');\n        }\n      }\n\n      if (!unlessBlock && (inlineThen || !hasThen) && !hasCatch) {\n        if (block === 'await') {\n          const s = { f: children };\n          section.f = [s];\n          if (inlineThen) {\n            s.t = THEN;\n            inlineThen !== true && (s.n = inlineThen);\n          } else {\n            s.t = SECTION;\n          }\n        } else {\n          unlessBlock = [];\n        }\n      }\n\n      const mustache = {\n        t: SECTION,\n        f: (children = [])\n      };\n\n      if (child.t === ELSE) {\n        if (block === 'await') {\n          section.f.push(mustache);\n          mustache.t = ELSE;\n        } else {\n          mustache.n = SECTION_UNLESS;\n          unlessBlock.push(mustache);\n        }\n        hasElse = true;\n      } else if (child.t === ELSEIF) {\n        mustache.n = SECTION_IF;\n        refineExpression(child.x, mustache);\n        unlessBlock.push(mustache);\n      } else if (child.t === THEN) {\n        if (hasElse) parser.error('{{then}} block must appear before any {{else}} block');\n        if (hasCatch) parser.error('{{then}} block must appear before any {{catch}} block');\n        if (hasThen) parser.error('there can only be one {{then}} block per {{#await}}');\n        mustache.t = THEN;\n        hasThen = true;\n        child.n && (mustache.n = child.n);\n        section.f.push(mustache);\n      } else if (child.t === CATCH) {\n        if (hasElse) parser.error('{{catch}} block must appear before any {{else}} block');\n        if (hasCatch) parser.error('there can only be one {{catch}} block per {{#await}}');\n        mustache.t = CATCH;\n        hasCatch = true;\n        mustache.n = child.n;\n        section.f.push(mustache);\n      }\n    } else {\n      child = parser.read(READERS);\n\n      if (!child) {\n        break;\n      }\n\n      children.push(child);\n    }\n  } while (!closed);\n\n  if (unlessBlock) {\n    section.l = unlessBlock;\n  }\n\n  if (!aliasOnly) {\n    refineExpression(expression, section);\n  }\n\n  if (block === 'await' && (inlineThen || !hasThen) && !hasCatch && !hasElse) {\n    const s = { f: section.f };\n    section.f = [s];\n    if (inlineThen) {\n      s.t = THEN;\n      inlineThen !== true && (s.n = inlineThen);\n    } else {\n      s.t = SECTION;\n    }\n  }\n\n  // TODO if a section is empty it should be discarded. Don't do\n  // that here though - we need to clean everything up first, as\n  // it may contain removeable whitespace. As a temporary measure,\n  // to pass the existing tests, remove empty `f` arrays\n  if (!section.f.length) {\n    delete section.f;\n  }\n\n  return section;\n}\n","import { COMMENT } from 'config/types';\n\nconst OPEN_COMMENT = '<!--';\nconst CLOSE_COMMENT = '-->';\n\nexport default function readHtmlComment(parser) {\n  const start = parser.pos;\n\n  if (parser.textOnlyMode || !parser.matchString(OPEN_COMMENT)) {\n    return null;\n  }\n\n  const remaining = parser.remaining();\n  const endIndex = remaining.indexOf(CLOSE_COMMENT);\n\n  if (endIndex === -1) {\n    parser.error(\"Illegal HTML - expected closing comment sequence ('-->')\");\n  }\n\n  const content = remaining.substr(0, endIndex);\n  parser.pos += endIndex + 3;\n\n  const comment = {\n    t: COMMENT,\n    c: content\n  };\n\n  if (parser.includeLinePositions) {\n    comment.q = parser.getLinePos(start);\n  }\n\n  return comment;\n}\n","import { COMMENT, DELIMCHANGE, SECTION, INVERTED } from 'config/types';\nimport { lastItem } from 'utils/array';\nimport { isString } from 'utils/is';\n\nconst leadingLinebreak = /^[ \\t\\f\\r\\n]*\\r?\\n/;\nconst trailingLinebreak = /\\r?\\n[ \\t\\f\\r\\n]*$/;\n\nexport default function(items) {\n  let i, current, backOne, backTwo, lastSectionItem;\n\n  for (i = 1; i < items.length; i += 1) {\n    current = items[i];\n    backOne = items[i - 1];\n    backTwo = items[i - 2];\n\n    // if we're at the end of a [text][comment][text] sequence...\n    if (isString(current) && isComment(backOne) && isString(backTwo)) {\n      // ... and the comment is a standalone (i.e. line breaks either side)...\n      if (trailingLinebreak.test(backTwo) && leadingLinebreak.test(current)) {\n        // ... then we want to remove the whitespace after the first line break\n        items[i - 2] = backTwo.replace(trailingLinebreak, '\\n');\n\n        // and the leading line break of the second text token\n        items[i] = current.replace(leadingLinebreak, '');\n      }\n    }\n\n    // if the current item is a section, and it is preceded by a linebreak, and\n    // its first item is a linebreak...\n    if (isSection(current) && isString(backOne)) {\n      if (\n        trailingLinebreak.test(backOne) &&\n        isString(current.f[0]) &&\n        leadingLinebreak.test(current.f[0])\n      ) {\n        items[i - 1] = backOne.replace(trailingLinebreak, '\\n');\n        current.f[0] = current.f[0].replace(leadingLinebreak, '');\n      }\n    }\n\n    // if the last item was a section, and it is followed by a linebreak, and\n    // its last item is a linebreak...\n    if (isString(current) && isSection(backOne)) {\n      lastSectionItem = lastItem(backOne.f);\n\n      if (\n        isString(lastSectionItem) &&\n        trailingLinebreak.test(lastSectionItem) &&\n        leadingLinebreak.test(current)\n      ) {\n        backOne.f[backOne.f.length - 1] = lastSectionItem.replace(trailingLinebreak, '\\n');\n        items[i] = current.replace(leadingLinebreak, '');\n      }\n    }\n  }\n\n  return items;\n}\n\nfunction isComment(item) {\n  return item.t === COMMENT || item.t === DELIMCHANGE;\n}\n\nfunction isSection(item) {\n  return (item.t === SECTION || item.t === INVERTED) && item.f;\n}\n","import { lastItem } from 'utils/array';\nimport { isString } from 'utils/is';\n\nexport default function(items, leadingPattern, trailingPattern) {\n  let item;\n\n  if (leadingPattern) {\n    item = items[0];\n    if (isString(item)) {\n      item = item.replace(leadingPattern, '');\n\n      if (!item) {\n        items.shift();\n      } else {\n        items[0] = item;\n      }\n    }\n  }\n\n  if (trailingPattern) {\n    item = lastItem(items);\n    if (isString(item)) {\n      item = item.replace(trailingPattern, '');\n\n      if (!item) {\n        items.pop();\n      } else {\n        items[items.length - 1] = item;\n      }\n    }\n  }\n}\n","import { COMMENT, ELEMENT } from 'config/types';\nimport stripStandalones from './stripStandalones';\nimport trimWhitespace from './trimWhitespace';\nimport { isString } from 'utils/is';\n\nconst contiguousWhitespace = /[ \\t\\f\\r\\n]+/g;\nconst leadingWhitespace = /^[ \\t\\f\\r\\n]+/;\nconst trailingWhitespace = /[ \\t\\f\\r\\n]+$/;\nconst leadingNewLine = /^(?:\\r\\n|\\r|\\n)/;\nconst trailingNewLine = /(?:\\r\\n|\\r|\\n)$/;\n\nexport default function cleanup(\n  items,\n  stripComments,\n  preserveWhitespace,\n  removeLeadingWhitespace,\n  removeTrailingWhitespace,\n  whiteSpaceElements\n) {\n  if (isString(items)) return;\n\n  let i,\n    item,\n    previousItem,\n    nextItem,\n    preserveWhitespaceInsideFragment,\n    removeLeadingWhitespaceInsideFragment,\n    removeTrailingWhitespaceInsideFragment;\n\n  // First pass - remove standalones and comments etc\n  stripStandalones(items);\n\n  i = items.length;\n  while (i--) {\n    item = items[i];\n\n    // Remove delimiter changes, unsafe elements etc\n    if (item.exclude) {\n      items.splice(i, 1);\n    } else if (stripComments && item.t === COMMENT) {\n      // Remove comments, unless we want to keep them\n      items.splice(i, 1);\n    }\n  }\n\n  // If necessary, remove leading and trailing whitespace\n  trimWhitespace(\n    items,\n    removeLeadingWhitespace ? leadingWhitespace : null,\n    removeTrailingWhitespace ? trailingWhitespace : null\n  );\n\n  i = items.length;\n  while (i--) {\n    item = items[i];\n    removeLeadingWhitespaceInsideFragment = removeTrailingWhitespaceInsideFragment = false;\n\n    // Recurse\n    if (item.f) {\n      const isPreserveWhitespaceElement =\n        item.t === ELEMENT &&\n        (whiteSpaceElements[item.e.toLowerCase()] || whiteSpaceElements[item.e]);\n      preserveWhitespaceInsideFragment = preserveWhitespace || isPreserveWhitespaceElement;\n\n      if (!preserveWhitespace && isPreserveWhitespaceElement) {\n        trimWhitespace(item.f, leadingNewLine, trailingNewLine);\n      }\n\n      if (!preserveWhitespaceInsideFragment) {\n        previousItem = items[i - 1];\n        nextItem = items[i + 1];\n\n        // if the previous item was a text item with trailing whitespace,\n        // remove leading whitespace inside the fragment\n        if (!previousItem || (isString(previousItem) && trailingWhitespace.test(previousItem))) {\n          removeLeadingWhitespaceInsideFragment = true;\n        }\n\n        // and vice versa\n        if (!nextItem || (isString(nextItem) && leadingWhitespace.test(nextItem))) {\n          removeTrailingWhitespaceInsideFragment = true;\n        }\n      }\n\n      cleanup(\n        item.f,\n        stripComments,\n        preserveWhitespaceInsideFragment,\n        removeLeadingWhitespaceInsideFragment,\n        removeTrailingWhitespaceInsideFragment,\n        whiteSpaceElements\n      );\n    }\n\n    // Split if-else blocks into two (an if, and an unless)\n    if (item.l) {\n      cleanup(\n        item.l,\n        stripComments,\n        preserveWhitespace,\n        removeLeadingWhitespaceInsideFragment,\n        removeTrailingWhitespaceInsideFragment,\n        whiteSpaceElements\n      );\n\n      item.l.forEach(s => (s.l = 1));\n      item.l.unshift(i + 1, 0);\n      items.splice.apply(items, item.l);\n      delete item.l; // TODO would be nice if there was a way around this\n    }\n\n    // Clean up conditional attributes\n    if (item.m) {\n      cleanup(\n        item.m,\n        stripComments,\n        preserveWhitespace,\n        removeLeadingWhitespaceInsideFragment,\n        removeTrailingWhitespaceInsideFragment,\n        whiteSpaceElements\n      );\n      if (item.m.length < 1) delete item.m;\n    }\n  }\n\n  // final pass - fuse text nodes together\n  i = items.length;\n  while (i--) {\n    if (isString(items[i])) {\n      if (isString(items[i + 1])) {\n        items[i] = items[i] + items[i + 1];\n        items.splice(i + 1, 1);\n      }\n\n      if (!preserveWhitespace) {\n        items[i] = items[i].replace(contiguousWhitespace, ' ');\n      }\n\n      if (items[i] === '') {\n        items.splice(i, 1);\n      }\n    }\n  }\n}\n","import { CLOSING_TAG } from 'src/config/types';\n\nconst closingTagPattern = /^([a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*)\\s*\\>/;\n\nexport default function readClosingTag(parser) {\n  let tag;\n\n  const start = parser.pos;\n\n  // are we looking at a closing tag?\n  if (!parser.matchString('</')) {\n    return null;\n  }\n\n  if ((tag = parser.matchPattern(closingTagPattern))) {\n    if (parser.inside && tag !== parser.inside) {\n      parser.pos = start;\n      return null;\n    }\n\n    return {\n      t: CLOSING_TAG,\n      e: tag\n    };\n  }\n\n  // We have an illegal closing tag, report it\n  parser.pos -= 2;\n  parser.error('Illegal closing tag');\n}\n","export default function(camelCaseStr) {\n  return camelCaseStr.replace(/([A-Z])/g, (match, $1) => {\n    return '-' + $1.toLowerCase();\n  });\n}\n","import { ANCHOR, DOCTYPE, ELEMENT, ATTRIBUTE } from 'config/types';\nimport { voidElements } from 'utils/html';\nimport { READERS, PARTIAL_READERS } from '../_parse';\nimport cleanup from 'parse/utils/cleanup';\nimport readMustache from './readMustache';\nimport readClosingTag from './element/readClosingTag';\nimport readClosing from './mustache/section/readClosing';\nimport { create } from 'utils/object';\nimport { isString } from 'utils/is';\nimport hyphenateCamel from 'utils/hyphenateCamel';\n\nconst tagNamePattern = /^[a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*/;\nconst anchorPattern = /^[a-zA-Z_$][-a-zA-Z0-9_$]*/;\nconst validTagNameFollower = /^[\\s\\n\\/>]/;\nconst semiEnd = /;\\s*$/;\nconst exclude = { exclude: true };\n\n// based on http://developers.whatwg.org/syntax.html#syntax-tag-omission\nconst disallowedContents = {\n  li: ['li'],\n  dt: ['dt', 'dd'],\n  dd: ['dt', 'dd'],\n  p: 'address article aside blockquote div dl fieldset footer form h1 h2 h3 h4 h5 h6 header hgroup hr main menu nav ol p pre section table ul'.split(\n    ' '\n  ),\n  rt: ['rt', 'rp'],\n  rp: ['rt', 'rp'],\n  optgroup: ['optgroup'],\n  option: ['option', 'optgroup'],\n  thead: ['tbody', 'tfoot'],\n  tbody: ['tbody', 'tfoot'],\n  tfoot: ['tbody'],\n  tr: ['tr', 'tbody'],\n  td: ['td', 'th', 'tr'],\n  th: ['td', 'th', 'tr']\n};\n\nexport default readElement;\n\nfunction readElement(parser) {\n  let attribute,\n    selfClosing,\n    children,\n    partials,\n    hasPartials,\n    child,\n    closed,\n    pos,\n    remaining,\n    closingTag,\n    anchor;\n\n  const start = parser.pos;\n\n  if (parser.inside || parser.inAttribute || parser.textOnlyMode) {\n    return null;\n  }\n\n  if (!parser.matchString('<')) {\n    return null;\n  }\n\n  // if this is a closing tag, abort straight away\n  if (parser.nextChar() === '/') {\n    return null;\n  }\n\n  const element = {};\n  if (parser.includeLinePositions) {\n    element.q = parser.getLinePos(start);\n  }\n\n  // check for doctype decl\n  if (parser.matchString('!')) {\n    element.t = DOCTYPE;\n    if (!parser.matchPattern(/^doctype/i)) {\n      parser.error('Expected DOCTYPE declaration');\n    }\n\n    element.a = parser.matchPattern(/^(.+?)>/);\n    return element;\n  } else if ((anchor = parser.matchString('#'))) {\n    // check for anchor\n    parser.sp();\n    element.t = ANCHOR;\n    element.n = parser.matchPattern(anchorPattern);\n  } else {\n    // otherwise, it's an element/component\n    element.t = ELEMENT;\n\n    // element name\n    element.e = parser.matchPattern(tagNamePattern);\n    if (!element.e) {\n      return null;\n    }\n  }\n\n  // next character must be whitespace, closing solidus or '>'\n  if (!validTagNameFollower.test(parser.nextChar())) {\n    parser.error('Illegal tag name');\n  }\n\n  parser.sp();\n\n  parser.inTag = true;\n\n  // directives and attributes\n  while ((attribute = readMustache(parser))) {\n    if (attribute !== false) {\n      if (!element.m) element.m = [];\n      element.m.push(attribute);\n    }\n\n    parser.sp();\n  }\n\n  parser.inTag = false;\n\n  // allow whitespace before closing solidus\n  parser.sp();\n\n  // self-closing solidus?\n  if (parser.matchString('/')) {\n    selfClosing = true;\n  }\n\n  // closing angle bracket\n  if (!parser.matchString('>')) {\n    return null;\n  }\n\n  const lowerCaseName = (element.e || element.n).toLowerCase();\n  const preserveWhitespace = parser.preserveWhitespace;\n\n  if (!selfClosing && (anchor || !voidElements[element.e.toLowerCase()])) {\n    if (!anchor) {\n      parser.elementStack.push(lowerCaseName);\n\n      // Special case - if we open a script element, further tags should\n      // be ignored unless they're a closing script element\n      if (lowerCaseName in parser.interpolate) {\n        parser.inside = lowerCaseName;\n      }\n    }\n\n    children = [];\n    partials = create(null);\n\n    do {\n      pos = parser.pos;\n      remaining = parser.remaining();\n\n      if (!remaining) {\n        // if this happens to be a script tag and there's no content left, it's because\n        // a closing script tag can't appear in a script\n        if (parser.inside === 'script') {\n          closed = true;\n          break;\n        }\n\n        parser.error(\n          `Missing end ${parser.elementStack.length > 1 ? 'tags' : 'tag'} (${parser.elementStack\n            .reverse()\n            .map(x => `</${x}>`)\n            .join('')})`\n        );\n      }\n\n      // if for example we're in an <li> element, and we see another\n      // <li> tag, close the first so they become siblings\n      if (!anchor && !canContain(lowerCaseName, remaining)) {\n        closed = true;\n      } else if (!anchor && (closingTag = readClosingTag(parser))) {\n        // closing tag\n        closed = true;\n\n        const closingTagName = closingTag.e.toLowerCase();\n\n        // if this *isn't* the closing tag for the current element...\n        if (closingTagName !== lowerCaseName) {\n          // rewind parser\n          parser.pos = pos;\n\n          // if it doesn't close a parent tag, error\n          if (!~parser.elementStack.indexOf(closingTagName)) {\n            let errorMessage = 'Unexpected closing tag';\n\n            // add additional help for void elements, since component names\n            // might clash with them\n            if (voidElements[closingTagName.toLowerCase()]) {\n              errorMessage += ` (<${closingTagName}> is a void element - it cannot contain children)`;\n            }\n\n            parser.error(errorMessage);\n          }\n        }\n      } else if (anchor && readAnchorClose(parser, element.n)) {\n        closed = true;\n      } else {\n        // implicit close by closing section tag. TODO clean this up\n        const tag = {\n          open: parser.standardDelimiters[0],\n          close: parser.standardDelimiters[1]\n        };\n        if (readClosing(parser, tag) || readInline(parser, tag)) {\n          closed = true;\n          parser.pos = pos;\n        } else if ((child = parser.read(PARTIAL_READERS))) {\n          if (partials[child.n]) {\n            parser.pos = pos;\n            parser.error('Duplicate partial definition');\n          }\n\n          cleanup(\n            child.f,\n            parser.stripComments,\n            preserveWhitespace,\n            !preserveWhitespace,\n            !preserveWhitespace,\n            parser.whiteSpaceElements\n          );\n\n          partials[child.n] = child.f;\n          hasPartials = true;\n        } else {\n          if ((child = parser.read(READERS))) {\n            children.push(child);\n          } else {\n            closed = true;\n          }\n        }\n      }\n    } while (!closed);\n\n    if (children.length) {\n      element.f = children;\n    }\n\n    if (hasPartials) {\n      element.p = partials;\n    }\n\n    parser.elementStack.pop();\n  }\n\n  parser.inside = null;\n\n  if (parser.sanitizeElements && parser.sanitizeElements.indexOf(lowerCaseName) !== -1) {\n    return exclude;\n  }\n\n  if (\n    element.m &&\n    lowerCaseName !== 'input' &&\n    lowerCaseName !== 'select' &&\n    lowerCaseName !== 'textarea' &&\n    lowerCaseName !== 'option'\n  ) {\n    const attrs = element.m;\n    let classes, styles, cls, style;\n    let i = 0;\n    let a;\n    while (i < attrs.length) {\n      a = attrs[i];\n\n      if (a.t !== ATTRIBUTE) {\n        i++;\n        continue;\n      }\n\n      if (a.n.indexOf('class-') === 0 && !a.f) {\n        // static class directives\n        (classes || (classes = [])).push(a.n.slice(6));\n        attrs.splice(i, 1);\n      } else if (a.n.indexOf('style-') === 0 && isString(a.f)) {\n        // static style directives\n        (styles || (styles = [])).push(`${hyphenateCamel(a.n.slice(6))}: ${a.f};`);\n        attrs.splice(i, 1);\n      } else if (a.n === 'class' && isString(a.f)) {\n        // static class attrs\n        (classes || (classes = [])).push(a.f);\n        attrs.splice(i, 1);\n      } else if (a.n === 'style' && isString(a.f)) {\n        // static style attrs\n        (styles || (styles = [])).push(a.f + (semiEnd.test(a.f) ? '' : ';'));\n        attrs.splice(i, 1);\n      } else if (a.n === 'class') {\n        cls = a;\n        i++;\n      } else if (a.n === 'style') {\n        style = a;\n        i++;\n      } else if (\n        !~a.n.indexOf(':') &&\n        a.n !== 'value' &&\n        a.n !== 'contenteditable' &&\n        isString(a.f)\n      ) {\n        a.g = 1;\n        i++;\n      } else {\n        i++;\n      }\n    }\n\n    if (classes) {\n      if (!cls || !isString(cls.f))\n        attrs.unshift({ t: ATTRIBUTE, n: 'class', f: classes.join(' '), g: 1 });\n      else cls.f += ' ' + classes.join(' ');\n    } else if (cls && isString(cls.f)) cls.g = 1;\n\n    if (styles) {\n      if (!style || !isString(style.f))\n        attrs.unshift({ t: ATTRIBUTE, n: 'style', f: styles.join(' '), g: 1 });\n      else style.f += '; ' + styles.join(' ');\n    } else if (style && isString(style.f)) style.g = 1;\n  }\n\n  return element;\n}\n\nfunction canContain(name, remaining) {\n  const match = /^<([a-zA-Z][a-zA-Z0-9]*)/.exec(remaining);\n  const disallowed = disallowedContents[name];\n\n  if (!match || !disallowed) {\n    return true;\n  }\n\n  return !~disallowed.indexOf(match[1].toLowerCase());\n}\n\nfunction readAnchorClose(parser, name) {\n  const pos = parser.pos;\n  if (!parser.matchString('</')) {\n    return null;\n  }\n\n  parser.matchString('#');\n  parser.sp();\n\n  if (!parser.matchString(name)) {\n    parser.pos = pos;\n    return null;\n  }\n\n  parser.sp();\n\n  if (!parser.matchString('>')) {\n    parser.pos = pos;\n    return null;\n  }\n\n  return true;\n}\n\nconst inlines = /^\\s*(elseif|else|then|catch)\\s*/;\nfunction readInline(parser, tag) {\n  const pos = parser.pos;\n  if (!parser.matchString(tag.open)) return;\n  if (parser.matchPattern(inlines)) {\n    return true;\n  } else {\n    parser.pos = pos;\n  }\n}\n","import getLowestIndex from './utils/getLowestIndex';\nimport { decodeCharacterReferences } from 'utils/html';\n\nexport default function readText(parser) {\n  let index, disallowed, barrier;\n\n  const remaining = parser.remaining();\n\n  if (parser.textOnlyMode) {\n    disallowed = parser.tags.map(t => t.open);\n    disallowed = disallowed.concat(parser.tags.map(t => '\\\\' + t.open));\n\n    index = getLowestIndex(remaining, disallowed);\n  } else {\n    barrier = parser.inside ? '</' + parser.inside : '<';\n\n    if (parser.inside && !parser.interpolate[parser.inside]) {\n      index = remaining.indexOf(barrier);\n    } else {\n      disallowed = parser.tags.map(t => t.open);\n      disallowed = disallowed.concat(parser.tags.map(t => '\\\\' + t.open));\n\n      // http://developers.whatwg.org/syntax.html#syntax-attributes\n      if (parser.inAttribute === true) {\n        // we're inside an unquoted attribute value\n        disallowed.push(`\"`, `'`, `=`, `<`, `>`, '`');\n      } else if (parser.inAttribute) {\n        // quoted attribute value\n        disallowed.push(parser.inAttribute);\n      } else {\n        disallowed.push(barrier);\n      }\n\n      index = getLowestIndex(remaining, disallowed);\n    }\n  }\n\n  if (!index) {\n    return null;\n  }\n\n  if (index === -1) {\n    index = remaining.length;\n  }\n\n  parser.pos += index;\n\n  if ((parser.inside && parser.inside !== 'textarea') || parser.textOnlyMode) {\n    return remaining.substr(0, index);\n  } else {\n    return decodeCharacterReferences(remaining.substr(0, index));\n  }\n}\n","import { INLINE_PARTIAL } from 'config/types';\nimport { READERS } from '../_parse';\nimport readClosing from './mustache/section/readClosing';\n\nconst partialDefinitionSectionPattern = /^\\s*#\\s*partial\\s+/;\n\nexport default function readPartialDefinitionSection(parser) {\n  let child, closed;\n\n  const start = parser.pos;\n\n  const delimiters = parser.standardDelimiters;\n\n  if (!parser.matchString(delimiters[0])) {\n    return null;\n  }\n\n  if (!parser.matchPattern(partialDefinitionSectionPattern)) {\n    parser.pos = start;\n    return null;\n  }\n\n  const name = parser.matchPattern(/^[a-zA-Z_$][a-zA-Z_$0-9\\-\\/]*/);\n\n  if (!name) {\n    parser.error('expected legal partial name');\n  }\n\n  parser.sp();\n  if (!parser.matchString(delimiters[1])) {\n    parser.error(`Expected closing delimiter '${delimiters[1]}'`);\n  }\n\n  const content = [];\n\n  const [open, close] = delimiters;\n\n  do {\n    if ((child = readClosing(parser, { open, close }))) {\n      if (child.r !== 'partial') {\n        parser.error(`Expected ${open}/partial${close}`);\n      }\n\n      closed = true;\n    } else {\n      child = parser.read(READERS);\n\n      if (!child) {\n        parser.error(`Expected ${open}/partial${close}`);\n      }\n\n      content.push(child);\n    }\n  } while (!closed);\n\n  return {\n    t: INLINE_PARTIAL,\n    n: name,\n    f: content\n  };\n}\n","import { TEMPLATE_VERSION } from 'config/template';\nimport { READERS, PARTIAL_READERS } from 'parse/_parse';\nimport cleanup from 'parse/utils/cleanup';\nimport { create } from 'utils/object';\n\nexport default function readTemplate(parser) {\n  const fragment = [];\n  const partials = create(null);\n  let hasPartials = false;\n\n  const preserveWhitespace = parser.preserveWhitespace;\n\n  while (parser.pos < parser.str.length) {\n    const pos = parser.pos;\n    let item, partial;\n\n    if ((partial = parser.read(PARTIAL_READERS))) {\n      if (partials[partial.n]) {\n        parser.pos = pos;\n        parser.error('Duplicated partial definition');\n      }\n\n      cleanup(\n        partial.f,\n        parser.stripComments,\n        preserveWhitespace,\n        !preserveWhitespace,\n        !preserveWhitespace,\n        parser.whiteSpaceElements\n      );\n\n      partials[partial.n] = partial.f;\n      hasPartials = true;\n    } else if ((item = parser.read(READERS))) {\n      fragment.push(item);\n    } else {\n      parser.error('Unexpected template content');\n    }\n  }\n\n  const result = {\n    v: TEMPLATE_VERSION,\n    t: fragment\n  };\n\n  if (hasPartials) {\n    result.p = partials;\n  }\n\n  return result;\n}\n","import { fromExpression } from './createFunction';\nimport { isArray, isObject } from 'utils/is';\nimport { keys } from 'utils/object';\n\nexport default function insertExpressions(obj, expr) {\n  keys(obj).forEach(key => {\n    if (isExpression(key, obj)) return addTo(obj, expr);\n\n    const ref = obj[key];\n    if (hasChildren(ref)) insertExpressions(ref, expr);\n  });\n}\n\nfunction isExpression(key, obj) {\n  return key === 's' && isArray(obj.r);\n}\n\nfunction addTo(obj, expr) {\n  const { s, r } = obj;\n  if (!expr[s]) expr[s] = fromExpression(s, r.length);\n}\n\nfunction hasChildren(ref) {\n  return isArray(ref) || isObject(ref);\n}\n","export default {};\n","import { TEMPLATE_VERSION } from 'config/template';\nimport Parser from './Parser';\nimport readMustache from './converters/readMustache';\nimport readTriple from './converters/mustache/readTriple';\nimport readUnescaped from './converters/mustache/readUnescaped';\nimport readPartial from './converters/mustache/readPartial';\nimport readMustacheComment from './converters/mustache/readMustacheComment';\nimport readInterpolator from './converters/mustache/readInterpolator';\nimport readSection from './converters/mustache/readSection';\nimport readHtmlComment from './converters/readHtmlComment';\nimport readElement from './converters/readElement';\nimport readText from './converters/readText';\nimport readPartialDefinitionSection from './converters/readPartialDefinitionSection';\nimport readTemplate from './converters/readTemplate';\nimport readExpression from './converters/readExpression';\nimport { fromExpression } from './utils/createFunction';\nimport cleanup from './utils/cleanup';\nimport insertExpressions from './utils/insertExpressions';\nimport flattenExpression from './utils/flattenExpression';\nimport shared from '../Ractive/shared';\nimport { assign, keys } from 'utils/object';\nimport { isObjectType } from 'utils/is';\n\n// See https://github.com/ractivejs/template-spec for information\n// about the Ractive template specification\n\nconst STANDARD_READERS = [\n  readPartial,\n  readUnescaped,\n  readSection,\n  readInterpolator,\n  readMustacheComment\n];\nconst TRIPLE_READERS = [readTriple];\n\nexport const READERS = [readMustache, readHtmlComment, readElement, readText];\nexport const PARTIAL_READERS = [readPartialDefinitionSection];\n\nconst preserveWhitespaceElements = { pre: 1, script: 1, style: 1, textarea: 1 };\n\nconst defaultInterpolate = { textarea: true, script: true, style: true, template: true };\n\nconst StandardParser = Parser.extend({\n  init(str, options) {\n    const tripleDelimiters = options.tripleDelimiters || shared.defaults.tripleDelimiters;\n    const staticDelimiters = options.staticDelimiters || shared.defaults.staticDelimiters;\n    const staticTripleDelimiters =\n      options.staticTripleDelimiters || shared.defaults.staticTripleDelimiters;\n\n    this.standardDelimiters = options.delimiters || shared.defaults.delimiters;\n\n    this.tags = [\n      {\n        isStatic: false,\n        isTriple: false,\n        open: this.standardDelimiters[0],\n        close: this.standardDelimiters[1],\n        readers: STANDARD_READERS\n      },\n      {\n        isStatic: false,\n        isTriple: true,\n        open: tripleDelimiters[0],\n        close: tripleDelimiters[1],\n        readers: TRIPLE_READERS\n      },\n      {\n        isStatic: true,\n        isTriple: false,\n        open: staticDelimiters[0],\n        close: staticDelimiters[1],\n        readers: STANDARD_READERS\n      },\n      {\n        isStatic: true,\n        isTriple: true,\n        open: staticTripleDelimiters[0],\n        close: staticTripleDelimiters[1],\n        readers: TRIPLE_READERS\n      }\n    ];\n\n    this.contextLines = options.contextLines || shared.defaults.contextLines;\n\n    this.sortMustacheTags();\n\n    this.sectionDepth = 0;\n    this.elementStack = [];\n\n    this.interpolate = assign(\n      {},\n      defaultInterpolate,\n      shared.defaults.interpolate,\n      options.interpolate\n    );\n\n    if (options.sanitize === true) {\n      options.sanitize = {\n        // blacklist from https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/lang/html/html4-elements-whitelist.json\n        elements: 'applet base basefont body frame frameset head html isindex link meta noframes noscript object param script style title'.split(\n          ' '\n        ),\n        eventAttributes: true\n      };\n    }\n\n    this.stripComments = options.stripComments !== false;\n    this.preserveWhitespace = isObjectType(options.preserveWhitespace)\n      ? false\n      : options.preserveWhitespace;\n    this.sanitizeElements = options.sanitize && options.sanitize.elements;\n    this.sanitizeEventAttributes = options.sanitize && options.sanitize.eventAttributes;\n    this.includeLinePositions = options.includeLinePositions;\n    this.textOnlyMode = options.textOnlyMode;\n    this.csp = options.csp;\n    this.allowExpressions = options.allowExpressions;\n\n    if (options.expression) this.converters = [readExpression];\n\n    if (options.attributes) this.inTag = true;\n\n    // special whitespace handling requested for certain elements\n    this.whiteSpaceElements = assign({}, options.preserveWhitespace, preserveWhitespaceElements);\n  },\n\n  postProcess(result, options) {\n    if (options.expression) {\n      const expr = flattenExpression(result[0]);\n      expr.e = fromExpression(expr.s, expr.r.length);\n      return expr;\n    } else {\n      // special case - empty string\n      if (!result.length) {\n        return { t: [], v: TEMPLATE_VERSION };\n      }\n\n      if (this.sectionDepth > 0) {\n        this.error('A section was left open');\n      }\n\n      cleanup(\n        result[0].t,\n        this.stripComments,\n        this.preserveWhitespace,\n        !this.preserveWhitespace,\n        !this.preserveWhitespace,\n        this.whiteSpaceElements\n      );\n\n      if (this.csp !== false) {\n        const expr = {};\n        insertExpressions(result[0].t, expr);\n        if (keys(expr).length) result[0].e = expr;\n      }\n\n      return result[0];\n    }\n  },\n\n  converters: [readTemplate],\n\n  sortMustacheTags() {\n    // Sort in order of descending opening delimiter length (longer first),\n    // to protect against opening delimiters being substrings of each other\n    this.tags.sort((a, b) => {\n      return b.open.length - a.open.length;\n    });\n  }\n});\n\nexport default function parse(template, options) {\n  return new StandardParser(template, options || {}).result;\n}\n","import { fromExpression } from 'parse/utils/createFunction';\nimport { doc } from 'config/environment';\nimport { fatal } from 'utils/log';\nimport { addFunctions } from 'shared/getFunction';\nimport parse from 'parse/_parse';\nimport { isString } from 'utils/is';\n\nconst parseOptions = [\n  'delimiters',\n  'tripleDelimiters',\n  'staticDelimiters',\n  'staticTripleDelimiters',\n  'csp',\n  'interpolate',\n  'preserveWhitespace',\n  'sanitize',\n  'stripComments',\n  'contextLines',\n  'allowExpressions',\n  'attributes'\n];\n\nconst TEMPLATE_INSTRUCTIONS = `Either preparse or use a ractive runtime source that includes the parser. `;\n\nconst COMPUTATION_INSTRUCTIONS = `Either include a version of Ractive that can parse or convert your computation strings to functions.`;\n\nfunction throwNoParse(method, error, instructions) {\n  if (!method) {\n    fatal(`Missing Ractive.parse - cannot parse ${error}. ${instructions}`);\n  }\n}\n\nexport function createFunction(body, length) {\n  throwNoParse(fromExpression, 'new expression function', TEMPLATE_INSTRUCTIONS);\n  return fromExpression(body, length);\n}\n\nexport function createFunctionFromString(str, bindTo) {\n  throwNoParse(parse, 'compution string \"${str}\"', COMPUTATION_INSTRUCTIONS);\n  const tpl = parse(str, { expression: true });\n  return function() {\n    return tpl.e.apply(bindTo, tpl.r.map(r => bindTo.get(r)));\n  };\n}\n\nconst parser = {\n  fromId(id, options) {\n    if (!doc) {\n      if (options && options.noThrow) {\n        return;\n      }\n      throw new Error(`Cannot retrieve template #${id} as Ractive is not running in a browser.`);\n    }\n\n    if (id) id = id.replace(/^#/, '');\n\n    let template;\n\n    if (!(template = doc.getElementById(id))) {\n      if (options && options.noThrow) {\n        return;\n      }\n      throw new Error(`Could not find template element with id #${id}`);\n    }\n\n    if (template.tagName.toUpperCase() !== 'SCRIPT') {\n      if (options && options.noThrow) {\n        return;\n      }\n      throw new Error(`Template element with id #${id}, must be a <script> element`);\n    }\n\n    return 'textContent' in template ? template.textContent : template.innerHTML;\n  },\n\n  isParsed(template) {\n    return !isString(template);\n  },\n\n  getParseOptions(ractive) {\n    // Could be Ractive or a Component\n    if (ractive.defaults) {\n      ractive = ractive.defaults;\n    }\n\n    return parseOptions.reduce((val, key) => {\n      val[key] = ractive[key];\n      return val;\n    }, {});\n  },\n\n  parse(template, options) {\n    throwNoParse(parse, 'template', TEMPLATE_INSTRUCTIONS);\n    const parsed = parse(template, options);\n    addFunctions(parsed);\n    return parsed;\n  },\n\n  parseFor(template, ractive) {\n    return this.parse(template, this.getParseOptions(ractive));\n  }\n};\n\nexport default parser;\n","import { fatal } from 'utils/log';\nimport bind from 'utils/bind';\nimport { createFunctionFromString } from '../config/runtime-parser';\nimport { isFunction, isString, isObjectType } from 'utils/is';\n\nexport default function getComputationSignature(ractive, key, signature) {\n  let getter;\n  let setter;\n\n  // useful for debugging\n  let getterString;\n  let getterUseStack;\n  let setterString;\n\n  if (isFunction(signature)) {\n    getter = bind(signature, ractive);\n    getterString = signature.toString();\n    getterUseStack = true;\n  }\n\n  if (isString(signature)) {\n    getter = createFunctionFromString(signature, ractive);\n    getterString = signature;\n  }\n\n  if (isObjectType(signature)) {\n    if (isString(signature.get)) {\n      getter = createFunctionFromString(signature.get, ractive);\n      getterString = signature.get;\n    } else if (isFunction(signature.get)) {\n      getter = bind(signature.get, ractive);\n      getterString = signature.get.toString();\n      getterUseStack = true;\n    } else {\n      fatal('`%s` computation must have a `get()` method', key);\n    }\n\n    if (isFunction(signature.set)) {\n      setter = bind(signature.set, ractive);\n      setterString = signature.set.toString();\n    }\n  }\n\n  return {\n    getter,\n    setter,\n    getterString,\n    setterString,\n    getterUseStack\n  };\n}\n","import { removeFromArray } from 'utils/array';\nimport { isFunction } from 'utils/is';\n\nlet id = 0;\n\nexport default class TransitionManager {\n  constructor(callback, parent) {\n    this.callback = callback;\n    this.parent = parent;\n\n    this.intros = [];\n    this.outros = [];\n\n    this.children = [];\n    this.totalChildren = this.outroChildren = 0;\n\n    this.detachQueue = [];\n    this.outrosComplete = false;\n\n    this.id = id++;\n\n    if (parent) {\n      parent.addChild(this);\n    }\n  }\n\n  add(transition) {\n    const list = transition.isIntro ? this.intros : this.outros;\n    transition.starting = true;\n    list.push(transition);\n  }\n\n  addChild(child) {\n    this.children.push(child);\n\n    this.totalChildren += 1;\n    this.outroChildren += 1;\n  }\n\n  checkStart() {\n    if (this.parent && this.parent.started) this.start();\n  }\n\n  decrementOutros() {\n    this.outroChildren -= 1;\n    check(this);\n  }\n\n  decrementTotal() {\n    this.totalChildren -= 1;\n    check(this);\n  }\n\n  detachNodes() {\n    let len = this.detachQueue.length;\n    for (let i = 0; i < len; i++) this.detachQueue[i].detach();\n    len = this.children.length;\n    for (let i = 0; i < len; i++) this.children[i].detachNodes();\n    this.detachQueue = [];\n  }\n\n  ready() {\n    if (this.detachQueue.length) detachImmediate(this);\n  }\n\n  remove(transition) {\n    const list = transition.isIntro ? this.intros : this.outros;\n    removeFromArray(list, transition);\n    check(this);\n  }\n\n  start() {\n    this.started = true;\n    this.children.forEach(c => c.start());\n    this.intros.concat(this.outros).forEach(t => t.start());\n    check(this);\n  }\n}\n\nfunction check(tm) {\n  if (!tm.started || tm.outros.length || tm.outroChildren) return;\n\n  // If all outros are complete, and we haven't already done this,\n  // we notify the parent if there is one, otherwise\n  // start detaching nodes\n  if (!tm.outrosComplete) {\n    tm.outrosComplete = true;\n\n    if (tm.parent) tm.parent.decrementOutros(tm);\n\n    if (!tm.parent || tm.parent.outrosComplete) {\n      tm.detachNodes();\n    }\n  }\n\n  // Once everything is done, we can notify parent transition\n  // manager and call the callback\n  if (!tm.intros.length && !tm.totalChildren) {\n    if (isFunction(tm.callback)) {\n      tm.callback();\n    }\n\n    if (tm.parent && !tm.notifiedTotal) {\n      tm.notifiedTotal = true;\n      tm.parent.decrementTotal();\n    }\n  }\n}\n\n// check through the detach queue to see if a node is up or downstream from a\n// transition and if not, go ahead and detach it\nfunction detachImmediate(manager) {\n  const queue = manager.detachQueue;\n  const outros = collectAllOutros(manager);\n\n  if (!outros.length) {\n    manager.detachNodes();\n  } else {\n    let i = queue.length;\n    let j = 0;\n    let node, trans;\n    const nqueue = (manager.detachQueue = []);\n\n    start: while (i--) {\n      node = queue[i].node;\n      j = outros.length;\n      while (j--) {\n        trans = outros[j].element.node;\n        // check to see if the node is, contains, or is contained by the transitioning node\n        if (trans === node || trans.contains(node) || node.contains(trans)) {\n          nqueue.push(queue[i]);\n          continue start;\n        }\n      }\n\n      // no match, we can drop it\n      queue[i].detach();\n    }\n  }\n}\n\nfunction collectAllOutros(manager, _list) {\n  let list = _list;\n\n  // if there's no list, we're starting at the root to build one\n  if (!list) {\n    list = [];\n    let parent = manager;\n    while (parent.parent) parent = parent.parent;\n    return collectAllOutros(parent, list);\n  } else {\n    // grab all outros from child managers\n    let i = manager.children.length;\n    while (i--) {\n      list = collectAllOutros(manager.children[i], list);\n    }\n\n    // grab any from this manager if there are any\n    if (manager.outros.length) list = list.concat(manager.outros);\n\n    return list;\n  }\n}\n","import { addToArray } from 'utils/array';\nimport TransitionManager from './TransitionManager';\n\nlet batch;\n\nconst runloop = {\n  active() {\n    return !!batch;\n  },\n\n  start() {\n    let fulfilPromise;\n    const promise = new Promise(f => (fulfilPromise = f));\n\n    batch = {\n      previousBatch: batch,\n      transitionManager: new TransitionManager(fulfilPromise, batch && batch.transitionManager),\n      fragments: [],\n      tasks: [],\n      immediateObservers: [],\n      deferredObservers: [],\n      promise\n    };\n\n    return promise;\n  },\n\n  end() {\n    flushChanges();\n\n    if (!batch.previousBatch) batch.transitionManager.start();\n    else batch.transitionManager.checkStart();\n\n    batch = batch.previousBatch;\n  },\n\n  addFragment(fragment) {\n    addToArray(batch.fragments, fragment);\n  },\n\n  // TODO: come up with a better way to handle fragments that trigger their own update\n  addFragmentToRoot(fragment) {\n    if (!batch) return;\n\n    let b = batch;\n    while (b.previousBatch) {\n      b = b.previousBatch;\n    }\n\n    addToArray(b.fragments, fragment);\n  },\n\n  addObserver(observer, defer) {\n    if (!batch) {\n      observer.dispatch();\n    } else {\n      addToArray(defer ? batch.deferredObservers : batch.immediateObservers, observer);\n    }\n  },\n\n  registerTransition(transition) {\n    transition._manager = batch.transitionManager;\n    batch.transitionManager.add(transition);\n  },\n\n  // synchronise node detachments with transition ends\n  detachWhenReady(thing) {\n    batch.transitionManager.detachQueue.push(thing);\n  },\n\n  scheduleTask(task, postRender) {\n    let _batch;\n\n    if (!batch) {\n      task();\n    } else {\n      _batch = batch;\n      while (postRender && _batch.previousBatch) {\n        // this can't happen until the DOM has been fully updated\n        // otherwise in some situations (with components inside elements)\n        // transitions and decorators will initialise prematurely\n        _batch = _batch.previousBatch;\n      }\n\n      _batch.tasks.push(task);\n    }\n  },\n\n  promise() {\n    if (!batch) return Promise.resolve();\n\n    let target = batch;\n    while (target.previousBatch) {\n      target = target.previousBatch;\n    }\n\n    return target.promise || Promise.resolve();\n  }\n};\n\nexport default runloop;\n\nfunction dispatch(observer) {\n  observer.dispatch();\n}\n\nfunction flushChanges() {\n  let which = batch.immediateObservers;\n  batch.immediateObservers = [];\n  which.forEach(dispatch);\n\n  // Now that changes have been fully propagated, we can update the DOM\n  // and complete other tasks\n  let i = batch.fragments.length;\n  let fragment;\n\n  which = batch.fragments;\n  batch.fragments = [];\n\n  while (i--) {\n    fragment = which[i];\n    fragment.update();\n  }\n\n  batch.transitionManager.ready();\n\n  which = batch.deferredObservers;\n  batch.deferredObservers = [];\n  which.forEach(dispatch);\n\n  const tasks = batch.tasks;\n  batch.tasks = [];\n\n  for (i = 0; i < tasks.length; i += 1) {\n    tasks[i]();\n  }\n\n  // If updating the view caused some model blowback - e.g. a triple\n  // containing <option> elements caused the binding on the <select>\n  // to update - then we start over\n  if (\n    batch.fragments.length ||\n    batch.immediateObservers.length ||\n    batch.deferredObservers.length ||\n    batch.tasks.length\n  )\n    return flushChanges();\n}\n","import runloop from 'src/global/runloop';\n\n// TODO what happens if a transition is aborted?\n\nconst tickers = [];\nlet running = false;\n\nfunction tick() {\n  runloop.start();\n\n  const now = performance.now();\n\n  let i;\n  let ticker;\n\n  for (i = 0; i < tickers.length; i += 1) {\n    ticker = tickers[i];\n\n    if (!ticker.tick(now)) {\n      // ticker is complete, remove it from the stack, and decrement i so we don't miss one\n      tickers.splice(i--, 1);\n    }\n  }\n\n  runloop.end();\n\n  if (tickers.length) {\n    requestAnimationFrame(tick);\n  } else {\n    running = false;\n  }\n}\n\nexport default class Ticker {\n  constructor(options) {\n    this.duration = options.duration;\n    this.step = options.step;\n    this.complete = options.complete;\n    this.easing = options.easing;\n\n    this.start = performance.now();\n    this.end = this.start + this.duration;\n\n    this.running = true;\n\n    tickers.push(this);\n    if (!running) requestAnimationFrame(tick);\n  }\n\n  tick(now) {\n    if (!this.running) return false;\n\n    if (now > this.end) {\n      if (this.step) this.step(1);\n      if (this.complete) this.complete(1);\n\n      return false;\n    }\n\n    const elapsed = now - this.start;\n    const eased = this.easing(elapsed / this.duration);\n\n    if (this.step) this.step(eased);\n\n    return true;\n  }\n\n  stop() {\n    if (this.abort) this.abort();\n    this.running = false;\n  }\n}\n","import { hasOwn } from 'utils/object';\nimport { isString, isObjectType } from 'utils/is';\n\nconst prefixers = {};\n\n// TODO this is legacy. sooner we can replace the old adaptor API the better\n/* istanbul ignore next */\nfunction prefixKeypath(obj, prefix) {\n  const prefixed = {};\n\n  if (!prefix) {\n    return obj;\n  }\n\n  prefix += '.';\n\n  for (const key in obj) {\n    if (hasOwn(obj, key)) {\n      prefixed[prefix + key] = obj[key];\n    }\n  }\n\n  return prefixed;\n}\n\nexport default function getPrefixer(rootKeypath) {\n  let rootDot;\n\n  if (!prefixers[rootKeypath]) {\n    rootDot = rootKeypath ? rootKeypath + '.' : '';\n\n    /* istanbul ignore next */\n    prefixers[rootKeypath] = function(relativeKeypath, value) {\n      let obj;\n\n      if (isString(relativeKeypath)) {\n        obj = {};\n        obj[rootDot + relativeKeypath] = value;\n        return obj;\n      }\n\n      if (isObjectType(relativeKeypath)) {\n        // 'relativeKeypath' is in fact a hash, not a keypath\n        return rootDot ? prefixKeypath(relativeKeypath, rootKeypath) : relativeKeypath;\n      }\n    };\n  }\n\n  return prefixers[rootKeypath];\n}\n","import ModelBase, { maybeBind, shuffle } from './ModelBase';\nimport LinkModel from './LinkModel'; // eslint-disable-line no-unused-vars\nimport getComputationSignature from 'src/Ractive/helpers/getComputationSignature';\nimport { capture } from 'src/global/capture';\nimport { isArray, isEqual, isNumeric, isObjectLike } from 'utils/is';\nimport { handleChange, mark, markForce, marked, teardown } from 'shared/methodCallers';\nimport Ticker from 'shared/Ticker';\nimport getPrefixer from './helpers/getPrefixer';\nimport { unescapeKey } from 'shared/keypaths';\nimport { warnIfDebug } from 'utils/log';\nimport { hasOwn, keys } from 'utils/object';\nimport { buildNewIndices } from 'utils/array';\n\nexport const shared = {};\n\nexport default class Model extends ModelBase {\n  constructor(parent, key) {\n    super(parent);\n\n    this.ticker = null;\n\n    if (parent) {\n      this.key = unescapeKey(key);\n      this.isReadonly = parent.isReadonly;\n\n      if (parent.value) {\n        this.value = parent.value[this.key];\n        if (isArray(this.value)) this.length = this.value.length;\n        this.adapt();\n      }\n    }\n  }\n\n  adapt() {\n    const adaptors = this.root.adaptors;\n    const len = adaptors.length;\n\n    this.rewrap = false;\n\n    // Exit early if no adaptors\n    if (len === 0) return;\n\n    const value = this.wrapper\n      ? 'newWrapperValue' in this\n        ? this.newWrapperValue\n        : this.wrapperValue\n      : this.value;\n\n    // TODO remove this legacy nonsense\n    const ractive = this.root.ractive;\n    const keypath = this.getKeypath();\n\n    // tear previous adaptor down if present\n    if (this.wrapper) {\n      const shouldTeardown =\n        this.wrapperValue === value\n          ? false\n          : !this.wrapper.reset || this.wrapper.reset(value) === false;\n\n      if (shouldTeardown) {\n        this.wrapper.teardown();\n        delete this.wrapper;\n        delete this.wrapperValue;\n\n        // don't branch for undefined values\n        if (this.value !== undefined) {\n          const parentValue = this.parent.value || this.parent.createBranch(this.key);\n          if (parentValue[this.key] !== value) parentValue[this.key] = value;\n          this.value = value;\n        }\n      } else {\n        delete this.newWrapperValue;\n        this.value = this.wrapper.get();\n        return;\n      }\n    }\n\n    let i;\n\n    for (i = 0; i < len; i += 1) {\n      const adaptor = adaptors[i];\n      if (adaptor.filter(value, keypath, ractive)) {\n        this.wrapper = adaptor.wrap(ractive, value, keypath, getPrefixer(keypath));\n        this.wrapperValue = value;\n        this.wrapper.__model = this; // massive temporary hack to enable array adaptor\n\n        this.value = this.wrapper.get();\n\n        break;\n      }\n    }\n  }\n\n  animate(from, to, options, interpolator) {\n    if (this.ticker) this.ticker.stop();\n\n    let fulfilPromise;\n    const promise = new Promise(fulfil => (fulfilPromise = fulfil));\n\n    this.ticker = new Ticker({\n      duration: options.duration,\n      easing: options.easing,\n      step: t => {\n        const value = interpolator(t);\n        this.applyValue(value);\n        if (options.step) options.step(t, value);\n      },\n      complete: () => {\n        this.applyValue(to);\n        if (options.complete) options.complete(to);\n\n        this.ticker = null;\n        fulfilPromise(to);\n      }\n    });\n\n    promise.stop = this.ticker.stop;\n    return promise;\n  }\n\n  applyValue(value, notify = true) {\n    if (isEqual(value, this.value)) return;\n    if (this.boundValue) this.boundValue = null;\n\n    if (this.parent.wrapper && this.parent.wrapper.set) {\n      this.parent.wrapper.set(this.key, value);\n      this.parent.value = this.parent.wrapper.get();\n\n      this.value = this.parent.value[this.key];\n      if (this.wrapper) this.newWrapperValue = this.value;\n      this.adapt();\n    } else if (this.wrapper) {\n      this.newWrapperValue = value;\n      this.adapt();\n    } else {\n      const parentValue = this.parent.value || this.parent.createBranch(this.key);\n      if (isObjectLike(parentValue)) {\n        parentValue[this.key] = value;\n      } else {\n        warnIfDebug(`Attempted to set a property of a non-object '${this.getKeypath()}'`);\n        return;\n      }\n\n      this.value = value;\n      this.adapt();\n    }\n\n    // keep track of array stuff\n    if (isArray(value)) {\n      this.length = value.length;\n      this.isArray = true;\n    } else {\n      this.isArray = false;\n    }\n\n    // notify dependants\n    this.links.forEach(handleChange);\n    this.children.forEach(mark);\n    this.deps.forEach(handleChange);\n\n    if (notify) this.notifyUpstream();\n\n    if (this.parent.isArray) {\n      if (this.key === 'length') this.parent.length = value;\n      else this.parent.joinKey('length').mark();\n    }\n  }\n\n  compute(key, computed) {\n    const registry = this.computed || (this.computed = {});\n\n    if (registry[key]) {\n      registry[key].signature = getComputationSignature(this.root.ractive, key, computed);\n      registry[key].mark();\n    } else {\n      registry[key] = new shared.Computation(\n        this,\n        getComputationSignature(this.root.ractive, key, computed),\n        key\n      );\n    }\n\n    return registry[key];\n  }\n\n  createBranch(key) {\n    const branch = isNumeric(key) ? [] : {};\n    this.applyValue(branch, false);\n\n    return branch;\n  }\n\n  get(shouldCapture, opts) {\n    if (this._link) return this._link.get(shouldCapture, opts);\n    if (shouldCapture) capture(this);\n    // if capturing, this value needs to be unwrapped because it's for external use\n    if (opts && opts.virtual) return this.getVirtual(false);\n    return maybeBind(\n      this,\n      (opts && 'unwrap' in opts ? opts.unwrap !== false : shouldCapture) && this.wrapper\n        ? this.wrapperValue\n        : this.value,\n      !opts || opts.shouldBind !== false\n    );\n  }\n\n  joinKey(key, opts) {\n    if (this._link) {\n      if (opts && opts.lastLink !== false && (key === undefined || key === '')) return this;\n      return this._link.joinKey(key);\n    }\n\n    if (key === undefined || key === '') return this;\n\n    let child;\n    if (hasOwn(this.childByKey, key)) child = this.childByKey[key];\n    else child = this.computed && this.computed[key];\n\n    if (!child) {\n      let computed;\n      if (this.isRoot && this.ractive && (computed = this.ractive.computed[key])) {\n        child = this.compute(key, computed);\n      } else if (!this.isRoot && this.root.ractive) {\n        const registry = this.root.ractive.computed;\n        for (const k in registry) {\n          computed = registry[k];\n          if (computed.pattern && computed.pattern.test(this.getKeypath() + '.' + key)) {\n            child = this.compute(key, computed);\n          }\n        }\n      }\n    }\n\n    if (!child) {\n      child = new Model(this, key);\n      this.children.push(child);\n      this.childByKey[key] = child;\n    }\n\n    if (child._link && (!opts || opts.lastLink !== false)) return child._link;\n\n    return child;\n  }\n\n  mark(force) {\n    if (this._link) return this._link.mark(force);\n\n    const old = this.value;\n    const value = this.retrieve();\n\n    if (force || !isEqual(value, old)) {\n      this.value = value;\n      if (this.boundValue) this.boundValue = null;\n\n      // make sure the wrapper stays in sync\n      if (old !== value || this.rewrap) {\n        if (this.wrapper) this.newWrapperValue = value;\n        this.adapt();\n      }\n\n      // keep track of array stuff\n      if (isArray(value)) {\n        this.length = value.length;\n        this.isArray = true;\n      } else {\n        this.isArray = false;\n      }\n\n      this.children.forEach(force ? markForce : mark);\n      this.links.forEach(marked);\n\n      this.deps.forEach(handleChange);\n    }\n  }\n\n  merge(array, comparator) {\n    const newIndices = buildNewIndices(\n      this.value === array ? recreateArray(this) : this.value,\n      array,\n      comparator\n    );\n    this.parent.value[this.key] = array;\n    this.shuffle(newIndices, true);\n  }\n\n  retrieve() {\n    return this.parent.value ? this.parent.value[this.key] : undefined;\n  }\n\n  set(value) {\n    if (this.ticker) this.ticker.stop();\n    this.applyValue(value);\n  }\n\n  shuffle(newIndices, unsafe) {\n    shuffle(this, newIndices, false, unsafe);\n  }\n\n  source() {\n    return this;\n  }\n\n  teardown() {\n    if (this._link) {\n      this._link.teardown();\n      this._link = null;\n    }\n    this.children.forEach(teardown);\n    if (this.wrapper) this.wrapper.teardown();\n    if (this.computed) keys(this.computed).forEach(k => this.computed[k].teardown());\n  }\n}\n\nfunction recreateArray(model) {\n  const array = [];\n\n  for (let i = 0; i < model.length; i++) {\n    array[i] = (model.childByKey[i] || {}).value;\n  }\n\n  return array;\n}\n","/* global global */\nimport Model from '../Model';\n\nexport const data = {};\n\nexport class SharedModel extends Model {\n  constructor(value, name, ractive) {\n    super(null, `@${name}`);\n    this.key = `@${name}`;\n    this.value = value;\n    this.isRoot = true;\n    this.root = this;\n    this.adaptors = [];\n    this.ractive = ractive;\n  }\n\n  getKeypath() {\n    return this.key;\n  }\n\n  retrieve() {\n    return this.value;\n  }\n}\n\nexport default new SharedModel(data, 'shared');\n\nexport const GlobalModel = new SharedModel(\n  typeof global !== 'undefined' ? global : window,\n  'global'\n);\n","import { splitKeypath } from 'shared/keypaths';\nimport SharedModel, { GlobalModel } from 'src/model/specials/SharedModel';\nimport { warnIfDebug } from 'utils/log';\nimport { hasOwn } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nfunction findContext(fragment) {\n  let frag = fragment;\n  while (frag && !frag.context && !frag.aliases) frag = frag.parent;\n  return frag;\n}\n\nexport default function resolveReference(fragment, ref) {\n  const initialFragment = fragment;\n  // current context ref\n  if (ref === '.') return fragment.findContext();\n\n  // ancestor references\n  if (ref[0] === '~') return fragment.ractive.viewmodel.joinAll(splitKeypath(ref.slice(2)));\n\n  // scoped references\n  if (ref[0] === '.' || ref[0] === '^') {\n    let frag = fragment;\n    const parts = ref.split('/');\n    const explicitContext = parts[0] === '^^';\n\n    // find nearest context node\n    while (frag && !frag.context) {\n      frag = up(frag);\n    }\n    let context = frag && frag.context;\n\n    // walk up the context chain\n    while (frag && parts[0] === '^^') {\n      parts.shift();\n\n      // the current fragment should always be a context,\n      // and if it happens to be an iteration, jump above the each block\n      if (frag.isIteration) {\n        frag = frag.parent.parent;\n      } else {\n        // otherwise jump above the current fragment\n        frag = up(frag);\n      }\n\n      // walk to the next contexted fragment\n      while (frag && !frag.context) {\n        frag = up(frag);\n      }\n      context = frag && frag.context;\n    }\n\n    if (!context && explicitContext) {\n      throw new Error(\n        `Invalid context parent reference ('${ref}'). There is not context at that level.`\n      );\n    }\n\n    // walk up the context path\n    while (parts[0] === '.' || parts[0] === '..') {\n      const part = parts.shift();\n\n      if (part === '..') {\n        context = context.parent;\n      }\n    }\n\n    ref = parts.join('/');\n\n    // special case - `{{.foo}}` means the same as `{{./foo}}`\n    if (ref[0] === '.') ref = ref.slice(1);\n    return context.joinAll(splitKeypath(ref));\n  }\n\n  const keys = splitKeypath(ref);\n  if (!keys.length) return;\n  const base = keys.shift();\n\n  // special refs\n  if (base[0] === '@') {\n    // shorthand from outside the template\n    // @this referring to local ractive instance\n    if (base === '@this' || base === '@') {\n      return fragment.ractive.viewmodel.getRactiveModel().joinAll(keys);\n    } else if (base === '@index' || base === '@key') {\n      // @index or @key referring to the nearest repeating index or key\n      if (keys.length) badReference(base);\n      const repeater = findIter(fragment);\n      return repeater && repeater[`get${base[1] === 'i' ? 'Index' : 'Key'}`]();\n    } else if (base === '@last') {\n      const repeater = findIter(fragment);\n      return repeater && repeater.parent.getLast();\n    } else if (base === '@global') {\n      // @global referring to window or global\n      return GlobalModel.joinAll(keys);\n    } else if (base === '@shared') {\n      // @global referring to window or global\n      return SharedModel.joinAll(keys);\n    } else if (base === '@keypath' || base === '@rootpath') {\n      // @keypath or @rootpath, the current keypath string\n      const root = ref[1] === 'r' ? fragment.ractive.root : null;\n      let f = fragment;\n\n      while (\n        f &&\n        (!f.context || (f.isRoot && f.ractive.component && (root || !f.ractive.isolated)))\n      ) {\n        f = f.isRoot ? f.componentParent : f.parent;\n      }\n\n      return f.getKeypath(root);\n    } else if (base === '@context') {\n      return new ContextModel(fragment.getContext());\n    } else if (base === '@local') {\n      // @context-local data\n      return fragment.getContext()._data.joinAll(keys);\n    } else if (base === '@style') {\n      // @style shared model\n      return fragment.ractive.constructor._cssModel.joinAll(keys);\n    } else if (base === '@helpers') {\n      // @helpers instance model\n      return fragment.ractive.viewmodel.getHelpers().joinAll(keys);\n    } else {\n      // nope\n      throw new Error(`Invalid special reference '${base}'`);\n    }\n  }\n\n  // helpers\n  if (base && !keys.length) {\n    const helpers = fragment.ractive.viewmodel.getHelpers();\n    if (helpers.has(base)) return helpers.joinKey(base);\n  }\n\n  let context = findContext(fragment);\n\n  // check immediate context for a match\n  if (context) {\n    if (context.context) {\n      context = context.context;\n      if (context.has(base)) return context.joinKey(base).joinAll(keys);\n    } else {\n      // alias block, so get next full context for later\n      context = fragment.findContext();\n    }\n  } else {\n    context = fragment.findContext();\n  }\n\n  // walk up the fragment hierarchy looking for a matching ref, alias, or key in a context\n  let createMapping = false;\n  const shouldWarn = fragment.ractive.warnAboutAmbiguity;\n  let crossed = 0;\n  let model;\n\n  while (fragment) {\n    // repeated fragments\n    if (fragment.isIteration) {\n      if (base === fragment.parent.keyRef) {\n        model = fragment.getKey();\n      } else if (base === fragment.parent.indexRef) {\n        model = fragment.getIndex();\n      }\n\n      if (model && keys.length) badReference(base);\n    }\n\n    // alias node or iteration\n    if (!model && fragment.aliases && hasOwn(fragment.aliases, base)) {\n      model = fragment.aliases[base];\n    }\n\n    // check fragment context to see if it has the key we need\n    if (!model && fragment.context && fragment.context.has(base)) {\n      model = fragment.context.joinKey(base);\n\n      // this is an implicit mapping\n      if (createMapping) {\n        if (shouldWarn)\n          warnIfDebug(\n            `'${ref}' resolved but is ambiguous and will create a mapping to a parent component.`\n          );\n      } else if (shouldWarn && crossed) warnIfDebug(`'${ref}' resolved but is ambiguous.`);\n    }\n\n    if (model) {\n      if (createMapping) {\n        model = initialFragment.ractive.viewmodel.createLink(base, model, base, { implicit: true });\n      }\n\n      if (keys.length > 0 && isFunction(model.joinAll)) {\n        model = model.joinAll(keys);\n      }\n\n      return model;\n    }\n\n    // don't consider alias blocks when checking for ambiguity\n    if (fragment.context && !fragment.aliases) crossed = 1;\n\n    if (\n      (fragment.componentParent || (!fragment.parent && fragment.ractive.component)) &&\n      !fragment.ractive.isolated\n    ) {\n      // ascend through component boundary\n      fragment = fragment.componentParent || fragment.ractive.component.up;\n      createMapping = true;\n    } else {\n      fragment = fragment.parent;\n    }\n  }\n\n  // if enabled, check the instance for a match\n  const instance = initialFragment.ractive;\n  if (instance.resolveInstanceMembers && base !== 'data' && base in instance) {\n    return instance.viewmodel\n      .getRactiveModel()\n      .joinKey(base)\n      .joinAll(keys);\n  }\n\n  if (shouldWarn) {\n    warnIfDebug(`'${ref}' is ambiguous and did not resolve.`);\n  }\n\n  // didn't find anything, so go ahead and create the key on the local model\n  return context.joinKey(base).joinAll(keys);\n}\n\nfunction up(fragment) {\n  return fragment && ((!fragment.ractive.isolated && fragment.componentParent) || fragment.parent);\n}\n\nfunction findIter(start) {\n  let fragment = start;\n  let next;\n  while (!fragment.isIteration && (next = up(fragment))) {\n    fragment = next;\n  }\n\n  return fragment.isIteration && fragment;\n}\n\nfunction badReference(key) {\n  throw new Error(`An index or key reference (${key}) cannot have child properties`);\n}\n\nclass ContextModel {\n  constructor(context) {\n    this.context = context;\n  }\n\n  get() {\n    return this.context;\n  }\n\n  getKeypath() {\n    return '@context';\n  }\n}\n","import noop from 'utils/noop';\nimport { assign, create } from 'utils/object';\n\nexport const extern = {};\n\nexport default function getRactiveContext(ractive, ...assigns) {\n  const fragment =\n    ractive.fragment ||\n    ractive._fakeFragment ||\n    (ractive._fakeFragment = new FakeFragment(ractive));\n  return fragment.getContext.apply(fragment, assigns);\n}\n\nexport function getContext(...assigns) {\n  if (!this.ctx) this.ctx = new extern.Context(this);\n  assigns.unshift(create(this.ctx));\n  return assign.apply(null, assigns);\n}\n\nexport class FakeFragment {\n  constructor(ractive) {\n    this.ractive = ractive;\n  }\n\n  findContext() {\n    return this.ractive.viewmodel;\n  }\n}\nconst proto = FakeFragment.prototype;\nproto.getContext = getContext;\nproto.find = proto.findComponent = proto.findAll = proto.findAllComponents = noop;\n\nexport function findParentWithContext(fragment) {\n  let frag = fragment;\n  while (frag && !frag.context) frag = frag.parent;\n  if (!frag) return fragment && fragment.ractive.fragment;\n  else return frag;\n}\n","import { isArray, isObject, isObjectType, isFunction, isString } from 'utils/is';\nimport { warnIfDebug } from 'utils/log';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport runloop from '../global/runloop';\nimport { splitKeypath } from './keypaths';\nimport { FakeFragment } from './getRactiveContext';\nimport { hasOwn } from 'utils/object';\n\nexport let keep = false;\n\nexport function set(pairs, options) {\n  const k = keep;\n\n  const deep = options && options.deep;\n  const shuffle = options && options.shuffle;\n  const promise = runloop.start();\n  if (options && 'keep' in options) keep = options.keep;\n\n  let i = pairs.length;\n  while (i--) {\n    const model = pairs[i][0];\n    const value = pairs[i][1];\n    const keypath = pairs[i][2];\n\n    if (!model) {\n      runloop.end();\n      throw new Error(`Failed to set invalid keypath '${keypath}'`);\n    }\n\n    if (deep) deepSet(model, value);\n    else if (shuffle) {\n      let array = value;\n      const target = model.get();\n      // shuffle target array with itself\n      if (!array) array = target;\n\n      // if there's not an array there yet, go ahead and set\n      if (target === undefined) {\n        model.set(array);\n      } else {\n        if (!isArray(target) || !isArray(array)) {\n          runloop.end();\n          throw new Error('You cannot merge an array with a non-array');\n        }\n\n        const comparator = getComparator(shuffle);\n        model.merge(array, comparator);\n      }\n    } else model.set(value);\n  }\n\n  runloop.end();\n\n  keep = k;\n\n  return promise;\n}\n\nconst star = /\\*/;\nexport function gather(ractive, keypath, base, isolated) {\n  if (!base && (keypath[0] === '.' || keypath[1] === '^')) {\n    warnIfDebug(\n      `Attempted to set a relative keypath from a non-relative context. You can use a context object to set relative keypaths.`\n    );\n    return [];\n  }\n\n  const keys = splitKeypath(keypath);\n  const model = base || ractive.viewmodel;\n\n  if (star.test(keypath)) {\n    return model.findMatches(keys);\n  } else {\n    if (model === ractive.viewmodel) {\n      // allow implicit mappings\n      if (\n        ractive.component &&\n        !ractive.isolated &&\n        !model.has(keys[0]) &&\n        keypath[0] !== '@' &&\n        keypath[0] &&\n        !isolated\n      ) {\n        return [resolveReference(ractive.fragment || new FakeFragment(ractive), keypath)];\n      } else {\n        return [model.joinAll(keys)];\n      }\n    } else {\n      return [model.joinAll(keys)];\n    }\n  }\n}\n\nexport function build(ractive, keypath, value, isolated) {\n  const sets = [];\n\n  // set multiple keypaths in one go\n  if (isObject(keypath)) {\n    for (const k in keypath) {\n      if (hasOwn(keypath, k)) {\n        sets.push.apply(sets, gather(ractive, k, null, isolated).map(m => [m, keypath[k], k]));\n      }\n    }\n  } else {\n    // set a single keypath\n    sets.push.apply(sets, gather(ractive, keypath, null, isolated).map(m => [m, value, keypath]));\n  }\n\n  return sets;\n}\n\nconst deepOpts = { virtual: false };\nfunction deepSet(model, value) {\n  const dest = model.get(false, deepOpts);\n\n  // if dest doesn't exist, just set it\n  if (dest == null || !isObjectType(value)) return model.set(value);\n  if (!isObjectType(dest)) return model.set(value);\n\n  for (const k in value) {\n    if (hasOwn(value, k)) {\n      deepSet(model.joinKey(k), value[k]);\n    }\n  }\n}\n\nconst comparators = {};\nfunction getComparator(option) {\n  if (option === true) return null; // use existing arrays\n  if (isFunction(option)) return option;\n\n  if (isString(option)) {\n    return comparators[option] || (comparators[option] = thing => thing[option]);\n  }\n\n  throw new Error('If supplied, options.compare must be a string, function, or true'); // TODO link to docs\n}\n","import { isNumeric, isString } from 'utils/is';\nimport { build, set } from 'shared/set';\n\nconst errorMessage = 'Cannot add to a non-numeric value';\n\nexport default function add(ractive, keypath, d, options) {\n  if (!isString(keypath) || !isNumeric(d)) {\n    throw new Error('Bad arguments');\n  }\n\n  const sets = build(ractive, keypath, d, options && options.isolated);\n\n  return set(\n    sets.map(pair => {\n      const [model, add] = pair;\n      const value = model.get();\n      if (!isNumeric(add) || !isNumeric(value)) throw new Error(errorMessage);\n      return [model, value + add];\n    })\n  );\n}\n","import add from './shared/add';\nimport { isNumber, isObjectType } from 'utils/is';\n\nexport default function Ractive$add(keypath, d, options) {\n  const num = isNumber(d) ? d : 1;\n  const opts = isObjectType(d) ? d : options;\n  return add(this, keypath, num, opts);\n}\n","import runloop from 'src/global/runloop';\nimport easing from 'src/Ractive/static/easing';\nimport interpolate from 'shared/interpolate';\nimport { isEqual, isFunction, isObjectType } from 'utils/is';\nimport noop from 'utils/noop';\nimport { splitKeypath } from 'shared/keypaths';\nimport { defineProperty, keys as objectKeys } from 'utils/object';\n\nfunction immediate(value) {\n  const result = Promise.resolve(value);\n  defineProperty(result, 'stop', { value: noop });\n  return result;\n}\n\nconst linear = easing.linear;\n\nfunction getOptions(options, instance) {\n  options = options || {};\n\n  let easing;\n  if (options.easing) {\n    easing = isFunction(options.easing) ? options.easing : instance.easing[options.easing];\n  }\n\n  return {\n    easing: easing || linear,\n    duration: 'duration' in options ? options.duration : 400,\n    complete: options.complete || noop,\n    step: options.step || noop,\n    interpolator: options.interpolator\n  };\n}\n\nexport function animate(ractive, model, to, options) {\n  options = getOptions(options, ractive);\n  const from = model.get();\n\n  // don't bother animating values that stay the same\n  if (isEqual(from, to)) {\n    options.complete(options.to);\n    return immediate(to);\n  }\n\n  const interpolator = interpolate(from, to, ractive, options.interpolator);\n\n  // if we can't interpolate the value, set it immediately\n  if (!interpolator) {\n    runloop.start();\n    model.set(to);\n    runloop.end();\n\n    return immediate(to);\n  }\n\n  return model.animate(from, to, options, interpolator);\n}\n\nexport default function Ractive$animate(keypath, to, options) {\n  if (isObjectType(keypath)) {\n    const keys = objectKeys(keypath);\n\n    throw new Error(`ractive.animate(...) no longer supports objects. Instead of ractive.animate({\n  ${keys.map(key => `'${key}': ${keypath[key]}`).join('\\n  ')}\n}, {...}), do\n\n${keys.map(key => `ractive.animate('${key}', ${keypath[key]}, {...});`).join('\\n')}\n`);\n  }\n\n  return animate(this, this.viewmodel.joinAll(splitKeypath(keypath)), to, options);\n}\n","export function enqueue(ractive, event) {\n  if (ractive.event) {\n    ractive._eventQueue.push(ractive.event);\n  }\n\n  ractive.event = event;\n}\n\nexport function dequeue(ractive) {\n  if (ractive._eventQueue.length) {\n    ractive.event = ractive._eventQueue.pop();\n  } else {\n    ractive.event = null;\n  }\n}\n","import { enqueue, dequeue } from './eventStack';\n\nconst initStars = {};\nconst bubbleStars = {};\n\n// cartesian product of name parts and stars\n// adjusted appropriately for special cases\nfunction variants(name, initial) {\n  const map = initial ? initStars : bubbleStars;\n  if (map[name]) return map[name];\n\n  const parts = name.split('.');\n  const result = [];\n  let base = false;\n\n  // initial events the implicit namespace of 'this'\n  if (initial) {\n    parts.unshift('this');\n    base = true;\n  }\n\n  // use max - 1 bits as a bitmap to pick a part or a *\n  // need to skip the full star case if the namespace is synthetic\n  const max = Math.pow(2, parts.length) - (initial ? 1 : 0);\n  for (let i = 0; i < max; i++) {\n    const join = [];\n    for (let j = 0; j < parts.length; j++) {\n      join.push(1 & (i >> j) ? '*' : parts[j]);\n    }\n    result.unshift(join.join('.'));\n  }\n\n  if (base) {\n    // include non-this-namespaced versions\n    if (parts.length > 2) {\n      result.push.apply(result, variants(name, false));\n    } else {\n      result.push('*');\n      result.push(name);\n    }\n  }\n\n  map[name] = result;\n  return result;\n}\n\nexport default function fireEvent(ractive, eventName, context, args = []) {\n  if (!eventName) {\n    return;\n  }\n\n  context.name = eventName;\n  args.unshift(context);\n\n  const eventNames = ractive._nsSubs ? variants(eventName, true) : ['*', eventName];\n\n  return fireEventAs(ractive, eventNames, context, args, true);\n}\n\nfunction fireEventAs(ractive, eventNames, context, args, initialFire = false) {\n  let bubble = true;\n\n  if (initialFire || ractive._nsSubs) {\n    enqueue(ractive, context);\n\n    let i = eventNames.length;\n    while (i--) {\n      if (eventNames[i] in ractive._subs) {\n        bubble = notifySubscribers(ractive, ractive._subs[eventNames[i]], context, args) && bubble;\n      }\n    }\n\n    dequeue(ractive);\n  }\n\n  if (ractive.parent && bubble) {\n    if (initialFire && ractive.component) {\n      const fullName = ractive.component.name + '.' + eventNames[eventNames.length - 1];\n      eventNames = variants(fullName, false);\n\n      if (context && !context.component) {\n        context.component = ractive;\n      }\n    }\n\n    bubble = fireEventAs(ractive.parent, eventNames, context, args);\n  }\n\n  return bubble;\n}\n\nfunction notifySubscribers(ractive, subscribers, context, args) {\n  let originalEvent = null;\n  let stopEvent = false;\n\n  // subscribers can be modified inflight, e.g. \"once\" functionality\n  // so we need to copy to make sure everyone gets called\n  subscribers = subscribers.slice();\n\n  for (let i = 0, len = subscribers.length; i < len; i += 1) {\n    if (!subscribers[i].off && subscribers[i].handler.apply(ractive, args) === false) {\n      stopEvent = true;\n    }\n  }\n\n  if (context && stopEvent && (originalEvent = context.event)) {\n    originalEvent.preventDefault && originalEvent.preventDefault();\n    originalEvent.stopPropagation && originalEvent.stopPropagation();\n  }\n\n  return !stopEvent;\n}\n","import fireEvent from './fireEvent';\nimport getRactiveContext from '../shared/getRactiveContext';\n\nexport class Hook {\n  constructor(event) {\n    this.event = event;\n    this.method = 'on' + event;\n  }\n\n  fire(ractive, arg) {\n    const context = getRactiveContext(ractive);\n    const method = this.method;\n\n    if (ractive[method]) {\n      arg ? ractive[method](context, arg) : ractive[method](context);\n    }\n\n    fireEvent(ractive, this.event, context, arg ? [arg, ractive] : [ractive]);\n  }\n}\n\nfunction getChildQueue(queue, ractive) {\n  return queue[ractive._guid] || (queue[ractive._guid] = []);\n}\n\nfunction fire(hookQueue, ractive) {\n  const childQueue = getChildQueue(hookQueue.queue, ractive);\n\n  hookQueue.hook.fire(ractive);\n\n  // queue is \"live\" because components can end up being\n  // added while hooks fire on parents that modify data values.\n  while (childQueue.length) {\n    fire(hookQueue, childQueue.shift());\n  }\n\n  delete hookQueue.queue[ractive._guid];\n}\n\nexport class HookQueue {\n  constructor(event) {\n    this.hook = new Hook(event);\n    this.inProcess = {};\n    this.queue = {};\n  }\n\n  begin(ractive) {\n    this.inProcess[ractive._guid] = true;\n  }\n\n  end(ractive) {\n    const parent = ractive.parent;\n\n    // If this is *isn't* a child of a component that's in process,\n    // it should call methods or fire at this point\n    if (!parent || !this.inProcess[parent._guid]) {\n      fire(this, ractive);\n    } else {\n      // elsewise, handoff to parent to fire when ready\n      getChildQueue(this.queue, parent).push(ractive);\n    }\n\n    delete this.inProcess[ractive._guid];\n  }\n}\n\nconst hooks = {};\n[\n  'construct',\n  'config',\n  'attachchild',\n  'detach',\n  'detachchild',\n  'insert',\n  'complete',\n  'reset',\n  'render',\n  'unrendering',\n  'unrender',\n  'teardown',\n  'destruct',\n  'update'\n].forEach(hook => {\n  hooks[hook] = new Hook(hook);\n});\nhooks.init = new HookQueue('init');\n\nexport default hooks;\n","export function findAnchors(fragment, name = null) {\n  const res = [];\n\n  findAnchorsIn(fragment, name, res);\n\n  return res;\n}\n\nfunction findAnchorsIn(item, name, result) {\n  if (item.isAnchor) {\n    if (!name || item.name === name) {\n      result.push(item);\n    }\n  } else if (item.items) {\n    item.items.forEach(i => findAnchorsIn(i, name, result));\n  } else if (item.iterations) {\n    item.iterations.forEach(i => findAnchorsIn(i, name, result));\n  } else if (item.fragment && !item.component) {\n    findAnchorsIn(item.fragment, name, result);\n  }\n}\n\nexport function updateAnchors(instance, name = null) {\n  const anchors = findAnchors(instance.fragment, name);\n  const idxs = {};\n  const children = instance._children.byName;\n\n  anchors.forEach(a => {\n    const name = a.name;\n    if (!(name in idxs)) idxs[name] = 0;\n    const idx = idxs[name];\n    const child = (children[name] || [])[idx];\n\n    if (child && child.lastBound !== a) {\n      if (child.lastBound) child.lastBound.removeChild(child);\n      a.addChild(child);\n    }\n\n    idxs[name]++;\n  });\n}\n\nexport function unrenderChild(meta) {\n  if (meta.instance.fragment.rendered) {\n    meta.shouldDestroy = true;\n    meta.instance.unrender();\n  }\n  meta.instance.el = null;\n}\n","import hooks from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { unrenderChild, updateAnchors } from 'shared/anchors';\n\nexport default function attachChild(child, options = {}) {\n  const children = this._children;\n  let idx;\n\n  if (child.parent && child.parent !== this)\n    throw new Error(\n      `Instance ${child._guid} is already attached to a different instance ${\n        child.parent._guid\n      }. Please detach it from the other instance using detachChild first.`\n    );\n  else if (child.parent)\n    throw new Error(`Instance ${child._guid} is already attached to this instance.`);\n\n  const meta = {\n    instance: child,\n    ractive: this,\n    name: options.name || child.constructor.name || 'Ractive',\n    target: options.target || false,\n    bubble,\n    findNextNode\n  };\n  meta.nameOption = options.name;\n\n  // child is managing itself\n  if (!meta.target) {\n    meta.up = this.fragment;\n    meta.external = true;\n  } else {\n    let list;\n    if (!(list = children.byName[meta.target])) {\n      list = [];\n      this.set(`@this.children.byName.${meta.target}`, list);\n    }\n    idx = options.prepend ? 0 : options.insertAt !== undefined ? options.insertAt : list.length;\n  }\n\n  child.parent = this;\n  child.root = this.root;\n  child.component = meta;\n  children.push(meta);\n\n  const promise = runloop.start();\n\n  const rm = child.viewmodel.getRactiveModel();\n  rm.joinKey('parent', { lastLink: false }).link(this.viewmodel.getRactiveModel());\n  rm.joinKey('root', { lastLink: false }).link(this.root.viewmodel.getRactiveModel());\n\n  hooks.attachchild.fire(child);\n\n  if (meta.target) {\n    unrenderChild(meta);\n    this.splice(`@this.children.byName.${meta.target}`, idx, 0, meta);\n    updateAnchors(this, meta.target);\n  } else {\n    if (!child.isolated) child.viewmodel.attached(this.fragment);\n  }\n\n  runloop.end();\n\n  promise.ractive = child;\n  return promise.then(() => child);\n}\n\nfunction bubble() {\n  runloop.addFragment(this.instance.fragment);\n}\n\nfunction findNextNode() {\n  if (this.anchor) return this.anchor.findNextNode();\n}\n","import { splitKeypath } from 'shared/keypaths';\nimport { isString, isFunction } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport { fireShuffleTasks } from 'src/model/ModelBase';\n\nexport function compute(path, computed) {\n  this.computed[path] = computed;\n  if (isString(computed) || isFunction(computed))\n    computed = this.computed[path] = { get: computed };\n\n  const keys = splitKeypath(path);\n  if (!~path.indexOf('*')) {\n    const last = keys.pop();\n    return this.viewmodel.joinAll(keys).compute(last, computed);\n  } else {\n    computed.pattern = new RegExp(\n      '^' +\n        keys\n          .map(k => k.replace(/\\*\\*/g, '(.+)').replace(/\\*/g, '((?:\\\\\\\\.|[^\\\\.])+)'))\n          .join('\\\\.') +\n        '$'\n    );\n  }\n}\n\nexport default function Ractive$compute(path, computed) {\n  const promise = runloop.start();\n  const comp = compute.call(this, path, computed);\n\n  if (comp) {\n    const keys = splitKeypath(path);\n    if (keys.length === 1 && !comp.isReadonly) {\n      comp.set(this.viewmodel.value[keys[0]]);\n    }\n\n    const first = keys.reduce((a, c) => a && a.childByKey[c], this.viewmodel);\n    if (first) {\n      first.rebind(comp, first, false);\n      if (first.parent) delete first.parent.childByKey[first.key];\n      fireShuffleTasks();\n    }\n  }\n\n  runloop.end();\n\n  return promise;\n}\n","import hooks from 'src/events/Hook';\nimport { removeFromArray } from 'utils/array';\n\nexport default function Ractive$detach() {\n  if (this.isDetached) {\n    return this.el;\n  }\n\n  if (this.el) {\n    removeFromArray(this.el.__ractive_instances__, this);\n  }\n\n  this.el = this.fragment.detach();\n  this.isDetached = true;\n\n  hooks.detach.fire(this);\n  return this.el;\n}\n","import hooks from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { updateAnchors } from 'shared/anchors';\n\nexport default function detachChild(child) {\n  const children = this._children;\n  let meta, index;\n\n  let i = children.length;\n  while (i--) {\n    if (children[i].instance === child) {\n      index = i;\n      meta = children[i];\n      break;\n    }\n  }\n\n  if (!meta || child.parent !== this)\n    throw new Error(`Instance ${child._guid} is not attached to this instance.`);\n\n  const promise = runloop.start();\n\n  if (meta.anchor) meta.anchor.removeChild(meta);\n  if (!child.isolated) child.viewmodel.detached();\n\n  children.splice(index, 1);\n  if (meta.target) {\n    this.splice(\n      `@this.children.byName.${meta.target}`,\n      children.byName[meta.target].indexOf(meta),\n      1\n    );\n    updateAnchors(this, meta.target);\n  }\n  const rm = child.viewmodel.getRactiveModel();\n  rm.joinKey('parent', { lastLink: false }).unlink();\n  rm.joinKey('root', { lastLink: false }).link(rm);\n  child.root = child;\n  child.parent = null;\n  child.component = null;\n\n  hooks.detachchild.fire(child);\n\n  runloop.end();\n\n  promise.ractive = child;\n  return promise.then(() => child);\n}\n","export default function Ractive$find(selector, options = {}) {\n  if (!this.rendered)\n    throw new Error(\n      `Cannot call ractive.find('${selector}') unless instance is rendered to the DOM`\n    );\n\n  let node = this.fragment.find(selector, options);\n  if (node) return node;\n\n  if (options.remote) {\n    for (let i = 0; i < this._children.length; i++) {\n      if (!this._children[i].instance.fragment.rendered) continue;\n      node = this._children[i].instance.find(selector, options);\n      if (node) return node;\n    }\n  }\n}\n","import { isArray } from 'utils/is';\n\nexport default function Ractive$findAll(selector, options = {}) {\n  if (!this.rendered)\n    throw new Error(\n      `Cannot call ractive.findAll('${selector}', ...) unless instance is rendered to the DOM`\n    );\n\n  if (!isArray(options.result)) options.result = [];\n\n  this.fragment.findAll(selector, options);\n\n  if (options.remote) {\n    // seach non-fragment children\n    this._children.forEach(c => {\n      if (!c.target && c.instance.fragment && c.instance.fragment.rendered) {\n        c.instance.findAll(selector, options);\n      }\n    });\n  }\n\n  return options.result;\n}\n","import { isArray, isObjectType } from 'utils/is';\n\nexport default function Ractive$findAllComponents(selector, options) {\n  if (!options && isObjectType(selector)) {\n    options = selector;\n    selector = '';\n  }\n\n  options = options || {};\n\n  if (!isArray(options.result)) options.result = [];\n\n  this.fragment.findAllComponents(selector, options);\n\n  if (options.remote) {\n    // search non-fragment children\n    this._children.forEach(c => {\n      if (!c.target && c.instance.fragment && c.instance.fragment.rendered) {\n        if (!selector || c.name === selector) {\n          options.result.push(c.instance);\n        }\n\n        c.instance.findAllComponents(selector, options);\n      }\n    });\n  }\n\n  return options.result;\n}\n","import { isObjectType } from 'utils/is';\n\nexport default function Ractive$findComponent(selector, options = {}) {\n  if (isObjectType(selector)) {\n    options = selector;\n    selector = '';\n  }\n\n  let child = this.fragment.findComponent(selector, options);\n  if (child) return child;\n\n  if (options.remote) {\n    if (!selector && this._children.length) return this._children[0].instance;\n    for (let i = 0; i < this._children.length; i++) {\n      // skip children that are or should be in an anchor\n      if (this._children[i].target) continue;\n      if (this._children[i].name === selector) return this._children[i].instance;\n      child = this._children[i].instance.findComponent(selector, options);\n      if (child) return child;\n    }\n  }\n}\n","export default function Ractive$findContainer(selector) {\n  if (this.container) {\n    if (this.container.component && this.container.component.name === selector) {\n      return this.container;\n    } else {\n      return this.container.findContainer(selector);\n    }\n  }\n\n  return null;\n}\n","export default function Ractive$findParent(selector) {\n  if (this.parent) {\n    if (this.parent.component && this.parent.component.name === selector) {\n      return this.parent;\n    } else {\n      return this.parent.findParent(selector);\n    }\n  }\n\n  return null;\n}\n","import { ANCHOR, COMPONENT, ELEMENT } from 'config/types';\n\nexport default function findElement(start, orComponent = true, name) {\n  while (\n    start &&\n    (start.type !== ELEMENT || (name && start.name !== name)) &&\n    (!orComponent || (start.type !== COMPONENT && start.type !== ANCHOR))\n  ) {\n    // start is a fragment - look at the owner\n    if (start.owner) start = start.owner;\n    else if (start.component)\n      // start is a component or yielder - look at the container\n      start = start.containerFragment || start.component.up;\n    else if (start.parent)\n      // start is an item - look at the parent\n      start = start.parent;\n    else if (start.up)\n      // start is an item without a parent - look at the parent fragment\n      start = start.up;\n    else start = undefined;\n  }\n\n  return start;\n}\n","import { isNumber } from 'utils/is';\n\n// This function takes an array, the name of a mutator method, and the\n// arguments to call that mutator method with, and returns an array that\n// maps the old indices to their new indices.\n\n// So if you had something like this...\n//\n//     array = [ 'a', 'b', 'c', 'd' ];\n//     array.push( 'e' );\n//\n// ...you'd get `[ 0, 1, 2, 3 ]` - in other words, none of the old indices\n// have changed. If you then did this...\n//\n//     array.unshift( 'z' );\n//\n// ...the indices would be `[ 1, 2, 3, 4, 5 ]` - every item has been moved\n// one higher to make room for the 'z'. If you removed an item, the new index\n// would be -1...\n//\n//     array.splice( 2, 2 );\n//\n// ...this would result in [ 0, 1, -1, -1, 2, 3 ].\n//\n// This information is used to enable fast, non-destructive shuffling of list\n// sections when you do e.g. `ractive.splice( 'items', 2, 2 );\n\nexport default function getNewIndices(length, methodName, args) {\n  const newIndices = [];\n\n  const spliceArguments = getSpliceEquivalent(length, methodName, args);\n\n  if (!spliceArguments) {\n    return null; // TODO support reverse and sort?\n  }\n\n  const balance = spliceArguments.length - 2 - spliceArguments[1];\n\n  const removeStart = Math.min(length, spliceArguments[0]);\n  const removeEnd = removeStart + spliceArguments[1];\n  newIndices.startIndex = removeStart;\n\n  let i;\n  for (i = 0; i < removeStart; i += 1) {\n    newIndices.push(i);\n  }\n\n  for (; i < removeEnd; i += 1) {\n    newIndices.push(-1);\n  }\n\n  for (; i < length; i += 1) {\n    newIndices.push(i + balance);\n  }\n\n  // there is a net shift for the rest of the array starting with index + balance\n  if (balance !== 0) {\n    newIndices.touchedFrom = spliceArguments[0];\n  } else {\n    newIndices.touchedFrom = length;\n  }\n\n  return newIndices;\n}\n\n// The pop, push, shift an unshift methods can all be represented\n// as an equivalent splice\nfunction getSpliceEquivalent(length, methodName, args) {\n  switch (methodName) {\n    case 'splice':\n      if (args[0] !== undefined && args[0] < 0) {\n        args[0] = length + Math.max(args[0], -length);\n      }\n\n      if (args[0] === undefined) args[0] = 0;\n\n      while (args.length < 2) {\n        args.push(length - args[0]);\n      }\n\n      if (!isNumber(args[1])) {\n        args[1] = length - args[0];\n      }\n\n      // ensure we only remove elements that exist\n      args[1] = Math.min(args[1], length - args[0]);\n\n      return args;\n\n    case 'sort':\n    case 'reverse':\n      return null;\n\n    case 'pop':\n      if (length) {\n        return [length - 1, 1];\n      }\n      return [0, 0];\n\n    case 'push':\n      return [length, 0].concat(args);\n\n    case 'shift':\n      return [0, length ? 1 : 0];\n\n    case 'unshift':\n      return [0, 0].concat(args);\n  }\n}\n","import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\nimport getNewIndices from 'shared/getNewIndices';\nimport { isArray } from 'utils/is';\n\nconst arrayProto = Array.prototype;\n\nexport default function(methodName) {\n  function path(keypath, ...args) {\n    return model(this.viewmodel.joinAll(splitKeypath(keypath)), args);\n  }\n\n  function model(mdl, args) {\n    let array = mdl.get();\n\n    if (!isArray(array)) {\n      if (array === undefined) {\n        array = [];\n        const result = arrayProto[methodName].apply(array, args);\n        const promise = runloop.start().then(() => result);\n        mdl.set(array);\n        runloop.end();\n        return promise;\n      } else {\n        throw new Error(\n          `shuffle array method ${methodName} called on non-array at ${mdl.getKeypath()}`\n        );\n      }\n    }\n\n    const newIndices = getNewIndices(array.length, methodName, args);\n    const result = arrayProto[methodName].apply(array, args);\n\n    const promise = runloop.start().then(() => result);\n    promise.result = result;\n\n    if (newIndices) {\n      if (mdl.shuffle) {\n        mdl.shuffle(newIndices);\n      } else {\n        // it's a computation, which don't have a shuffle, so just invalidate\n        mdl.mark();\n      }\n    } else {\n      mdl.set(result);\n    }\n\n    runloop.end();\n\n    return promise;\n  }\n\n  return { path, model };\n}\n","import hooks from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { splitKeypath } from 'shared/keypaths';\nimport { isString } from 'utils/is';\n\nexport function update(ractive, model, options) {\n  // if the parent is wrapped, the adaptor will need to be updated before\n  // updating on this keypath\n  if (model.parent && model.parent.wrapper) {\n    model.parent.adapt();\n  }\n\n  const promise = runloop.start();\n\n  model.mark(options && options.force);\n\n  // notify upstream of changes\n  model.notifyUpstream();\n\n  runloop.end();\n\n  hooks.update.fire(ractive, model);\n\n  return promise;\n}\n\nexport default function Ractive$update(keypath, options) {\n  let opts, path;\n\n  if (isString(keypath)) {\n    path = splitKeypath(keypath);\n    opts = options;\n  } else {\n    opts = keypath;\n  }\n\n  return update(this, path ? this.viewmodel.joinAll(path) : this.viewmodel, opts);\n}\n","import resolveReference from 'src/view/resolvers/resolveReference';\nimport Model from 'src/model/Model';\nimport { isNumeric, isObject, isNumber, isObjectType, isString } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport findElement from 'src/view/items/shared/findElement';\nimport { set as sharedSet } from './set';\nimport makeArrayMethod from '../Ractive/prototype/shared/makeArrayMethod';\nimport { animate as protoAnimate } from '../Ractive/prototype/animate';\nimport { update as protoUpdate } from '../Ractive/prototype/update';\nimport getRactiveContext, { extern, findParentWithContext } from './getRactiveContext';\nimport { hasOwn } from 'utils/object';\nimport { ELEMENT } from 'config/types';\n\nconst modelPush = makeArrayMethod('push').model;\nconst modelPop = makeArrayMethod('pop').model;\nconst modelShift = makeArrayMethod('shift').model;\nconst modelUnshift = makeArrayMethod('unshift').model;\nconst modelSort = makeArrayMethod('sort').model;\nconst modelSplice = makeArrayMethod('splice').model;\nconst modelReverse = makeArrayMethod('reverse').model;\n\nclass ContextData extends Model {\n  constructor(options) {\n    super(null, null);\n\n    this.isRoot = true;\n    this.root = this;\n    this.value = {};\n    this.ractive = options.ractive;\n    this.adaptors = [];\n    this.context = options.context;\n  }\n\n  getKeypath() {\n    return '@context.data';\n  }\n\n  rebound() {}\n}\n\nexport default class Context {\n  constructor(fragment, element) {\n    this.fragment = fragment;\n    this.element = element || findElement(fragment);\n    this.node = this.element && this.element.node;\n    this.ractive = fragment.ractive;\n    this.root = this;\n  }\n\n  get decorators() {\n    const items = {};\n    if (!this.element) return items;\n    this.element.decorators.forEach(d => (items[d.name] = d.handle));\n    return items;\n  }\n\n  get _data() {\n    return (\n      this.model ||\n      (this.root.model = new ContextData({\n        ractive: this.ractive,\n        context: this.root\n      }))\n    );\n  }\n\n  // the usual mutation suspects\n  add(keypath, d, options) {\n    const num = isNumber(d) ? +d : 1;\n    const opts = isObjectType(d) ? d : options;\n    return sharedSet(\n      build(this, keypath, num).map(pair => {\n        const [model, val] = pair;\n        const value = model.get();\n        if (!isNumeric(val) || !isNumeric(value)) throw new Error('Cannot add non-numeric value');\n        return [model, value + val];\n      }),\n      opts\n    );\n  }\n\n  animate(keypath, value, options) {\n    const model = findModel(this, keypath).model;\n    return protoAnimate(this.ractive, model, value, options);\n  }\n\n  // get relative keypaths and values\n  get(keypath) {\n    if (!keypath) return this.fragment.findContext().get(true);\n\n    const { model } = findModel(this, keypath);\n\n    return model ? model.get(true) : undefined;\n  }\n\n  getParent(component) {\n    let fragment = this.fragment;\n\n    if (fragment.context)\n      fragment = findParentWithContext(fragment.parent || (component && fragment.componentParent));\n    else {\n      fragment = findParentWithContext(fragment.parent || (component && fragment.componentParent));\n      if (fragment)\n        fragment = findParentWithContext(\n          fragment.parent || (component && fragment.componentParent)\n        );\n    }\n\n    if (!fragment || fragment === this.fragment) return;\n    else return fragment.getContext();\n  }\n\n  hasListener(name, bubble) {\n    // if the owner is a component, start there because the nearest element\n    // may exist outside of the immediate context (yield)\n    let el = this.fragment.owner.component\n      ? this.fragment.owner\n      : this.element || this.fragment.owner;\n    let base;\n\n    do {\n      base = el.component || el;\n      if (base.template.t === ELEMENT) {\n        if (findEvent(base, name)) return true;\n      }\n      el = el.up && el.up.owner;\n      if (el && el.component) el = el.component;\n    } while (el && bubble);\n  }\n\n  link(source, dest) {\n    const there = findModel(this, source).model;\n    const here = findModel(this, dest).model;\n    const promise = runloop.start();\n    here.link(there, source);\n    runloop.end();\n    return promise;\n  }\n\n  listen(event, handler) {\n    const el = this.element;\n    el.on(event, handler);\n    return {\n      cancel() {\n        el.off(event, handler);\n      }\n    };\n  }\n\n  observe(keypath, callback, options = {}) {\n    if (isObject(keypath)) options = callback || {};\n    options.fragment = this.fragment;\n    return this.ractive.observe(keypath, callback, options);\n  }\n\n  observeOnce(keypath, callback, options = {}) {\n    if (isObject(keypath)) options = callback || {};\n    options.fragment = this.fragment;\n    return this.ractive.observeOnce(keypath, callback, options);\n  }\n\n  pop(keypath) {\n    return modelPop(findModel(this, keypath).model, []);\n  }\n\n  push(keypath, ...values) {\n    return modelPush(findModel(this, keypath).model, values);\n  }\n\n  raise(name, event, ...args) {\n    let el = this.element;\n    let ev;\n\n    while (el) {\n      if (el.component) el = el.component;\n      ev = findEvent(el, name);\n      if (ev) {\n        return ev.fire(\n          ev.element.getContext(\n            event || {},\n            event && !('original' in event) ? { original: {} } : {}\n          ),\n          args\n        );\n      }\n\n      el = el.up && el.up.owner;\n    }\n  }\n\n  readLink(keypath, options) {\n    return this.ractive.readLink(this.resolve(keypath), options);\n  }\n\n  resolve(path, ractive) {\n    const { model, instance } = findModel(this, path);\n    return model ? model.getKeypath(ractive || instance) : path;\n  }\n\n  reverse(keypath) {\n    return modelReverse(findModel(this, keypath).model, []);\n  }\n\n  set(keypath, value, options) {\n    return sharedSet(build(this, keypath, value), options);\n  }\n\n  shift(keypath) {\n    return modelShift(findModel(this, keypath).model, []);\n  }\n\n  splice(keypath, index, drop, ...add) {\n    add.unshift(index, drop);\n    return modelSplice(findModel(this, keypath).model, add);\n  }\n\n  sort(keypath) {\n    return modelSort(findModel(this, keypath).model, []);\n  }\n\n  subtract(keypath, d, options) {\n    const num = isNumber(d) ? d : 1;\n    const opts = isObjectType(d) ? d : options;\n    return sharedSet(\n      build(this, keypath, num).map(pair => {\n        const [model, val] = pair;\n        const value = model.get();\n        if (!isNumeric(val) || !isNumeric(value)) throw new Error('Cannot add non-numeric value');\n        return [model, value - val];\n      }),\n      opts\n    );\n  }\n\n  toggle(keypath, options) {\n    const { model } = findModel(this, keypath);\n    return sharedSet([[model, !model.get()]], options);\n  }\n\n  unlink(dest) {\n    const here = findModel(this, dest).model;\n    const promise = runloop.start();\n    if (here.owner && here.owner._link) here.owner.unlink();\n    runloop.end();\n    return promise;\n  }\n\n  unlisten(event, handler) {\n    this.element.off(event, handler);\n  }\n\n  unshift(keypath, ...add) {\n    return modelUnshift(findModel(this, keypath).model, add);\n  }\n\n  update(keypath, options) {\n    return protoUpdate(this.ractive, findModel(this, keypath).model, options);\n  }\n\n  updateModel(keypath, cascade) {\n    const { model } = findModel(this, keypath);\n    const promise = runloop.start();\n    model.updateFromBindings(cascade);\n    runloop.end();\n    return promise;\n  }\n\n  // two-way binding related helpers\n  isBound() {\n    const { model } = this.getBindingModel(this);\n    return !!model;\n  }\n\n  getBindingPath(ractive) {\n    const { model, instance } = this.getBindingModel(this);\n    if (model) return model.getKeypath(ractive || instance);\n  }\n\n  getBinding() {\n    const { model } = this.getBindingModel(this);\n    if (model) return model.get(true);\n  }\n\n  getBindingModel(ctx) {\n    const el = ctx.element;\n    return { model: el.binding && el.binding.model, instance: el.up.ractive };\n  }\n\n  setBinding(value) {\n    const { model } = this.getBindingModel(this);\n    return sharedSet([[model, value]]);\n  }\n}\n\nContext.forRactive = getRactiveContext;\n// circular deps are fun\nextern.Context = Context;\n\n// TODO: at some point perhaps this could support relative * keypaths?\nfunction build(ctx, keypath, value) {\n  const sets = [];\n\n  // set multiple keypaths in one go\n  if (isObject(keypath)) {\n    for (const k in keypath) {\n      if (hasOwn(keypath, k)) {\n        sets.push([findModel(ctx, k).model, keypath[k]]);\n      }\n    }\n  } else {\n    // set a single keypath\n    sets.push([findModel(ctx, keypath).model, value]);\n  }\n\n  return sets;\n}\n\nfunction findModel(ctx, path) {\n  const frag = ctx.fragment;\n\n  if (!isString(path)) {\n    return { model: frag.findContext(), instance: path };\n  }\n\n  return { model: resolveReference(frag, path), instance: frag.ractive };\n}\n\nfunction findEvent(el, name) {\n  return el.events && el.events.find && el.events.find(e => ~e.template.n.indexOf(name));\n}\n","import fireEvent from 'src/events/fireEvent';\nimport Context from 'shared/Context';\nimport { assign, create } from 'utils/object';\nimport { isObjectType } from 'utils/is';\n\nexport default function Ractive$fire(eventName, ...args) {\n  let ctx;\n\n  // watch for reproxy\n  if (args[0] instanceof Context) {\n    const proto = args.shift();\n    ctx = create(proto);\n    assign(ctx, proto);\n  } else if (isObjectType(args[0]) && (args[0] === null || args[0].constructor === Object)) {\n    ctx = Context.forRactive(this, args.shift());\n  } else {\n    ctx = Context.forRactive(this);\n  }\n\n  return fireEvent(this, eventName, ctx, args);\n}\n","import { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport { FakeFragment } from 'shared/getRactiveContext';\nimport { isString } from 'utils/is';\n\nexport default function Ractive$get(keypath, opts) {\n  if (!isString(keypath)) return this.viewmodel.get(true, keypath);\n\n  const keys = splitKeypath(keypath);\n  const key = keys[0];\n\n  let model;\n\n  if (!this.viewmodel.has(key)) {\n    // if this is an inline component, we may need to create\n    // an implicit mapping\n    if (this.component && !this.isolated) {\n      model = resolveReference(this.fragment || new FakeFragment(this), key);\n    }\n  }\n\n  model = this.viewmodel.joinAll(keys);\n  return model.get(true, opts);\n}\n","import { doc } from 'config/environment';\nimport getRactiveContext from 'shared/getRactiveContext';\nimport { isString } from 'utils/is';\n\nconst query = doc && doc.querySelector;\n\nexport default function getContext(node) {\n  if (isString(node) && query) {\n    node = query.call(document, node);\n  }\n\n  let instances;\n  if (node) {\n    if (node._ractive) {\n      return node._ractive.proxy.getContext();\n    } else if ((instances = node.__ractive_instances__)) {\n      if (instances.length === 1) return getRactiveContext(instances[0]);\n    } else return getContext(node.parentNode);\n  }\n}\n","import staticContext from '../static/getContext';\nimport getRactiveContext from 'src/shared/getRactiveContext';\nimport { isString } from 'utils/is';\n\nexport default function getContext(node, options) {\n  if (!node) return getRactiveContext(this);\n\n  if (isString(node)) {\n    node = this.find(node, options);\n  }\n\n  return staticContext(node);\n}\n","export const html = 'http://www.w3.org/1999/xhtml';\nexport const mathml = 'http://www.w3.org/1998/Math/MathML';\nexport const svg = 'http://www.w3.org/2000/svg';\nexport const xlink = 'http://www.w3.org/1999/xlink';\nexport const xml = 'http://www.w3.org/XML/1998/namespace';\nexport const xmlns = 'http://www.w3.org/2000/xmlns';\n\nexport default { html, mathml, svg, xlink, xml, xmlns };\n","import { isClient, svg, vendors, win, doc } from 'config/environment';\nimport { html } from 'config/namespaces';\nimport { isString, isNumber } from 'utils/is';\n\nlet createElement, matches, div, methodNames, unprefixed, prefixed, i, j, makeFunction;\n\n// Test for SVG support\nif (!svg) {\n  /* istanbul ignore next */\n  createElement = (type, ns, extend) => {\n    if (ns && ns !== html) {\n      throw \"This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you're trying to render SVG in an older browser. See http://ractive.js.org/support/#svgs for more information\";\n    }\n\n    return extend ? doc.createElement(type, extend) : doc.createElement(type);\n  };\n} else {\n  createElement = (type, ns, extend) => {\n    if (!ns || ns === html) {\n      return extend ? doc.createElement(type, extend) : doc.createElement(type);\n    }\n\n    return extend ? doc.createElementNS(ns, type, extend) : doc.createElementNS(ns, type);\n  };\n}\n\nexport function createDocumentFragment() {\n  return doc.createDocumentFragment();\n}\n\nfunction getElement(input) {\n  let output;\n\n  if (!input || typeof input === 'boolean') {\n    return;\n  }\n\n  /* istanbul ignore next */\n  if (!win || !doc || !input) {\n    return null;\n  }\n\n  // We already have a DOM node - no work to do. (Duck typing alert!)\n  if (input.nodeType) {\n    return input;\n  }\n\n  // Get node from string\n  if (isString(input)) {\n    // try ID first\n    output = doc.getElementById(input);\n\n    // then as selector, if possible\n    if (!output && doc.querySelector) {\n      try {\n        output = doc.querySelector(input);\n      } catch (e) {\n        /* this space intentionally left blank */\n      }\n    }\n\n    // did it work?\n    if (output && output.nodeType) {\n      return output;\n    }\n  }\n\n  // If we've been given a collection (jQuery, Zepto etc), extract the first item\n  if (input[0] && input[0].nodeType) {\n    return input[0];\n  }\n\n  return null;\n}\n\nif (!isClient) {\n  matches = null;\n} else {\n  div = createElement('div');\n  methodNames = ['matches', 'matchesSelector'];\n\n  makeFunction = function(methodName) {\n    return function(node, selector) {\n      return node[methodName](selector);\n    };\n  };\n\n  i = methodNames.length;\n\n  while (i-- && !matches) {\n    unprefixed = methodNames[i];\n\n    if (div[unprefixed]) {\n      matches = makeFunction(unprefixed);\n    } else {\n      j = vendors.length;\n      while (j--) {\n        prefixed = vendors[i] + unprefixed.substr(0, 1).toUpperCase() + unprefixed.substring(1);\n\n        if (div[prefixed]) {\n          matches = makeFunction(prefixed);\n          break;\n        }\n      }\n    }\n  }\n\n  // IE8... and apparently phantom some?\n  /* istanbul ignore next */\n  if (!matches) {\n    matches = function(node, selector) {\n      let parentNode, i;\n\n      parentNode = node.parentNode;\n\n      if (!parentNode) {\n        // empty dummy <div>\n        div.innerHTML = '';\n\n        parentNode = div;\n        node = node.cloneNode();\n\n        div.appendChild(node);\n      }\n\n      const nodes = parentNode.querySelectorAll(selector);\n\n      i = nodes.length;\n      while (i--) {\n        if (nodes[i] === node) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n  }\n}\n\nfunction detachNode(node) {\n  // stupid ie\n  // eslint-disable-next-line valid-typeof\n  if (node && typeof node.parentNode !== 'unknown' && node.parentNode) {\n    node.parentNode.removeChild(node);\n  }\n\n  return node;\n}\n\nfunction safeToStringValue(value) {\n  return value == null || (isNumber(value) && isNaN(value)) || !value.toString ? '' : '' + value;\n}\n\nfunction safeAttributeString(string) {\n  return safeToStringValue(string)\n    .replace(/&/g, '&amp;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#39;');\n}\n\nexport { createElement, detachNode, getElement, matches, safeToStringValue, safeAttributeString };\n","import hooks from 'src/events/Hook';\nimport { getElement } from 'utils/dom';\n\nexport default function Ractive$insert(target, anchor) {\n  if (!this.fragment.rendered) {\n    // TODO create, and link to, documentation explaining this\n    throw new Error(\n      'The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.'\n    );\n  }\n\n  target = getElement(target);\n  anchor = getElement(anchor) || null;\n\n  if (!target) {\n    throw new Error('You must specify a valid target to insert into');\n  }\n\n  target.insertBefore(this.detach(), anchor);\n  this.el = target;\n\n  (target.__ractive_instances__ || (target.__ractive_instances__ = [])).push(this);\n  this.isDetached = false;\n\n  fireInsertHook(this);\n}\n\nfunction fireInsertHook(ractive) {\n  hooks.insert.fire(ractive);\n\n  ractive.findAllComponents('*').forEach(child => {\n    fireInsertHook(child.instance);\n  });\n}\n","import { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport runloop from 'src/global/runloop';\n\nexport default function link(there, here, options) {\n  let model;\n  const target = (options && (options.ractive || options.instance)) || this;\n\n  // may need to allow a mapping to resolve implicitly\n  const sourcePath = splitKeypath(there);\n  if (!target.viewmodel.has(sourcePath[0]) && target.component) {\n    model = resolveReference(target.component.up, sourcePath[0]);\n    model = model.joinAll(sourcePath.slice(1));\n  }\n\n  const src = model || target.viewmodel.joinAll(sourcePath);\n  const dest = this.viewmodel.joinAll(splitKeypath(here), { lastLink: false });\n\n  if (isUpstream(src, dest) || isUpstream(dest, src)) {\n    throw new Error('A keypath cannot be linked to itself.');\n  }\n\n  const promise = runloop.start();\n\n  dest.link(src, (options && options.keypath) || there);\n\n  runloop.end();\n\n  return promise;\n}\n\nfunction isUpstream(check, start) {\n  let model = start;\n  while (model) {\n    if (model === check || model.owner === check) return true;\n    model = model.target || model.parent;\n  }\n}\n","import { isEqual, isFunction } from 'utils/is';\nimport { removeFromArray } from 'utils/array';\nimport runloop from 'src/global/runloop';\nimport { rebindMatch } from 'shared/rebind';\nimport { create } from 'utils/object';\n\nexport default class Observer {\n  constructor(ractive, model, callback, options) {\n    this.context = options.context || ractive;\n    this.callback = callback;\n    this.ractive = ractive;\n    this.keypath = options.keypath;\n    this.options = options;\n\n    if (model) this.resolved(model);\n\n    if (isFunction(options.old)) {\n      this.oldContext = create(ractive);\n      this.oldFn = options.old;\n    }\n\n    if (options.init !== false) {\n      this.dirty = true;\n      this.dispatch();\n    } else {\n      updateOld(this);\n    }\n\n    this.dirty = false;\n  }\n\n  cancel() {\n    this.cancelled = true;\n    if (this.model) {\n      this.model.unregister(this);\n    } else {\n      this.resolver.unbind();\n    }\n    removeFromArray(this.ractive._observers, this);\n  }\n\n  dispatch() {\n    if (!this.cancelled) {\n      this.callback.call(this.context, this.newValue, this.oldValue, this.keypath);\n      updateOld(this, true);\n      this.dirty = false;\n    }\n  }\n\n  handleChange() {\n    if (!this.dirty) {\n      const newValue = this.model.get();\n      if (isEqual(newValue, this.oldValue)) return;\n\n      this.newValue = newValue;\n\n      if (this.options.strict && this.newValue === this.oldValue) return;\n\n      runloop.addObserver(this, this.options.defer);\n      this.dirty = true;\n\n      if (this.options.once) runloop.scheduleTask(() => this.cancel());\n    } else {\n      // make sure the newValue stays updated in case this observer gets touched multiple times in one loop\n      this.newValue = this.model.get();\n    }\n  }\n\n  rebind(next, previous) {\n    next = rebindMatch(this.keypath, next, previous);\n    if (next === this.model) return false;\n\n    if (this.model) this.model.unregister(this);\n    if (next) next.addShuffleTask(() => this.resolved(next));\n  }\n\n  resolved(model) {\n    this.model = model;\n\n    this.oldValue = undefined;\n    this.newValue = model.get();\n\n    model.register(this);\n  }\n}\n\nfunction updateOld(observer, fresh) {\n  const next = fresh\n    ? observer.model\n      ? observer.model.get()\n      : observer.newValue\n    : observer.newValue;\n  observer.oldValue = observer.oldFn\n    ? observer.oldFn.call(observer.oldContext, undefined, next, observer.keypath)\n    : next;\n}\n","import { escapeKey } from 'shared/keypaths';\nimport { removeFromArray } from 'utils/array';\nimport { isArray, isEqual } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport { create, keys } from 'utils/object';\n\nconst star = /\\*+/g;\n\nexport default class PatternObserver {\n  constructor(ractive, baseModel, keys, callback, options) {\n    this.context = options.context || ractive;\n    this.ractive = ractive;\n    this.baseModel = baseModel;\n    this.keys = keys;\n    this.callback = callback;\n\n    const pattern = keys.join('\\\\.').replace(star, '(.+)');\n    const baseKeypath = (this.baseKeypath = baseModel.getKeypath(ractive));\n    this.pattern = new RegExp(`^${baseKeypath ? baseKeypath + '\\\\.' : ''}${pattern}$`);\n    this.recursive = keys.length === 1 && keys[0] === '**';\n    if (this.recursive) this.keys = ['*'];\n    if (options.old) {\n      this.oldContext = create(ractive);\n      this.oldFn = options.old;\n    }\n\n    this.oldValues = {};\n    this.newValues = {};\n\n    this.defer = options.defer;\n    this.once = options.once;\n    this.strict = options.strict;\n\n    this.dirty = false;\n    this.changed = [];\n    this.partial = false;\n    this.links = options.links;\n\n    const models = baseModel.findMatches(this.keys);\n\n    models.forEach(model => {\n      this.newValues[model.getKeypath(this.ractive)] = model.get();\n    });\n\n    if (options.init !== false) {\n      this.dispatch();\n    } else {\n      updateOld(this, this.newValues);\n    }\n\n    baseModel.registerPatternObserver(this);\n  }\n\n  cancel() {\n    this.baseModel.unregisterPatternObserver(this);\n    removeFromArray(this.ractive._observers, this);\n  }\n\n  dispatch() {\n    const newValues = this.newValues;\n    this.newValues = {};\n    keys(newValues).forEach(keypath => {\n      const newValue = newValues[keypath];\n      const oldValue = this.oldValues[keypath];\n\n      if (this.strict && newValue === oldValue) return;\n      if (isEqual(newValue, oldValue)) return;\n\n      let args = [newValue, oldValue, keypath];\n      if (keypath) {\n        const wildcards = this.pattern.exec(keypath);\n        if (wildcards) {\n          args = args.concat(wildcards.slice(1));\n        }\n      }\n\n      this.callback.apply(this.context, args);\n    });\n\n    updateOld(this, newValues, this.partial);\n\n    this.dirty = false;\n  }\n\n  notify(key) {\n    this.changed.push(key);\n  }\n\n  shuffle(newIndices) {\n    if (!isArray(this.baseModel.value)) return;\n\n    const max = this.baseModel.value.length;\n\n    for (let i = 0; i < newIndices.length; i++) {\n      if (newIndices[i] === -1 || newIndices[i] === i) continue;\n      this.changed.push([i]);\n    }\n\n    for (let i = newIndices.touchedFrom; i < max; i++) {\n      this.changed.push([i]);\n    }\n  }\n\n  handleChange() {\n    if (!this.dirty || this.changed.length) {\n      if (!this.dirty) this.newValues = {};\n\n      if (!this.changed.length) {\n        this.baseModel.findMatches(this.keys).forEach(model => {\n          const keypath = model.getKeypath(this.ractive);\n          this.newValues[keypath] = model.get();\n        });\n        this.partial = false;\n      } else {\n        let count = 0;\n\n        if (this.recursive) {\n          this.changed.forEach(keys => {\n            const model = this.baseModel.joinAll(keys);\n            if (model.isLink && !this.links) return;\n            count++;\n            this.newValues[model.getKeypath(this.ractive)] = model.get();\n          });\n        } else {\n          const ok = this.baseModel.isRoot\n            ? this.changed.map(keys => keys.map(escapeKey).join('.'))\n            : this.changed.map(keys => this.baseKeypath + '.' + keys.map(escapeKey).join('.'));\n\n          this.baseModel.findMatches(this.keys).forEach(model => {\n            const keypath = model.getKeypath(this.ractive);\n            const check = k => {\n              return (\n                (k.indexOf(keypath) === 0 &&\n                  (k.length === keypath.length || k[keypath.length] === '.')) ||\n                (keypath.indexOf(k) === 0 &&\n                  (k.length === keypath.length || keypath[k.length] === '.'))\n              );\n            };\n\n            // is this model on a changed keypath?\n            if (ok.filter(check).length) {\n              count++;\n              this.newValues[keypath] = model.get();\n            }\n          });\n        }\n\n        // no valid change triggered, so bail to avoid breakage\n        if (!count) return;\n\n        this.partial = true;\n      }\n\n      runloop.addObserver(this, this.defer);\n      this.dirty = true;\n      this.changed.length = 0;\n\n      if (this.once) this.cancel();\n    }\n  }\n}\n\nfunction updateOld(observer, vals, partial) {\n  const olds = observer.oldValues;\n\n  if (observer.oldFn) {\n    if (!partial) observer.oldValues = {};\n\n    keys(vals).forEach(k => {\n      const args = [olds[k], vals[k], k];\n      const parts = observer.pattern.exec(k);\n      if (parts) {\n        args.push.apply(args, parts.slice(1));\n      }\n      observer.oldValues[k] = observer.oldFn.apply(observer.oldContext, args);\n    });\n  } else {\n    if (partial) {\n      keys(vals).forEach(k => (olds[k] = vals[k]));\n    } else {\n      observer.oldValues = vals;\n    }\n  }\n}\n","import { removeFromArray } from 'utils/array';\nimport { isArray } from 'utils/is';\nimport runloop from 'src/global/runloop';\n\nfunction negativeOne() {\n  return -1;\n}\n\nexport default class ArrayObserver {\n  constructor(ractive, model, callback, options) {\n    this.ractive = ractive;\n    this.model = model;\n    this.keypath = model.getKeypath();\n    this.callback = callback;\n    this.options = options;\n\n    this.pending = null;\n\n    model.register(this);\n\n    if (options.init !== false) {\n      this.sliced = [];\n      this.shuffle([]);\n      this.dispatch();\n    } else {\n      this.sliced = this.slice();\n    }\n  }\n\n  cancel() {\n    this.model.unregister(this);\n    removeFromArray(this.ractive._observers, this);\n  }\n\n  dispatch() {\n    this.callback(this.pending);\n    this.pending = null;\n    if (this.options.once) this.cancel();\n  }\n\n  handleChange(path) {\n    if (this.pending) {\n      // post-shuffle\n      runloop.addObserver(this, this.options.defer);\n    } else if (!path) {\n      // entire array changed\n      this.shuffle(this.sliced.map(negativeOne));\n      this.handleChange();\n    }\n  }\n\n  shuffle(newIndices) {\n    const newValue = this.slice();\n\n    const inserted = [];\n    const deleted = [];\n    let start;\n\n    const hadIndex = {};\n\n    newIndices.forEach((newIndex, oldIndex) => {\n      hadIndex[newIndex] = true;\n\n      if (newIndex !== oldIndex && start === undefined) {\n        start = oldIndex;\n      }\n\n      if (newIndex === -1) {\n        deleted.push(this.sliced[oldIndex]);\n      }\n    });\n\n    if (start === undefined) start = newIndices.length;\n\n    const len = newValue.length;\n    for (let i = 0; i < len; i += 1) {\n      if (!hadIndex[i]) inserted.push(newValue[i]);\n    }\n\n    this.pending = { inserted, deleted, start };\n    this.sliced = newValue;\n  }\n\n  slice() {\n    const value = this.model.get();\n    return isArray(value) ? value.slice() : [];\n  }\n}\n","import { isObject, isFunction } from 'utils/is';\nimport { warnOnceIfDebug } from 'utils/log';\nimport { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport Observer from './observe/Observer';\nimport PatternObserver from './observe/Pattern';\nimport ArrayObserver from './observe/Array';\nimport { keys } from 'utils/object';\n\nexport default function observe(keypath, callback, options) {\n  const observers = [];\n  let map;\n  let opts;\n\n  if (isObject(keypath)) {\n    map = keypath;\n    opts = callback || {};\n  } else {\n    if (isFunction(keypath)) {\n      map = { '': keypath };\n      opts = callback || {};\n    } else {\n      map = {};\n      map[keypath] = callback;\n      opts = options || {};\n    }\n  }\n\n  let silent = false;\n  keys(map).forEach(keypath => {\n    const callback = map[keypath];\n    const caller = function(...args) {\n      if (silent) return;\n      return callback.apply(this, args);\n    };\n\n    let keypaths = keypath.split(' ');\n    if (keypaths.length > 1) keypaths = keypaths.filter(k => k);\n\n    keypaths.forEach(keypath => {\n      opts.keypath = keypath;\n      const observer = createObserver(this, keypath, caller, opts);\n      if (observer) observers.push(observer);\n    });\n  });\n\n  // add observers to the Ractive instance, so they can be\n  // cancelled on ractive.teardown()\n  this._observers.push.apply(this._observers, observers);\n\n  return {\n    cancel: () => observers.forEach(o => o.cancel()),\n    isSilenced: () => silent,\n    silence: () => (silent = true),\n    resume: () => (silent = false)\n  };\n}\n\nfunction createObserver(ractive, keypath, callback, options) {\n  const keys = splitKeypath(keypath);\n  let wildcardIndex = keys.indexOf('*');\n  if (!~wildcardIndex) wildcardIndex = keys.indexOf('**');\n\n  options.fragment = options.fragment || ractive.fragment;\n\n  let model;\n  if (!options.fragment) {\n    model = ractive.viewmodel.joinKey(keys[0]);\n  } else {\n    // .*.whatever relative wildcard is a special case because splitkeypath doesn't handle the leading .\n    if (~keys[0].indexOf('.*')) {\n      model = options.fragment.findContext();\n      wildcardIndex = 0;\n      keys[0] = keys[0].slice(1);\n    } else {\n      model =\n        wildcardIndex === 0\n          ? options.fragment.findContext()\n          : resolveReference(options.fragment, keys[0]);\n    }\n  }\n\n  // the model may not exist key\n  if (!model) model = ractive.viewmodel.joinKey(keys[0]);\n\n  if (!~wildcardIndex) {\n    model = model.joinAll(keys.slice(1));\n    if (options.array) {\n      return new ArrayObserver(ractive, model, callback, options);\n    } else {\n      return new Observer(ractive, model, callback, options);\n    }\n  } else {\n    const double = keys.indexOf('**');\n    if (~double) {\n      if (double + 1 !== keys.length || ~keys.indexOf('*')) {\n        warnOnceIfDebug(\n          `Recursive observers may only specify a single '**' at the end of the path.`\n        );\n        return;\n      }\n    }\n\n    model = model.joinAll(keys.slice(1, wildcardIndex));\n\n    return new PatternObserver(ractive, model, keys.slice(wildcardIndex), callback, options);\n  }\n}\n","import { isObject, isFunction } from 'utils/is';\nimport { assign } from 'utils/object';\n\nconst onceOptions = { init: false, once: true };\n\nexport default function observeOnce(keypath, callback, options) {\n  if (isObject(keypath) || isFunction(keypath)) {\n    options = assign(callback || {}, onceOptions);\n    return this.observe(keypath, options);\n  }\n\n  options = assign(options || {}, onceOptions);\n  return this.observe(keypath, callback, options);\n}\n","export default str => str.trim();\n","export default str => str !== '';\n","import { removeFromArray } from 'utils/array';\nimport trim from './shared/trim';\nimport notEmptyString from './shared/notEmptyString';\n\nexport default function Ractive$off(eventName, callback) {\n  // if no event is specified, remove _all_ event listeners\n  if (!eventName) {\n    this._subs = {};\n  } else {\n    // Handle multiple space-separated event names\n    const eventNames = eventName\n      .split(' ')\n      .map(trim)\n      .filter(notEmptyString);\n\n    eventNames.forEach(event => {\n      const subs = this._subs[event];\n      // if given a specific callback to remove, remove only it\n      if (subs && callback) {\n        const entry = subs.find(s => s.callback === callback);\n        if (entry) {\n          removeFromArray(subs, entry);\n          entry.off = true;\n\n          if (event.indexOf('.')) this._nsSubs--;\n        }\n      } else if (subs) {\n        // otherwise, remove all listeners for this event\n        if (event.indexOf('.')) this._nsSubs -= subs.length;\n        subs.length = 0;\n      }\n    });\n  }\n\n  return this;\n}\n","import trim from './shared/trim';\nimport notEmptyString from './shared/notEmptyString';\nimport { hasOwn } from 'utils/object';\nimport { isObjectType, isString } from 'utils/is';\n\nexport default function Ractive$on(eventName, callback) {\n  // eventName may already be a map\n  const map = isObjectType(eventName) ? eventName : {};\n  // or it may be a string along with a callback\n  if (isString(eventName)) map[eventName] = callback;\n\n  let silent = false;\n  const events = [];\n\n  for (const k in map) {\n    const callback = map[k];\n    const caller = function(...args) {\n      if (!silent) return callback.apply(this, args);\n    };\n    const entry = {\n      callback,\n      handler: caller\n    };\n\n    if (hasOwn(map, k)) {\n      const names = k\n        .split(' ')\n        .map(trim)\n        .filter(notEmptyString);\n      names.forEach(n => {\n        (this._subs[n] || (this._subs[n] = [])).push(entry);\n        if (n.indexOf('.')) this._nsSubs++;\n        events.push([n, entry]);\n      });\n    }\n  }\n\n  return {\n    cancel: () => events.forEach(e => this.off(e[0], e[1].callback)),\n    isSilenced: () => silent,\n    silence: () => (silent = true),\n    resume: () => (silent = false)\n  };\n}\n","export default function Ractive$once(eventName, handler) {\n  const listener = this.on(eventName, function() {\n    handler.apply(this, arguments);\n    listener.cancel();\n  });\n\n  // so we can still do listener.cancel() manually\n  return listener;\n}\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('pop').path;\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('push').path;\n","import { splitKeypath } from 'shared/keypaths';\n\nexport default function readLink(keypath, options = {}) {\n  const path = splitKeypath(keypath);\n\n  if (this.viewmodel.has(path[0])) {\n    let model = this.viewmodel.joinAll(path);\n\n    if (!model.isLink) return;\n\n    while ((model = model.target) && options.canonical !== false) {\n      if (!model.isLink) break;\n    }\n\n    if (model) return { ractive: model.root.ractive, keypath: model.getKeypath() };\n  }\n}\n","import { doc } from '../config/environment';\n\nconst PREFIX = '/* Ractive.js component styles */';\n\n// Holds current definitions of styles.\nconst styleDefinitions = [];\n\n// Flag to tell if we need to update the CSS\nlet isDirty = false;\n\n// These only make sense on the browser. See additional setup below.\nlet styleElement = null;\nlet useCssText = null;\n\nexport function addCSS(styleDefinition) {\n  styleDefinitions.push(styleDefinition);\n  isDirty = true;\n}\n\nexport function applyCSS(force) {\n  const styleElement = style();\n\n  // Apply only seems to make sense when we're in the DOM. Server-side renders\n  // can call toCSS to get the updated CSS.\n  if (!styleElement || (!force && !isDirty)) return;\n\n  if (useCssText) {\n    styleElement.styleSheet.cssText = getCSS(null);\n  } else {\n    styleElement.innerHTML = getCSS(null);\n  }\n\n  isDirty = false;\n}\n\nexport function getCSS(cssIds) {\n  const filteredStyleDefinitions = cssIds\n    ? styleDefinitions.filter(style => ~cssIds.indexOf(style.id))\n    : styleDefinitions;\n\n  filteredStyleDefinitions.forEach(d => (d.applied = true));\n\n  return filteredStyleDefinitions.reduce(\n    (styles, style) => `${styles ? `${styles}\\n\\n/* {${style.id}} */\\n${style.styles}` : ''}`,\n    PREFIX\n  );\n}\n\nfunction style() {\n  // If we're on the browser, additional setup needed.\n  if (doc && !styleElement) {\n    styleElement = doc.createElement('style');\n    styleElement.type = 'text/css';\n    styleElement.setAttribute('data-ractive-css', '');\n\n    doc.getElementsByTagName('head')[0].appendChild(styleElement);\n\n    useCssText = !!styleElement.styleSheet;\n  }\n\n  return styleElement;\n}\n","import { ensureArray, combine } from 'utils/array';\n\nexport default {\n  extend: (Parent, proto, options) => {\n    proto.adapt = combine(proto.adapt, ensureArray(options.adapt));\n  },\n\n  init() {}\n};\n","const remove = /\\/\\*(?:[\\s\\S]*?)\\*\\//g;\nconst escape = /url\\(\\s*(['\"])(?:\\\\[\\s\\S]|(?!\\1).)*\\1\\s*\\)|url\\((?:\\\\[\\s\\S]|[^)])*\\)|(['\"])(?:\\\\[\\s\\S]|(?!\\2).)*\\2/gi;\nconst value = /\\0(\\d+)/g;\n\n// Removes comments and strings from the given CSS to make it easier to parse.\n// Callback receives the cleaned CSS and a function which can be used to put\n// the removed strings back in place after parsing is done.\nexport default function(css, callback, additionalReplaceRules = []) {\n  const values = [];\n  const reconstruct = css => css.replace(value, (match, n) => values[n]);\n  css = css.replace(escape, match => `\\0${values.push(match) - 1}`).replace(remove, '');\n\n  additionalReplaceRules.forEach(pattern => {\n    css = css.replace(pattern, match => `\\0${values.push(match) - 1}`);\n  });\n\n  return callback(css, reconstruct);\n}\n","import cleanCss from 'utils/cleanCss';\n\nconst selectorsPattern = /(?:^|\\}|\\{|\\x01)\\s*([^\\{\\}\\0\\x01]+)\\s*(?=\\{)/g;\nconst importPattern = /@import\\s*\\([^)]*\\)\\s*;?/gi;\nconst importEndPattern = /\\x01/g;\nconst keyframesDeclarationPattern = /@keyframes\\s+[^\\{\\}]+\\s*\\{(?:[^{}]+|\\{[^{}]+})*}/gi;\nconst selectorUnitPattern = /((?:(?:\\[[^\\]]+\\])|(?:[^\\s\\+\\>~:]))+)((?:::?[^\\s\\+\\>\\~\\(:]+(?:\\([^\\)]+\\))?)*\\s*[\\s\\+\\>\\~]?)\\s*/g;\nconst excludePattern = /^(?:@|\\d+%)/;\nconst dataRvcGuidPattern = /\\[data-ractive-css~=\"\\{[a-z0-9-]+\\}\"]/g;\n\nfunction trim(str) {\n  return str.trim();\n}\n\nfunction extractString(unit) {\n  return unit.str;\n}\n\nfunction transformSelector(selector, parent) {\n  const selectorUnits = [];\n  let match;\n\n  while ((match = selectorUnitPattern.exec(selector))) {\n    selectorUnits.push({\n      str: match[0],\n      base: match[1],\n      modifiers: match[2]\n    });\n  }\n\n  // For each simple selector within the selector, we need to create a version\n  // that a) combines with the id, and b) is inside the id\n  const base = selectorUnits.map(extractString);\n\n  const transformed = [];\n  let i = selectorUnits.length;\n\n  while (i--) {\n    const appended = base.slice();\n\n    // Pseudo-selectors should go after the attribute selector\n    const unit = selectorUnits[i];\n    appended[i] = unit.base + parent + unit.modifiers || '';\n\n    const prepended = base.slice();\n    prepended[i] = parent + ' ' + prepended[i];\n\n    transformed.push(appended.join(' '), prepended.join(' '));\n  }\n\n  return transformed.join(', ');\n}\n\nexport default function transformCss(css, id) {\n  const dataAttr = `[data-ractive-css~=\"{${id}}\"]`;\n\n  let transformed;\n\n  if (dataRvcGuidPattern.test(css)) {\n    transformed = css.replace(dataRvcGuidPattern, dataAttr);\n  } else {\n    transformed = cleanCss(\n      css,\n      (css, reconstruct) => {\n        css = css\n          .replace(importPattern, '$&\\x01')\n          .replace(selectorsPattern, (match, $1) => {\n            // don't transform at-rules and keyframe declarations\n            if (excludePattern.test($1)) return match;\n\n            const selectors = $1.split(',').map(trim);\n            const transformed =\n              selectors.map(selector => transformSelector(selector, dataAttr)).join(', ') + ' ';\n\n            return match.replace($1, transformed);\n          })\n          .replace(importEndPattern, '');\n\n        return reconstruct(css);\n      },\n      [keyframesDeclarationPattern]\n    );\n  }\n\n  return transformed;\n}\n","function s4() {\n  return Math.floor((1 + Math.random()) * 0x10000)\n    .toString(16)\n    .substring(1);\n}\n\nexport function uuid() {\n  return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n}\n","import { applyCSS } from '../../global/css';\nimport transformCSS from '../config/custom/css/transform';\nimport { evalCSS } from '../config/custom/css/css';\nimport { build, set } from '../../shared/set';\nimport runloop from '../../global/runloop';\nimport { isObjectType, isFunction } from 'utils/is';\n\nexport default function setCSSData(keypath, value, options) {\n  const opts = isObjectType(keypath) ? value : options;\n  const model = this._cssModel;\n\n  model.locked = true;\n  const promise = set(build({ viewmodel: model }, keypath, value, true), opts);\n  model.locked = false;\n\n  const cascade = runloop.start();\n  this.extensions.forEach(e => {\n    const model = e._cssModel;\n    model.mark();\n    model.downstreamChanged('', 1);\n  });\n  runloop.end();\n\n  applyChanges(this, !opts || opts.apply !== false);\n\n  return promise.then(() => cascade);\n}\n\nexport function applyChanges(component, apply) {\n  const local = recomputeCSS(component);\n  const child = component.extensions\n    .map(e => applyChanges(e, false))\n    .reduce((a, c) => c || a, false);\n\n  if (apply && (local || child)) {\n    const def = component._cssDef;\n    if (!def || (def && def.applied)) applyCSS(true);\n  }\n\n  return local || child;\n}\n\nexport function recomputeCSS(component) {\n  const css = component.css;\n\n  if (!isFunction(css)) return;\n\n  const def = component._cssDef;\n  const result = evalCSS(component, css);\n  const styles = def.transform ? transformCSS(result, def.id) : result;\n\n  if (def.styles === styles) return;\n\n  def.styles = styles;\n\n  return true;\n}\n","import { SharedModel } from './SharedModel';\nimport { applyChanges } from '../../Ractive/static/styleSet';\n\nexport default class CSSModel extends SharedModel {\n  constructor(component) {\n    super(component.cssData, '@style');\n    this.component = component;\n  }\n\n  downstreamChanged(path, depth) {\n    if (this.locked) return;\n\n    const component = this.component;\n\n    component.extensions.forEach(e => {\n      const model = e._cssModel;\n      model.mark();\n      model.downstreamChanged(path, depth || 1);\n    });\n\n    if (!depth) {\n      applyChanges(component, true);\n    }\n  }\n}\n","import { addCSS, applyCSS } from 'src/global/css';\nimport transformCss from './transform';\nimport { uuid } from 'utils/id';\nimport { warnIfDebug } from 'utils/log';\nimport { getElement } from 'utils/dom';\nimport { splitKeypath } from 'shared/keypaths';\nimport CSSModel from 'src/model/specials/CSSModel';\nimport { assign, create, defineProperty } from 'utils/object';\nimport { isString, isFunction, isObjectType } from 'utils/is';\n\nconst hasCurly = /\\{/;\nexport default {\n  name: 'css',\n\n  // Called when creating a new component definition\n  extend: (Parent, proto, options, Child) => {\n    Child._cssIds = gatherIds(Parent);\n\n    defineProperty(Child, 'cssData', {\n      configurable: true,\n      value: assign(create(Parent.cssData), options.cssData || {})\n    });\n\n    defineProperty(Child, '_cssModel', {\n      configurable: true,\n      value: new CSSModel(Child)\n    });\n\n    if (options.css) initCSS(options, Child, proto);\n  },\n\n  // Called when creating a new component instance\n  init: (Parent, target, options) => {\n    if (!options.css) return;\n\n    warnIfDebug(`\nThe css option is currently not supported on a per-instance basis and will be discarded. Instead, we recommend instantiating from a component definition with a css option.\n\nconst Component = Ractive.extend({\n\t...\n\tcss: '/* your css */',\n\t...\n});\n\nconst componentInstance = new Component({ ... })\n\t\t`);\n  }\n};\n\nfunction gatherIds(start) {\n  let cmp = start;\n  const ids = [];\n\n  while (cmp) {\n    if (cmp.prototype.cssId) ids.push(cmp.prototype.cssId);\n    cmp = cmp.Parent;\n  }\n\n  return ids;\n}\n\nexport function evalCSS(component, css) {\n  if (isString(css)) return css;\n\n  const cssData = component.cssData;\n  const model = component._cssModel;\n  const data = function data(path) {\n    return model.joinAll(splitKeypath(path)).get();\n  };\n  data.__proto__ = cssData;\n\n  const result = css.call(component, data);\n  return isString(result) ? result : '';\n}\n\nexport function initCSS(options, target, proto) {\n  let css =\n    options.css === true\n      ? ''\n      : isString(options.css) && !hasCurly.test(options.css)\n        ? getElement(options.css) || options.css\n        : options.css;\n  let cssProp = css;\n\n  const id = options.cssId || uuid();\n\n  if (isObjectType(css)) {\n    css = 'textContent' in css ? css.textContent : css.innerHTML;\n    cssProp = css;\n  } else if (isFunction(css)) {\n    cssProp = css;\n    css = evalCSS(target, css);\n  }\n\n  const def = { transform: !options.noCssTransform };\n\n  defineProperty(target, '_cssDef', { configurable: true, value: def });\n\n  defineProperty(target, 'css', {\n    get() {\n      return cssProp;\n    },\n    set(next) {\n      cssProp = next;\n      const css = evalCSS(target, cssProp);\n      const styles = def.styles;\n      def.styles = def.transform ? transformCss(css, id) : css;\n      if (def.applied && styles !== def.styles) applyCSS(true);\n    }\n  });\n\n  def.styles = def.transform ? transformCss(css, id) : css;\n  def.id = proto.cssId = id;\n  target._cssIds.push(id);\n\n  addCSS(target._cssDef);\n}\n","import { fatal, warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { isArray, isObject, isFunction, isObjectType } from 'utils/is';\nimport bind from 'utils/bind';\n\nfunction validate(data) {\n  // Warn if userOptions.data is a non-POJO\n  if (data && data.constructor !== Object) {\n    if (isFunction(data)) {\n      // TODO do we need to support this in the new Ractive() case?\n    } else if (!isObjectType(data)) {\n      fatal(`data option must be an object or a function, \\`${data}\\` is not valid`);\n    } else {\n      warnIfDebug(\n        'If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged'\n      );\n    }\n  }\n}\n\nexport default {\n  name: 'data',\n\n  extend: (Parent, proto, options) => {\n    let key;\n    let value;\n\n    // check for non-primitives, which could cause mutation-related bugs\n    if (options.data && isObject(options.data)) {\n      for (key in options.data) {\n        value = options.data[key];\n\n        if (value && isObjectType(value)) {\n          if (isObject(value) || isArray(value)) {\n            warnIfDebug(`Passing a \\`data\\` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\n\n  // this...\n  data: function () {\n    return {\n      myObject: {}\n    };\n  })\n\n  // instead of this:\n  data: {\n    myObject: {}\n  }`);\n          }\n        }\n      }\n    }\n\n    proto.data = combine(proto.data, options.data);\n  },\n\n  init: (Parent, ractive, options) => {\n    let result = combine(Parent.prototype.data, options.data);\n\n    if (isFunction(result)) result = result.call(ractive);\n\n    // bind functions to the ractive instance at the top level,\n    // unless it's a non-POJO (in which case alarm bells should ring)\n    if (result && result.constructor === Object) {\n      for (const prop in result) {\n        if (isFunction(result[prop])) {\n          const value = result[prop];\n          result[prop] = bind(value, ractive);\n          result[prop]._r_unbound = value;\n        }\n      }\n    }\n\n    return result || {};\n  },\n\n  reset(ractive) {\n    const result = this.init(ractive.constructor, ractive, ractive.viewmodel);\n    ractive.viewmodel.root.set(result);\n    return true;\n  }\n};\n\nfunction emptyData() {\n  return {};\n}\n\nfunction combine(parentValue, childValue) {\n  validate(childValue);\n\n  const parentIsFn = isFunction(parentValue);\n\n  // Very important, otherwise child instance can become\n  // the default data object on Ractive or a component.\n  // then ractive.set() ends up setting on the prototype!\n  if (!childValue && !parentIsFn) {\n    // this needs to be a function so that it can still inherit parent defaults\n    childValue = emptyData;\n  }\n\n  const childIsFn = isFunction(childValue);\n\n  // Fast path, where we just need to copy properties from\n  // parent to child\n  if (!parentIsFn && !childIsFn) {\n    return fromProperties(childValue, parentValue);\n  }\n\n  return function() {\n    const child = childIsFn ? callDataFunction(childValue, this) : childValue;\n    const parent = parentIsFn ? callDataFunction(parentValue, this) : parentValue;\n\n    return fromProperties(child, parent);\n  };\n}\n\nfunction callDataFunction(fn, context) {\n  const data = fn.call(context);\n\n  if (!data) return;\n\n  if (!isObjectType(data)) {\n    fatal('Data function must return an object');\n  }\n\n  if (data.constructor !== Object) {\n    warnOnceIfDebug(\n      'Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged'\n    );\n  }\n\n  return data;\n}\n\nfunction fromProperties(primary, secondary) {\n  if (primary && secondary) {\n    for (const key in secondary) {\n      if (!(key in primary)) {\n        primary[key] = secondary[key];\n      }\n    }\n\n    return primary;\n  }\n\n  return primary || secondary;\n}\n","import { TEMPLATE_VERSION } from 'config/template';\nimport { addFunctions } from 'shared/getFunction';\nimport parser from '../runtime-parser';\nimport { hasOwn } from 'utils/object';\nimport { isFunction, isNumber, isString } from 'utils/is';\n\nexport default {\n  name: 'template',\n\n  extend(Parent, proto, options) {\n    // only assign if exists\n    if ('template' in options) {\n      const template = options.template;\n\n      if (isFunction(template)) {\n        proto.template = template;\n      } else {\n        proto.template = parseTemplate(template, proto);\n      }\n    }\n  },\n\n  init(Parent, ractive, options) {\n    // TODO because of prototypal inheritance, we might just be able to use\n    // ractive.template, and not bother passing through the Parent object.\n    // At present that breaks the test mocks' expectations\n    let template = 'template' in options ? options.template : Parent.prototype.template;\n    template = template || { v: TEMPLATE_VERSION, t: [] };\n\n    if (isFunction(template)) {\n      const fn = template;\n      template = getDynamicTemplate(ractive, fn);\n\n      ractive._config.template = {\n        fn,\n        result: template\n      };\n    }\n\n    template = parseTemplate(template, ractive);\n\n    // TODO the naming of this is confusing - ractive.template refers to [...],\n    // but Component.prototype.template refers to {v:1,t:[],p:[]}...\n    // it's unnecessary, because the developer never needs to access\n    // ractive.template\n    ractive.template = template.t;\n\n    if (template.p) {\n      extendPartials(ractive.partials, template.p);\n    }\n  },\n\n  reset(ractive) {\n    const result = resetValue(ractive);\n\n    if (result) {\n      const parsed = parseTemplate(result, ractive);\n\n      ractive.template = parsed.t;\n      extendPartials(ractive.partials, parsed.p, true);\n\n      return true;\n    }\n  }\n};\n\nfunction resetValue(ractive) {\n  const initial = ractive._config.template;\n\n  // If this isn't a dynamic template, there's nothing to do\n  if (!initial || !initial.fn) {\n    return;\n  }\n\n  const result = getDynamicTemplate(ractive, initial.fn);\n\n  // TODO deep equality check to prevent unnecessary re-rendering\n  // in the case of already-parsed templates\n  if (result !== initial.result) {\n    initial.result = result;\n    return result;\n  }\n}\n\nfunction getDynamicTemplate(ractive, fn) {\n  return fn.call(ractive, {\n    fromId: parser.fromId,\n    isParsed: parser.isParsed,\n    parse(template, options = parser.getParseOptions(ractive)) {\n      return parser.parse(template, options);\n    }\n  });\n}\n\nfunction parseTemplate(template, ractive) {\n  if (isString(template)) {\n    // parse will validate and add expression functions\n    template = parseAsString(template, ractive);\n  } else {\n    // need to validate and add exp for already parsed template\n    validate(template);\n    addFunctions(template);\n  }\n\n  return template;\n}\n\nfunction parseAsString(template, ractive) {\n  // ID of an element containing the template?\n  if (template[0] === '#') {\n    template = parser.fromId(template);\n  }\n\n  return parser.parseFor(template, ractive);\n}\n\nfunction validate(template) {\n  // Check that the template even exists\n  if (template == undefined) {\n    throw new Error(`The template cannot be ${template}.`);\n  } else if (!isNumber(template.v)) {\n    // Check the parsed template has a version at all\n    throw new Error(\n      \"The template parser was passed a non-string template, but the template doesn't have a version.  Make sure you're passing in the template you think you are.\"\n    );\n  } else if (template.v !== TEMPLATE_VERSION) {\n    // Check we're using the correct version\n    throw new Error(\n      `Mismatched template version (expected ${TEMPLATE_VERSION}, got ${\n        template.v\n      }) Please ensure you are using the latest version of Ractive.js in your build process as well as in your app`\n    );\n  }\n}\n\nfunction extendPartials(existingPartials, newPartials, overwrite) {\n  if (!newPartials) return;\n\n  // TODO there's an ambiguity here - we need to overwrite in the `reset()`\n  // case, but not initially...\n\n  for (const key in newPartials) {\n    if (overwrite || !hasOwn(existingPartials, key)) {\n      existingPartials[key] = newPartials[key];\n    }\n  }\n}\n","import { assign, create, keys } from 'utils/object';\n\nconst registryNames = [\n  'adaptors',\n  'components',\n  'computed',\n  'decorators',\n  'easing',\n  'events',\n  'helpers',\n  'interpolators',\n  'partials',\n  'transitions'\n];\n\nconst registriesOnDefaults = ['computed', 'helpers'];\n\nclass Registry {\n  constructor(name, useDefaults) {\n    this.name = name;\n    this.useDefaults = useDefaults;\n  }\n\n  extend(Parent, proto, options) {\n    const parent = this.useDefaults ? Parent.defaults : Parent;\n    const target = this.useDefaults ? proto : proto.constructor;\n    this.configure(parent, target, options);\n  }\n\n  init() {\n    // noop\n  }\n\n  configure(Parent, target, options) {\n    const name = this.name;\n    const option = options[name];\n\n    const registry = create(Parent[name]);\n\n    assign(registry, option);\n\n    target[name] = registry;\n  }\n\n  reset(ractive) {\n    const registry = ractive[this.name];\n    let changed = false;\n\n    keys(registry).forEach(key => {\n      const item = registry[key];\n\n      if (item._fn) {\n        if (item._fn.isOwner) {\n          registry[key] = item._fn;\n        } else {\n          delete registry[key];\n        }\n        changed = true;\n      }\n    });\n\n    return changed;\n  }\n}\n\nconst registries = registryNames.map(name => {\n  const putInDefaults = registriesOnDefaults.indexOf(name) > -1;\n  return new Registry(name, putInDefaults);\n});\n\nexport default registries;\n","import noop from 'utils/noop';\nimport { isFunction } from 'utils/is';\n\nexport default function wrap(parent, name, method) {\n  if (!/_super/.test(method)) return method;\n\n  function wrapper() {\n    const superMethod = getSuperMethod(wrapper._parent, name);\n    const hasSuper = '_super' in this;\n    const oldSuper = this._super;\n\n    this._super = superMethod;\n\n    const result = method.apply(this, arguments);\n\n    if (hasSuper) {\n      this._super = oldSuper;\n    } else {\n      delete this._super;\n    }\n\n    return result;\n  }\n\n  wrapper._parent = parent;\n  wrapper._method = method;\n\n  return wrapper;\n}\n\nfunction getSuperMethod(parent, name) {\n  if (name in parent) {\n    const value = parent[name];\n\n    return isFunction(value) ? value : () => value;\n  }\n\n  return noop;\n}\n","import { warnIfDebug } from 'utils/log';\nimport { isArray } from 'utils/is';\n\nfunction getMessage(deprecated, correct, isError) {\n  return (\n    `options.${deprecated} has been deprecated in favour of options.${correct}.` +\n    (isError ? ` You cannot specify both options, please use options.${correct}.` : '')\n  );\n}\n\nfunction deprecateOption(options, deprecatedOption, correct) {\n  if (deprecatedOption in options) {\n    if (!(correct in options)) {\n      warnIfDebug(getMessage(deprecatedOption, correct));\n      options[correct] = options[deprecatedOption];\n    } else {\n      throw new Error(getMessage(deprecatedOption, correct, true));\n    }\n  }\n}\n\nexport default function deprecate(options) {\n  deprecateOption(options, 'beforeInit', 'onconstruct');\n  deprecateOption(options, 'init', 'onrender');\n  deprecateOption(options, 'complete', 'oncomplete');\n  deprecateOption(options, 'eventDefinitions', 'events');\n\n  // Using extend with Component instead of options,\n  // like Human.extend( Spider ) means adaptors as a registry\n  // gets copied to options. So we have to check if actually an array\n  if (isArray(options.adaptors)) {\n    deprecateOption(options, 'adaptors', 'adapt');\n  }\n}\n","import { warnIfDebug } from 'utils/log';\nimport adaptConfigurator from './custom/adapt';\nimport cssConfigurator from './custom/css/css';\nimport dataConfigurator from './custom/data';\nimport templateConfigurator from './custom/template';\nimport defaults from './defaults';\nimport registries from './registries';\nimport wrapPrototype from './wrapPrototypeMethod';\nimport deprecate from './deprecate';\nimport RactiveProto from '../prototype';\nimport { hasOwn, keys } from 'utils/object';\nimport { isFunction } from 'utils/is';\nimport hooks from 'src/events/Hook';\n\nconst config = {\n  extend: (Parent, proto, options, Child) => configure('extend', Parent, proto, options, Child),\n  init: (Parent, ractive, options) => configure('init', Parent, ractive, options),\n  reset: ractive => order.filter(c => c.reset && c.reset(ractive)).map(c => c.name)\n};\n\nconst custom = {\n  adapt: adaptConfigurator,\n  computed: config,\n  css: cssConfigurator,\n  data: dataConfigurator,\n  helpers: config,\n  template: templateConfigurator\n};\n\nconst defaultKeys = keys(defaults);\n\nconst isStandardKey = makeObj(defaultKeys.filter(key => !custom[key]));\n\n// blacklisted keys that we don't double extend\nconst isBlacklisted = makeObj(\n  defaultKeys.concat(registries.map(r => r.name), ['on', 'observe', 'attributes', 'cssData', 'use'])\n);\n\nconst order = [].concat(\n  defaultKeys.filter(key => !registries[key] && !custom[key]),\n  registries,\n  //custom.data,\n  custom.template,\n  custom.css\n);\n\nfunction configure(method, Parent, target, options, Child) {\n  deprecate(options);\n\n  for (const key in options) {\n    if (hasOwn(isStandardKey, key)) {\n      const value = options[key];\n\n      // warn the developer if they passed a function and ignore its value\n\n      // NOTE: we allow some functions on \"el\" because we duck type element lists\n      // and some libraries or ef'ed-up virtual browsers (phantomJS) return a\n      // function object as the result of querySelector methods\n      if (key !== 'el' && isFunction(value)) {\n        warnIfDebug(\n          `${key} is a Ractive option that does not expect a function and will be ignored`,\n          method === 'init' ? target : null\n        );\n      } else {\n        target[key] = value;\n      }\n    }\n  }\n\n  // disallow combination of `append` and `enhance`\n  if (target.append && target.enhance) {\n    throw new Error('Cannot use append and enhance at the same time');\n  }\n\n  registries.forEach(registry => {\n    registry[method](Parent, target, options, Child);\n  });\n\n  adaptConfigurator[method](Parent, target, options, Child);\n  templateConfigurator[method](Parent, target, options, Child);\n  cssConfigurator[method](Parent, target, options, Child);\n\n  extendOtherMethods(Parent.prototype, target, options);\n}\n\nconst _super = /\\b_super\\b/;\nfunction extendOtherMethods(parent, target, options) {\n  for (const key in options) {\n    if (!isBlacklisted[key] && hasOwn(options, key)) {\n      let member = options[key];\n\n      // if this is a method that overwrites a method, wrap it:\n      if (isFunction(member)) {\n        if (\n          (key in RactiveProto ||\n            (key.slice(0, 2) === 'on' && key.slice(2) in hooks && key in target)) &&\n          !_super.test(member.toString())\n        ) {\n          warnIfDebug(\n            `Overriding Ractive prototype function '${key}' without calling the '${_super}' method can be very dangerous.`\n          );\n        }\n        member = wrapPrototype(parent, key, member);\n      }\n\n      target[key] = member;\n    }\n  }\n}\n\nfunction makeObj(array) {\n  const obj = {};\n  array.forEach(x => (obj[x] = true));\n  return obj;\n}\n\nexport default config;\n","import { createDocumentFragment } from 'utils/dom';\nimport noop from 'utils/noop';\n\nexport default class Item {\n  constructor(options) {\n    this.up = options.up;\n    this.ractive = options.up.ractive;\n\n    this.template = options.template;\n    this.index = options.index;\n    this.type = options.template.t;\n\n    this.dirty = false;\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n      this.up.bubble();\n    }\n  }\n\n  destroyed() {\n    if (this.fragment) this.fragment.destroyed();\n  }\n\n  find() {\n    return null;\n  }\n\n  findComponent() {\n    return null;\n  }\n\n  findNextNode() {\n    return this.up.findNextNode(this);\n  }\n\n  rebound(update) {\n    if (this.fragment) this.fragment.rebound(update);\n  }\n\n  shuffled() {\n    if (this.fragment) this.fragment.shuffled();\n  }\n\n  valueOf() {\n    return this.toString();\n  }\n}\n\nItem.prototype.findAll = noop;\nItem.prototype.findAllComponents = noop;\n\nexport class ContainerItem extends Item {\n  constructor(options) {\n    super(options);\n  }\n\n  detach() {\n    return this.fragment ? this.fragment.detach() : createDocumentFragment();\n  }\n\n  find(selector) {\n    if (this.fragment) {\n      return this.fragment.find(selector);\n    }\n  }\n\n  findAll(selector, options) {\n    if (this.fragment) {\n      this.fragment.findAll(selector, options);\n    }\n  }\n\n  findComponent(name) {\n    if (this.fragment) {\n      return this.fragment.findComponent(name);\n    }\n  }\n\n  findAllComponents(name, options) {\n    if (this.fragment) {\n      this.fragment.findAllComponents(name, options);\n    }\n  }\n\n  firstNode(skipParent) {\n    return this.fragment && this.fragment.firstNode(skipParent);\n  }\n\n  toString(escape) {\n    return this.fragment ? this.fragment.toString(escape) : '';\n  }\n}\n","import { capture } from 'src/global/capture';\nimport Model from './Model';\nimport { handleChange, mark, marked } from 'shared/methodCallers';\nimport { hasOwn } from 'utils/object';\n\nexport default class ComputationChild extends Model {\n  constructor(parent, key) {\n    super(parent, key);\n\n    this.isReadonly = !this.root.ractive.syncComputedChildren;\n    this.dirty = true;\n    this.isComputed = true;\n  }\n\n  get setRoot() {\n    return this.parent.setRoot;\n  }\n\n  applyValue(value) {\n    super.applyValue(value);\n\n    if (!this.isReadonly) {\n      let source = this.parent;\n      // computed models don't have a shuffle method\n      while (source && source.shuffle) {\n        source = source.parent;\n      }\n\n      if (source) {\n        source.dependencies.forEach(mark);\n      }\n    }\n\n    if (this.setRoot) {\n      this.setRoot.set(this.setRoot.value);\n    }\n  }\n\n  get(shouldCapture, opts) {\n    if (shouldCapture) capture(this);\n\n    if (this.dirty) {\n      this.dirty = false;\n      const parentValue = this.parent.get();\n      this.value = parentValue ? parentValue[this.key] : undefined;\n      if (this.wrapper) this.newWrapperValue = this.value;\n      this.adapt();\n    }\n\n    return (opts && 'unwrap' in opts ? opts.unwrap !== false : shouldCapture) && this.wrapper\n      ? this.wrapperValue\n      : this.value;\n  }\n\n  handleChange() {\n    if (this.dirty) return;\n    this.dirty = true;\n\n    if (this.boundValue) this.boundValue = null;\n\n    this.links.forEach(marked);\n    this.deps.forEach(handleChange);\n    this.children.forEach(handleChange);\n  }\n\n  joinKey(key) {\n    if (key === undefined || key === '') return this;\n\n    if (!hasOwn(this.childByKey, key)) {\n      const child = new ComputationChild(this, key);\n      this.children.push(child);\n      this.childByKey[key] = child;\n    }\n\n    return this.childByKey[key];\n  }\n}\n","/* global console */\n/* eslint no-console:\"off\" */\n\nimport { capture, startCapturing, stopCapturing } from 'src/global/capture';\nimport { warnIfDebug } from 'utils/log';\nimport Model, { shared } from './Model';\nimport { maybeBind, noVirtual } from './ModelBase';\nimport ComputationChild from './ComputationChild';\nimport { hasConsole } from 'config/environment';\nimport { isEqual } from 'utils/is';\nimport runloop from 'src/global/runloop';\n\nexport default class Computation extends Model {\n  constructor(parent, signature, key) {\n    super(parent, key);\n\n    this.signature = signature;\n\n    this.isReadonly = !this.signature.setter;\n    this.isComputed = true;\n\n    this.dependencies = [];\n\n    this.children = [];\n    this.childByKey = {};\n\n    this.deps = [];\n\n    this.dirty = true;\n\n    // TODO: is there a less hackish way to do this?\n    this.shuffle = undefined;\n  }\n\n  get setRoot() {\n    if (this.signature.setter) return this;\n  }\n\n  get(shouldCapture, opts) {\n    if (shouldCapture) capture(this);\n\n    if (this.dirty) {\n      this.dirty = false;\n      const old = this.value;\n      this.value = this.getValue();\n      // this may cause a view somewhere to update, so it must be in a runloop\n      if (!runloop.active()) {\n        runloop.start();\n        if (!isEqual(old, this.value)) this.notifyUpstream();\n        runloop.end();\n      } else {\n        if (!isEqual(old, this.value)) this.notifyUpstream();\n      }\n      if (this.wrapper) this.newWrapperValue = this.value;\n      this.adapt();\n    }\n\n    // if capturing, this value needs to be unwrapped because it's for external use\n    return maybeBind(\n      this,\n      // if unwrap is supplied, it overrides capture\n      this.wrapper && (opts && 'unwrap' in opts ? opts.unwrap !== false : shouldCapture)\n        ? this.wrapperValue\n        : this.value,\n      !opts || opts.shouldBind !== false\n    );\n  }\n\n  getContext() {\n    return this.parent.isRoot ? this.root.ractive : this.parent.get(false, noVirtual);\n  }\n\n  getValue() {\n    startCapturing();\n    let result;\n\n    try {\n      result = this.signature.getter.call(this.root.ractive, this.getContext());\n    } catch (err) {\n      warnIfDebug(`Failed to compute ${this.getKeypath()}: ${err.message || err}`);\n\n      // TODO this is all well and good in Chrome, but...\n      // ...also, should encapsulate this stuff better, and only\n      // show it if Ractive.DEBUG\n      if (hasConsole) {\n        if (console.groupCollapsed)\n          console.groupCollapsed(\n            '%cshow details',\n            'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'\n          );\n        const sig = this.signature;\n        console.error(\n          `${err.name}: ${err.message}\\n\\n${sig.getterString}${\n            sig.getterUseStack ? '\\n\\n' + err.stack : ''\n          }`\n        );\n        if (console.groupCollapsed) console.groupEnd();\n      }\n    }\n\n    const dependencies = stopCapturing();\n    this.setDependencies(dependencies);\n\n    return result;\n  }\n\n  mark() {\n    this.handleChange();\n  }\n\n  rebind(next, previous) {\n    // computations will grab all of their deps again automagically\n    if (next !== previous) this.handleChange();\n  }\n\n  set(value) {\n    if (this.isReadonly) {\n      throw new Error(`Cannot set read-only computed value '${this.key}'`);\n    }\n\n    this.signature.setter(value);\n    this.mark();\n  }\n\n  setDependencies(dependencies) {\n    // unregister any soft dependencies we no longer have\n    let i = this.dependencies.length;\n    while (i--) {\n      const model = this.dependencies[i];\n      if (!~dependencies.indexOf(model)) model.unregister(this);\n    }\n\n    // and add any new ones\n    i = dependencies.length;\n    while (i--) {\n      const model = dependencies[i];\n      if (!~this.dependencies.indexOf(model)) model.register(this);\n    }\n\n    this.dependencies = dependencies;\n  }\n\n  teardown() {\n    let i = this.dependencies.length;\n    while (i--) {\n      if (this.dependencies[i]) this.dependencies[i].unregister(this);\n    }\n    if (this.parent.computed[this.key] === this) delete this.parent.computed[this.key];\n    super.teardown();\n  }\n}\n\nconst prototype = Computation.prototype;\nconst child = ComputationChild.prototype;\nprototype.handleChange = child.handleChange;\nprototype.joinKey = child.joinKey;\n\nshared.Computation = Computation;\n","import { removeFromArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport { warnIfDebug } from 'utils/log';\nimport Model from 'src/model/Model';\nimport Computation from 'src/model/Computation';\nimport { startCapturing, stopCapturing } from 'src/global/capture';\nimport getFunction from 'shared/getFunction';\nimport { rebindMatch } from 'shared/rebind';\nimport resolveReference from './resolveReference';\n\nexport default class ExpressionProxy extends Model {\n  constructor(fragment, template) {\n    super(fragment.ractive.viewmodel, null);\n\n    this.fragment = fragment;\n    this.template = template;\n\n    this.isReadonly = true;\n    this.isComputed = true;\n    this.dirty = true;\n\n    this.fn =\n      fragment.ractive.allowExpressions === false\n        ? noop\n        : getFunction(template.s, template.r.length);\n\n    this.models = this.template.r.map(ref => {\n      return resolveReference(this.fragment, ref);\n    });\n    this.dependencies = [];\n\n    this.shuffle = undefined;\n\n    this.bubble();\n  }\n\n  bubble(actuallyChanged = true) {\n    // refresh the keypath\n    this.keypath = undefined;\n\n    if (actuallyChanged) {\n      this.handleChange();\n    }\n  }\n\n  getKeypath() {\n    if (!this.template) return '@undefined';\n    if (!this.keypath) {\n      this.keypath =\n        '@' +\n        this.template.s.replace(/_(\\d+)/g, (match, i) => {\n          if (i >= this.models.length) return match;\n\n          const model = this.models[i];\n          return model ? model.getKeypath() : '@undefined';\n        });\n    }\n\n    return this.keypath;\n  }\n\n  getValue() {\n    startCapturing();\n    let result;\n\n    try {\n      const params = this.models.map(m => (m ? m.get(true) : undefined));\n      result = this.fn.apply(this.fragment.ractive, params);\n    } catch (err) {\n      warnIfDebug(`Failed to compute ${this.getKeypath()}: ${err.message || err}`);\n    }\n\n    const dependencies = stopCapturing();\n    // remove missing deps\n    this.dependencies.filter(d => !~dependencies.indexOf(d)).forEach(d => {\n      d.unregister(this);\n      removeFromArray(this.dependencies, d);\n    });\n    // register new deps\n    dependencies.filter(d => !~this.dependencies.indexOf(d)).forEach(d => {\n      d.register(this);\n      this.dependencies.push(d);\n    });\n\n    return result;\n  }\n\n  notifyUpstream() {}\n\n  rebind(next, previous, safe) {\n    const idx = this.models.indexOf(previous);\n\n    if (~idx) {\n      next = rebindMatch(this.template.r[idx], next, previous);\n      if (next !== previous) {\n        previous.unregister(this);\n        this.models.splice(idx, 1, next);\n        if (next) next.addShuffleRegister(this, 'mark');\n      }\n    }\n    this.bubble(!safe);\n  }\n\n  rebound(update) {\n    this.models = this.template.r.map(ref => resolveReference(this.fragment, ref));\n    if (update) this.bubble(true);\n  }\n\n  retrieve() {\n    return this.get();\n  }\n\n  teardown() {\n    this.fragment = undefined;\n    if (this.dependencies) this.dependencies.forEach(d => d.unregister(this));\n    super.teardown();\n  }\n\n  unreference() {\n    super.unreference();\n    collect(this);\n  }\n\n  unregister(dep) {\n    super.unregister(dep);\n    collect(this);\n  }\n\n  unregisterLink(link) {\n    super.unregisterLink(link);\n    collect(this);\n  }\n}\n\nconst prototype = ExpressionProxy.prototype;\nconst computation = Computation.prototype;\nprototype.get = computation.get;\nprototype.handleChange = computation.handleChange;\nprototype.joinKey = computation.joinKey;\nprototype.mark = computation.mark;\nprototype.unbind = noop;\n\nfunction collect(model) {\n  if (!model.deps.length && !model.refs && !model.links.length) model.teardown();\n}\n","import { fireShuffleTasks } from 'src/model/ModelBase';\nimport { REFERENCE } from 'config/types';\nimport { rebindMatch } from 'shared/rebind';\nimport { isArray, isString } from 'utils/is';\nimport { escapeKey } from 'shared/keypaths';\nimport ExpressionProxy from './ExpressionProxy';\nimport resolveReference from './resolveReference';\nimport resolve from './resolve';\n\nimport LinkModel, { Missing } from 'src/model/LinkModel';\n\nexport default class ReferenceExpressionProxy extends LinkModel {\n  constructor(fragment, template) {\n    super(null, null, null, '@undefined');\n    this.root = fragment.ractive.viewmodel;\n    this.template = template;\n    this.rootLink = true;\n    this.template = template;\n    this.fragment = fragment;\n\n    this.rebound();\n  }\n\n  getKeypath() {\n    return this.model ? this.model.getKeypath() : '@undefined';\n  }\n\n  rebound() {\n    const fragment = this.fragment;\n    const template = this.template;\n\n    let base = (this.base = resolve(fragment, template));\n    let idx;\n\n    if (this.proxy) {\n      teardown(this);\n    }\n\n    const proxy = (this.proxy = {\n      rebind: (next, previous) => {\n        if (previous === base) {\n          next = rebindMatch(template, next, previous);\n          if (next !== base) {\n            this.base = base = next;\n          }\n        } else if (~(idx = members.indexOf(previous))) {\n          next = rebindMatch(template.m[idx].n, next, previous);\n          if (next !== members[idx]) {\n            members.splice(idx, 1, next || Missing);\n          }\n        }\n\n        if (next !== previous) {\n          previous.unregister(proxy);\n          if (next) next.addShuffleTask(() => next.register(proxy));\n        }\n      },\n      handleChange: () => {\n        pathChanged();\n      }\n    });\n\n    base.register(proxy);\n\n    const members = (this.members = template.m.map(tpl => {\n      if (isString(tpl)) {\n        return { get: () => tpl };\n      }\n\n      let model;\n\n      if (tpl.t === REFERENCE) {\n        model = resolveReference(fragment, tpl.n);\n        model.register(proxy);\n\n        return model;\n      }\n\n      model = new ExpressionProxy(fragment, tpl);\n      model.register(proxy);\n      return model;\n    }));\n\n    const pathChanged = () => {\n      const model = base.joinAll(\n        members.reduce((list, m) => {\n          const k = m.get();\n          if (isArray(k)) return list.concat(k);\n          else list.push(escapeKey(String(k)));\n          return list;\n        }, [])\n      );\n\n      if (model !== this.model) {\n        this.model = model;\n        this.relinking(model);\n        fireShuffleTasks();\n        refreshPathDeps(this);\n      }\n    };\n\n    pathChanged();\n  }\n\n  teardown() {\n    teardown(this);\n    super.teardown();\n  }\n\n  unreference() {\n    super.unreference();\n    if (!this.deps.length && !this.refs) this.teardown();\n  }\n\n  unregister(dep) {\n    super.unregister(dep);\n    if (!this.deps.length && !this.refs) this.teardown();\n  }\n}\n\nfunction teardown(proxy) {\n  if (proxy.base) proxy.base.unregister(proxy.proxy);\n  if (proxy.models) {\n    proxy.models.forEach(m => {\n      if (m.unregister) m.unregister(proxy);\n    });\n  }\n}\n\nfunction refreshPathDeps(proxy) {\n  let len = proxy.deps.length;\n  let i, v;\n\n  for (i = 0; i < len; i++) {\n    v = proxy.deps[i];\n    if (v.pathChanged) v.pathChanged();\n    if (v.fragment && v.fragment.pathModel) v.fragment.pathModel.applyValue(proxy.getKeypath());\n  }\n\n  len = proxy.children.length;\n  for (i = 0; i < len; i++) {\n    refreshPathDeps(proxy.children[i]);\n  }\n}\n\nconst eproto = ExpressionProxy.prototype;\nconst proto = ReferenceExpressionProxy.prototype;\n\nproto.unreference = eproto.unreference;\nproto.unregister = eproto.unregister;\nproto.unregisterLink = eproto.unregisterLink;\n","import resolveReference from './resolveReference';\nimport ExpressionProxy from './ExpressionProxy';\nimport ReferenceExpressionProxy from './ReferenceExpressionProxy';\n\nexport default function resolve(fragment, template) {\n  if (template.r) {\n    return resolveReference(fragment, template.r);\n  } else if (template.x) {\n    return new ExpressionProxy(fragment, template.x);\n  } else if (template.rx) {\n    return new ReferenceExpressionProxy(fragment, template.rx);\n  }\n}\n","import Fragment from '../Fragment';\nimport { ContainerItem } from './shared/Item';\nimport resolve from '../resolvers/resolve';\n\nexport function resolveAliases(aliases, fragment, dest = {}) {\n  for (let i = 0; i < aliases.length; i++) {\n    if (!dest[aliases[i].n]) {\n      const m = resolve(fragment, aliases[i].x);\n      dest[aliases[i].n] = m;\n      m.reference();\n    }\n  }\n\n  return dest;\n}\n\nexport default class Alias extends ContainerItem {\n  constructor(options) {\n    super(options);\n\n    this.fragment = null;\n  }\n\n  bind() {\n    this.fragment = new Fragment({\n      owner: this,\n      template: this.template.f\n    });\n\n    this.fragment.aliases = resolveAliases(this.template.z, this.up);\n    this.fragment.bind();\n  }\n\n  rebound(update) {\n    const aliases = this.fragment.aliases;\n    for (const k in aliases) {\n      if (aliases[k].rebound) aliases[k].rebound(update);\n      else {\n        aliases[k].unreference();\n        aliases[k] = 0;\n      }\n    }\n\n    resolveAliases(this.template.z, this.up, aliases);\n\n    if (this.fragment) this.fragment.rebound(update);\n  }\n\n  render(target, occupants) {\n    this.rendered = true;\n    if (this.fragment) this.fragment.render(target, occupants);\n  }\n\n  unbind() {\n    for (const k in this.fragment.aliases) {\n      this.fragment.aliases[k].unreference();\n    }\n\n    this.fragment.aliases = {};\n    if (this.fragment) this.fragment.unbind();\n  }\n\n  unrender(shouldDestroy) {\n    if (this.rendered && this.fragment) this.fragment.unrender(shouldDestroy);\n    this.rendered = false;\n  }\n\n  update() {\n    if (this.dirty) {\n      this.dirty = false;\n      this.fragment.update();\n    }\n  }\n}\n","import cleanCss from 'utils/cleanCss';\nimport { isString } from 'utils/is';\n\nconst space = /\\s+/;\n\nexport function readStyle(css) {\n  if (!isString(css)) return {};\n\n  return cleanCss(css, (css, reconstruct) => {\n    return css\n      .split(';')\n      .filter(rule => !!rule.trim())\n      .map(reconstruct)\n      .reduce((rules, rule) => {\n        const i = rule.indexOf(':');\n        const name = rule.substr(0, i).trim();\n        rules[name] = rule.substr(i + 1).trim();\n        return rules;\n      }, {});\n  });\n}\n\nexport function readClass(str) {\n  const list = str.split(space);\n\n  // remove any empty entries\n  let i = list.length;\n  while (i--) {\n    if (!list[i]) list.splice(i, 1);\n  }\n\n  return list;\n}\n","import { html } from 'config/namespaces';\nimport { safeToStringValue } from 'utils/dom';\nimport { arrayContains } from 'utils/array';\nimport noop from 'utils/noop';\nimport hyphenateCamel from 'utils/hyphenateCamel';\nimport { readStyle, readClass } from 'src/view/helpers/specialAttrs';\nimport { keys as objectKeys } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\n\nconst textTypes = [\n  undefined,\n  'text',\n  'search',\n  'url',\n  'email',\n  'hidden',\n  'password',\n  'search',\n  'reset',\n  'submit'\n];\n\nexport default function getUpdateDelegate(attribute) {\n  const { element, name } = attribute;\n\n  if (name === 'value') {\n    if (attribute.interpolator) attribute.interpolator.bound = true;\n\n    // special case - selects\n    if (element.name === 'select' && name === 'value') {\n      return element.getAttribute('multiple') ? updateMultipleSelectValue : updateSelectValue;\n    }\n\n    if (element.name === 'textarea') return updateStringValue;\n\n    // special case - contenteditable\n    if (element.getAttribute('contenteditable') != null) return updateContentEditableValue;\n\n    // special case - <input>\n    if (element.name === 'input') {\n      const type = element.getAttribute('type');\n\n      // type='file' value='{{fileList}}'>\n      if (type === 'file') return noop; // read-only\n\n      // type='radio' name='{{twoway}}'\n      if (type === 'radio' && element.binding && element.binding.attribute.name === 'name')\n        return updateRadioValue;\n\n      if (~textTypes.indexOf(type)) return updateStringValue;\n    }\n\n    return updateValue;\n  }\n\n  const node = element.node;\n\n  // special case - <input type='radio' name='{{twoway}}' value='foo'>\n  if (attribute.isTwoway && name === 'name') {\n    if (node.type === 'radio') return updateRadioName;\n    if (node.type === 'checkbox') return updateCheckboxName;\n  }\n\n  if (name === 'style') return updateStyleAttribute;\n\n  if (name.indexOf('style-') === 0) return updateInlineStyle;\n\n  // special case - class names. IE fucks things up, again\n  if (name === 'class' && (!node.namespaceURI || node.namespaceURI === html))\n    return updateClassName;\n\n  if (name.indexOf('class-') === 0) return updateInlineClass;\n\n  if (attribute.isBoolean) {\n    const type = element.getAttribute('type');\n    if (attribute.interpolator && name === 'checked' && (type === 'checkbox' || type === 'radio'))\n      attribute.interpolator.bound = true;\n    return updateBoolean;\n  }\n\n  if (attribute.namespace && attribute.namespace !== attribute.node.namespaceURI)\n    return updateNamespacedAttribute;\n\n  return updateAttribute;\n}\n\nfunction updateMultipleSelectValue(reset) {\n  let value = this.getValue();\n\n  if (!isArray(value)) value = [value];\n\n  const options = this.node.options;\n  let i = options.length;\n\n  if (reset) {\n    while (i--) options[i].selected = false;\n  } else {\n    while (i--) {\n      const option = options[i];\n      const optionValue = option._ractive ? option._ractive.value : option.value; // options inserted via a triple don't have _ractive\n\n      option.selected = arrayContains(value, optionValue);\n    }\n  }\n}\n\nfunction updateSelectValue(reset) {\n  const value = this.getValue();\n\n  if (!this.locked) {\n    // TODO is locked still a thing?\n    this.node._ractive.value = value;\n\n    const options = this.node.options;\n    let i = options.length;\n    let wasSelected = false;\n\n    if (reset) {\n      while (i--) options[i].selected = false;\n    } else {\n      while (i--) {\n        const option = options[i];\n        const optionValue = option._ractive ? option._ractive.value : option.value; // options inserted via a triple don't have _ractive\n        if (option.disabled && option.selected) wasSelected = true;\n\n        if (optionValue == value) {\n          // double equals as we may be comparing numbers with strings\n          option.selected = true;\n          return;\n        }\n      }\n    }\n\n    if (!wasSelected) this.node.selectedIndex = -1;\n  }\n}\n\nfunction updateContentEditableValue(reset) {\n  const value = this.getValue();\n\n  if (!this.locked) {\n    if (reset) this.node.innerHTML = '';\n    else this.node.innerHTML = value === undefined ? '' : value;\n  }\n}\n\nfunction updateRadioValue(reset) {\n  const node = this.node;\n  const wasChecked = node.checked;\n\n  const value = this.getValue();\n\n  if (reset) return (node.checked = false);\n\n  //node.value = this.element.getAttribute( 'value' );\n  node.value = this.node._ractive.value = value;\n  node.checked = this.element.compare(value, this.element.getAttribute('name'));\n\n  // This is a special case - if the input was checked, and the value\n  // changed so that it's no longer checked, the twoway binding is\n  // most likely out of date. To fix it we have to jump through some\n  // hoops... this is a little kludgy but it works\n  if (wasChecked && !node.checked && this.element.binding && this.element.binding.rendered) {\n    this.element.binding.group.model.set(this.element.binding.group.getValue());\n  }\n}\n\nfunction updateValue(reset) {\n  if (!this.locked) {\n    if (reset) {\n      this.node.removeAttribute('value');\n      this.node.value = this.node._ractive.value = null;\n    } else {\n      const value = this.getValue();\n\n      this.node.value = this.node._ractive.value = value;\n      this.node.setAttribute('value', safeToStringValue(value));\n    }\n  }\n}\n\nfunction updateStringValue(reset) {\n  if (!this.locked) {\n    if (reset) {\n      this.node._ractive.value = '';\n      this.node.removeAttribute('value');\n    } else {\n      const value = this.getValue();\n\n      this.node._ractive.value = value;\n\n      this.node.value = safeToStringValue(value);\n      this.node.setAttribute('value', safeToStringValue(value));\n    }\n  }\n}\n\nfunction updateRadioName(reset) {\n  if (reset) this.node.checked = false;\n  else this.node.checked = this.element.compare(this.getValue(), this.element.binding.getValue());\n}\n\nfunction updateCheckboxName(reset) {\n  const { element, node } = this;\n  const binding = element.binding;\n\n  const value = this.getValue();\n  const valueAttribute = element.getAttribute('value');\n\n  if (reset) {\n    // TODO: WAT?\n  }\n\n  if (!isArray(value)) {\n    binding.isChecked = node.checked = element.compare(value, valueAttribute);\n  } else {\n    let i = value.length;\n    while (i--) {\n      if (element.compare(valueAttribute, value[i])) {\n        binding.isChecked = node.checked = true;\n        return;\n      }\n    }\n    binding.isChecked = node.checked = false;\n  }\n}\n\nfunction updateStyleAttribute(reset) {\n  const props = reset ? {} : readStyle(this.getValue() || '');\n  const style = this.node.style;\n  const keys = objectKeys(props);\n  const prev = this.previous || [];\n\n  let i = 0;\n  while (i < keys.length) {\n    if (keys[i] in style) {\n      const safe = props[keys[i]].replace('!important', '');\n      style.setProperty(keys[i], safe, safe.length !== props[keys[i]].length ? 'important' : '');\n    }\n    i++;\n  }\n\n  // remove now-missing attrs\n  i = prev.length;\n  while (i--) {\n    if (!~keys.indexOf(prev[i]) && prev[i] in style) style.setProperty(prev[i], '', '');\n  }\n\n  this.previous = keys;\n}\n\nfunction updateInlineStyle(reset) {\n  if (!this.style) {\n    this.style = hyphenateCamel(this.name.substr(6));\n  }\n\n  if (reset && this.node.style.getPropertyValue(this.style) !== this.last) return;\n\n  const value = reset ? '' : safeToStringValue(this.getValue());\n  const safe = value.replace('!important', '');\n  this.node.style.setProperty(this.style, safe, safe.length !== value.length ? 'important' : '');\n  this.last = this.node.style.getPropertyValue(this.style);\n}\n\nfunction updateClassName(reset) {\n  const value = reset ? [] : readClass(safeToStringValue(this.getValue()));\n\n  // watch out for werdo svg elements\n  let cls = this.node.className;\n  cls = cls.baseVal !== undefined ? cls.baseVal : cls;\n\n  const attr = readClass(cls);\n  const prev = this.previous || [];\n\n  const className = value.concat(attr.filter(c => !~prev.indexOf(c))).join(' ');\n\n  if (className !== cls) {\n    if (!isString(this.node.className)) {\n      this.node.className.baseVal = className;\n    } else {\n      this.node.className = className;\n    }\n  }\n\n  this.previous = value;\n}\n\nfunction updateInlineClass(reset) {\n  const name = this.name.substr(6);\n\n  // watch out for werdo svg elements\n  let cls = this.node.className;\n  cls = cls.baseVal !== undefined ? cls.baseVal : cls;\n\n  const attr = readClass(cls);\n  const value = reset ? false : this.getValue();\n\n  if (!this.inlineClass) this.inlineClass = name;\n\n  if (value && !~attr.indexOf(name)) attr.push(name);\n  else if (!value && ~attr.indexOf(name)) attr.splice(attr.indexOf(name), 1);\n\n  if (!isString(this.node.className)) {\n    this.node.className.baseVal = attr.join(' ');\n  } else {\n    this.node.className = attr.join(' ');\n  }\n}\n\nfunction updateBoolean(reset) {\n  // with two-way binding, only update if the change wasn't initiated by the user\n  // otherwise the cursor will often be sent to the wrong place\n  if (!this.locked) {\n    if (reset) {\n      if (this.useProperty) this.node[this.propertyName] = false;\n      this.node.removeAttribute(this.propertyName);\n    } else {\n      if (this.useProperty) {\n        this.node[this.propertyName] = this.getValue();\n      } else {\n        const val = this.getValue();\n        if (val) {\n          this.node.setAttribute(this.propertyName, isString(val) ? val : '');\n        } else {\n          this.node.removeAttribute(this.propertyName);\n        }\n      }\n    }\n  }\n}\n\nexport function updateAttribute(reset) {\n  if (reset) {\n    if (this.node.getAttribute(this.name) === this.value) {\n      this.node.removeAttribute(this.name);\n    }\n  } else {\n    this.value = safeToStringValue(this.getString());\n    this.node.setAttribute(this.name, this.value);\n  }\n}\n\nexport function updateNamespacedAttribute(reset) {\n  if (reset) {\n    if (\n      this.value ===\n      this.node.getAttributeNS(this.namespace, this.name.slice(this.name.indexOf(':') + 1))\n    ) {\n      this.node.removeAttributeNS(this.namespace, this.name.slice(this.name.indexOf(':') + 1));\n    }\n  } else {\n    this.value = safeToStringValue(this.getString());\n    this.node.setAttributeNS(\n      this.namespace,\n      this.name.slice(this.name.indexOf(':') + 1),\n      this.value\n    );\n  }\n}\n","export default {\n  'accept-charset': 'acceptCharset',\n  accesskey: 'accessKey',\n  bgcolor: 'bgColor',\n  class: 'className',\n  codebase: 'codeBase',\n  colspan: 'colSpan',\n  contenteditable: 'contentEditable',\n  datetime: 'dateTime',\n  dirname: 'dirName',\n  for: 'htmlFor',\n  'http-equiv': 'httpEquiv',\n  ismap: 'isMap',\n  maxlength: 'maxLength',\n  novalidate: 'noValidate',\n  pubdate: 'pubDate',\n  readonly: 'readOnly',\n  rowspan: 'rowSpan',\n  tabindex: 'tabIndex',\n  usemap: 'useMap'\n};\n","import { doc } from 'config/environment';\nimport { svg } from 'config/namespaces';\nimport { createElement } from 'utils/dom';\nimport { toArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport Fragment from '../../Fragment';\nimport Item from '../shared/Item';\n\nconst div = doc ? createElement('div') : null;\n\nlet attributes = false;\nexport function inAttributes() {\n  return attributes;\n}\n\nexport default class ConditionalAttribute extends Item {\n  constructor(options) {\n    super(options);\n\n    this.attributes = [];\n\n    this.owner = options.owner;\n\n    this.fragment = new Fragment({\n      ractive: this.ractive,\n      owner: this,\n      template: this.template\n    });\n\n    // this fragment can't participate in node-y things\n    this.fragment.findNextNode = noop;\n\n    this.dirty = false;\n  }\n\n  bind() {\n    this.fragment.bind();\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n      this.owner.bubble();\n    }\n  }\n\n  destroyed() {\n    this.unrender();\n  }\n\n  render() {\n    this.node = this.owner.node;\n    if (this.node) {\n      this.isSvg = this.node.namespaceURI === svg;\n    }\n\n    attributes = true;\n    if (!this.rendered) this.fragment.render();\n\n    this.rendered = true;\n    this.dirty = true; // TODO this seems hacky, but necessary for tests to pass in browser AND node.js\n    this.update();\n    attributes = false;\n  }\n\n  toString() {\n    return this.fragment.toString();\n  }\n\n  unbind() {\n    this.fragment.unbind();\n  }\n\n  unrender() {\n    this.rendered = false;\n    this.fragment.unrender();\n  }\n\n  update() {\n    let str;\n    let attrs;\n\n    if (this.dirty) {\n      this.dirty = false;\n\n      const current = attributes;\n      attributes = true;\n      this.fragment.update();\n\n      if (this.rendered && this.node) {\n        str = this.fragment.toString();\n\n        attrs = parseAttributes(str, this.isSvg);\n\n        // any attributes that previously existed but no longer do\n        // must be removed\n        this.attributes.filter(a => notIn(attrs, a)).forEach(a => {\n          this.node.removeAttribute(a.name);\n        });\n\n        attrs.forEach(a => {\n          this.node.setAttribute(a.name, a.value);\n        });\n\n        this.attributes = attrs;\n      }\n\n      attributes = current || false;\n    }\n  }\n}\n\nconst onlyWhitespace = /^\\s*$/;\nfunction parseAttributes(str, isSvg) {\n  if (onlyWhitespace.test(str)) return [];\n  const tagName = isSvg ? 'svg' : 'div';\n  return str\n    ? (div.innerHTML = `<${tagName} ${str}></${tagName}>`) && toArray(div.childNodes[0].attributes)\n    : [];\n}\n\nfunction notIn(haystack, needle) {\n  let i = haystack.length;\n\n  while (i--) {\n    if (haystack[i].name === needle.name) {\n      return false;\n    }\n  }\n\n  return true;\n}\n","import { INTERPOLATOR } from 'config/types';\nimport namespaces from 'config/namespaces';\nimport { safeAttributeString } from 'utils/dom';\nimport { booleanAttributes } from 'utils/html';\nimport hyphenateCamel from 'utils/hyphenateCamel';\nimport Fragment from '../../Fragment';\nimport Item from '../shared/Item';\nimport findElement from '../shared/findElement';\nimport getUpdateDelegate from './attribute/getUpdateDelegate';\nimport propertyNames from './attribute/propertyNames';\nimport { inAttributes } from './ConditionalAttribute';\nimport { isArray, isString } from 'utils/is';\n\nfunction lookupNamespace(node, prefix) {\n  const qualified = `xmlns:${prefix}`;\n\n  while (node) {\n    if (node.hasAttribute && node.hasAttribute(qualified)) return node.getAttribute(qualified);\n    node = node.parentNode;\n  }\n\n  return namespaces[prefix];\n}\n\nlet attribute = false;\nexport function inAttribute() {\n  return attribute;\n}\n\nexport default class Attribute extends Item {\n  constructor(options) {\n    super(options);\n\n    this.name = options.template.n;\n    this.namespace = null;\n\n    this.owner = options.owner || options.up.owner || options.element || findElement(options.up);\n    this.element =\n      options.element || (this.owner.attributeByName ? this.owner : findElement(options.up));\n    this.up = options.up; // shared\n    this.ractive = this.up.ractive;\n\n    this.rendered = false;\n    this.updateDelegate = null;\n    this.fragment = null;\n\n    this.element.attributeByName[this.name] = this;\n\n    if (!isArray(options.template.f)) {\n      this.value = options.template.f;\n      if (this.value === 0) {\n        this.value = '';\n      } else if (this.value === undefined) {\n        this.value = true;\n      }\n      return;\n    } else {\n      this.fragment = new Fragment({\n        owner: this,\n        template: options.template.f\n      });\n    }\n\n    this.interpolator =\n      this.fragment &&\n      this.fragment.items.length === 1 &&\n      this.fragment.items[0].type === INTERPOLATOR &&\n      this.fragment.items[0];\n\n    if (this.interpolator) this.interpolator.owner = this;\n  }\n\n  bind() {\n    if (this.fragment) {\n      this.fragment.bind();\n    }\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.up.bubble();\n      this.element.bubble();\n      this.dirty = true;\n    }\n  }\n\n  firstNode() {}\n\n  getString() {\n    attribute = true;\n    const value = this.fragment\n      ? this.fragment.toString()\n      : this.value != null\n        ? '' + this.value\n        : '';\n    attribute = false;\n    return value;\n  }\n\n  // TODO could getValue ever be called for a static attribute,\n  // or can we assume that this.fragment exists?\n  getValue() {\n    attribute = true;\n    const value = this.fragment\n      ? this.fragment.valueOf()\n      : booleanAttributes[this.name.toLowerCase()]\n        ? true\n        : this.value;\n    attribute = false;\n    return value;\n  }\n\n  render() {\n    const node = this.element.node;\n    this.node = node;\n\n    // should we use direct property access, or setAttribute?\n    if (!node.namespaceURI || node.namespaceURI === namespaces.html) {\n      this.propertyName = propertyNames[this.name] || this.name;\n\n      if (node[this.propertyName] !== undefined) {\n        this.useProperty = true;\n      }\n\n      // is attribute a boolean attribute or 'value'? If so we're better off doing e.g.\n      // node.selected = true rather than node.setAttribute( 'selected', '' )\n      if (booleanAttributes[this.name.toLowerCase()] || this.isTwoway) {\n        this.isBoolean = true;\n      }\n\n      if (this.propertyName === 'value') {\n        node._ractive.value = this.value;\n      }\n    }\n\n    if (node.namespaceURI) {\n      const index = this.name.indexOf(':');\n      if (index !== -1) {\n        this.namespace = lookupNamespace(node, this.name.slice(0, index));\n      } else {\n        this.namespace = node.namespaceURI;\n      }\n    }\n\n    this.rendered = true;\n    this.updateDelegate = getUpdateDelegate(this);\n    this.updateDelegate();\n  }\n\n  toString() {\n    if (inAttributes()) return '';\n    attribute = true;\n\n    const value = this.getValue();\n\n    // Special case - select and textarea values (should not be stringified)\n    if (\n      this.name === 'value' &&\n      (this.element.getAttribute('contenteditable') !== undefined ||\n        (this.element.name === 'select' || this.element.name === 'textarea'))\n    ) {\n      return;\n    }\n\n    // Special case – bound radio `name` attributes\n    if (\n      this.name === 'name' &&\n      this.element.name === 'input' &&\n      this.interpolator &&\n      this.element.getAttribute('type') === 'radio'\n    ) {\n      return `name=\"{{${this.interpolator.model.getKeypath()}}}\"`;\n    }\n\n    // Special case - style and class attributes and directives\n    if (\n      this.owner === this.element &&\n      (this.name === 'style' || this.name === 'class' || this.style || this.inlineClass)\n    ) {\n      return;\n    }\n\n    if (\n      !this.rendered &&\n      this.owner === this.element &&\n      (!this.name.indexOf('style-') || !this.name.indexOf('class-'))\n    ) {\n      if (!this.name.indexOf('style-')) {\n        this.style = hyphenateCamel(this.name.substr(6));\n      } else {\n        this.inlineClass = this.name.substr(6);\n      }\n\n      return;\n    }\n\n    if (booleanAttributes[this.name.toLowerCase()])\n      return value\n        ? isString(value)\n          ? `${this.name}=\"${safeAttributeString(value)}\"`\n          : this.name\n        : '';\n    if (value == null) return '';\n\n    const str = safeAttributeString(this.getString());\n    attribute = false;\n\n    return str ? `${this.name}=\"${str}\"` : this.name;\n  }\n\n  unbind() {\n    if (this.fragment) this.fragment.unbind();\n  }\n\n  unrender() {\n    this.updateDelegate(true);\n\n    this.rendered = false;\n  }\n\n  update() {\n    if (this.dirty) {\n      let binding;\n      this.dirty = false;\n      if (this.fragment) this.fragment.update();\n      if (this.rendered) this.updateDelegate();\n      if (this.isTwoway && !this.locked) {\n        this.interpolator.twowayBinding.lastVal(true, this.interpolator.model.get());\n      } else if (this.name === 'value' && (binding = this.element.binding)) {\n        // special case: name bound element with dynamic value\n        const attr = binding.attribute;\n        if (attr && !attr.dirty && attr.rendered) {\n          this.element.binding.attribute.updateDelegate();\n        }\n      }\n    }\n  }\n}\n","import { INTERPOLATOR, ELEMENT } from 'config/types';\nimport Item from '../shared/Item';\nimport Fragment from '../../Fragment';\nimport findElement from '../shared/findElement';\nimport { isArray } from 'utils/is';\n\nexport default class BindingFlag extends Item {\n  constructor(options) {\n    super(options);\n\n    this.owner = options.owner || options.up.owner || findElement(options.up);\n    this.element = this.owner.attributeByName ? this.owner : findElement(options.up);\n    this.flag = options.template.v === 'l' ? 'lazy' : 'twoway';\n    this.bubbler = this.owner === this.element ? this.element : this.up;\n\n    if (this.element.type === ELEMENT) {\n      if (isArray(options.template.f)) {\n        this.fragment = new Fragment({\n          owner: this,\n          template: options.template.f\n        });\n      }\n\n      this.interpolator =\n        this.fragment &&\n        this.fragment.items.length === 1 &&\n        this.fragment.items[0].type === INTERPOLATOR &&\n        this.fragment.items[0];\n    }\n  }\n\n  bind() {\n    if (this.fragment) this.fragment.bind();\n    set(this, this.getValue(), true);\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.bubbler.bubble();\n      this.dirty = true;\n    }\n  }\n\n  getValue() {\n    if (this.fragment) return this.fragment.valueOf();\n    else if ('value' in this) return this.value;\n    else if ('f' in this.template) return this.template.f;\n    else return true;\n  }\n\n  render() {\n    set(this, this.getValue(), true);\n  }\n\n  toString() {\n    return '';\n  }\n\n  unbind() {\n    if (this.fragment) this.fragment.unbind();\n\n    delete this.element[this.flag];\n  }\n\n  unrender() {\n    if (this.element.rendered) this.element.recreateTwowayBinding();\n  }\n\n  update() {\n    if (this.dirty) {\n      this.dirty = false;\n      if (this.fragment) this.fragment.update();\n      set(this, this.getValue(), true);\n    }\n  }\n}\n\nfunction set(flag, value, update) {\n  if (value === 0) {\n    flag.value = true;\n  } else if (value === 'true') {\n    flag.value = true;\n  } else if (value === 'false' || value === '0') {\n    flag.value = false;\n  } else {\n    flag.value = value;\n  }\n\n  const current = flag.element[flag.flag];\n  flag.element[flag.flag] = flag.value;\n  if (update && !flag.element.attributes.binding && current !== flag.value) {\n    flag.element.recreateTwowayBinding();\n  }\n\n  return flag.value;\n}\n","import Item from './shared/Item';\nimport noop from 'utils/noop';\nimport { detachNode } from 'utils/dom';\nimport { doc } from 'config/environment';\nimport { assign, create } from 'utils/object';\n\nexport default function Comment(options) {\n  Item.call(this, options);\n}\n\nconst proto = create(Item.prototype);\n\nassign(proto, {\n  bind: noop,\n  unbind: noop,\n  update: noop,\n\n  detach() {\n    return detachNode(this.node);\n  },\n\n  firstNode() {\n    return this.node;\n  },\n\n  render(target) {\n    this.rendered = true;\n\n    this.node = doc.createComment(this.template.c);\n    target.appendChild(this.node);\n  },\n\n  toString() {\n    return `<!-- ${this.template.c} -->`;\n  },\n\n  unrender(shouldDestroy) {\n    if (this.rendered && shouldDestroy) this.detach();\n    this.rendered = false;\n  }\n});\n\nComment.prototype = proto;\n","import hooks from 'src/events/Hook';\nimport { removeFromArray } from 'utils/array';\nimport { cancel } from 'shared/methodCallers';\nimport { warnIfDebug } from 'utils/log';\n\n// Teardown. This goes through the root fragment and all its children, removing observers\n// and generally cleaning up after itself\n\nexport default function Ractive$teardown() {\n  if (this.torndown) {\n    warnIfDebug('ractive.teardown() was called on a Ractive instance that was already torn down');\n    return Promise.resolve();\n  }\n\n  this.shouldDestroy = true;\n  return teardown(this, () => (this.fragment.rendered ? this.unrender() : Promise.resolve()));\n}\n\nexport function teardown(instance, getPromise) {\n  instance.torndown = true;\n  instance.fragment.unbind();\n  instance._observers.slice().forEach(cancel);\n\n  if (instance.el && instance.el.__ractive_instances__) {\n    removeFromArray(instance.el.__ractive_instances__, instance);\n  }\n\n  const promise = getPromise();\n\n  hooks.teardown.fire(instance);\n\n  promise.then(() => {\n    hooks.destruct.fire(instance);\n    instance.viewmodel.teardown();\n  });\n\n  return promise;\n}\n","import { SharedModel } from './SharedModel';\nimport { Missing } from '../LinkModel';\nimport { create } from 'utils/object';\n\nexport default class RactiveModel extends SharedModel {\n  constructor(ractive) {\n    super(ractive, '@this');\n    this.ractive = ractive;\n  }\n\n  joinKey(key) {\n    const model = super.joinKey(key);\n\n    if ((key === 'root' || key === 'parent') && !model.isLink) return initLink(model, key);\n    else if (key === 'data') return this.ractive.viewmodel;\n    else if (key === 'cssData') return this.ractive.constructor._cssModel;\n\n    return model;\n  }\n}\n\nfunction initLink(model, key) {\n  model.applyValue = function(value) {\n    this.parent.value[key] = value;\n    if (value && value.viewmodel) {\n      this.link(value.viewmodel.getRactiveModel(), key);\n      this._link.markedAll();\n    } else {\n      this.link(create(Missing), key);\n      this._link.markedAll();\n    }\n  };\n\n  if (key === 'root') {\n    const mark = model.mark;\n    model.mark = function(force) {\n      if (this._marking) return;\n      this._marking = true;\n      mark.apply(this, force);\n      this._marking = false;\n    };\n  }\n\n  model.applyValue(model.parent.ractive[key], key);\n  model._link.set = v => model.applyValue(v);\n  model._link.applyValue = v => model.applyValue(v);\n\n  return model._link;\n}\n","import { capture } from 'src/global/capture';\nimport Model from './Model';\nimport { handleChange, mark } from 'shared/methodCallers';\nimport RactiveModel from './specials/RactiveModel';\nimport SharedModel, { GlobalModel, SharedModel as SharedBase } from './specials/SharedModel';\nimport { splitKeypath, unescapeKey } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport noop from 'utils/noop';\n\nconst specialModels = {\n  '@this'(root) {\n    return root.getRactiveModel();\n  },\n  '@global'() {\n    return GlobalModel;\n  },\n  '@shared'() {\n    return SharedModel;\n  },\n  '@style'(root) {\n    return root.getRactiveModel().joinKey('cssData');\n  },\n  '@helpers'(root) {\n    return root.getHelpers();\n  }\n};\nspecialModels['@'] = specialModels['@this'];\n\nexport default class RootModel extends Model {\n  constructor(options) {\n    super(null, null);\n\n    this.isRoot = true;\n    this.root = this;\n    this.ractive = options.ractive; // TODO sever this link\n\n    this.value = options.data;\n    this.adaptors = options.adapt;\n    this.adapt();\n  }\n\n  attached(fragment) {\n    attachImplicits(this, fragment);\n  }\n\n  createLink(keypath, target, targetPath, options) {\n    const keys = splitKeypath(keypath);\n\n    let model = this;\n    while (keys.length) {\n      const key = keys.shift();\n      model = model.childByKey[key] || model.joinKey(key);\n    }\n\n    return model.link(target, targetPath, options);\n  }\n\n  detached() {\n    detachImplicits(this);\n  }\n\n  get(shouldCapture, options) {\n    if (shouldCapture) capture(this);\n\n    if (!options || options.virtual !== false) {\n      return this.getVirtual();\n    } else {\n      return this.value;\n    }\n  }\n\n  getHelpers() {\n    if (!this.helpers) this.helpers = new SharedBase(this.ractive.helpers, 'helpers', this.ractive);\n    return this.helpers;\n  }\n\n  getKeypath() {\n    return '';\n  }\n\n  getRactiveModel() {\n    return this.ractiveModel || (this.ractiveModel = new RactiveModel(this.ractive));\n  }\n\n  getValueChildren() {\n    const children = super.getValueChildren(this.value);\n\n    this.children.forEach(child => {\n      if (child._link) {\n        const idx = children.indexOf(child);\n        if (~idx) children.splice(idx, 1, child._link);\n        else children.push(child._link);\n      }\n    });\n\n    return children;\n  }\n\n  has(key) {\n    if (key[0] === '~' && key[1] === '/') key = key.slice(2);\n    if (specialModels[key] || key === '') return true;\n\n    if (super.has(key)) {\n      return true;\n    } else {\n      const unescapedKey = unescapeKey(key);\n\n      // mappings/links and computations\n      if (this.childByKey[unescapedKey] && this.childByKey[unescapedKey]._link) return true;\n    }\n  }\n\n  joinKey(key, opts) {\n    if (key[0] === '~' && key[1] === '/') key = key.slice(2);\n\n    if (key[0] === '@') {\n      const fn = specialModels[key];\n      if (fn) return fn(this);\n    } else {\n      return super.joinKey(key, opts);\n    }\n  }\n\n  set(value) {\n    // TODO wrapping root node is a baaaad idea. We should prevent this\n    const wrapper = this.wrapper;\n    if (wrapper) {\n      const shouldTeardown = !wrapper.reset || wrapper.reset(value) === false;\n\n      if (shouldTeardown) {\n        wrapper.teardown();\n        this.wrapper = null;\n        this.value = value;\n        this.adapt();\n      }\n    } else {\n      this.value = value;\n      this.adapt();\n    }\n\n    this.deps.forEach(handleChange);\n    this.children.forEach(mark);\n  }\n\n  retrieve() {\n    return this.wrapper ? this.wrapper.get() : this.value;\n  }\n\n  teardown() {\n    super.teardown();\n    this.ractiveModel && this.ractiveModel.teardown();\n  }\n}\nRootModel.prototype.update = noop;\n\nfunction attachImplicits(model, fragment) {\n  if (model._link && model._link.implicit && model._link.isDetached()) {\n    model.attach(fragment);\n  }\n\n  // look for virtual children to relink and cascade\n  for (const k in model.childByKey) {\n    if (k in model.value) {\n      attachImplicits(model.childByKey[k], fragment);\n    } else if (!model.childByKey[k]._link || model.childByKey[k]._link.isDetached()) {\n      const mdl = resolveReference(fragment, k);\n      if (mdl) {\n        model.childByKey[k].link(mdl, k, { implicit: true });\n      }\n    }\n  }\n}\n\nfunction detachImplicits(model) {\n  if (model._link && model._link.implicit) {\n    model.unlink();\n  }\n\n  for (const k in model.childByKey) {\n    detachImplicits(model.childByKey[k]);\n  }\n}\n","import { create, toPairs } from 'utils/object';\nimport { isFunction, isObjectType } from 'utils/is';\n\nexport default function subscribe(instance, options, type) {\n  const subs = (instance.constructor[`_${type}`] || []).concat(toPairs(options[type] || []));\n  const single = type === 'on' ? 'once' : `${type}Once`;\n\n  subs.forEach(([target, config]) => {\n    if (isFunction(config)) {\n      instance[type](target, config);\n    } else if (isObjectType(config) && isFunction(config.handler)) {\n      instance[config.once ? single : type](target, config.handler, create(config));\n    }\n  });\n}\n","import { fatal, warnIfDebug, welcome } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport { ensureArray, combine } from 'utils/array';\nimport { findInViewHierarchy } from 'shared/registry';\nimport dataConfigurator from './config/custom/data';\nimport RootModel from 'src/model/RootModel';\nimport hooks from 'src/events/Hook';\nimport subscribe from './helpers/subscribe';\nimport Ractive from '../Ractive';\nimport { ATTRIBUTE, BINDING_FLAG, DECORATOR, INTERPOLATOR, TRANSITION } from 'config/types';\nimport { assign, create, hasOwn } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\nimport { compute } from 'src/Ractive/prototype/compute';\nimport getRactiveContext from '../shared/getRactiveContext';\n\nconst registryNames = [\n  'adaptors',\n  'components',\n  'decorators',\n  'easing',\n  'events',\n  'interpolators',\n  'partials',\n  'transitions'\n];\n\nconst protoRegistries = ['computed', 'helpers'];\n\nlet uid = 0;\n\nexport default function construct(ractive, options) {\n  if (Ractive.DEBUG) welcome();\n\n  initialiseProperties(ractive);\n  handleAttributes(ractive);\n\n  // set up event subscribers\n  subscribe(ractive, options, 'on');\n\n  // if there's not a delegation setting, inherit from parent if it's not default\n  if (\n    !hasOwn(options, 'delegate') &&\n    ractive.parent &&\n    ractive.parent.delegate !== ractive.delegate\n  ) {\n    ractive.delegate = false;\n  }\n\n  // plugins that need to run at construct\n  if (isArray(options.use)) {\n    ractive.use.apply(ractive, options.use.filter(p => p.construct));\n  }\n\n  hooks.construct.fire(ractive, options);\n  if (options.onconstruct) options.onconstruct.call(ractive, getRactiveContext(ractive), options);\n\n  // Add registries\n  let i = registryNames.length;\n  while (i--) {\n    const name = registryNames[i];\n    ractive[name] = assign(create(ractive.constructor[name] || null), options[name]);\n  }\n\n  i = protoRegistries.length;\n  while (i--) {\n    const name = protoRegistries[i];\n    ractive[name] = assign(create(ractive.constructor.prototype[name]), options[name]);\n  }\n\n  if (ractive._attributePartial) {\n    ractive.partials['extra-attributes'] = ractive._attributePartial;\n    delete ractive._attributePartial;\n  }\n\n  // Create a viewmodel\n  const viewmodel = new RootModel({\n    adapt: getAdaptors(ractive, ractive.adapt, options),\n    data: dataConfigurator.init(ractive.constructor, ractive, options),\n    ractive\n  });\n\n  // once resolved, share the adaptors array between the root model and instance\n  ractive.adapt = viewmodel.adaptors;\n\n  ractive.viewmodel = viewmodel;\n\n  for (const k in ractive.computed) {\n    compute.call(ractive, k, ractive.computed[k]);\n  }\n}\n\nfunction getAdaptors(ractive, protoAdapt, options) {\n  protoAdapt = protoAdapt.map(lookup);\n  const adapt = ensureArray(options.adapt).map(lookup);\n\n  const srcs = [protoAdapt, adapt];\n  if (ractive.parent && !ractive.isolated) {\n    srcs.push(ractive.parent.viewmodel.adaptors);\n  }\n\n  return combine.apply(null, srcs);\n\n  function lookup(adaptor) {\n    if (isString(adaptor)) {\n      adaptor = findInViewHierarchy('adaptors', ractive, adaptor);\n\n      if (!adaptor) {\n        fatal(missingPlugin(adaptor, 'adaptor'));\n      }\n    }\n\n    return adaptor;\n  }\n}\n\nfunction initialiseProperties(ractive) {\n  // Generate a unique identifier, for places where you'd use a weak map if it\n  // existed\n  ractive._guid = 'r-' + uid++;\n\n  // events\n  ractive._subs = create(null);\n  ractive._nsSubs = 0;\n\n  // storage for item configuration from instantiation to reset,\n  // like dynamic functions or original values\n  ractive._config = {};\n\n  // events\n  ractive.event = null;\n  ractive._eventQueue = [];\n\n  // observers\n  ractive._observers = [];\n\n  // external children\n  ractive._children = [];\n  ractive._children.byName = {};\n  ractive.children = ractive._children;\n\n  if (!ractive.component) {\n    ractive.root = ractive;\n    ractive.parent = ractive.container = null; // TODO container still applicable?\n  }\n}\n\nfunction handleAttributes(ractive) {\n  const component = ractive.component;\n  const attributes = ractive.constructor.attributes;\n\n  if (attributes && component) {\n    const tpl = component.template;\n    const attrs = tpl.m ? tpl.m.slice() : [];\n\n    // grab all of the passed attribute names\n    const props = attrs.filter(a => a.t === ATTRIBUTE).map(a => a.n);\n\n    // warn about missing requireds\n    attributes.required.forEach(p => {\n      if (!~props.indexOf(p)) {\n        warnIfDebug(`Component '${component.name}' requires attribute '${p}' to be provided`);\n      }\n    });\n\n    // set up a partial containing non-property attributes\n    const all = attributes.optional.concat(attributes.required);\n    const partial = [];\n    let i = attrs.length;\n    while (i--) {\n      const a = attrs[i];\n      if (a.t === ATTRIBUTE && !~all.indexOf(a.n)) {\n        if (attributes.mapAll) {\n          // map the attribute if requested and make the extra attribute in the partial refer to the mapping\n          partial.unshift({\n            t: ATTRIBUTE,\n            n: a.n,\n            f: [{ t: INTERPOLATOR, r: `~/${a.n}` }]\n          });\n        } else {\n          // transfer the attribute to the extra attributes partal\n          partial.unshift(attrs.splice(i, 1)[0]);\n        }\n      } else if (\n        !attributes.mapAll &&\n        (a.t === DECORATOR || a.t === TRANSITION || a.t === BINDING_FLAG)\n      ) {\n        partial.unshift(attrs.splice(i, 1)[0]);\n      }\n    }\n\n    if (partial.length) component.template = { t: tpl.t, e: tpl.e, f: tpl.f, m: attrs, p: tpl.p };\n    ractive._attributePartial = partial;\n  }\n}\n","import runloop from 'src/global/runloop';\nimport { updateAnchors } from 'shared/anchors';\nimport { bind, render as callRender, unbind, unrender, update } from 'shared/methodCallers';\nimport { teardown } from 'src/Ractive/prototype/teardown';\nimport getRactiveContext from 'shared/getRactiveContext';\nimport { warnIfDebug } from 'utils/log';\nimport { createDocumentFragment } from 'utils/dom';\nimport {\n  ANCHOR,\n  ATTRIBUTE,\n  BINDING_FLAG,\n  COMPONENT,\n  DECORATOR,\n  EVENT,\n  TRANSITION,\n  YIELDER\n} from 'config/types';\nimport construct from 'src/Ractive/construct';\nimport initialise from 'src/Ractive/initialise';\nimport render from 'src/Ractive/render';\nimport Item from './shared/Item';\nimport ConditionalAttribute from './element/ConditionalAttribute';\nimport createItem from './createItem';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport { assign, create } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\n\nexport default class Component extends Item {\n  constructor(options, ComponentConstructor) {\n    super(options);\n    let template = options.template;\n    this.isAnchor = template.t === ANCHOR;\n    this.type = this.isAnchor ? ANCHOR : COMPONENT; // override ELEMENT from super\n    let attrs = template.m;\n\n    const partials = template.p || {};\n    if (!('content' in partials)) partials.content = template.f || [];\n    this._partials = partials; // TEMP\n\n    if (this.isAnchor) {\n      this.name = template.n;\n\n      this.addChild = addChild;\n      this.removeChild = removeChild;\n    } else {\n      const instance = create(ComponentConstructor.prototype);\n\n      this.instance = instance;\n      this.name = template.e;\n\n      if (instance.el || instance.target) {\n        warnIfDebug(\n          `The <${this.name}> component has a default '${\n            instance.el ? 'el' : 'target'\n          }' property; it has been disregarded`\n        );\n        instance.el = instance.target = null;\n      }\n\n      // find container\n      let fragment = options.up;\n      let container;\n      while (fragment) {\n        if (fragment.owner.type === YIELDER) {\n          container = fragment.owner.container;\n          break;\n        }\n\n        fragment = fragment.parent;\n      }\n\n      // add component-instance-specific properties\n      instance.parent = this.up.ractive;\n      instance.container = container || null;\n      instance.root = instance.parent.root;\n      instance.component = this;\n\n      construct(this.instance, { partials });\n\n      // these can be modified during construction\n      template = this.template;\n      attrs = template.m;\n\n      // allow components that are so inclined to add programmatic mappings\n      if (isArray(this.mappings)) {\n        attrs = (attrs || []).concat(this.mappings);\n      } else if (isString(this.mappings)) {\n        attrs = (attrs || []).concat(parser.parse(this.mappings, { attributes: true }).t);\n      }\n\n      // for hackability, this could be an open option\n      // for any ractive instance, but for now, just\n      // for components and just for ractive...\n      instance._inlinePartials = partials;\n    }\n\n    this.attributeByName = {};\n    this.attributes = [];\n\n    if (attrs) {\n      const leftovers = [];\n      attrs.forEach(template => {\n        switch (template.t) {\n          case ATTRIBUTE:\n          case EVENT:\n            this.attributes.push(\n              createItem({\n                owner: this,\n                up: this.up,\n                template\n              })\n            );\n            break;\n\n          case TRANSITION:\n          case BINDING_FLAG:\n          case DECORATOR:\n            break;\n\n          default:\n            leftovers.push(template);\n            break;\n        }\n      });\n\n      if (leftovers.length) {\n        this.attributes.push(\n          new ConditionalAttribute({\n            owner: this,\n            up: this.up,\n            template: leftovers\n          })\n        );\n      }\n    }\n\n    this.eventHandlers = [];\n  }\n\n  bind() {\n    if (!this.isAnchor) {\n      this.attributes.forEach(bind);\n      this.eventHandlers.forEach(bind);\n\n      initialise(\n        this.instance,\n        {\n          partials: this._partials\n        },\n        {\n          cssIds: this.up.cssIds\n        }\n      );\n\n      if (this.instance.target || this.instance.el) this.extern = true;\n\n      this.bound = true;\n    }\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n      this.up.bubble();\n    }\n  }\n\n  destroyed() {\n    if (!this.isAnchor && this.instance.fragment) this.instance.fragment.destroyed();\n  }\n\n  detach() {\n    if (this.isAnchor) {\n      if (this.instance) return this.instance.fragment.detach();\n      return createDocumentFragment();\n    }\n\n    return this.instance.fragment.detach();\n  }\n\n  find(selector, options) {\n    if (this.instance) return this.instance.fragment.find(selector, options);\n  }\n\n  findAll(selector, options) {\n    if (this.instance) this.instance.fragment.findAll(selector, options);\n  }\n\n  findComponent(name, options) {\n    if (!name || this.name === name) return this.instance;\n\n    if (this.instance.fragment) {\n      return this.instance.fragment.findComponent(name, options);\n    }\n  }\n\n  findAllComponents(name, options) {\n    const { result } = options;\n\n    if (this.instance && (!name || this.name === name)) {\n      result.push(this.instance);\n    }\n\n    if (this.instance) this.instance.findAllComponents(name, options);\n  }\n\n  firstNode(skipParent) {\n    if (this.instance) return this.instance.fragment.firstNode(skipParent);\n  }\n\n  getContext(...assigns) {\n    assigns.unshift(this.instance);\n    return getRactiveContext.apply(null, assigns);\n  }\n\n  rebound(update) {\n    this.attributes.forEach(x => x.rebound(update));\n  }\n\n  render(target, occupants) {\n    if (this.isAnchor) {\n      this.rendered = true;\n      this.target = target;\n\n      if (!checking.length) {\n        checking.push(this.ractive);\n        if (occupants) {\n          this.occupants = occupants;\n          checkAnchors();\n          this.occupants = null;\n        } else {\n          runloop.scheduleTask(checkAnchors, true);\n        }\n      }\n    } else {\n      this.attributes.forEach(callRender);\n      this.eventHandlers.forEach(callRender);\n\n      if (this.extern) {\n        this.instance.delegate = false;\n        this.instance.render();\n      } else {\n        render(this.instance, target, null, occupants);\n      }\n\n      this.rendered = true;\n    }\n  }\n\n  shuffled() {\n    super.shuffled();\n    this.instance &&\n      !this.instance.isolated &&\n      this.instance.fragment &&\n      this.instance.fragment.shuffled();\n  }\n\n  toString() {\n    if (this.instance) return this.instance.toHTML();\n  }\n\n  unbind() {\n    if (!this.isAnchor) {\n      this.bound = false;\n\n      this.attributes.forEach(unbind);\n\n      teardown(this.instance, () => runloop.promise());\n    }\n  }\n\n  unrender(shouldDestroy) {\n    this.shouldDestroy = shouldDestroy;\n\n    if (this.isAnchor) {\n      if (this.item) unrenderItem(this, this.item);\n      this.target = null;\n      if (!checking.length) {\n        checking.push(this.ractive);\n        runloop.scheduleTask(checkAnchors, true);\n      }\n    } else {\n      this.instance.unrender();\n      this.instance.el = this.instance.target = null;\n      this.attributes.forEach(unrender);\n      this.eventHandlers.forEach(unrender);\n    }\n\n    this.rendered = false;\n  }\n\n  update() {\n    this.dirty = false;\n    if (this.instance) {\n      this.instance.fragment.update();\n      this.attributes.forEach(update);\n      this.eventHandlers.forEach(update);\n    }\n  }\n}\n\nfunction addChild(meta) {\n  if (this.item) this.removeChild(this.item);\n\n  const child = meta.instance;\n  meta.anchor = this;\n\n  meta.up = this.up;\n  meta.name = meta.nameOption || this.name;\n  this.name = meta.name;\n\n  if (!child.isolated) child.viewmodel.attached(this.up);\n\n  // render as necessary\n  if (this.rendered) {\n    renderItem(this, meta);\n  }\n}\n\nfunction removeChild(meta) {\n  // unrender as necessary\n  if (this.item === meta) {\n    unrenderItem(this, meta);\n    this.name = this.template.n;\n  }\n}\n\nfunction renderItem(anchor, meta) {\n  if (!anchor.rendered) return;\n\n  meta.shouldDestroy = false;\n  meta.up = anchor.up;\n\n  anchor.item = meta;\n  anchor.instance = meta.instance;\n  const nextNode = anchor.up.findNextNode(anchor);\n\n  if (meta.instance.fragment.rendered) {\n    meta.instance.unrender();\n  }\n\n  meta.partials = meta.instance.partials;\n  meta.instance.partials = assign(create(meta.partials), meta.partials, anchor._partials);\n\n  meta.instance.fragment.unbind();\n  meta.instance.fragment.componentParent = anchor.up;\n  meta.instance.fragment.bind(meta.instance.viewmodel);\n\n  anchor.attributes.forEach(bind);\n  anchor.eventHandlers.forEach(bind);\n  anchor.attributes.forEach(callRender);\n  anchor.eventHandlers.forEach(callRender);\n\n  const target = anchor.up.findParentNode();\n  render(meta.instance, target, target.contains(nextNode) ? nextNode : null, anchor.occupants);\n\n  if (meta.lastBound !== anchor) {\n    meta.lastBound = anchor;\n  }\n}\n\nfunction unrenderItem(anchor, meta) {\n  if (!anchor.rendered) return;\n\n  meta.shouldDestroy = true;\n  meta.instance.unrender();\n\n  anchor.eventHandlers.forEach(unrender);\n  anchor.attributes.forEach(unrender);\n  anchor.eventHandlers.forEach(unbind);\n  anchor.attributes.forEach(unbind);\n\n  meta.instance.el = meta.instance.anchor = null;\n  meta.instance.fragment.componentParent = null;\n  meta.up = null;\n  meta.anchor = null;\n  anchor.item = null;\n  anchor.instance = null;\n}\n\nlet checking = [];\nexport function checkAnchors() {\n  const list = checking;\n  checking = [];\n\n  list.forEach(updateAnchors);\n}\n","import getFunction from 'shared/getFunction';\nimport resolveReference from '../../resolvers/resolveReference';\n\nexport function setupArgsFn(item, template, fragment, opts = {}) {\n  if (template && template.f && template.f.s) {\n    item.fn = getFunction(template.f.s, template.f.r.length);\n    if (opts.register === true) {\n      item.models = resolveArgs(item, template, fragment, opts);\n    }\n  }\n}\n\nexport function resolveArgs(item, template, fragment, opts = {}) {\n  return template.f.r.map((ref, i) => {\n    let model;\n\n    if (opts.specialRef && (model = opts.specialRef(ref, i))) return model;\n\n    model = resolveReference(fragment, ref);\n    if (opts.register === true) {\n      model.register(item);\n    }\n\n    return model;\n  });\n}\n\nexport function teardownArgsFn(item, template) {\n  if (template && template.f && template.f.s) {\n    if (item.models)\n      item.models.forEach(m => {\n        if (m && m.unregister) m.unregister(item);\n      });\n    item.models = null;\n  }\n}\n","import { findInViewHierarchy } from 'shared/registry';\nimport { warnOnce } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport noop from 'utils/noop';\nimport runloop from 'src/global/runloop';\nimport { rebindMatch } from 'src/shared/rebind';\nimport findElement from '../shared/findElement';\nimport { setupArgsFn, teardownArgsFn } from '../shared/directiveArgs';\n\nconst missingDecorator = {\n  update: noop,\n  teardown: noop\n};\n\nexport default class Decorator {\n  constructor(options) {\n    this.owner = options.owner || options.up.owner || findElement(options.up);\n    this.element = this.owner.attributeByName ? this.owner : findElement(options.up);\n    this.up = options.up || this.owner.up;\n    this.ractive = this.owner.ractive;\n    const template = (this.template = options.template);\n\n    this.name = template.n;\n\n    this.node = null;\n    this.handle = null;\n\n    this.element.decorators.push(this);\n  }\n\n  bind() {\n    setupArgsFn(this, this.template, this.up, { register: true });\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n      // decorators may be owned directly by an element or by a fragment if conditional\n      this.owner.bubble();\n      this.up.bubble();\n    }\n  }\n\n  destroyed() {\n    if (this.handle) {\n      this.handle.teardown();\n      this.handle = null;\n    }\n    this.shouldDestroy = true;\n  }\n\n  handleChange() {\n    this.bubble();\n  }\n\n  rebind(next, previous, safe) {\n    const idx = this.models.indexOf(previous);\n    if (!~idx) return;\n\n    next = rebindMatch(this.template.f.r[idx], next, previous);\n    if (next === previous) return;\n\n    previous.unregister(this);\n    this.models.splice(idx, 1, next);\n    if (next) next.addShuffleRegister(this, 'mark');\n\n    if (!safe) this.bubble();\n  }\n\n  rebound(update) {\n    teardownArgsFn(this, this.template);\n    setupArgsFn(this, this.template, this.up, { register: true });\n    if (update) this.bubble();\n  }\n\n  render() {\n    this.shouldDestroy = false;\n    if (this.handle) this.unrender();\n    runloop.scheduleTask(() => {\n      // bail if the host element has managed to become unrendered\n      if (!this.element.rendered) return;\n\n      const fn = findInViewHierarchy('decorators', this.ractive, this.name);\n\n      if (!fn) {\n        warnOnce(missingPlugin(this.name, 'decorator'));\n        this.handle = missingDecorator;\n        return;\n      }\n\n      this.node = this.element.node;\n\n      let args;\n      if (this.fn) {\n        args = this.models.map(model => {\n          if (!model) return undefined;\n\n          return model.get();\n        });\n        args = this.fn.apply(this.ractive, args);\n      }\n\n      this.handle = fn.apply(this.ractive, [this.node].concat(args));\n\n      if (!this.handle || !this.handle.teardown) {\n        throw new Error(\n          `The '${this.name}' decorator must return an object with a teardown method`\n        );\n      }\n\n      // watch out for decorators that cause their host element to be unrendered\n      if (this.shouldDestroy) this.destroyed();\n    }, true);\n  }\n\n  toString() {\n    return '';\n  }\n\n  unbind() {\n    teardownArgsFn(this, this.template);\n  }\n\n  unrender(shouldDestroy) {\n    if ((!shouldDestroy || this.element.rendered) && this.handle) {\n      this.handle.teardown();\n      this.handle = null;\n    }\n  }\n\n  update() {\n    const instance = this.handle;\n\n    if (!this.dirty) {\n      if (instance && instance.invalidate) {\n        runloop.scheduleTask(() => instance.invalidate(), true);\n      }\n      return;\n    }\n\n    this.dirty = false;\n\n    if (instance) {\n      if (!instance.update) {\n        this.unrender();\n        this.render();\n      } else {\n        const args = this.models.map(model => model && model.get());\n        instance.update.apply(this.ractive, this.fn.apply(this.ractive, args));\n      }\n    }\n  }\n}\n\nDecorator.prototype.firstNode = noop;\n","import noop from 'utils/noop';\nimport Item from './shared/Item';\n\nexport default class Doctype extends Item {\n  toString() {\n    return '<!DOCTYPE' + this.template.a + '>';\n  }\n}\n\nconst proto = Doctype.prototype;\nproto.bind = proto.render = proto.teardown = proto.unbind = proto.unrender = proto.update = noop;\n","import runloop from 'src/global/runloop';\nimport { warnOnceIfDebug } from 'utils/log';\nimport noop from 'utils/noop';\nimport findElement from '../../shared/findElement';\n\nexport default class Binding {\n  constructor(element, name = 'value') {\n    this.element = element;\n    this.ractive = element.ractive;\n    this.attribute = element.attributeByName[name];\n\n    const interpolator = this.attribute.interpolator;\n    interpolator.twowayBinding = this;\n\n    const model = interpolator.model;\n\n    if (model.isReadonly && !model.setRoot) {\n      const keypath = model.getKeypath().replace(/^@/, '');\n      warnOnceIfDebug(\n        `Cannot use two-way binding on <${\n          element.name\n        }> element: ${keypath} is read-only. To suppress this warning use <${\n          element.name\n        } twoway='false'...>`,\n        { ractive: this.ractive }\n      );\n      return false;\n    }\n\n    this.attribute.isTwoway = true;\n    this.model = model;\n\n    // initialise value, if it's undefined\n    let value = model.get();\n    this.wasUndefined = value === undefined;\n\n    if (value === undefined && this.getInitialValue) {\n      value = this.getInitialValue();\n      model.set(value);\n    }\n    this.lastVal(true, value);\n\n    const parentForm = findElement(this.element, false, 'form');\n    if (parentForm) {\n      this.resetValue = value;\n      parentForm.formBindings.push(this);\n    }\n  }\n\n  bind() {\n    this.model.registerTwowayBinding(this);\n  }\n\n  handleChange() {\n    const value = this.getValue();\n    if (this.lastVal() === value) return;\n\n    runloop.start();\n    this.attribute.locked = true;\n    this.model.set(value);\n    this.lastVal(true, value);\n\n    // if the value changes before observers fire, unlock to be updatable cause something weird and potentially freezy is up\n    if (this.model.get() !== value) this.attribute.locked = false;\n    else runloop.scheduleTask(() => (this.attribute.locked = false));\n\n    runloop.end();\n  }\n\n  lastVal(setting, value) {\n    if (setting) this.lastValue = value;\n    else return this.lastValue;\n  }\n\n  rebind(next, previous) {\n    if (this.model && this.model === previous) previous.unregisterTwowayBinding(this);\n    if (next) {\n      this.model = next;\n      runloop.scheduleTask(() => next.registerTwowayBinding(this));\n    }\n  }\n\n  rebound() {\n    if (this.model) this.model.unregisterTwowayBinding(this);\n    this.model = this.attribute.interpolator.model;\n    this.model.registerTwowayBinding(this);\n  }\n\n  render() {\n    this.node = this.element.node;\n    this.node._ractive.binding = this;\n    this.rendered = true; // TODO is this used anywhere?\n  }\n\n  setFromNode(node) {\n    this.model.set(node.value);\n  }\n\n  unbind() {\n    this.model.unregisterTwowayBinding(this);\n  }\n}\n\nBinding.prototype.unrender = noop;\n","// This is the handler for DOM events that would lead to a change in the model\n// (i.e. change, sometimes, input, and occasionally click and keyup)\nexport default function handleDomEvent() {\n  this._ractive.binding.handleChange();\n}\n","import Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class CheckboxBinding extends Binding {\n  constructor(element) {\n    super(element, 'checked');\n  }\n\n  render() {\n    super.render();\n\n    this.element.on('change', handleDomEvent);\n\n    if (this.node.attachEvent) {\n      this.element.on('click', handleDomEvent);\n    }\n  }\n\n  unrender() {\n    this.element.off('change', handleDomEvent);\n    this.element.off('click', handleDomEvent);\n  }\n\n  getInitialValue() {\n    return !!this.element.getAttribute('checked');\n  }\n\n  getValue() {\n    return this.node.checked;\n  }\n\n  setFromNode(node) {\n    this.model.set(node.checked);\n  }\n}\n","import { removeFromArray } from 'utils/array';\nimport Binding from './Binding';\n\nexport default function getBindingGroup(group, model, getValue) {\n  const hash = `${group}-bindingGroup`;\n  return model[hash] || (model[hash] = new BindingGroup(hash, model, getValue));\n}\n\nclass BindingGroup {\n  constructor(hash, model, getValue) {\n    this.model = model;\n    this.hash = hash;\n    this.getValue = () => {\n      this.value = getValue.call(this);\n      return this.value;\n    };\n\n    this.bindings = [];\n  }\n\n  add(binding) {\n    this.bindings.push(binding);\n  }\n\n  bind() {\n    this.value = this.model.get();\n    this.model.registerTwowayBinding(this);\n    this.bound = true;\n  }\n\n  remove(binding) {\n    removeFromArray(this.bindings, binding);\n    if (!this.bindings.length) {\n      this.unbind();\n    }\n  }\n\n  unbind() {\n    this.model.unregisterTwowayBinding(this);\n    this.bound = false;\n    delete this.model[this.hash];\n  }\n}\n\nBindingGroup.prototype.rebind = Binding.prototype.rebind;\n","import Binding from './Binding';\nimport getBindingGroup from './getBindingGroup';\nimport handleDomEvent from './handleDomEvent';\nimport { isArray } from 'utils/is';\n\nconst push = [].push;\n\nfunction getValue() {\n  const all = this.bindings\n    .filter(b => b.node && b.node.checked)\n    .map(b => b.element.getAttribute('value'));\n  const res = [];\n  all.forEach(v => {\n    if (!this.bindings[0].arrayContains(res, v)) res.push(v);\n  });\n  return res;\n}\n\nexport default class CheckboxNameBinding extends Binding {\n  constructor(element) {\n    super(element, 'name');\n\n    this.checkboxName = true; // so that ractive.updateModel() knows what to do with this\n\n    // Each input has a reference to an array containing it and its\n    // group, as two-way binding depends on being able to ascertain\n    // the status of all inputs within the group\n    this.group = getBindingGroup('checkboxes', this.model, getValue);\n    this.group.add(this);\n\n    if (this.noInitialValue) {\n      this.group.noInitialValue = true;\n    }\n\n    // If no initial value was set, and this input is checked, we\n    // update the model\n    if (this.group.noInitialValue && this.element.getAttribute('checked')) {\n      const existingValue = this.model.get();\n      const bindingValue = this.element.getAttribute('value');\n\n      if (!this.arrayContains(existingValue, bindingValue)) {\n        push.call(existingValue, bindingValue); // to avoid triggering runloop with array adaptor\n      }\n    }\n  }\n\n  bind() {\n    if (!this.group.bound) {\n      this.group.bind();\n    }\n  }\n\n  getInitialValue() {\n    // This only gets called once per group (of inputs that\n    // share a name), because it only gets called if there\n    // isn't an initial value. By the same token, we can make\n    // a note of that fact that there was no initial value,\n    // and populate it using any `checked` attributes that\n    // exist (which users should avoid, but which we should\n    // support anyway to avoid breaking expectations)\n    this.noInitialValue = true; // TODO are noInitialValue and wasUndefined the same thing?\n    return [];\n  }\n\n  getValue() {\n    return this.group.value;\n  }\n\n  handleChange() {\n    this.isChecked = this.element.node.checked;\n    this.group.value = this.model.get();\n    const value = this.element.getAttribute('value');\n    if (this.isChecked && !this.arrayContains(this.group.value, value)) {\n      this.group.value.push(value);\n    } else if (!this.isChecked && this.arrayContains(this.group.value, value)) {\n      this.removeFromArray(this.group.value, value);\n    }\n    // make sure super knows there's a change\n    this.lastValue = null;\n    super.handleChange();\n  }\n\n  render() {\n    super.render();\n\n    const node = this.node;\n\n    const existingValue = this.model.get();\n    const bindingValue = this.element.getAttribute('value');\n\n    if (isArray(existingValue)) {\n      this.isChecked = this.arrayContains(existingValue, bindingValue);\n    } else {\n      this.isChecked = this.element.compare(existingValue, bindingValue);\n    }\n    node.name = '{{' + this.model.getKeypath() + '}}';\n    node.checked = this.isChecked;\n\n    this.element.on('change', handleDomEvent);\n\n    // in case of IE emergency, bind to click event as well\n    if (this.node.attachEvent) {\n      this.element.on('click', handleDomEvent);\n    }\n  }\n\n  setFromNode(node) {\n    this.group.bindings.forEach(binding => (binding.wasUndefined = true));\n\n    if (node.checked) {\n      const valueSoFar = this.group.getValue();\n      valueSoFar.push(this.element.getAttribute('value'));\n\n      this.group.model.set(valueSoFar);\n    }\n  }\n\n  unbind() {\n    this.group.remove(this);\n  }\n\n  unrender() {\n    const el = this.element;\n\n    el.off('change', handleDomEvent);\n    el.off('click', handleDomEvent);\n  }\n\n  arrayContains(selectValue, optionValue) {\n    let i = selectValue.length;\n    while (i--) {\n      if (this.element.compare(optionValue, selectValue[i])) return true;\n    }\n    return false;\n  }\n\n  removeFromArray(array, item) {\n    if (!array) return;\n    let i = array.length;\n    while (i--) {\n      if (this.element.compare(item, array[i])) {\n        array.splice(i, 1);\n      }\n    }\n  }\n}\n","import Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class ContentEditableBinding extends Binding {\n  getInitialValue() {\n    return this.element.fragment ? this.element.fragment.toString() : '';\n  }\n\n  getValue() {\n    return this.element.node.innerHTML;\n  }\n\n  render() {\n    super.render();\n\n    const el = this.element;\n\n    el.on('change', handleDomEvent);\n    el.on('blur', handleDomEvent);\n\n    if (!this.ractive.lazy) {\n      el.on('input', handleDomEvent);\n\n      if (this.node.attachEvent) {\n        el.on('keyup', handleDomEvent);\n      }\n    }\n  }\n\n  setFromNode(node) {\n    this.model.set(node.innerHTML);\n  }\n\n  unrender() {\n    const el = this.element;\n\n    el.off('blur', handleDomEvent);\n    el.off('change', handleDomEvent);\n    el.off('input', handleDomEvent);\n    el.off('keyup', handleDomEvent);\n  }\n}\n","import { isNumeric } from 'utils/is';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nfunction handleBlur() {\n  handleDomEvent.call(this);\n\n  const value = this._ractive.binding.model.get();\n  this.value = value == undefined ? '' : value;\n}\n\nfunction handleDelay(delay) {\n  let timeout;\n\n  return function() {\n    if (timeout) clearTimeout(timeout);\n\n    timeout = setTimeout(() => {\n      const binding = this._ractive.binding;\n      if (binding.rendered) handleDomEvent.call(this);\n      timeout = null;\n    }, delay);\n  };\n}\n\nexport default class GenericBinding extends Binding {\n  getInitialValue() {\n    return '';\n  }\n\n  getValue() {\n    return this.node.value;\n  }\n\n  render() {\n    super.render();\n\n    // any lazy setting for this element overrides the root\n    // if the value is a number, it's a timeout\n    let lazy = this.ractive.lazy;\n    let timeout = false;\n    const el = this.element;\n\n    if ('lazy' in this.element) {\n      lazy = this.element.lazy;\n    }\n\n    if (isNumeric(lazy)) {\n      timeout = +lazy;\n      lazy = false;\n    }\n\n    this.handler = timeout ? handleDelay(timeout) : handleDomEvent;\n\n    const node = this.node;\n\n    el.on('change', handleDomEvent);\n\n    if (node.type !== 'file') {\n      if (!lazy) {\n        el.on('input', this.handler);\n\n        // IE is a special snowflake\n        if (node.attachEvent) {\n          el.on('keyup', this.handler);\n        }\n      }\n\n      el.on('blur', handleBlur);\n    }\n  }\n\n  unrender() {\n    const el = this.element;\n    this.rendered = false;\n\n    el.off('change', handleDomEvent);\n    el.off('input', this.handler);\n    el.off('keyup', this.handler);\n    el.off('blur', handleBlur);\n  }\n}\n","import GenericBinding from './GenericBinding';\n\nexport default class FileBinding extends GenericBinding {\n  getInitialValue() {\n    /* istanbul ignore next */\n    return undefined;\n  }\n\n  getValue() {\n    /* istanbul ignore next */\n    return this.node.files;\n  }\n\n  render() {\n    /* istanbul ignore next */\n    this.element.lazy = false;\n    /* istanbul ignore next */\n    super.render();\n  }\n\n  setFromNode(node) {\n    /* istanbul ignore next */\n    this.model.set(node.files);\n  }\n}\n","import { toArray } from './array';\n\nexport default function getSelectedOptions(select) {\n  /* istanbul ignore next */\n  return select.selectedOptions\n    ? toArray(select.selectedOptions)\n    : select.options\n      ? toArray(select.options).filter(option => option.selected)\n      : [];\n}\n","import { arrayContentsMatch } from 'utils/array';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class MultipleSelectBinding extends Binding {\n  getInitialValue() {\n    return this.element.options\n      .filter(option => option.getAttribute('selected'))\n      .map(option => option.getAttribute('value'));\n  }\n\n  getValue() {\n    const options = this.element.node.options;\n    const len = options.length;\n\n    const selectedValues = [];\n\n    for (let i = 0; i < len; i += 1) {\n      const option = options[i];\n\n      if (option.selected) {\n        const optionValue = option._ractive ? option._ractive.value : option.value;\n        selectedValues.push(optionValue);\n      }\n    }\n\n    return selectedValues;\n  }\n\n  handleChange() {\n    const attribute = this.attribute;\n    const previousValue = attribute.getValue();\n\n    const value = this.getValue();\n\n    if (previousValue === undefined || !arrayContentsMatch(value, previousValue)) {\n      super.handleChange();\n    }\n\n    return this;\n  }\n\n  render() {\n    super.render();\n\n    this.element.on('change', handleDomEvent);\n\n    if (this.model.get() === undefined) {\n      // get value from DOM, if possible\n      this.handleChange();\n    }\n  }\n\n  setFromNode(node) {\n    const selectedOptions = getSelectedOptions(node);\n    let i = selectedOptions.length;\n    const result = new Array(i);\n\n    while (i--) {\n      const option = selectedOptions[i];\n      result[i] = option._ractive ? option._ractive.value : option.value;\n    }\n\n    this.model.set(result);\n  }\n\n  unrender() {\n    this.element.off('change', handleDomEvent);\n  }\n}\n","import GenericBinding from './GenericBinding';\n\nexport default class NumericBinding extends GenericBinding {\n  getInitialValue() {\n    return undefined;\n  }\n\n  getValue() {\n    const value = parseFloat(this.node.value);\n    return isNaN(value) ? undefined : value;\n  }\n\n  setFromNode(node) {\n    const value = parseFloat(node.value);\n    if (!isNaN(value)) this.model.set(value);\n  }\n}\n","import runloop from 'src/global/runloop';\nimport { removeFromArray } from 'utils/array';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nconst siblings = {};\n\nfunction getSiblings(hash) {\n  return siblings[hash] || (siblings[hash] = []);\n}\n\nexport default class RadioBinding extends Binding {\n  constructor(element) {\n    super(element, 'checked');\n\n    this.siblings = getSiblings(this.ractive._guid + this.element.getAttribute('name'));\n    this.siblings.push(this);\n  }\n\n  getValue() {\n    return this.node.checked;\n  }\n\n  handleChange() {\n    runloop.start();\n\n    this.siblings.forEach(binding => {\n      binding.model.set(binding.getValue());\n    });\n\n    runloop.end();\n  }\n\n  render() {\n    super.render();\n\n    this.element.on('change', handleDomEvent);\n\n    if (this.node.attachEvent) {\n      this.element.on('click', handleDomEvent);\n    }\n  }\n\n  setFromNode(node) {\n    this.model.set(node.checked);\n  }\n\n  unbind() {\n    removeFromArray(this.siblings, this);\n  }\n\n  unrender() {\n    this.element.off('change', handleDomEvent);\n    this.element.off('click', handleDomEvent);\n  }\n}\n","import Binding from './Binding';\nimport getBindingGroup from './getBindingGroup';\nimport handleDomEvent from './handleDomEvent';\n\nfunction getValue() {\n  const checked = this.bindings.filter(b => b.node.checked);\n  if (checked.length > 0) {\n    return checked[0].element.getAttribute('value');\n  }\n}\n\nexport default class RadioNameBinding extends Binding {\n  constructor(element) {\n    super(element, 'name');\n\n    this.group = getBindingGroup('radioname', this.model, getValue);\n    this.group.add(this);\n\n    if (element.checked) {\n      this.group.value = this.getValue();\n    }\n\n    this.attribute.interpolator.pathChanged = () => this.updateName();\n  }\n\n  bind() {\n    if (!this.group.bound) {\n      this.group.bind();\n    }\n  }\n\n  getInitialValue() {\n    if (this.element.getAttribute('checked')) {\n      return this.element.getAttribute('value');\n    }\n  }\n\n  getValue() {\n    return this.element.getAttribute('value');\n  }\n\n  handleChange() {\n    // If this <input> is the one that's checked, then the value of its\n    // `name` model gets set to its value\n    if (this.node.checked) {\n      this.group.value = this.getValue();\n      super.handleChange();\n    }\n\n    this.updateName();\n  }\n\n  lastVal(setting, value) {\n    if (!this.group) return;\n    if (setting) this.group.lastValue = value;\n    else return this.group.lastValue;\n  }\n\n  rebind(next, previous) {\n    super.rebind(next, previous);\n    this.updateName();\n  }\n\n  rebound(update) {\n    super.rebound(update);\n    this.updateName();\n  }\n\n  render() {\n    super.render();\n\n    const node = this.node;\n\n    this.updateName();\n    node.checked = this.element.compare(this.model.get(), this.element.getAttribute('value'));\n\n    this.element.on('change', handleDomEvent);\n\n    if (node.attachEvent) {\n      this.element.on('click', handleDomEvent);\n    }\n  }\n\n  setFromNode(node) {\n    if (node.checked) {\n      this.group.model.set(this.element.getAttribute('value'));\n    }\n  }\n\n  unbind() {\n    this.group.remove(this);\n  }\n\n  unrender() {\n    const el = this.element;\n\n    el.off('change', handleDomEvent);\n    el.off('click', handleDomEvent);\n  }\n\n  updateName() {\n    if (this.node) this.node.name = `{{${this.model.getKeypath()}}}`;\n  }\n}\n","import runloop from 'src/global/runloop';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class SingleSelectBinding extends Binding {\n  forceUpdate() {\n    const value = this.getValue();\n\n    if (value !== undefined) {\n      this.attribute.locked = true;\n      runloop.scheduleTask(() => (this.attribute.locked = false));\n      this.model.set(value);\n    }\n  }\n\n  getInitialValue() {\n    if (this.element.getAttribute('value') !== undefined) {\n      return;\n    }\n\n    const options = this.element.options;\n    const len = options.length;\n\n    if (!len) return;\n\n    let value;\n    let optionWasSelected;\n    let i = len;\n\n    // take the final selected option...\n    while (i--) {\n      const option = options[i];\n\n      if (option.getAttribute('selected')) {\n        if (!option.getAttribute('disabled')) {\n          value = option.getAttribute('value');\n        }\n\n        optionWasSelected = true;\n        break;\n      }\n    }\n\n    // or the first non-disabled option, if none are selected\n    if (!optionWasSelected) {\n      while (++i < len) {\n        if (!options[i].getAttribute('disabled')) {\n          value = options[i].getAttribute('value');\n          break;\n        }\n      }\n    }\n\n    // This is an optimisation (aka hack) that allows us to forgo some\n    // other more expensive work\n    // TODO does it still work? seems at odds with new architecture\n    if (value !== undefined) {\n      this.element.attributeByName.value.value = value;\n    }\n\n    return value;\n  }\n\n  getValue() {\n    const options = this.node.options;\n    const len = options.length;\n\n    let i;\n    for (i = 0; i < len; i += 1) {\n      const option = options[i];\n\n      if (options[i].selected && !options[i].disabled) {\n        return option._ractive ? option._ractive.value : option.value;\n      }\n    }\n  }\n\n  render() {\n    super.render();\n    this.element.on('change', handleDomEvent);\n  }\n\n  setFromNode(node) {\n    const option = getSelectedOptions(node)[0];\n    this.model.set(option._ractive ? option._ractive.value : option.value);\n  }\n\n  unrender() {\n    this.element.off('change', handleDomEvent);\n  }\n}\n","import { INTERPOLATOR, TRIPLE } from 'config/types';\nimport { warnIfDebug } from 'utils/log';\nimport CheckboxBinding from './CheckboxBinding';\nimport CheckboxNameBinding from './CheckboxNameBinding';\nimport ContentEditableBinding from './ContentEditableBinding';\nimport FileBinding from './FileBinding';\nimport GenericBinding from './GenericBinding';\nimport MultipleSelectBinding from './MultipleSelectBinding';\nimport NumericBinding from './NumericBinding';\nimport RadioBinding from './RadioBinding';\nimport RadioNameBinding from './RadioNameBinding';\nimport SingleSelectBinding from './SingleSelectBinding';\n\nexport function isBindable(attribute) {\n  // The fragment must be a single non-string fragment\n  if (\n    !attribute ||\n    !attribute.template.f ||\n    attribute.template.f.length !== 1 ||\n    attribute.template.f[0].s\n  )\n    return false;\n\n  // A binding is an interpolator `{{ }}`, yey.\n  if (attribute.template.f[0].t === INTERPOLATOR) return true;\n\n  // The above is probably the only true case. For the rest, show an appropriate\n  // warning before returning false.\n\n  // You can't bind a triple curly. HTML values on an attribute makes no sense.\n  if (attribute.template.f[0].t === TRIPLE)\n    warnIfDebug('It is not possible create a binding using a triple mustache.');\n\n  return false;\n}\n\nexport default function selectBinding(element) {\n  const name = element.name;\n  const attributes = element.attributeByName;\n  if (name !== 'input' && name !== 'textarea' && name !== 'select' && !attributes.contenteditable)\n    return;\n  const isBindableByValue = isBindable(attributes.value);\n  const isBindableByContentEditable = isBindable(attributes.contenteditable);\n  const isContentEditable = element.getAttribute('contenteditable');\n\n  // contenteditable\n  // Bind if the contenteditable is true or a binding that may become true.\n  if ((isContentEditable || isBindableByContentEditable) && isBindableByValue)\n    return ContentEditableBinding;\n\n  // <input>\n  if (name === 'input') {\n    const type = element.getAttribute('type');\n\n    if (type === 'radio') {\n      const isBindableByName = isBindable(attributes.name);\n      const isBindableByChecked = isBindable(attributes.checked);\n\n      // For radios we can either bind the name or checked, but not both.\n      // Name binding is handed instead.\n      if (isBindableByName && isBindableByChecked) {\n        warnIfDebug(\n          'A radio input can have two-way binding on its name attribute, or its checked attribute - not both',\n          { ractive: element.root }\n        );\n        return RadioNameBinding;\n      }\n\n      if (isBindableByName) return RadioNameBinding;\n\n      if (isBindableByChecked) return RadioBinding;\n\n      // Dead end. Unknown binding on radio input.\n      return null;\n    }\n\n    if (type === 'checkbox') {\n      const isBindableByName = isBindable(attributes.name);\n      const isBindableByChecked = isBindable(attributes.checked);\n\n      // A checkbox with bindings for both name and checked. Checked treated as\n      // the checkbox value, name is treated as a regular binding.\n      //\n      // See https://github.com/ractivejs/ractive/issues/1749\n      if (isBindableByName && isBindableByChecked) return CheckboxBinding;\n\n      if (isBindableByName) return CheckboxNameBinding;\n\n      if (isBindableByChecked) return CheckboxBinding;\n\n      // Dead end. Unknown binding on checkbox input.\n      return null;\n    }\n\n    if (type === 'file' && isBindableByValue) return FileBinding;\n\n    if (type === 'number' && isBindableByValue) return NumericBinding;\n\n    if (type === 'range' && isBindableByValue) return NumericBinding;\n\n    // Some input of unknown type (browser usually falls back to text).\n    if (isBindableByValue) return GenericBinding;\n\n    // Dead end. Some unknown input and an unbindable.\n    return null;\n  }\n\n  // <select>\n  if (name === 'select' && isBindableByValue) {\n    return element.getAttribute('multiple') ? MultipleSelectBinding : SingleSelectBinding;\n  }\n\n  // <textarea>\n  if (name === 'textarea' && isBindableByValue) return GenericBinding;\n\n  // Dead end. Some unbindable element.\n  return null;\n}\n","import { ATTRIBUTE, BINDING_FLAG, DECORATOR, DELEGATE_FLAG, EVENT, TRANSITION } from 'config/types';\nimport { win } from 'config/environment';\nimport { html, svg } from 'config/namespaces';\nimport { toArray, addToArray, removeFromArray } from 'utils/array';\nimport { escapeHtml, voidElements } from 'utils/html';\nimport { createElement, detachNode, matches, safeAttributeString } from 'utils/dom';\nimport runloop from 'src/global/runloop';\nimport Context from 'shared/Context';\nimport { destroyed } from 'shared/methodCallers';\nimport { ContainerItem } from './shared/Item';\nimport Fragment from '../Fragment';\nimport ConditionalAttribute from './element/ConditionalAttribute';\nimport createItem from './createItem';\nimport findElement from './shared/findElement';\nimport selectBinding from './element/binding/selectBinding';\nimport { assign, create, defineProperty, keys } from 'utils/object';\nimport { isString } from 'utils/is';\n\nconst endsWithSemi = /;\\s*$/;\n\nexport default class Element extends ContainerItem {\n  constructor(options) {\n    super(options);\n\n    this.name = options.template.e.toLowerCase();\n\n    // find parent element\n    this.parent = findElement(this.up, false);\n\n    if (this.parent && this.parent.name === 'option') {\n      throw new Error(\n        `An <option> element cannot contain other elements (encountered <${this.name}>)`\n      );\n    }\n\n    this.decorators = [];\n\n    // create attributes\n    this.attributeByName = {};\n\n    let attrs;\n    let n, attr, val, cls, name, template, leftovers;\n\n    const m = this.template.m;\n    const len = (m && m.length) || 0;\n\n    for (let i = 0; i < len; i++) {\n      template = m[i];\n      if (template.g) {\n        (this.statics || (this.statics = {}))[template.n] = isString(template.f)\n          ? template.f\n          : template.n;\n      } else {\n        switch (template.t) {\n          case ATTRIBUTE:\n          case BINDING_FLAG:\n          case DECORATOR:\n          case EVENT:\n          case TRANSITION:\n            attr = createItem({\n              owner: this,\n              up: this.up,\n              template\n            });\n\n            n = template.n;\n\n            attrs = attrs || (attrs = this.attributes = []);\n\n            if (n === 'value') val = attr;\n            else if (n === 'name') name = attr;\n            else if (n === 'class') cls = attr;\n            else attrs.push(attr);\n\n            break;\n\n          case DELEGATE_FLAG:\n            this.delegate = false;\n            break;\n\n          default:\n            (leftovers || (leftovers = [])).push(template);\n            break;\n        }\n      }\n    }\n\n    if (val) attrs.push(val);\n    if (name) attrs.push(name);\n    if (cls) attrs.unshift(cls);\n\n    if (leftovers) {\n      (attrs || (this.attributes = [])).push(\n        new ConditionalAttribute({\n          owner: this,\n          up: this.up,\n          template: leftovers\n        })\n      );\n\n      // empty leftovers array\n      leftovers = [];\n    }\n\n    // create children\n    if (options.template.f && !options.deferContent) {\n      this.fragment = new Fragment({\n        template: options.template.f,\n        owner: this,\n        cssIds: null\n      });\n    }\n\n    this.binding = null; // filled in later\n  }\n\n  bind() {\n    const attrs = this.attributes;\n    if (attrs) {\n      attrs.binding = true;\n      const len = attrs.length;\n      for (let i = 0; i < len; i++) attrs[i].bind();\n      attrs.binding = false;\n    }\n\n    if (this.fragment) this.fragment.bind();\n\n    // create two-way binding if necessary\n    if (!this.binding) this.recreateTwowayBinding();\n    else this.binding.bind();\n  }\n\n  createTwowayBinding() {\n    if ('twoway' in this ? this.twoway : this.ractive.twoway) {\n      const Binding = selectBinding(this);\n      if (Binding) {\n        const binding = new Binding(this);\n        if (binding && binding.model) return binding;\n      }\n    }\n  }\n\n  destroyed() {\n    if (this.attributes) this.attributes.forEach(destroyed);\n    if (this.fragment) this.fragment.destroyed();\n  }\n\n  detach() {\n    // if this element is no longer rendered, the transitions are complete and the attributes can be torn down\n    if (!this.rendered) this.destroyed();\n\n    return detachNode(this.node);\n  }\n\n  find(selector, options) {\n    if (this.node && matches(this.node, selector)) return this.node;\n    if (this.fragment) {\n      return this.fragment.find(selector, options);\n    }\n  }\n\n  findAll(selector, options) {\n    const { result } = options;\n\n    if (matches(this.node, selector)) {\n      result.push(this.node);\n    }\n\n    if (this.fragment) {\n      this.fragment.findAll(selector, options);\n    }\n  }\n\n  findNextNode() {\n    return null;\n  }\n\n  firstNode() {\n    return this.node;\n  }\n\n  getAttribute(name) {\n    if (this.statics && name in this.statics) return this.statics[name];\n    const attribute = this.attributeByName[name];\n    return attribute ? attribute.getValue() : undefined;\n  }\n\n  getContext(...assigns) {\n    if (this.fragment) return this.fragment.getContext(...assigns);\n\n    if (!this.ctx) this.ctx = new Context(this.up, this);\n    assigns.unshift(create(this.ctx));\n    return assign.apply(null, assigns);\n  }\n\n  off(event, callback, capture = false) {\n    const delegate = this.up.delegate;\n    const ref = this.listeners && this.listeners[event];\n\n    if (!ref) return;\n    removeFromArray(ref, callback);\n\n    if (delegate) {\n      const listeners =\n        (delegate.listeners || (delegate.listeners = [])) &&\n        (delegate.listeners[event] || (delegate.listeners[event] = []));\n      if (listeners.refs && !--listeners.refs) delegate.off(event, delegateHandler, true);\n    } else if (this.rendered) {\n      const n = this.node;\n      const add = n.addEventListener;\n      const rem = n.removeEventListener;\n\n      if (!ref.length) {\n        rem.call(n, event, handler, capture);\n      } else if (ref.length && !ref.refs && capture) {\n        rem.call(n, event, handler, true);\n        add.call(n, event, handler, false);\n      }\n    }\n  }\n\n  on(event, callback, capture = false) {\n    const delegate = this.up.delegate;\n    const ref = (this.listeners || (this.listeners = {}))[event] || (this.listeners[event] = []);\n\n    if (delegate) {\n      const listeners =\n        ((delegate.listeners || (delegate.listeners = [])) && delegate.listeners[event]) ||\n        (delegate.listeners[event] = []);\n      if (!listeners.refs) {\n        listeners.refs = 0;\n        delegate.on(event, delegateHandler, true);\n        listeners.refs++;\n      } else {\n        listeners.refs++;\n      }\n    } else if (this.rendered) {\n      const n = this.node;\n      const add = n.addEventListener;\n      const rem = n.removeEventListener;\n\n      if (!ref.length) {\n        add.call(n, event, handler, capture);\n      } else if (ref.length && !ref.refs && capture) {\n        rem.call(n, event, handler, false);\n        add.call(n, event, handler, true);\n      }\n    }\n\n    addToArray(this.listeners[event], callback);\n  }\n\n  recreateTwowayBinding() {\n    if (this.binding) {\n      this.binding.unbind();\n      this.binding.unrender();\n    }\n\n    if ((this.binding = this.createTwowayBinding())) {\n      this.binding.bind();\n      if (this.rendered) this.binding.render();\n    }\n  }\n\n  rebound(update) {\n    super.rebound(update);\n    if (this.attributes) this.attributes.forEach(x => x.rebound(update));\n    if (this.binding) this.binding.rebound(update);\n  }\n\n  render(target, occupants) {\n    // TODO determine correct namespace\n    this.namespace = getNamespace(this);\n\n    let node;\n    let existing = false;\n\n    if (occupants) {\n      let n;\n      while ((n = occupants.shift())) {\n        if (\n          n.nodeName.toUpperCase() === this.template.e.toUpperCase() &&\n          n.namespaceURI === this.namespace\n        ) {\n          this.node = node = n;\n          existing = true;\n          break;\n        } else {\n          detachNode(n);\n        }\n      }\n    }\n\n    if (!existing && this.node) {\n      node = this.node;\n      target.appendChild(node);\n      existing = true;\n    }\n\n    if (!node) {\n      const name = this.template.e;\n      node = createElement(\n        this.namespace === html ? name.toLowerCase() : name,\n        this.namespace,\n        this.getAttribute('is')\n      );\n      this.node = node;\n    }\n\n    if (this.statics) {\n      keys(this.statics).forEach(k => {\n        node.setAttribute(k, this.statics[k]);\n      });\n    }\n\n    // tie the node to this vdom element\n    defineProperty(node, '_ractive', {\n      value: {\n        proxy: this\n      },\n      configurable: true\n    });\n\n    if (existing && this.foundNode) this.foundNode(node);\n\n    // register intro before rendering content so children can find the intro\n    const intro = this.intro;\n    if (intro && intro.shouldFire('intro')) {\n      intro.isIntro = true;\n      intro.isOutro = false;\n      runloop.registerTransition(intro);\n    }\n\n    if (this.fragment) {\n      const children = existing ? toArray(node.childNodes) : undefined;\n\n      this.fragment.render(node, children);\n\n      // clean up leftover children\n      if (children) {\n        children.forEach(detachNode);\n      }\n    }\n\n    if (existing) {\n      // store initial values for two-way binding\n      if (this.binding && this.binding.wasUndefined) this.binding.setFromNode(node);\n      // remove unused attributes\n      let i = node.attributes.length;\n      while (i--) {\n        const name = node.attributes[i].name;\n        if (!(name in this.attributeByName) && (!this.statics || !(name in this.statics)))\n          node.removeAttribute(name);\n      }\n    }\n\n    // Is this a top-level node of a component? If so, we may need to add\n    // a data-ractive-css attribute, for CSS encapsulation\n    if (this.up.cssIds) {\n      node.setAttribute('data-ractive-css', this.up.cssIds.map(x => `{${x}}`).join(' '));\n    }\n\n    if (this.attributes) {\n      const len = this.attributes.length;\n      for (let i = 0; i < len; i++) this.attributes[i].render();\n    }\n    if (this.binding) this.binding.render();\n\n    if (!this.up.delegate && this.listeners) {\n      const ls = this.listeners;\n      for (const k in ls) {\n        if (ls[k] && ls[k].length) this.node.addEventListener(k, handler, !!ls[k].refs);\n      }\n    }\n\n    if (!existing) {\n      target.appendChild(node);\n    }\n\n    this.rendered = true;\n  }\n\n  toString() {\n    const tagName = this.template.e;\n\n    let attrs = (this.attributes && this.attributes.map(stringifyAttribute).join('')) || '';\n\n    if (this.statics)\n      keys(this.statics).forEach(\n        k => k !== 'class' && k !== 'style' && (attrs = ` ${k}=\"${this.statics[k]}\"` + attrs)\n      );\n\n    // Special case - selected options\n    if (this.name === 'option' && this.isSelected()) {\n      attrs += ' selected';\n    }\n\n    // Special case - two-way radio name bindings\n    if (this.name === 'input' && inputIsCheckedRadio(this)) {\n      attrs += ' checked';\n    }\n\n    // Special case style and class attributes and directives\n    let style = this.statics ? this.statics.style : undefined;\n    let cls = this.statics ? this.statics.class : undefined;\n    this.attributes &&\n      this.attributes.forEach(attr => {\n        if (attr.name === 'class') {\n          cls = (cls || '') + (cls ? ' ' : '') + safeAttributeString(attr.getString());\n        } else if (attr.name === 'style') {\n          style = (style || '') + (style ? ' ' : '') + safeAttributeString(attr.getString());\n          if (style && !endsWithSemi.test(style)) style += ';';\n        } else if (attr.style) {\n          style =\n            (style || '') +\n            (style ? ' ' : '') +\n            `${attr.style}: ${safeAttributeString(attr.getString())};`;\n        } else if (attr.inlineClass && attr.getValue()) {\n          cls = (cls || '') + (cls ? ' ' : '') + attr.inlineClass;\n        }\n      });\n    // put classes first, then inline style\n    if (style !== undefined) attrs = ' style' + (style ? `=\"${style}\"` : '') + attrs;\n    if (cls !== undefined) attrs = ' class' + (cls ? `=\"${cls}\"` : '') + attrs;\n\n    if (this.up.cssIds) {\n      attrs += ` data-ractive-css=\"${this.up.cssIds.map(x => `{${x}}`).join(' ')}\"`;\n    }\n\n    let str = `<${tagName}${attrs}>`;\n\n    if (voidElements[this.name.toLowerCase()]) return str;\n\n    // Special case - textarea\n    if (this.name === 'textarea' && this.getAttribute('value') !== undefined) {\n      str += escapeHtml(this.getAttribute('value'));\n    } else if (this.getAttribute('contenteditable') !== undefined) {\n      // Special case - contenteditable\n      str += this.getAttribute('value') || '';\n    }\n\n    if (this.fragment) {\n      str += this.fragment.toString(!/^(?:script|style)$/i.test(this.template.e)); // escape text unless script/style\n    }\n\n    str += `</${tagName}>`;\n    return str;\n  }\n\n  unbind() {\n    const attrs = this.attributes;\n    if (attrs) {\n      attrs.unbinding = true;\n      const len = attrs.length;\n      for (let i = 0; i < len; i++) attrs[i].unbind();\n      attrs.unbinding = false;\n    }\n\n    if (this.binding) this.binding.unbind();\n    if (this.fragment) this.fragment.unbind();\n  }\n\n  unrender(shouldDestroy) {\n    if (!this.rendered) return;\n    this.rendered = false;\n\n    // unrendering before intro completed? complete it now\n    // TODO should be an API for aborting transitions\n    const transition = this.intro;\n    if (transition && transition.complete) transition.complete();\n\n    // Detach as soon as we can\n    if (this.name === 'option') {\n      // <option> elements detach immediately, so that\n      // their parent <select> element syncs correctly, and\n      // since option elements can't have transitions anyway\n      this.detach();\n    } else if (shouldDestroy) {\n      runloop.detachWhenReady(this);\n    }\n\n    // outro transition\n    const outro = this.outro;\n    if (outro && outro.shouldFire('outro')) {\n      outro.isIntro = false;\n      outro.isOutro = true;\n      runloop.registerTransition(outro);\n    }\n\n    if (this.fragment) this.fragment.unrender();\n\n    if (this.binding) this.binding.unrender();\n  }\n\n  update() {\n    if (this.dirty) {\n      this.dirty = false;\n\n      const attrs = this.attributes;\n      if (attrs) {\n        const len = attrs.length;\n        for (let i = 0; i < len; i++) attrs[i].update();\n      }\n\n      if (this.fragment) this.fragment.update();\n    }\n  }\n}\n\nfunction inputIsCheckedRadio(element) {\n  const nameAttr = element.attributeByName.name;\n  return (\n    element.getAttribute('type') === 'radio' &&\n    (nameAttr || {}).interpolator &&\n    element.getAttribute('value') === nameAttr.interpolator.model.get()\n  );\n}\n\nfunction stringifyAttribute(attribute) {\n  const str = attribute.toString();\n  return str ? ' ' + str : '';\n}\n\nfunction getNamespace(element) {\n  // Use specified namespace...\n  const xmlns = element.getAttribute('xmlns');\n  if (xmlns) return xmlns;\n\n  // ...or SVG namespace, if this is an <svg> element\n  if (element.name === 'svg') return svg;\n\n  const parent = element.parent;\n\n  if (parent) {\n    // ...or HTML, if the parent is a <foreignObject>\n    if (parent.name === 'foreignobject') return html;\n\n    // ...or inherit from the parent node\n    return parent.node.namespaceURI;\n  }\n\n  return element.ractive.el.namespaceURI;\n}\n\nfunction delegateHandler(ev) {\n  const name = ev.type;\n  const end = ev.currentTarget;\n  const endEl = end._ractive && end._ractive.proxy;\n  let node = ev.target;\n  let bubble = true;\n  let listeners;\n\n  // starting with the origin node, walk up the DOM looking for ractive nodes with a matching event listener\n  while (bubble && node && node !== end) {\n    const proxy = node._ractive && node._ractive.proxy;\n    if (proxy && proxy.up.delegate === endEl && shouldFire(ev, node, end)) {\n      listeners = proxy.listeners && proxy.listeners[name];\n\n      if (listeners) {\n        const len = listeners.length;\n        for (let i = 0; i < len; i++) bubble = listeners[i].call(node, ev) !== false && bubble;\n      }\n    }\n\n    node = node.parentNode || node.correspondingUseElement; // SVG with a <use> element in certain environments\n  }\n\n  return bubble;\n}\n\nconst UIEvent = win !== null ? win.UIEvent : null;\nfunction shouldFire(event, start, end) {\n  if (UIEvent && event instanceof UIEvent) {\n    let node = start;\n    while (node && node !== end) {\n      if (node.disabled) return false;\n      node = node.parentNode || node.correspondingUseElement;\n    }\n  }\n\n  return true;\n}\n\nfunction handler(ev) {\n  const el = this._ractive.proxy;\n  let listeners;\n  if (el.listeners && (listeners = el.listeners[ev.type])) {\n    const len = listeners.length;\n    for (let i = 0; i < len; i++) listeners[i].call(this, ev);\n  }\n}\n","import runloop from 'src/global/runloop';\nimport Element from '../../Element';\n\nexport default class Form extends Element {\n  constructor(options) {\n    super(options);\n    this.formBindings = [];\n  }\n\n  render(target, occupants) {\n    super.render(target, occupants);\n    this.on('reset', handleReset);\n  }\n\n  unrender(shouldDestroy) {\n    this.off('reset', handleReset);\n    super.unrender(shouldDestroy);\n  }\n}\n\nfunction handleReset() {\n  const element = this._ractive.proxy;\n\n  runloop.start();\n  element.formBindings.forEach(updateModel);\n  runloop.end();\n}\n\nfunction updateModel(binding) {\n  binding.model.set(binding.resetValue);\n}\n","import { fatal } from 'utils/log';\nimport runloop from 'src/global/runloop';\nimport { win } from 'config/environment';\n\n// because IE\nconst whitelist = {\n  animationend: 1,\n  animationiteration: 1,\n  animationstart: 1,\n  transitioncancel: 1,\n  transitionend: 1,\n  transitionstart: 1,\n  transitionrun: 1\n};\n\nclass DOMEvent {\n  constructor(name, owner) {\n    if (name.indexOf('*') !== -1) {\n      fatal(\n        `Only component proxy-events may contain \"*\" wildcards, <${\n          owner.name\n        } on-${name}=\"...\"/> is not valid`\n      );\n    }\n\n    this.name = name;\n    this.owner = owner;\n    this.handler = null;\n  }\n\n  bind() {}\n\n  render(directive) {\n    const name = this.name;\n\n    const register = () => {\n      const node = this.owner.node;\n      const on = `on${name}`;\n\n      // this is probably a custom event fired from a decorator or manually\n      if (!(on in node) && !(on in win) && !whitelist[name]) return;\n\n      this.owner.on(\n        name,\n        (this.handler = event => {\n          return directive.fire({\n            node,\n            original: event,\n            event,\n            name\n          });\n        })\n      );\n    };\n\n    if (name !== 'load') {\n      // schedule events so that they take place after twoway binding\n      runloop.scheduleTask(register, true);\n    } else {\n      // unless its a load event\n      register();\n    }\n  }\n\n  unbind() {}\n\n  unrender() {\n    if (this.handler) this.owner.off(this.name, this.handler);\n  }\n}\n\nclass CustomEvent {\n  constructor(eventPlugin, owner, name, args) {\n    this.eventPlugin = eventPlugin;\n    this.owner = owner;\n    this.name = name;\n    this.handler = null;\n    this.args = args;\n  }\n\n  bind() {}\n\n  render(directive) {\n    runloop.scheduleTask(() => {\n      const node = this.owner.node;\n\n      this.handler = this.eventPlugin.apply(\n        this.owner.ractive,\n        [\n          node,\n          (event = {}) => {\n            if (event.original) event.event = event.original;\n            else event.original = event.event;\n\n            event.name = this.name;\n            event.node = event.node || node;\n            return directive.fire(event);\n          }\n        ].concat(this.args || [])\n      );\n    });\n  }\n\n  unbind() {}\n\n  unrender() {\n    this.handler.teardown();\n  }\n}\n\nexport { DOMEvent, CustomEvent };\n","import Context from '../../../shared/Context';\n\nexport default class RactiveEvent {\n  constructor(component, name) {\n    this.component = component;\n    this.name = name;\n    this.handler = null;\n  }\n\n  bind(directive) {\n    const ractive = this.component.instance;\n\n    this.handler = ractive.on(this.name, (...args) => {\n      // watch for reproxy\n      if (args[0] instanceof Context) {\n        const ctx = args.shift();\n        ctx.component = ractive;\n        directive.fire(ctx, args);\n      } else {\n        directive.fire({}, args);\n      }\n\n      // cancel bubbling\n      return false;\n    });\n  }\n\n  render() {}\n\n  unbind() {\n    this.handler.cancel();\n  }\n\n  unrender() {}\n}\n","import { ANCHOR, COMPONENT } from 'config/types';\nimport { warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport fireEvent from 'src/events/fireEvent';\nimport { splitKeypath } from 'shared/keypaths';\nimport { findInViewHierarchy } from 'shared/registry';\nimport findElement from './findElement';\nimport { DOMEvent, CustomEvent } from '../element/ElementEvents';\nimport RactiveEvent from '../component/RactiveEvent';\nimport { resolveArgs, setupArgsFn } from '../shared/directiveArgs';\nimport Context from 'src/shared/Context';\nimport { isArray, isString } from 'utils/is';\nimport getFunction from 'shared/getFunction';\nimport resolveReference from '../../resolvers/resolveReference';\n\nconst specialPattern = /^(event|arguments|@node|@event|@context)(\\..+)?$/;\nconst dollarArgsPattern = /^\\$(\\d+)(\\..+)?$/;\n\nexport default class EventDirective {\n  constructor(options) {\n    this.owner = options.owner || options.up.owner || findElement(options.up);\n    this.element = this.owner.attributeByName ? this.owner : findElement(options.up, true);\n    this.template = options.template;\n    this.up = options.up;\n    this.ractive = options.up.ractive;\n    this.events = [];\n  }\n\n  bind() {\n    if (this.element.type === COMPONENT || this.element.type === ANCHOR) {\n      this.template.n.forEach(n => {\n        this.events.push(new RactiveEvent(this.element, n));\n      });\n    } else {\n      let args;\n      if ((args = this.template.a)) {\n        const rs = args.r.map(r => {\n          const model = resolveReference(this.up, r);\n          return model ? model.get() : undefined;\n        });\n        try {\n          args = getFunction(args.s, rs.length).apply(null, rs);\n        } catch (err) {\n          args = null;\n          warnIfDebug(\n            `Failed to compute args for event on-${this.template.n.join('- ')}: ${err.message ||\n              err}`\n          );\n        }\n      }\n\n      this.template.n.forEach(n => {\n        const fn = findInViewHierarchy('events', this.ractive, n);\n        if (fn) {\n          this.events.push(new CustomEvent(fn, this.element, n, args));\n        } else {\n          this.events.push(new DOMEvent(n, this.element));\n        }\n      });\n    }\n\n    // method calls\n    this.models = null;\n\n    addToArray(this.element.events || (this.element.events = []), this);\n\n    setupArgsFn(this, this.template);\n    if (!this.fn) this.action = this.template.f;\n\n    this.events.forEach(e => e.bind(this));\n  }\n\n  destroyed() {\n    this.events.forEach(e => e.unrender());\n  }\n\n  fire(event, args = []) {\n    const context =\n      event instanceof Context && event.refire ? event : this.element.getContext(event);\n\n    if (this.fn) {\n      const values = [];\n\n      const models = resolveArgs(this, this.template, this.up, {\n        specialRef(ref) {\n          const specialMatch = specialPattern.exec(ref);\n          if (specialMatch) {\n            // on-click=\"foo(event.node)\"\n            return {\n              special: specialMatch[1],\n              keys: specialMatch[2] ? splitKeypath(specialMatch[2].substr(1)) : []\n            };\n          }\n\n          const dollarMatch = dollarArgsPattern.exec(ref);\n          if (dollarMatch) {\n            // on-click=\"foo($1)\"\n            return {\n              special: 'arguments',\n              keys: [dollarMatch[1] - 1].concat(\n                dollarMatch[2] ? splitKeypath(dollarMatch[2].substr(1)) : []\n              )\n            };\n          }\n        }\n      });\n\n      if (models) {\n        models.forEach(model => {\n          if (!model) return values.push(undefined);\n\n          if (model.special) {\n            const which = model.special;\n            let obj;\n\n            if (which === '@node') {\n              obj = this.element.node;\n            } else if (which === '@event') {\n              obj = event && event.event;\n            } else if (which === 'event') {\n              warnOnceIfDebug(\n                `The event reference available to event directives is deprecated and should be replaced with @context and @event`\n              );\n              obj = context;\n            } else if (which === '@context') {\n              obj = context;\n            } else {\n              obj = args;\n            }\n\n            const keys = model.keys.slice();\n\n            while (obj && keys.length) obj = obj[keys.shift()];\n            return values.push(obj);\n          }\n\n          if (model.wrapper) {\n            return values.push(model.wrapperValue);\n          }\n\n          values.push(model.get());\n        });\n      }\n\n      // make event available as `this.event`\n      const ractive = this.ractive;\n      const oldEvent = ractive.event;\n\n      ractive.event = context;\n      const returned = this.fn.apply(ractive, values);\n      let result = returned.pop();\n\n      // Auto prevent and stop if return is explicitly false\n      if (result === false) {\n        const original = event ? event.original : undefined;\n        if (original) {\n          original.preventDefault && original.preventDefault();\n          original.stopPropagation && original.stopPropagation();\n        } else {\n          warnOnceIfDebug(\n            `handler '${this.template.n.join(\n              ' '\n            )}' returned false, but there is no event available to cancel`\n          );\n        }\n      } else if (!returned.length && isArray(result) && isString(result[0])) {\n        // watch for proxy events\n        result = fireEvent(this.ractive, result.shift(), context, result);\n      }\n\n      ractive.event = oldEvent;\n\n      return result;\n    } else {\n      return fireEvent(this.ractive, this.action, context, args);\n    }\n  }\n\n  handleChange() {}\n\n  render() {\n    this.events.forEach(e => e.render(this));\n  }\n\n  toString() {\n    return '';\n  }\n\n  unbind() {\n    removeFromArray(this.element.events, this);\n    this.events.forEach(e => e.unbind());\n  }\n\n  unrender() {\n    this.events.forEach(e => e.unrender());\n  }\n}\n\nconst proto = EventDirective.prototype;\nproto.firstNode = proto.rebound = proto.update = noop;\n","import { doc } from 'config/environment';\n\nexport default function progressiveText(item, target, occupants, text) {\n  if (occupants) {\n    let n = occupants[0];\n    if (n && n.nodeType === 3) {\n      const idx = n.nodeValue.indexOf(text);\n      occupants.shift();\n\n      if (idx === 0) {\n        if (n.nodeValue.length !== text.length) {\n          occupants.unshift(n.splitText(text.length));\n        }\n      } else {\n        n.nodeValue = text;\n      }\n    } else {\n      n = item.node = doc.createTextNode(text);\n      if (occupants[0]) {\n        target.insertBefore(n, occupants[0]);\n      } else {\n        target.appendChild(n);\n      }\n    }\n\n    item.node = n;\n  } else {\n    if (!item.node) item.node = doc.createTextNode(text);\n    target.appendChild(item.node);\n  }\n}\n","import { rebindMatch } from 'shared/rebind';\nimport Item, { ContainerItem } from './Item';\nimport resolve from '../../resolvers/resolve';\nimport { assign } from 'utils/object';\n\nexport default class Mustache extends Item {\n  constructor(options) {\n    super(options);\n\n    if (options.owner) this.parent = options.owner;\n\n    this.isStatic = !!options.template.s;\n\n    this.model = null;\n    this.dirty = false;\n  }\n\n  bind(pre) {\n    // yield mustaches and inner contexts should resolve in container context\n    const start = this.template.y\n      ? this.template.y.containerFragment\n      : this.containerFragment || this.up;\n    // try to find a model for this view\n    const model = pre || resolve(start, this.template);\n\n    if (model) {\n      const value = model.get();\n\n      if (this.isStatic) {\n        this.model = { get: () => value };\n        model.unreference();\n        return;\n      }\n\n      model.register(this);\n      this.model = model;\n    }\n  }\n\n  handleChange() {\n    this.bubble();\n  }\n\n  rebind(next, previous, safe) {\n    if (this.isStatic) return;\n\n    next = rebindMatch(this.template, next, previous, this.up);\n    if (next === this.model) return false;\n\n    if (this.model) {\n      this.model.unregister(this);\n    }\n    if (next) next.addShuffleRegister(this, 'mark');\n    this.model = next;\n    if (!safe) this.handleChange();\n    return true;\n  }\n\n  rebound(update) {\n    if (this.model) {\n      if (this.model.rebound) this.model.rebound(update);\n      else {\n        // check to see if the model actually changed...\n        // yield mustaches and inner contexts should resolve in container context\n        const start = this.template.y\n          ? this.template.y.containerFragment\n          : this.containerFragment || this.up;\n        // try to find a model for this view\n        const model = resolve(start, this.template);\n        if (model !== this.model) {\n          this.model.unregister(this);\n          this.bind(model);\n        }\n      }\n\n      if (update) this.bubble();\n    }\n    if (this.fragment) this.fragment.rebound(update);\n  }\n\n  unbind() {\n    if (!this.isStatic) {\n      this.model && this.model.unregister(this);\n      this.model = undefined;\n    }\n  }\n}\n\nexport function MustacheContainer(options) {\n  Mustache.call(this, options);\n}\n\nconst proto = (MustacheContainer.prototype = Object.create(ContainerItem.prototype));\n\nassign(proto, Mustache.prototype, { constructor: MustacheContainer });\n","import progressiveText from './shared/progressiveText';\nimport { escapeHtml } from 'utils/html';\nimport { safeToStringValue } from 'utils/dom';\nimport { detachNode } from 'utils/dom';\nimport Mustache from './shared/Mustache';\nimport { inAttributes } from './element/ConditionalAttribute';\n\nexport default class Interpolator extends Mustache {\n  bubble() {\n    if (this.owner) this.owner.bubble();\n    super.bubble();\n  }\n\n  detach() {\n    return detachNode(this.node);\n  }\n\n  firstNode() {\n    return this.node;\n  }\n\n  getString() {\n    return this.model ? safeToStringValue(this.model.get()) : '';\n  }\n\n  render(target, occupants) {\n    if (inAttributes()) return;\n    const value = (this.value = this.getString());\n\n    this.rendered = true;\n\n    progressiveText(this, target, occupants, value);\n  }\n\n  toString(escape) {\n    const string = this.getString();\n    return escape ? escapeHtml(string) : string;\n  }\n\n  unrender(shouldDestroy) {\n    if (shouldDestroy) this.detach();\n    this.rendered = false;\n  }\n\n  update() {\n    if (this.dirty) {\n      this.dirty = false;\n      if (this.rendered) {\n        const value = this.getString();\n        if (value !== this.value) this.node.data = this.value = value;\n      }\n    }\n  }\n\n  valueOf() {\n    return this.model ? this.model.get() : undefined;\n  }\n}\n","import Element from '../../Element';\nimport { isFunction } from 'utils/is';\n\nexport default class Input extends Element {\n  render(target, occupants) {\n    super.render(target, occupants);\n    this.node.defaultValue = this.node.value;\n  }\n  compare(value, attrValue) {\n    const comparator = this.getAttribute('value-comparator');\n    if (comparator) {\n      if (isFunction(comparator)) {\n        return comparator(value, attrValue);\n      }\n      if (value && attrValue) {\n        return value[comparator] == attrValue[comparator];\n      }\n    }\n    return value == attrValue;\n  }\n}\n","import Parser from 'parse/Parser';\nimport readStringLiteral from 'parse/converters/expressions/primary/literal/readStringLiteral';\nimport readKey from 'parse/converters/expressions/shared/readKey';\nimport { hasOwn, keys } from 'utils/object';\n\n// simple JSON parser, without the restrictions of JSON parse\n// (i.e. having to double-quote keys).\n//\n// If passed a hash of values as the second argument, ${placeholders}\n// will be replaced with those values\n\nconst specials = {\n  true: true,\n  false: false,\n  null: null,\n  undefined\n};\n\nconst specialsPattern = new RegExp('^(?:' + keys(specials).join('|') + ')');\nconst numberPattern = /^(?:[+-]?)(?:(?:(?:0|[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\nconst placeholderPattern = /\\$\\{([^\\}]+)\\}/g;\nconst placeholderAtStartPattern = /^\\$\\{([^\\}]+)\\}/;\nconst onlyWhitespace = /^\\s*$/;\n\nconst JsonParser = Parser.extend({\n  init(str, options) {\n    this.values = options.values;\n    this.sp();\n  },\n\n  postProcess(result) {\n    if (result.length !== 1 || !onlyWhitespace.test(this.leftover)) {\n      return null;\n    }\n\n    return { value: result[0].v };\n  },\n\n  converters: [\n    function getPlaceholder(parser) {\n      if (!parser.values) return null;\n\n      const placeholder = parser.matchPattern(placeholderAtStartPattern);\n\n      if (placeholder && hasOwn(parser.values, placeholder)) {\n        return { v: parser.values[placeholder] };\n      }\n    },\n\n    function getSpecial(parser) {\n      const special = parser.matchPattern(specialsPattern);\n      if (special) return { v: specials[special] };\n    },\n\n    function getNumber(parser) {\n      const number = parser.matchPattern(numberPattern);\n      if (number) return { v: +number };\n    },\n\n    function getString(parser) {\n      const stringLiteral = readStringLiteral(parser);\n      const values = parser.values;\n\n      if (stringLiteral && values) {\n        return {\n          v: stringLiteral.v.replace(\n            placeholderPattern,\n            (match, $1) => ($1 in values ? values[$1] : $1)\n          )\n        };\n      }\n\n      return stringLiteral;\n    },\n\n    function getObject(parser) {\n      if (!parser.matchString('{')) return null;\n\n      const result = {};\n\n      parser.sp();\n\n      if (parser.matchString('}')) {\n        return { v: result };\n      }\n\n      let pair;\n      while ((pair = getKeyValuePair(parser))) {\n        result[pair.key] = pair.value;\n\n        parser.sp();\n\n        if (parser.matchString('}')) {\n          return { v: result };\n        }\n\n        if (!parser.matchString(',')) {\n          return null;\n        }\n      }\n\n      return null;\n    },\n\n    function getArray(parser) {\n      if (!parser.matchString('[')) return null;\n\n      const result = [];\n\n      parser.sp();\n\n      if (parser.matchString(']')) {\n        return { v: result };\n      }\n\n      let valueToken;\n      while ((valueToken = parser.read())) {\n        result.push(valueToken.v);\n\n        parser.sp();\n\n        if (parser.matchString(']')) {\n          return { v: result };\n        }\n\n        if (!parser.matchString(',')) {\n          return null;\n        }\n\n        parser.sp();\n      }\n\n      return null;\n    }\n  ]\n});\n\nfunction getKeyValuePair(parser) {\n  parser.sp();\n\n  const key = readKey(parser);\n\n  if (!key) return null;\n\n  const pair = { key };\n\n  parser.sp();\n  if (!parser.matchString(':')) {\n    return null;\n  }\n  parser.sp();\n\n  const valueToken = parser.read();\n\n  if (!valueToken) return null;\n\n  pair.value = valueToken.v;\n  return pair;\n}\n\nexport default function(str, values) {\n  const parser = new JsonParser(str, { values });\n  return parser.result;\n}\n","import { INTERPOLATOR } from '../../../config/types';\nimport Item from '../shared/Item';\nimport Fragment from '../../Fragment';\nimport findElement from '../shared/findElement';\nimport parseJSON from '../../../utils/parseJSON';\nimport resolve from '../../resolvers/resolve';\nimport runloop from '../../../global/runloop';\nimport { warnIfDebug } from 'utils/log';\nimport { splitKeypath } from 'shared/keypaths';\nimport { isArray, isObjectType, isString } from 'utils/is';\n\nexport default class Mapping extends Item {\n  constructor(options) {\n    super(options);\n\n    this.name = options.template.n;\n\n    this.owner = options.owner || options.up.owner || options.element || findElement(options.up);\n    this.element =\n      options.element || (this.owner.attributeByName ? this.owner : findElement(options.up));\n    this.up = this.element.up; // shared\n    this.ractive = this.up.ractive;\n\n    this.element.attributeByName[this.name] = this;\n\n    this.value = options.template.f;\n  }\n\n  bind() {\n    const template = this.template.f;\n    const viewmodel = this.element.instance.viewmodel;\n\n    if (template === 0) {\n      // empty attributes are `true`\n      viewmodel.joinKey(this.name).set(true);\n    } else if (isString(template)) {\n      const parsed = parseJSON(template);\n      viewmodel.joinKey(this.name).set(parsed ? parsed.value : template);\n    } else if (isArray(template)) {\n      createMapping(this, true);\n    }\n  }\n\n  rebound(update) {\n    if (this.boundFragment) this.boundFragment.rebound(update);\n    if (this.link) {\n      this.model = resolve(this.up, this.template.f[0]);\n      const model = this.element.instance.viewmodel.joinAll(splitKeypath(this.name));\n      model.link(this.model, this.name, { mapping: true });\n    }\n  }\n\n  render() {}\n\n  unbind() {\n    if (this.model) this.model.unregister(this);\n    if (this.boundFragment) this.boundFragment.unbind();\n\n    if (this.element.bound) {\n      if (this.link.target === this.model) this.link.owner.unlink();\n    }\n  }\n\n  unrender() {}\n\n  update() {\n    if (this.dirty) {\n      this.dirty = false;\n      if (this.boundFragment) this.boundFragment.update();\n    }\n  }\n}\n\nfunction createMapping(item) {\n  const template = item.template.f;\n  const viewmodel = item.element.instance.viewmodel;\n  const childData = viewmodel.value;\n\n  if (template.length === 1 && template[0].t === INTERPOLATOR) {\n    const model = resolve(item.up, template[0]);\n    const val = model.get(false);\n\n    // if the interpolator is not static\n    if (!template[0].s) {\n      item.model = model;\n      item.link = viewmodel.createLink(item.name, model, template[0].r, {\n        mapping: true\n      });\n\n      // initialize parent side of the mapping from child data\n      if (val === undefined && !model.isReadonly && item.name in childData) {\n        model.set(childData[item.name]);\n      }\n    } else if (!isObjectType(val) || template[0].x) {\n      // copy non-object, non-computed vals through\n      viewmodel.joinKey(splitKeypath(item.name)).set(val);\n    } else {\n      // warn about trying to copy an object\n      warnIfDebug(`Cannot copy non-computed object value from static mapping '${item.name}'`);\n    }\n\n    // if the item isn't going to manage the model, give it a change to tear down if it's computed\n    if (model !== item.model) model.unregister();\n  } else {\n    item.boundFragment = new Fragment({\n      owner: item,\n      template\n    }).bind();\n\n    item.model = viewmodel.joinKey(splitKeypath(item.name));\n    item.model.set(item.boundFragment.valueOf());\n\n    // item is a *bit* of a hack\n    item.boundFragment.bubble = () => {\n      Fragment.prototype.bubble.call(item.boundFragment);\n      // defer this to avoid mucking around model deps if there happens to be an expression involved\n      runloop.scheduleTask(() => {\n        item.boundFragment.update();\n        item.model.set(item.boundFragment.valueOf());\n      });\n    };\n  }\n}\n","import { removeFromArray } from 'utils/array';\nimport Element from '../../Element';\nimport findElement from '../../shared/findElement';\nimport { isArray } from 'utils/is';\n\nexport default class Option extends Element {\n  constructor(options) {\n    const template = options.template;\n    if (!template.a) template.a = {};\n\n    // If the value attribute is missing, use the element's content,\n    // as long as it isn't disabled\n    if (template.a.value === undefined && !('disabled' in template.a)) {\n      template.a.value = template.f || '';\n    }\n\n    super(options);\n\n    this.select = findElement(this.parent || this.up, false, 'select');\n  }\n\n  bind() {\n    if (!this.select) {\n      super.bind();\n      return;\n    }\n\n    // If the select has a value, it overrides the `selected` attribute on\n    // this option - so we delete the attribute\n    const selectedAttribute = this.attributeByName.selected;\n    if (selectedAttribute && this.select.getAttribute('value') !== undefined) {\n      const index = this.attributes.indexOf(selectedAttribute);\n      this.attributes.splice(index, 1);\n      delete this.attributeByName.selected;\n    }\n\n    super.bind();\n    this.select.options.push(this);\n  }\n\n  bubble() {\n    // if we're using content as value, may need to update here\n    const value = this.getAttribute('value');\n    if (this.node && this.node.value !== value) {\n      this.node._ractive.value = value;\n    }\n    super.bubble();\n  }\n\n  getAttribute(name) {\n    const attribute = this.attributeByName[name];\n    return attribute\n      ? attribute.getValue()\n      : name === 'value' && this.fragment\n        ? this.fragment.valueOf()\n        : undefined;\n  }\n\n  isSelected() {\n    const optionValue = this.getAttribute('value');\n\n    if (optionValue === undefined || !this.select) {\n      return false;\n    }\n\n    const selectValue = this.select.getAttribute('value');\n\n    if (this.select.compare(selectValue, optionValue)) {\n      return true;\n    }\n\n    if (this.select.getAttribute('multiple') && isArray(selectValue)) {\n      let i = selectValue.length;\n      while (i--) {\n        if (this.select.compare(selectValue[i], optionValue)) {\n          return true;\n        }\n      }\n    }\n  }\n\n  render(target, occupants) {\n    super.render(target, occupants);\n\n    if (!this.attributeByName.value) {\n      this.node._ractive.value = this.getAttribute('value');\n    }\n  }\n\n  unbind() {\n    super.unbind();\n\n    if (this.select) {\n      removeFromArray(this.select.options, this);\n    }\n  }\n}\n","import { noRegistryFunctionReturn } from 'config/errors';\nimport { warnIfDebug } from 'utils/log';\nimport { fillGaps, hasOwn } from 'utils/object';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport { findInstance } from 'shared/registry';\nimport { isArray, isFunction } from 'utils/is';\n\nexport default function getPartialTemplate(ractive, name, up) {\n  // If the partial in instance or view heirarchy instances, great\n  let partial = getPartialFromRegistry(ractive, name, up || {});\n  if (partial) return partial;\n\n  // Does it exist on the page as a script tag?\n  partial = parser.fromId(name, { noThrow: true });\n  if (partial) {\n    // parse and register to this ractive instance\n    const parsed = parser.parseFor(partial, ractive);\n\n    // register extra partials on the ractive instance if they don't already exist\n    if (parsed.p) fillGaps(ractive.partials, parsed.p);\n\n    // register (and return main partial if there are others in the template)\n    return (ractive.partials[name] = parsed.t);\n  }\n}\n\nfunction getPartialFromRegistry(ractive, name, up) {\n  // if there was an instance up-hierarchy, cool\n  let partial = findParentPartial(name, up.owner);\n  if (partial) return partial;\n\n  // find first instance in the ractive or view hierarchy that has this partial\n  const instance = findInstance('partials', ractive, name);\n\n  if (!instance) {\n    return;\n  }\n\n  partial = instance.partials[name];\n\n  // partial is a function?\n  let fn;\n  if (isFunction(partial)) {\n    fn = partial;\n    // super partial\n    if (fn.styleSet) return fn;\n\n    fn = partial.bind(instance);\n    fn.isOwner = hasOwn(instance.partials, name);\n    partial = fn.call(ractive, parser);\n  }\n\n  if (!partial && partial !== '') {\n    warnIfDebug(noRegistryFunctionReturn, name, 'partial', 'partial', {\n      ractive\n    });\n    return;\n  }\n\n  // If this was added manually to the registry,\n  // but hasn't been parsed, parse it now\n  if (!parser.isParsed(partial)) {\n    // use the parseOptions of the ractive instance on which it was found\n    const parsed = parser.parseFor(partial, instance);\n\n    // Partials cannot contain nested partials!\n    // TODO add a test for this\n    if (parsed.p) {\n      warnIfDebug('Partials ({{>%s}}) cannot contain nested inline partials', name, { ractive });\n    }\n\n    // if fn, use instance to store result, otherwise needs to go\n    // in the correct point in prototype chain on instance or constructor\n    const target = fn ? instance : findOwner(instance, name);\n\n    // may be a template with partials, which need to be registered and main template extracted\n    target.partials[name] = partial = parsed.t;\n  }\n\n  // store for reset\n  if (fn) partial._fn = fn;\n\n  return partial.v ? partial.t : partial;\n}\n\nfunction findOwner(ractive, key) {\n  return hasOwn(ractive.partials, key) ? ractive : findConstructor(ractive.constructor, key);\n}\n\nfunction findConstructor(constructor, key) {\n  if (!constructor) {\n    return;\n  }\n  return hasOwn(constructor.partials, key) ? constructor : findConstructor(constructor.Parent, key);\n}\n\nfunction findParentPartial(name, parent) {\n  if (parent) {\n    if (\n      parent.template &&\n      parent.template.p &&\n      !isArray(parent.template.p) &&\n      hasOwn(parent.template.p, name)\n    ) {\n      return parent.template.p[name];\n    } else if (parent.up && parent.up.owner) {\n      return findParentPartial(name, parent.up.owner);\n    }\n  }\n}\n","import { ELEMENT, PARTIAL, SECTION, SECTION_WITH, YIELDER } from 'config/types';\nimport { assign, create, hasOwn, keys } from 'utils/object';\nimport { isArray, isFunction, isObjectType, isString } from 'utils/is';\nimport noop from 'utils/noop';\nimport { MustacheContainer } from './shared/Mustache';\nimport Fragment from '../Fragment';\nimport getPartialTemplate from './partial/getPartialTemplate';\nimport { resolveAliases } from './Alias';\nimport { warnOnceIfDebug, warnIfDebug } from 'utils/log';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport runloop from 'src/global/runloop';\nimport { applyCSS } from 'src/global/css';\nimport { splitKeypath } from 'shared/keypaths';\n\nexport default function Partial(options) {\n  MustacheContainer.call(this, options);\n\n  const tpl = options.template;\n\n  // yielder is a special form of partial that will later require special handling\n  if (tpl.t === YIELDER) {\n    this.yielder = 1;\n  } else if (tpl.t === ELEMENT) {\n    // this is a macro partial, complete with macro constructor\n    // leaving this as an element will confuse up-template searches\n    this.type = PARTIAL;\n    this.macro = options.macro;\n  }\n}\n\nconst proto = (Partial.prototype = create(MustacheContainer.prototype));\n\nassign(proto, {\n  constructor: Partial,\n\n  bind() {\n    const template = this.template;\n\n    if (this.yielder) {\n      // the container is the instance that owns this node\n      this.container = this.up.ractive;\n      this.component = this.container.component;\n      this.containerFragment = this.up;\n\n      // normal component\n      if (this.component) {\n        // yields skip the owning instance and go straight to the surrounding context\n        this.up = this.component.up;\n\n        // {{yield}} is equivalent to {{yield content}}\n        if (!template.r && !template.x && !template.tx) this.refName = 'content';\n      } else {\n        // plain-ish instance that may be attached to a parent later\n        this.fragment = new Fragment({\n          owner: this,\n          template: []\n        });\n        this.fragment.bind();\n        return;\n      }\n    }\n\n    // this is a macro/super partial\n    if (this.macro) {\n      this.fn = this.macro;\n    } else {\n      // this is a plain partial or yielder\n      if (!this.refName) this.refName = template.r;\n\n      // if the refName exists as a partial, this is a plain old partial reference where no model binding will happen\n      if (this.refName) {\n        partialFromValue(this, this.refName);\n      }\n\n      // this is a dynamic/inline partial\n      if (!this.partial && !this.fn) {\n        MustacheContainer.prototype.bind.call(this);\n        if (this.model) partialFromValue(this, this.model.get());\n      }\n    }\n\n    if (!this.partial && !this.fn) {\n      warnOnceIfDebug(`Could not find template for partial '${this.name}'`);\n    }\n\n    createFragment(this, this.partial || []);\n\n    // macro/super partial\n    if (this.fn) initMacro(this);\n\n    this.fragment.bind();\n  },\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n\n      if (this.yielder) {\n        this.containerFragment.bubble();\n      } else {\n        this.up.bubble();\n      }\n    }\n  },\n\n  findNextNode() {\n    return (this.containerFragment || this.up).findNextNode(this);\n  },\n\n  handleChange() {\n    this.dirtyTemplate = true;\n    this.externalChange = true;\n    this.bubble();\n  },\n\n  rebound(update) {\n    const aliases = this.fragment && this.fragment.aliases;\n    if (aliases) {\n      for (const k in aliases) {\n        if (aliases[k].rebound) aliases[k].rebound(update);\n        else {\n          aliases[k].unreference();\n          aliases[k] = 0;\n        }\n      }\n      if (this.template.z) {\n        resolveAliases(this.template.z, this.containerFragment || this.up, aliases);\n      }\n    }\n    if (this._attrs) {\n      keys(this._attrs).forEach(k => this._attrs[k].rebound(update));\n    }\n    MustacheContainer.prototype.rebound.call(this, update);\n  },\n\n  refreshAttrs() {\n    keys(this._attrs).forEach(k => {\n      this.handle.attributes[k] = !this._attrs[k].items.length || this._attrs[k].valueOf();\n    });\n  },\n\n  resetTemplate() {\n    if (this.fn && this.proxy) {\n      if (this.externalChange) {\n        if (isFunction(this.proxy.teardown)) this.proxy.teardown();\n        this.fn = this.proxy = null;\n      } else {\n        this.partial = this.fnTemplate;\n        return true;\n      }\n    }\n\n    const partial = this.partial;\n    this.partial = null;\n\n    if (this.refName) {\n      this.partial = getPartialTemplate(this.ractive, this.refName, this.up);\n    }\n\n    if (!this.partial && this.model) {\n      partialFromValue(this, this.model.get());\n    }\n\n    if (!this.fn && partial === this.partial) return false;\n\n    this.unbindAttrs();\n\n    if (this.fn) {\n      initMacro(this);\n      if (isFunction(this.proxy.render)) runloop.scheduleTask(() => this.proxy.render());\n    } else if (!this.partial) {\n      warnOnceIfDebug(`Could not find template for partial '${this.name}'`);\n    }\n\n    return true;\n  },\n\n  render(target, occupants) {\n    if (this.fn && this.fn._cssDef && !this.fn._cssDef.applied) applyCSS();\n\n    this.fragment.render(target, occupants);\n\n    if (this.proxy && isFunction(this.proxy.render)) this.proxy.render();\n  },\n\n  unbind() {\n    this.fragment.unbind();\n\n    this.fragment.aliases = null;\n\n    this.unbindAttrs();\n\n    MustacheContainer.prototype.unbind.call(this);\n  },\n\n  unbindAttrs() {\n    if (this._attrs) {\n      keys(this._attrs).forEach(k => {\n        this._attrs[k].unbind();\n      });\n    }\n  },\n\n  unrender(shouldDestroy) {\n    if (this.proxy && isFunction(this.proxy.teardown)) this.proxy.teardown();\n\n    this.fragment.unrender(shouldDestroy);\n  },\n\n  update() {\n    const proxy = this.proxy;\n    this.updating = 1;\n\n    if (this.dirtyAttrs) {\n      this.dirtyAttrs = false;\n      keys(this._attrs).forEach(k => this._attrs[k].update());\n      this.refreshAttrs();\n      if (isFunction(proxy.update)) proxy.update(this.handle.attributes);\n    }\n\n    if (this.dirtyTemplate) {\n      this.dirtyTemplate = false;\n      this.resetTemplate() && this.fragment.resetTemplate(this.partial || []);\n    }\n\n    if (this.dirty) {\n      this.dirty = false;\n      if (proxy && isFunction(proxy.invalidate)) proxy.invalidate();\n      this.fragment.update();\n    }\n\n    this.externalChange = false;\n    this.updating = 0;\n  }\n});\n\nfunction createFragment(self, partial) {\n  self.partial = partial;\n  contextifyTemplate(self);\n\n  const options = {\n    owner: self,\n    template: self.partial\n  };\n\n  if (self.yielder) options.ractive = self.container.parent;\n\n  if (self.fn) options.cssIds = self.fn._cssIds;\n\n  const fragment = (self.fragment = new Fragment(options));\n\n  // partials may have aliases that need to be in place before binding\n  if (self.template.z) {\n    fragment.aliases = resolveAliases(self.template.z, self.containerFragment || self.up);\n  }\n}\n\nfunction contextifyTemplate(self) {\n  if (self.template.c) {\n    self.partial = [{ t: SECTION, n: SECTION_WITH, f: self.partial }];\n    assign(self.partial[0], self.template.c);\n    if (self.yielder) self.partial[0].y = self;\n  }\n}\n\nfunction partialFromValue(self, value, okToParse) {\n  let tpl = value;\n\n  if (isArray(tpl)) {\n    self.partial = tpl;\n  } else if (tpl && isObjectType(tpl)) {\n    if (isArray(tpl.t)) self.partial = tpl.t;\n    else if (isString(tpl.template))\n      self.partial = parsePartial(tpl.template, tpl.template, self.ractive).t;\n  } else if (isFunction(tpl) && tpl.styleSet) {\n    self.fn = tpl;\n    if (self.fragment) self.fragment.cssIds = tpl._cssIds;\n  } else if (tpl != null) {\n    tpl = getPartialTemplate(self.ractive, '' + tpl, self.containerFragment || self.up);\n    if (tpl) {\n      self.name = value;\n      if (tpl.styleSet) {\n        self.fn = tpl;\n        if (self.fragment) self.fragment.cssIds = tpl._cssIds;\n      } else self.partial = tpl;\n    } else if (okToParse) {\n      self.partial = parsePartial('' + value, '' + value, self.ractive).t;\n    } else {\n      self.name = value;\n    }\n  }\n\n  return self.partial;\n}\n\nfunction setTemplate(template) {\n  partialFromValue(this, template, true);\n\n  if (!this.initing) {\n    this.dirtyTemplate = true;\n    this.fnTemplate = this.partial;\n\n    if (this.updating) {\n      this.bubble();\n      runloop.promise();\n    } else {\n      const promise = runloop.start();\n\n      this.bubble();\n      runloop.end();\n\n      return promise;\n    }\n  }\n}\n\nfunction aliasLocal(ref, name) {\n  const aliases = this.fragment.aliases || (this.fragment.aliases = {});\n  if (!name) {\n    aliases[ref] = this._data;\n  } else {\n    aliases[name] = this._data.joinAll(splitKeypath(ref));\n  }\n}\n\nconst extras = 'extra-attributes';\n\nfunction initMacro(self) {\n  const fn = self.fn;\n  const fragment = self.fragment;\n\n  // defensively copy the template in case it changes\n  const template = (self.template = assign({}, self.template));\n  const handle = (self.handle = fragment.getContext({\n    proxy: self,\n    aliasLocal,\n    name: self.template.e || self.name,\n    attributes: {},\n    setTemplate: setTemplate.bind(self),\n    template\n  }));\n\n  if (!template.p) template.p = {};\n  template.p = handle.partials = assign({}, template.p);\n  if (!hasOwn(template.p, 'content')) template.p.content = template.f || [];\n\n  if (isArray(fn.attributes)) {\n    self._attrs = {};\n\n    const invalidate = function() {\n      this.dirty = true;\n      self.dirtyAttrs = true;\n      self.bubble();\n    };\n\n    if (isArray(template.m)) {\n      const attrs = template.m;\n      template.p[extras] = template.m = attrs.filter(a => !~fn.attributes.indexOf(a.n));\n      attrs.filter(a => ~fn.attributes.indexOf(a.n)).forEach(a => {\n        const fragment = new Fragment({\n          template: a.f,\n          owner: self\n        });\n        fragment.bubble = invalidate;\n        fragment.findFirstNode = noop;\n        self._attrs[a.n] = fragment;\n      });\n    } else {\n      template.p[extras] = [];\n    }\n  } else {\n    template.p[extras] = template.m;\n  }\n\n  if (self._attrs) {\n    keys(self._attrs).forEach(k => {\n      self._attrs[k].bind();\n    });\n    self.refreshAttrs();\n  }\n\n  self.initing = 1;\n  self.proxy = fn(handle, handle.attributes) || {};\n  if (!self.partial) self.partial = [];\n  self.fnTemplate = self.partial;\n  self.initing = 0;\n\n  contextifyTemplate(self);\n  fragment.resetTemplate(self.partial);\n}\n\nfunction parsePartial(name, partial, ractive) {\n  let parsed;\n\n  try {\n    parsed = parser.parse(partial, parser.getParseOptions(ractive));\n  } catch (e) {\n    warnIfDebug(`Could not parse partial from expression '${name}'\\n${e.message}`);\n  }\n\n  return parsed || { t: [] };\n}\n","import { addToArray, removeFromArray } from 'utils/array';\nimport { unescapeKey } from 'shared/keypaths';\nimport { capture } from 'src/global/capture';\nimport { handleChange } from 'src/shared/methodCallers';\nimport noop from 'utils/noop';\n\nexport default class KeyModel {\n  constructor(value, context, instance) {\n    this.value = this.key = value;\n    this.context = context;\n    this.isReadonly = this.isKey = true;\n    this.deps = [];\n    this.links = [];\n    this.children = [];\n    this.instance = instance;\n  }\n\n  applyValue(value) {\n    if (value !== this.value) {\n      this.value = this.key = value;\n      this.deps.forEach(handleChange);\n      this.links.forEach(handleChange);\n      this.children.forEach(c => {\n        c.applyValue(c.context.getKeypath(c.instance));\n      });\n    }\n  }\n\n  destroyed() {\n    if (this.upstream) this.upstream.unregisterChild(this);\n  }\n\n  get(shouldCapture) {\n    if (shouldCapture) capture(this);\n    return unescapeKey(this.value);\n  }\n\n  getKeypath() {\n    return unescapeKey(this.value);\n  }\n\n  has() {\n    return false;\n  }\n\n  rebind(next, previous) {\n    let i = this.deps.length;\n    while (i--) this.deps[i].rebind(next, previous, false);\n\n    i = this.links.length;\n    while (i--) this.links[i].relinking(next, false);\n  }\n\n  register(dependant) {\n    this.deps.push(dependant);\n  }\n\n  registerChild(child) {\n    addToArray(this.children, child);\n    child.upstream = this;\n  }\n\n  registerLink(link) {\n    addToArray(this.links, link);\n  }\n\n  unregister(dependant) {\n    removeFromArray(this.deps, dependant);\n  }\n\n  unregisterChild(child) {\n    removeFromArray(this.children, child);\n  }\n\n  unregisterLink(link) {\n    removeFromArray(this.links, link);\n  }\n}\n\nKeyModel.prototype.reference = noop;\nKeyModel.prototype.unreference = noop;\n","import { createDocumentFragment } from 'utils/dom';\nimport { isArray, isObject, isObjectType } from 'utils/is';\nimport { findMap, buildNewIndices } from 'utils/array';\nimport { toEscapedString, toString, shuffled } from 'shared/methodCallers';\nimport Fragment, { getKeypath } from './Fragment';\nimport { ELEMENT } from 'config/types';\nimport { getContext } from 'shared/getRactiveContext';\nimport { keys } from 'utils/object';\nimport KeyModel from 'src/model/specials/KeyModel';\nimport { splitKeypath } from '../shared/keypaths';\nimport resolve from './resolvers/resolve';\n\nconst keypathString = /^\"(\\\\\"|[^\"])+\"$/;\n\nexport default class RepeatedFragment {\n  constructor(options) {\n    this.parent = options.owner.up;\n\n    // bit of a hack, so reference resolution works without another\n    // layer of indirection\n    this.up = this;\n    this.owner = options.owner;\n    this.ractive = this.parent.ractive;\n    this.delegate =\n      this.ractive.delegate !== false && (this.parent.delegate || findDelegate(this.parent));\n    // delegation disabled by directive\n    if (this.delegate && this.delegate.delegate === false) this.delegate = false;\n    // let the element know it's a delegate handler\n    if (this.delegate) this.delegate.delegate = this.delegate;\n\n    // encapsulated styles should be inherited until they get applied by an element\n    this.cssIds = 'cssIds' in options ? options.cssIds : this.parent ? this.parent.cssIds : null;\n\n    this.context = null;\n    this.rendered = false;\n    this.iterations = [];\n\n    this.template = options.template;\n\n    this.indexRef = options.indexRef;\n    this.keyRef = options.keyRef;\n\n    this.pendingNewIndices = null;\n    this.previousIterations = null;\n\n    // track array versus object so updates of type rest\n    this.isArray = false;\n  }\n\n  bind(context) {\n    this.context = context;\n    this.bound = true;\n    const value = context.get();\n\n    const aliases = (this.aliases = this.owner.template.z && this.owner.template.z.slice());\n\n    const shuffler = aliases && aliases.find(a => a.n === 'shuffle');\n    if (shuffler && shuffler.x && shuffler.x.x) {\n      if (shuffler.x.x.s === 'true') this.shuffler = true;\n      else if (keypathString.test(shuffler.x.x.s))\n        this.shuffler = splitKeypath(shuffler.x.x.s.slice(1, -1));\n    }\n\n    if (this.shuffler) this.values = shuffleValues(this, this.shuffler);\n\n    if (this.source) this.source.model.unbind(this.source);\n    const source = context.isComputed && aliases && aliases.find(a => a.n === 'source');\n    if (source && source.x && source.x.r) {\n      const model = resolve(this, source.x);\n      this.source = {\n        handleChange() {},\n        rebind(next) {\n          this.model.unregister(this);\n          this.model = next;\n          next.register(this);\n        }\n      };\n      this.source.model = model;\n      model.register(this.source);\n    }\n\n    // {{#each array}}...\n    if ((this.isArray = isArray(value))) {\n      // we can't use map, because of sparse arrays\n      this.iterations = [];\n      const max = (this.length = value.length);\n      for (let i = 0; i < max; i += 1) {\n        this.iterations[i] = this.createIteration(i, i);\n      }\n    } else if (isObject(value)) {\n      // {{#each object}}...\n      this.isArray = false;\n\n      // TODO this is a dreadful hack. There must be a neater way\n      if (this.indexRef) {\n        const refs = this.indexRef.split(',');\n        this.keyRef = refs[0];\n        this.indexRef = refs[1];\n      }\n\n      const ks = keys(value);\n      this.length = ks.length;\n\n      this.iterations = ks.map((key, index) => {\n        return this.createIteration(key, index);\n      });\n    }\n\n    return this;\n  }\n\n  bubble(index) {\n    if (!this.bubbled) this.bubbled = [];\n    this.bubbled.push(index);\n\n    if (!this.rebounding) this.owner.bubble();\n  }\n\n  createIteration(key, index) {\n    const fragment = new Fragment({\n      owner: this,\n      template: this.template\n    });\n\n    fragment.isIteration = true;\n    fragment.delegate = this.delegate;\n\n    if (this.aliases) fragment.aliases = {};\n    swizzleFragment(this, fragment, key, index);\n\n    return fragment.bind(fragment.context);\n  }\n\n  destroyed() {\n    const len = this.iterations.length;\n    for (let i = 0; i < len; i++) this.iterations[i].destroyed();\n    if (this.pathModel) this.pathModel.destroyed();\n    if (this.rootModel) this.rootModel.destroyed();\n  }\n\n  detach() {\n    const docFrag = createDocumentFragment();\n    this.iterations.forEach(fragment => docFrag.appendChild(fragment.detach()));\n    return docFrag;\n  }\n\n  find(selector, options) {\n    return findMap(this.iterations, i => i.find(selector, options));\n  }\n\n  findAll(selector, options) {\n    return this.iterations.forEach(i => i.findAll(selector, options));\n  }\n\n  findAllComponents(name, options) {\n    return this.iterations.forEach(i => i.findAllComponents(name, options));\n  }\n\n  findComponent(name, options) {\n    return findMap(this.iterations, i => i.findComponent(name, options));\n  }\n\n  findContext() {\n    return this.context;\n  }\n\n  findNextNode(iteration) {\n    if (iteration.index < this.iterations.length - 1) {\n      for (let i = iteration.index + 1; i < this.iterations.length; i++) {\n        const node = this.iterations[i].firstNode(true);\n        if (node) return node;\n      }\n    }\n\n    return this.owner.findNextNode();\n  }\n\n  firstNode(skipParent) {\n    return this.iterations[0] ? this.iterations[0].firstNode(skipParent) : null;\n  }\n\n  getLast() {\n    return this.lastModel || (this.lastModel = new KeyModel(this.length - 1));\n  }\n\n  rebind(next) {\n    this.context = next;\n    if (this.source) return;\n    this.iterations.forEach(fragment => {\n      swizzleFragment(this, fragment, fragment.key, fragment.index);\n    });\n  }\n\n  rebound(update) {\n    this.context = this.owner.model;\n    this.iterations.forEach((f, i) => {\n      f.context = contextFor(this, f, i);\n      f.rebound(update);\n    });\n  }\n\n  render(target, occupants) {\n    const xs = this.iterations;\n    if (xs) {\n      const len = xs.length;\n      for (let i = 0; i < len; i++) {\n        xs[i].render(target, occupants);\n      }\n    }\n\n    this.rendered = true;\n  }\n\n  shuffle(newIndices, merge) {\n    if (!this.pendingNewIndices) this.previousIterations = this.iterations.slice();\n\n    if (!this.pendingNewIndices) this.pendingNewIndices = [];\n\n    this.pendingNewIndices.push(newIndices);\n\n    const iterations = [];\n\n    newIndices.forEach((newIndex, oldIndex) => {\n      if (newIndex === -1) return;\n\n      const fragment = this.iterations[oldIndex];\n      iterations[newIndex] = fragment;\n\n      if (newIndex !== oldIndex && fragment) {\n        fragment.dirty = true;\n        if (merge) fragment.shouldRebind = 1;\n      }\n    });\n\n    this.iterations = iterations;\n\n    // if merging, we're in the midst of an update already\n    if (!merge) this.bubble();\n  }\n\n  shuffled() {\n    this.iterations.forEach(shuffled);\n  }\n\n  toString(escape) {\n    return this.iterations ? this.iterations.map(escape ? toEscapedString : toString).join('') : '';\n  }\n\n  unbind() {\n    this.bound = false;\n    if (this.source) this.source.model.unregister(this.source);\n    const iterations = this.pendingNewIndices ? this.previousIterations : this.iterations;\n    const len = iterations.length;\n    for (let i = 0; i < len; i++) iterations[i].unbind();\n    return this;\n  }\n\n  unrender(shouldDestroy) {\n    let len = this.iterations.length;\n    for (let i = 0; i < len; i++) this.iterations[i].unrender(shouldDestroy);\n    if (this.pendingNewIndices && this.previousIterations) {\n      len = this.previousIterations.length;\n      for (let i = 0; i < len; i++) this.previousIterations[i].unrender(shouldDestroy);\n    }\n    this.rendered = false;\n  }\n\n  update() {\n    if (this.pendingNewIndices) {\n      this.bubbled.length = 0;\n      this.updatePostShuffle();\n      return;\n    }\n\n    if (this.updating) return;\n    this.updating = true;\n\n    if (this.shuffler) {\n      const values = shuffleValues(this, this.shuffler);\n      this.shuffle(buildNewIndices(this.values, values), true);\n      this.updatePostShuffle();\n    } else {\n      let len = this.iterations.length;\n      for (let i = 0; i < len; i++) {\n        const f = this.iterations[i];\n        f && f.idxModel && f.idxModel.applyValue(i);\n      }\n\n      const value = this.context.get();\n      const wasArray = this.isArray;\n\n      let toRemove;\n      let oldKeys;\n      let reset = true;\n      let i;\n\n      if ((this.isArray = isArray(value))) {\n        // if there's a source to map back to, make sure everything stays bound correctly\n        if (this.source) {\n          this.rebounding = 1;\n          const source = this.source.model.get();\n          this.iterations.forEach((f, c) => {\n            if (c < value.length && f.lastValue !== value[c] && ~(i = source.indexOf(value[c]))) {\n              swizzleFragment(this, f, c, c);\n              f.rebound(true);\n            }\n          });\n          this.rebounding = 0;\n        }\n\n        if (wasArray) {\n          reset = false;\n          if (this.iterations.length > value.length) {\n            toRemove = this.iterations.splice(value.length);\n          }\n        }\n      } else if (isObject(value) && !wasArray) {\n        reset = false;\n        toRemove = [];\n        oldKeys = {};\n        i = this.iterations.length;\n\n        while (i--) {\n          const fragment = this.iterations[i];\n          if (fragment.key in value) {\n            oldKeys[fragment.key] = true;\n          } else {\n            this.iterations.splice(i, 1);\n            toRemove.push(fragment);\n          }\n        }\n      }\n\n      const newLength = isArray(value) ? value.length : isObject(value) ? keys(value).length : 0;\n      this.length = newLength;\n      this.updateLast();\n\n      if (reset) {\n        toRemove = this.iterations;\n        this.iterations = [];\n      }\n\n      if (toRemove) {\n        len = toRemove.length;\n        for (let i = 0; i < len; i++) toRemove[i].unbind().unrender(true);\n      }\n\n      // update the remaining ones\n      if (!reset && this.isArray && this.bubbled && this.bubbled.length) {\n        const bubbled = this.bubbled;\n        this.bubbled = [];\n        len = bubbled.length;\n        for (let i = 0; i < len; i++)\n          this.iterations[bubbled[i]] && this.iterations[bubbled[i]].update();\n      } else {\n        len = this.iterations.length;\n        for (let i = 0; i < len; i++) this.iterations[i].update();\n      }\n\n      // add new iterations\n      let docFrag;\n      let fragment;\n\n      if (newLength > this.iterations.length) {\n        docFrag = this.rendered ? createDocumentFragment() : null;\n        i = this.iterations.length;\n\n        if (isArray(value)) {\n          while (i < value.length) {\n            fragment = this.createIteration(i, i);\n\n            this.iterations.push(fragment);\n            if (this.rendered) fragment.render(docFrag);\n\n            i += 1;\n          }\n        } else if (isObject(value)) {\n          // TODO this is a dreadful hack. There must be a neater way\n          if (this.indexRef && !this.keyRef) {\n            const refs = this.indexRef.split(',');\n            this.keyRef = refs[0];\n            this.indexRef = refs[1];\n          }\n\n          keys(value).forEach(key => {\n            if (!oldKeys || !(key in oldKeys)) {\n              fragment = this.createIteration(key, i);\n\n              this.iterations.push(fragment);\n              if (this.rendered) fragment.render(docFrag);\n\n              i += 1;\n            }\n          });\n        }\n\n        if (this.rendered) {\n          const parentNode = this.parent.findParentNode();\n          const anchor = this.parent.findNextNode(this.owner);\n\n          parentNode.insertBefore(docFrag, anchor);\n        }\n      }\n    }\n\n    this.updating = false;\n  }\n\n  updateLast() {\n    if (this.lastModel) this.lastModel.applyValue(this.length - 1);\n  }\n\n  updatePostShuffle() {\n    const newIndices = this.pendingNewIndices[0];\n    const parentNode = this.rendered ? this.parent.findParentNode() : null;\n    const nextNode = parentNode && this.owner.findNextNode();\n    const docFrag = parentNode ? createDocumentFragment() : null;\n\n    // map first shuffle through\n    this.pendingNewIndices.slice(1).forEach(indices => {\n      newIndices.forEach((newIndex, oldIndex) => {\n        newIndices[oldIndex] = indices[newIndex];\n      });\n    });\n\n    const len = (this.length = this.context.get().length);\n    const prev = this.previousIterations;\n    const iters = this.iterations;\n    const value = this.context.get();\n    const stash = {};\n    let idx, dest, pos, next, anchor, rebound;\n\n    const map = new Array(newIndices.length);\n    newIndices.forEach((e, i) => (map[e] = i));\n\n    this.updateLast();\n\n    idx = pos = 0;\n    while (idx < len) {\n      dest = newIndices[pos];\n      next = null;\n      rebound = false;\n\n      if (dest === -1) {\n        // drop it like it's hot\n        prev[pos].unbind().unrender(true);\n        prev[pos++] = 0;\n      } else if (dest > idx) {\n        // need to stash or pull one up\n        next = newIndices[pos + 1]; // TODO: maybe a shouldMove function that tracks multiple entries?\n        if (next <= dest) {\n          stash[dest] = prev[pos];\n          prev[pos++] = null;\n        } else {\n          next = stash[idx] || prev[map[idx]];\n          prev[map[idx]] = null;\n          anchor = prev[nextRendered(pos, newIndices, prev)];\n          anchor = (anchor && parentNode && anchor.firstNode()) || nextNode;\n\n          if (next) {\n            rebound = this.source && next.lastValue !== value[idx];\n            swizzleFragment(this, next, idx, idx);\n            if (parentNode) parentNode.insertBefore(next.detach(), anchor);\n          } else {\n            next = iters[idx] = this.createIteration(idx, idx);\n            if (parentNode) {\n              next.render(docFrag);\n              parentNode.insertBefore(docFrag, anchor);\n            }\n          }\n\n          idx++;\n        }\n      } else {\n        // all is well\n        next = iters[idx];\n        anchor = prev[nextRendered(pos, newIndices, prev)];\n        anchor = (anchor && parentNode && anchor.firstNode()) || nextNode;\n        if (!next) {\n          next = iters[idx] = this.createIteration(idx, idx);\n          if (parentNode) {\n            next.render(docFrag);\n            parentNode.insertBefore(docFrag, anchor);\n          }\n        } else if (pos !== idx || stash[idx]) {\n          rebound = this.source && next.lastValue !== value[idx];\n          swizzleFragment(this, next, idx, idx);\n          if (stash[idx] && parentNode) parentNode.insertBefore(next.detach(), anchor);\n        }\n\n        idx++;\n        prev[pos++] = null;\n      }\n\n      if (next && isObjectType(next)) {\n        if (next.shouldRebind || rebound) {\n          next.rebound(rebound);\n          next.shouldRebind = 0;\n        }\n        next.update();\n        next.shuffled();\n      }\n    }\n\n    // clean up any stragglers\n    const plen = prev.length;\n    for (let i = 0; i < plen; i++) prev[i] && prev[i].unbind().unrender(true);\n\n    if (this.shuffler) this.values = shuffleValues(this, this.shuffler);\n\n    this.pendingNewIndices = null;\n    this.previousIterations = null;\n  }\n}\n\nRepeatedFragment.prototype.getContext = getContext;\nRepeatedFragment.prototype.getKeypath = getKeypath;\n\n// find the topmost delegate\nfunction findDelegate(start) {\n  let frag = start;\n  let delegate, el;\n\n  out: while (frag) {\n    // find next element\n    el = 0;\n    while (!el && frag) {\n      if (frag.owner.type === ELEMENT) el = frag.owner;\n      if (frag.owner.ractive && frag.owner.ractive.delegate === false) break out;\n      frag = frag.parent || frag.componentParent;\n    }\n\n    if (el.delegate === false) break out;\n    delegate = el.delegate || el;\n\n    // find next repeated fragment\n    while (frag) {\n      if (frag.iterations) break;\n      if (frag.owner.ractive && frag.owner.ractive.delegate === false) break out;\n      frag = frag.parent || frag.componentParent;\n    }\n  }\n\n  return delegate;\n}\n\nfunction nextRendered(start, newIndices, frags) {\n  const len = newIndices.length;\n  for (let i = start; i < len; i++) {\n    if (~newIndices[i] && frags[i] && frags[i].rendered) return i;\n  }\n}\n\nfunction swizzleFragment(section, fragment, key, idx) {\n  const model = section.context ? contextFor(section, fragment, key) : undefined;\n\n  fragment.key = key;\n  fragment.index = idx;\n  fragment.context = model;\n  if (section.source) fragment.lastValue = model && model.get();\n\n  if (fragment.idxModel) fragment.idxModel.applyValue(idx);\n  if (fragment.keyModel) fragment.keyModel.applyValue(key);\n  if (fragment.pathModel) {\n    fragment.pathModel.context = model;\n    fragment.pathModel.applyValue(model.getKeypath());\n  }\n  if (fragment.rootModel) {\n    fragment.rootModel.context = model;\n    fragment.rootModel.applyValue(model.getKeypath(fragment.ractive.root));\n  }\n\n  // handle any aliases\n  const aliases = fragment.aliases;\n  section.aliases &&\n    section.aliases.forEach(a => {\n      if (a.x.r === '.') aliases[a.n] = model;\n      else if (a.x.r === '@index') aliases[a.n] = fragment.getIndex();\n      else if (a.x.r === '@key') aliases[a.n] = fragment.getKey();\n      else if (a.x.r === '@keypath') aliases[a.n] = fragment.getKeypath();\n      else if (a.x.r === '@rootpath') aliases[a.n] = fragment.getKeypath(true);\n    });\n}\n\nfunction shuffleValues(section, shuffler) {\n  if (shuffler === true) {\n    return section.context.get().slice();\n  } else {\n    return section.context.get().map(v => shuffler.reduce((a, c) => a && a[c], v));\n  }\n}\n\nfunction contextFor(section, fragment, key) {\n  if (section.source) {\n    let idx;\n    const source = section.source.model.get();\n    if (source.indexOf && ~(idx = source.indexOf(section.context.joinKey(key).get())))\n      return section.source.model.joinKey(idx);\n  }\n\n  return section.context.joinKey(key);\n}\n","import {\n  SECTION_EACH,\n  SECTION_IF,\n  SECTION_IF_WITH,\n  SECTION_UNLESS,\n  SECTION_WITH\n} from 'config/types';\nimport { createDocumentFragment } from 'utils/dom';\nimport { isArray, isObject, isObjectLike } from 'utils/is';\nimport { keep } from 'shared/set';\nimport runloop from 'src/global/runloop';\nimport Fragment from '../Fragment';\nimport RepeatedFragment from '../RepeatedFragment';\nimport { MustacheContainer } from './shared/Mustache';\nimport { keys } from 'utils/object';\n\nfunction isEmpty(value) {\n  return (\n    !value ||\n    (isArray(value) && value.length === 0) ||\n    (isObject(value) && keys(value).length === 0)\n  );\n}\n\nfunction getType(value, hasIndexRef) {\n  if (hasIndexRef || isArray(value)) return SECTION_EACH;\n  if (isObjectLike(value)) return SECTION_IF_WITH;\n  if (value === undefined) return null;\n  return SECTION_IF;\n}\n\nexport default class Section extends MustacheContainer {\n  constructor(options) {\n    super(options);\n\n    this.sectionType = options.template.n || null;\n    this.templateSectionType = this.sectionType;\n    this.subordinate = options.template.l === 1;\n    this.fragment = null;\n  }\n\n  bind() {\n    super.bind();\n\n    if (this.subordinate) {\n      this.sibling = this.up.items[this.up.items.indexOf(this) - 1];\n      this.sibling.nextSibling = this;\n    }\n\n    // if we managed to bind, we need to create children\n    if (this.model) {\n      this.dirty = true;\n      this.update();\n    } else if (\n      this.sectionType &&\n      this.sectionType === SECTION_UNLESS &&\n      (!this.sibling || !this.sibling.isTruthy())\n    ) {\n      this.fragment = new Fragment({\n        owner: this,\n        template: this.template.f\n      }).bind();\n    }\n  }\n\n  detach() {\n    const frag = this.fragment || this.detached;\n    return frag ? frag.detach() : super.detach();\n  }\n\n  isTruthy() {\n    if (this.subordinate && this.sibling.isTruthy()) return true;\n    const value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n    return !!value && (this.templateSectionType === SECTION_IF_WITH || !isEmpty(value));\n  }\n\n  rebind(next, previous, safe) {\n    if (super.rebind(next, previous, safe)) {\n      if (this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS) {\n        this.fragment.rebind(next);\n      }\n    }\n  }\n\n  rebound(update) {\n    if (this.model) {\n      if (this.model.rebound) this.model.rebound(update);\n      else {\n        super.unbind();\n        super.bind();\n        if (\n          this.sectionType === SECTION_WITH ||\n          this.sectionType === SECTION_IF_WITH ||\n          this.sectionType === SECTION_EACH\n        ) {\n          if (this.fragment) this.fragment.rebind(this.model);\n        }\n\n        if (update) this.bubble();\n      }\n    }\n    if (this.fragment) this.fragment.rebound(update);\n  }\n\n  render(target, occupants) {\n    this.rendered = true;\n    if (this.fragment) this.fragment.render(target, occupants);\n  }\n\n  shuffle(newIndices) {\n    if (this.fragment && this.sectionType === SECTION_EACH) {\n      this.fragment.shuffle(newIndices);\n    }\n  }\n\n  unbind() {\n    super.unbind();\n    if (this.fragment) this.fragment.unbind();\n  }\n\n  unrender(shouldDestroy) {\n    if (this.rendered && this.fragment) this.fragment.unrender(shouldDestroy);\n    this.rendered = false;\n  }\n\n  update() {\n    if (!this.dirty) return;\n\n    if (this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS) {\n      this.fragment.context = this.model;\n    }\n\n    if (!this.model && this.sectionType !== SECTION_UNLESS) return;\n\n    this.dirty = false;\n\n    const value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n    const siblingFalsey = !this.subordinate || !this.sibling.isTruthy();\n    const lastType = this.sectionType;\n\n    // watch for switching section types\n    if (this.sectionType === null || this.templateSectionType === null)\n      this.sectionType = getType(value, this.template.i);\n    if (lastType && lastType !== this.sectionType && this.fragment) {\n      if (this.rendered) {\n        this.fragment.unbind().unrender(true);\n      }\n\n      this.fragment = null;\n    }\n\n    let newFragment;\n\n    const fragmentShouldExist =\n      this.sectionType === SECTION_EACH || // each always gets a fragment, which may have no iterations\n      this.sectionType === SECTION_WITH || // with (partial context) always gets a fragment\n      (siblingFalsey && (this.sectionType === SECTION_UNLESS ? !this.isTruthy() : this.isTruthy())); // if, unless, and if-with depend on siblings and the condition\n\n    if (fragmentShouldExist) {\n      if (!this.fragment) this.fragment = this.detached;\n\n      if (this.fragment) {\n        // check for detached fragment\n        if (this.detached) {\n          attach(this, this.fragment);\n          this.detached = false;\n          this.rendered = true;\n        }\n\n        if (!this.fragment.bound) this.fragment.bind(this.model);\n        this.fragment.update();\n      } else {\n        if (this.sectionType === SECTION_EACH) {\n          newFragment = new RepeatedFragment({\n            owner: this,\n            template: this.template.f,\n            indexRef: this.template.i\n          }).bind(this.model);\n        } else {\n          // only with and if-with provide context - if and unless do not\n          const context =\n            this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS\n              ? this.model\n              : null;\n          newFragment = new Fragment({\n            owner: this,\n            template: this.template.f\n          }).bind(context);\n        }\n      }\n    } else {\n      if (this.fragment && this.rendered) {\n        if (keep !== true) {\n          this.fragment.unbind().unrender(true);\n        } else {\n          this.unrender(false);\n          this.detached = this.fragment;\n          runloop.promise().then(() => {\n            if (this.detached) this.detach();\n          });\n        }\n      } else if (this.fragment) {\n        this.fragment.unbind();\n      }\n\n      this.fragment = null;\n    }\n\n    if (newFragment) {\n      if (this.rendered) {\n        attach(this, newFragment);\n      }\n\n      this.fragment = newFragment;\n    }\n\n    if (this.nextSibling) {\n      this.nextSibling.dirty = true;\n      this.nextSibling.update();\n    }\n  }\n}\n\nfunction attach(section, fragment) {\n  const anchor = section.up.findNextNode(section);\n\n  if (anchor) {\n    const docFrag = createDocumentFragment();\n    fragment.render(docFrag);\n\n    anchor.parentNode.insertBefore(docFrag, anchor);\n  } else {\n    fragment.render(section.up.findParentNode());\n  }\n}\n","import { toArray } from 'utils/array';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Element from '../../Element';\nimport { isArray, isFunction } from 'utils/is';\n\nexport default class Select extends Element {\n  constructor(options) {\n    super(options);\n    this.options = [];\n  }\n\n  foundNode(node) {\n    if (this.binding) {\n      const selectedOptions = getSelectedOptions(node);\n\n      if (selectedOptions.length > 0) {\n        this.selectedOptions = selectedOptions;\n      }\n    }\n  }\n\n  render(target, occupants) {\n    super.render(target, occupants);\n    this.sync();\n\n    const node = this.node;\n\n    let i = node.options.length;\n    while (i--) {\n      node.options[i].defaultSelected = node.options[i].selected;\n    }\n\n    this.rendered = true;\n  }\n\n  sync() {\n    const selectNode = this.node;\n\n    if (!selectNode) return;\n\n    const options = toArray(selectNode.options);\n\n    if (this.selectedOptions) {\n      options.forEach(o => {\n        if (this.selectedOptions.indexOf(o) >= 0) o.selected = true;\n        else o.selected = false;\n      });\n      this.binding.setFromNode(selectNode);\n      delete this.selectedOptions;\n      return;\n    }\n\n    const selectValue = this.getAttribute('value');\n    const isMultiple = this.getAttribute('multiple');\n    const array = isMultiple && isArray(selectValue);\n\n    // If the <select> has a specified value, that should override\n    // these options\n    if (selectValue !== undefined) {\n      let optionWasSelected;\n\n      options.forEach(o => {\n        const optionValue = o._ractive ? o._ractive.value : o.value;\n        const shouldSelect = isMultiple\n          ? array && this.valueContains(selectValue, optionValue)\n          : this.compare(selectValue, optionValue);\n\n        if (shouldSelect) {\n          optionWasSelected = true;\n        }\n\n        o.selected = shouldSelect;\n      });\n\n      if (!optionWasSelected && !isMultiple) {\n        if (this.binding) {\n          this.binding.forceUpdate();\n        }\n      }\n    } else if (this.binding && this.binding.forceUpdate) {\n      // Otherwise the value should be initialised according to which\n      // <option> element is selected, if twoway binding is in effect\n      this.binding.forceUpdate();\n    }\n  }\n  valueContains(selectValue, optionValue) {\n    let i = selectValue.length;\n    while (i--) {\n      if (this.compare(optionValue, selectValue[i])) return true;\n    }\n  }\n  compare(optionValue, selectValue) {\n    const comparator = this.getAttribute('value-comparator');\n    if (comparator) {\n      if (isFunction(comparator)) {\n        return comparator(selectValue, optionValue);\n      }\n      if (selectValue && optionValue) {\n        return selectValue[comparator] == optionValue[comparator];\n      }\n    }\n    return selectValue == optionValue;\n  }\n  update() {\n    const dirty = this.dirty;\n    super.update();\n    if (dirty) {\n      this.sync();\n    }\n  }\n}\n","import { ATTRIBUTE } from 'config/types';\nimport runloop from 'src/global/runloop';\nimport Input from './Input';\nimport { isBindable } from '../binding/selectBinding';\nimport createItem from '../../createItem';\nimport Fragment from '../../../Fragment';\n\nexport default class Textarea extends Input {\n  constructor(options) {\n    const template = options.template;\n\n    options.deferContent = true;\n\n    super(options);\n\n    // check for single interpolator binding\n    if (!this.attributeByName.value) {\n      if (template.f && isBindable({ template })) {\n        (this.attributes || (this.attributes = [])).push(\n          createItem({\n            owner: this,\n            template: { t: ATTRIBUTE, f: template.f, n: 'value' },\n            up: this.up\n          })\n        );\n      } else {\n        this.fragment = new Fragment({\n          owner: this,\n          cssIds: null,\n          template: template.f\n        });\n      }\n    }\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n\n      if (this.rendered && !this.binding && this.fragment) {\n        runloop.scheduleTask(() => {\n          this.dirty = false;\n          this.node.value = this.fragment.toString();\n        });\n      }\n\n      this.up.bubble(); // default behaviour\n    }\n  }\n}\n","import { TEXT } from 'config/types';\nimport { escapeHtml } from 'utils/html';\nimport { detachNode } from 'utils/dom';\nimport noop from 'utils/noop';\nimport Item from './shared/Item';\nimport progressiveText from './shared/progressiveText';\nimport { inAttributes } from './element/ConditionalAttribute';\n\nexport default class Text extends Item {\n  constructor(options) {\n    super(options);\n    this.type = TEXT;\n  }\n\n  detach() {\n    return detachNode(this.node);\n  }\n\n  firstNode() {\n    return this.node;\n  }\n\n  render(target, occupants) {\n    if (inAttributes()) return;\n    this.rendered = true;\n\n    progressiveText(this, target, occupants, this.template);\n  }\n\n  toString(escape) {\n    return escape ? escapeHtml(this.template) : this.template;\n  }\n\n  unrender(shouldDestroy) {\n    if (this.rendered && shouldDestroy) this.detach();\n    this.rendered = false;\n  }\n\n  valueOf() {\n    return this.template;\n  }\n}\n\nconst proto = Text.prototype;\nproto.bind = proto.unbind = proto.update = noop;\n","import { win, doc, vendors } from './environment';\n\nexport let visible;\nlet hidden = 'hidden';\n\nif (doc) {\n  let prefix;\n\n  /* istanbul ignore next */\n  if (hidden in doc) {\n    prefix = '';\n  } else {\n    let i = vendors.length;\n    while (i--) {\n      const vendor = vendors[i];\n      hidden = vendor + 'Hidden';\n\n      if (hidden in doc) {\n        prefix = vendor;\n        break;\n      }\n    }\n  }\n\n  /* istanbul ignore else */\n  if (prefix !== undefined) {\n    doc.addEventListener(prefix + 'visibilitychange', onChange);\n    onChange();\n  } else {\n    // gah, we're in an old browser\n    if ('onfocusout' in doc) {\n      doc.addEventListener('focusout', onHide);\n      doc.addEventListener('focusin', onShow);\n    } else {\n      win.addEventListener('pagehide', onHide);\n      win.addEventListener('blur', onHide);\n\n      win.addEventListener('pageshow', onShow);\n      win.addEventListener('focus', onShow);\n    }\n\n    visible = true; // until proven otherwise. Not ideal but hey\n  }\n}\n\nfunction onChange() {\n  visible = !doc[hidden];\n}\n\n/* istanbul ignore next */\nfunction onHide() {\n  visible = false;\n}\n\n/* istanbul ignore next */\nfunction onShow() {\n  visible = true;\n}\n","import { isClient, vendors } from 'config/environment';\nimport { createElement } from 'utils/dom';\nimport hyphenateCamel from 'utils/hyphenateCamel';\n\nlet prefix;\n\n/* istanbul ignore next */\nif (!isClient) {\n  prefix = null;\n} else {\n  const prefixCache = {};\n  const testStyle = createElement('div').style;\n\n  // technically this also normalizes on hyphenated styles as well\n  prefix = function(prop) {\n    if (!prefixCache[prop]) {\n      const name = hyphenateCamel(prop);\n\n      if (testStyle[prop] !== undefined) {\n        prefixCache[prop] = name;\n      } else {\n        /* istanbul ignore next */\n        // test vendors...\n        let i = vendors.length;\n        while (i--) {\n          const vendor = `-${vendors[i]}-${name}`;\n          if (testStyle[vendor] !== undefined) {\n            prefixCache[prop] = vendor;\n            break;\n          }\n        }\n      }\n    }\n\n    return prefixCache[prop];\n  };\n}\n\nexport default prefix;\n","import { vendors } from 'config/environment';\n\nconst vendorPattern = new RegExp('^(?:' + vendors.join('|') + ')([A-Z])');\n\nexport default function(str) {\n  /* istanbul ignore next */\n  if (!str) return ''; // edge case\n\n  /* istanbul ignore next */\n  if (vendorPattern.test(str)) str = '-' + str;\n\n  return str.replace(/[A-Z]/g, match => '-' + match.toLowerCase());\n}\n","import { missingPlugin } from 'config/errors';\nimport { isClient } from 'config/environment';\nimport { warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { createElement } from 'utils/dom';\nimport interpolate from 'shared/interpolate';\nimport Ticker from 'shared/Ticker';\nimport hyphenate from './hyphenate';\nimport { isFunction, isString } from 'utils/is';\n\nlet createTransitions;\n\nif (!isClient) {\n  createTransitions = null;\n} else {\n  const testStyle = createElement('div').style;\n  const linear = x => x;\n\n  const canUseCssTransitions = {};\n  const cannotUseCssTransitions = {};\n\n  // determine some facts about our environment\n  let TRANSITION;\n  let TRANSITIONEND;\n  let CSS_TRANSITIONS_ENABLED;\n  let TRANSITION_DURATION;\n  let TRANSITION_PROPERTY;\n  let TRANSITION_TIMING_FUNCTION;\n\n  if (testStyle.transition !== undefined) {\n    TRANSITION = 'transition';\n    TRANSITIONEND = 'transitionend';\n    CSS_TRANSITIONS_ENABLED = true;\n  } else if (testStyle.webkitTransition !== undefined) {\n    TRANSITION = 'webkitTransition';\n    TRANSITIONEND = 'webkitTransitionEnd';\n    CSS_TRANSITIONS_ENABLED = true;\n  } else {\n    CSS_TRANSITIONS_ENABLED = false;\n  }\n\n  if (TRANSITION) {\n    TRANSITION_DURATION = TRANSITION + 'Duration';\n    TRANSITION_PROPERTY = TRANSITION + 'Property';\n    TRANSITION_TIMING_FUNCTION = TRANSITION + 'TimingFunction';\n  }\n\n  createTransitions = function(t, to, options, changedProperties, resolve) {\n    // Wait a beat (otherwise the target styles will be applied immediately)\n    // TODO use a fastdom-style mechanism?\n    setTimeout(() => {\n      let jsTransitionsComplete;\n      let cssTransitionsComplete;\n      let cssTimeout; // eslint-disable-line prefer-const\n\n      function transitionDone() {\n        clearTimeout(cssTimeout);\n      }\n\n      function checkComplete() {\n        if (jsTransitionsComplete && cssTransitionsComplete) {\n          t.unregisterCompleteHandler(transitionDone);\n          // will changes to events and fire have an unexpected consequence here?\n          t.ractive.fire(t.name + ':end', t.node, t.isIntro);\n          resolve();\n        }\n      }\n\n      // this is used to keep track of which elements can use CSS to animate\n      // which properties\n      const hashPrefix = (t.node.namespaceURI || '') + t.node.tagName;\n\n      // need to reset transition properties\n      const style = t.node.style;\n      const previous = {\n        property: style[TRANSITION_PROPERTY],\n        timing: style[TRANSITION_TIMING_FUNCTION],\n        duration: style[TRANSITION_DURATION]\n      };\n\n      function transitionEndHandler(event) {\n        const index = changedProperties.indexOf(event.propertyName);\n\n        if (index !== -1) {\n          changedProperties.splice(index, 1);\n        }\n\n        if (changedProperties.length) {\n          // still transitioning...\n          return;\n        }\n\n        clearTimeout(cssTimeout);\n        cssTransitionsDone();\n      }\n\n      function cssTransitionsDone() {\n        style[TRANSITION_PROPERTY] = previous.property;\n        style[TRANSITION_TIMING_FUNCTION] = previous.duration;\n        style[TRANSITION_DURATION] = previous.timing;\n\n        t.node.removeEventListener(TRANSITIONEND, transitionEndHandler, false);\n\n        cssTransitionsComplete = true;\n        checkComplete();\n      }\n\n      t.node.addEventListener(TRANSITIONEND, transitionEndHandler, false);\n\n      // safety net in case transitionend never fires\n      cssTimeout = setTimeout(() => {\n        changedProperties = [];\n        cssTransitionsDone();\n      }, options.duration + (options.delay || 0) + 50);\n      t.registerCompleteHandler(transitionDone);\n\n      style[TRANSITION_PROPERTY] = changedProperties.join(',');\n      const easingName = hyphenate(options.easing || 'linear');\n      style[TRANSITION_TIMING_FUNCTION] = easingName;\n      const cssTiming = style[TRANSITION_TIMING_FUNCTION] === easingName;\n      style[TRANSITION_DURATION] = options.duration / 1000 + 's';\n\n      setTimeout(() => {\n        let i = changedProperties.length;\n        let hash;\n        let originalValue = null;\n        let index;\n        const propertiesToTransitionInJs = [];\n        let prop;\n        let suffix;\n        let interpolator;\n\n        while (i--) {\n          prop = changedProperties[i];\n          hash = hashPrefix + prop;\n\n          if (cssTiming && CSS_TRANSITIONS_ENABLED && !cannotUseCssTransitions[hash]) {\n            const initial = style[prop];\n            style[prop] = to[prop];\n\n            // If we're not sure if CSS transitions are supported for\n            // this tag/property combo, find out now\n            if (!(hash in canUseCssTransitions)) {\n              originalValue = t.getStyle(prop);\n\n              // if this property is transitionable in this browser,\n              // the current style will be different from the target style\n              canUseCssTransitions[hash] = t.getStyle(prop) != to[prop];\n              cannotUseCssTransitions[hash] = !canUseCssTransitions[hash];\n\n              // Reset, if we're going to use timers after all\n              if (cannotUseCssTransitions[hash]) {\n                style[prop] = initial;\n              }\n            }\n          }\n\n          if (!cssTiming || !CSS_TRANSITIONS_ENABLED || cannotUseCssTransitions[hash]) {\n            // we need to fall back to timer-based stuff\n            if (originalValue === null) originalValue = t.getStyle(prop);\n\n            // need to remove this from changedProperties, otherwise transitionEndHandler\n            // will get confused\n            index = changedProperties.indexOf(prop);\n            if (index === -1) {\n              warnIfDebug(\n                'Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!',\n                { node: t.node }\n              );\n            } else {\n              changedProperties.splice(index, 1);\n            }\n\n            // TODO Determine whether this property is animatable at all\n\n            suffix = /[^\\d]*$/.exec(originalValue)[0];\n            interpolator = interpolate(parseFloat(originalValue), parseFloat(to[prop]));\n\n            // ...then kick off a timer-based transition\n            if (interpolator) {\n              propertiesToTransitionInJs.push({\n                name: prop,\n                interpolator,\n                suffix\n              });\n            } else {\n              style[prop] = to[prop];\n            }\n\n            originalValue = null;\n          }\n        }\n\n        // javascript transitions\n        if (propertiesToTransitionInJs.length) {\n          let easing;\n\n          if (isString(options.easing)) {\n            easing = t.ractive.easing[options.easing];\n\n            if (!easing) {\n              warnOnceIfDebug(missingPlugin(options.easing, 'easing'));\n              easing = linear;\n            }\n          } else if (isFunction(options.easing)) {\n            easing = options.easing;\n          } else {\n            easing = linear;\n          }\n\n          new Ticker({\n            duration: options.duration,\n            easing,\n            step(pos) {\n              let i = propertiesToTransitionInJs.length;\n              while (i--) {\n                const prop = propertiesToTransitionInJs[i];\n                style[prop.name] = prop.interpolator(pos) + prop.suffix;\n              }\n            },\n            complete() {\n              jsTransitionsComplete = true;\n              checkComplete();\n            }\n          });\n        } else {\n          jsTransitionsComplete = true;\n        }\n\n        if (changedProperties.length) {\n          style[TRANSITION_PROPERTY] = changedProperties.join(',');\n        } else {\n          style[TRANSITION_PROPERTY] = 'none';\n\n          // We need to cancel the transitionEndHandler, and deal with\n          // the fact that it will never fire\n          t.node.removeEventListener(TRANSITIONEND, transitionEndHandler, false);\n          cssTransitionsComplete = true;\n          checkComplete();\n        }\n      }, 0);\n    }, options.delay || 0);\n  };\n}\n\nexport default createTransitions;\n","import { win } from 'config/environment';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport { isArray, isObject, isFunction, isNumber, isString } from 'utils/is';\nimport noop from 'utils/noop';\nimport { warnOnceIfDebug } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport { findInViewHierarchy } from 'shared/registry';\nimport { visible } from 'config/visibility';\nimport findElement from '../shared/findElement';\nimport prefix from './transitions/prefix';\nimport createTransitions from './transitions/createTransitions';\nimport { resolveArgs, setupArgsFn } from '../shared/directiveArgs';\nimport { assign, hasOwn, keys } from 'utils/object';\n\nconst getComputedStyle = win && win.getComputedStyle;\nconst resolved = Promise.resolve();\n\nconst names = {\n  t0: 'intro-outro',\n  t1: 'intro',\n  t2: 'outro'\n};\n\nexport default class Transition {\n  constructor(options) {\n    this.owner = options.owner || options.up.owner || findElement(options.up);\n    this.element = this.owner.attributeByName ? this.owner : findElement(options.up);\n    this.ractive = this.owner.ractive;\n    this.template = options.template;\n    this.up = options.up;\n    this.options = options;\n    this.onComplete = [];\n  }\n\n  animateStyle(style, value, options) {\n    if (arguments.length === 4) {\n      throw new Error(\n        't.animateStyle() returns a promise - use .then() instead of passing a callback'\n      );\n    }\n\n    // Special case - page isn't visible. Don't animate anything, because\n    // that way you'll never get CSS transitionend events\n    if (!visible) {\n      this.setStyle(style, value);\n      return resolved;\n    }\n\n    let to;\n\n    if (isString(style)) {\n      to = {};\n      to[style] = value;\n    } else {\n      to = style;\n\n      // shuffle arguments\n      options = value;\n    }\n\n    return new Promise(fulfil => {\n      // Edge case - if duration is zero, set style synchronously and complete\n      if (!options.duration) {\n        this.setStyle(to);\n        fulfil();\n        return;\n      }\n\n      // Get a list of the properties we're animating\n      const propertyNames = keys(to);\n      const changedProperties = [];\n\n      // Store the current styles\n      const computedStyle = getComputedStyle(this.node);\n\n      let i = propertyNames.length;\n      while (i--) {\n        const prop = propertyNames[i];\n        const name = prefix(prop);\n\n        const current = computedStyle[prefix(prop)];\n\n        // record the starting points\n        const init = this.node.style[name];\n        if (!(name in this.originals)) this.originals[name] = this.node.style[name];\n        this.node.style[name] = to[prop];\n        this.targets[name] = this.node.style[name];\n        this.node.style[name] = init;\n\n        // we need to know if we're actually changing anything\n        if (current != to[prop]) {\n          // use != instead of !==, so we can compare strings with numbers\n          changedProperties.push(name);\n\n          // if we happened to prefix, make sure there is a properly prefixed value\n          to[name] = to[prop];\n\n          // make the computed style explicit, so we can animate where\n          // e.g. height='auto'\n          this.node.style[name] = current;\n        }\n      }\n\n      // If we're not actually changing anything, the transitionend event\n      // will never fire! So we complete early\n      if (!changedProperties.length) {\n        fulfil();\n        return;\n      }\n\n      createTransitions(this, to, options, changedProperties, fulfil);\n    });\n  }\n\n  bind() {\n    const options = this.options;\n    const type = options.template && options.template.v;\n    if (type) {\n      if (type === 't0' || type === 't1') this.element.intro = this;\n      if (type === 't0' || type === 't2') this.element.outro = this;\n      this.eventName = names[type];\n    }\n\n    const ractive = this.owner.ractive;\n\n    this.name = options.name || options.template.n;\n\n    if (options.params) {\n      this.params = options.params;\n    }\n\n    if (isFunction(this.name)) {\n      this._fn = this.name;\n      this.name = this._fn.name;\n    } else {\n      this._fn = findInViewHierarchy('transitions', ractive, this.name);\n    }\n\n    if (!this._fn) {\n      warnOnceIfDebug(missingPlugin(this.name, 'transition'), { ractive });\n    }\n\n    setupArgsFn(this, options.template);\n  }\n\n  getParams() {\n    if (this.params) return this.params;\n\n    // get expression args if supplied\n    if (this.fn) {\n      const values = resolveArgs(this, this.template, this.up).map(model => {\n        if (!model) return undefined;\n\n        return model.get();\n      });\n      return this.fn.apply(this.ractive, values);\n    }\n  }\n\n  getStyle(props) {\n    const computedStyle = getComputedStyle(this.node);\n\n    if (isString(props)) {\n      return computedStyle[prefix(props)];\n    }\n\n    if (!isArray(props)) {\n      throw new Error(\n        'Transition$getStyle must be passed a string, or an array of strings representing CSS properties'\n      );\n    }\n\n    const styles = {};\n\n    let i = props.length;\n    while (i--) {\n      const prop = props[i];\n      let value = computedStyle[prefix(prop)];\n\n      if (value === '0px') value = 0;\n      styles[prop] = value;\n    }\n\n    return styles;\n  }\n\n  processParams(params, defaults) {\n    if (isNumber(params)) {\n      params = { duration: params };\n    } else if (isString(params)) {\n      if (params === 'slow') {\n        params = { duration: 600 };\n      } else if (params === 'fast') {\n        params = { duration: 200 };\n      } else {\n        params = { duration: 400 };\n      }\n    } else if (!params) {\n      params = {};\n    }\n\n    return assign({}, defaults, params);\n  }\n\n  registerCompleteHandler(fn) {\n    addToArray(this.onComplete, fn);\n  }\n\n  setStyle(style, value) {\n    if (isString(style)) {\n      const name = prefix(style);\n      if (!hasOwn(this.originals, name)) this.originals[name] = this.node.style[name];\n      this.node.style[name] = value;\n      this.targets[name] = this.node.style[name];\n    } else {\n      let prop;\n      for (prop in style) {\n        if (hasOwn(style, prop)) {\n          this.setStyle(prop, style[prop]);\n        }\n      }\n    }\n\n    return this;\n  }\n\n  shouldFire(type) {\n    if (!this.ractive.transitionsEnabled) return false;\n\n    // check for noIntro and noOutro cases, which only apply when the owner ractive is rendering and unrendering, respectively\n    if (type === 'intro' && this.ractive.rendering && nearestProp('noIntro', this.ractive, true))\n      return false;\n    if (type === 'outro' && this.ractive.unrendering && nearestProp('noOutro', this.ractive, false))\n      return false;\n\n    const params = this.getParams(); // this is an array, the params object should be the first member\n    // if there's not a parent element, this can't be nested, so roll on\n    if (!this.element.parent) return true;\n\n    // if there is a local param, it takes precedent\n    if (params && params[0] && isObject(params[0]) && 'nested' in params[0]) {\n      if (params[0].nested !== false) return true;\n    } else {\n      // use the nearest instance setting\n      // find the nearest instance that actually has a nested setting\n      if (nearestProp('nestedTransitions', this.ractive) !== false) return true;\n    }\n\n    // check to see if this is actually a nested transition\n    let el = this.element.parent;\n    while (el) {\n      if (el[type] && el[type].starting) return false;\n      el = el.parent;\n    }\n\n    return true;\n  }\n\n  start() {\n    const node = (this.node = this.element.node);\n    const originals = (this.originals = {}); //= node.getAttribute( 'style' );\n    const targets = (this.targets = {});\n\n    let completed;\n    const args = this.getParams();\n\n    // create t.complete() - we don't want this on the prototype,\n    // because we don't want `this` silliness when passing it as\n    // an argument\n    this.complete = noReset => {\n      this.starting = false;\n      if (completed) {\n        return;\n      }\n\n      this.onComplete.forEach(fn => fn());\n      if (!noReset && this.isIntro) {\n        for (const k in targets) {\n          if (node.style[k] === targets[k]) node.style[k] = originals[k];\n        }\n      }\n\n      this._manager.remove(this);\n\n      completed = true;\n    };\n\n    // If the transition function doesn't exist, abort\n    if (!this._fn) {\n      this.complete();\n      return;\n    }\n\n    const promise = this._fn.apply(this.ractive, [this].concat(args));\n    if (promise) promise.then(this.complete);\n  }\n\n  toString() {\n    return '';\n  }\n\n  unbind() {\n    if (!this.element.attributes.unbinding) {\n      const type = this.options && this.options.template && this.options.template.v;\n      if (type === 't0' || type === 't1') this.element.intro = null;\n      if (type === 't0' || type === 't2') this.element.outro = null;\n    }\n  }\n\n  unregisterCompleteHandler(fn) {\n    removeFromArray(this.onComplete, fn);\n  }\n}\n\nconst proto = Transition.prototype;\nproto.destroyed = proto.firstNode = proto.rebound = proto.render = proto.unrender = proto.update = noop;\n\nfunction nearestProp(prop, ractive, rendering) {\n  let instance = ractive;\n  while (instance) {\n    if (\n      hasOwn(instance, prop) &&\n      (rendering === undefined || rendering ? instance.rendering : instance.unrendering)\n    )\n      return instance[prop];\n    instance = instance.component && instance.component.ractive;\n  }\n\n  return ractive[prop];\n}\n","import { svg } from 'config/namespaces';\nimport { createElement } from 'utils/dom';\n\nconst elementCache = {};\n\nlet ieBug;\nlet ieBlacklist;\n\ntry {\n  createElement('table').innerHTML = 'foo';\n} catch (/* istanbul ignore next */ err) {\n  ieBug = true;\n\n  ieBlacklist = {\n    TABLE: ['<table class=\"x\">', '</table>'],\n    THEAD: ['<table><thead class=\"x\">', '</thead></table>'],\n    TBODY: ['<table><tbody class=\"x\">', '</tbody></table>'],\n    TR: ['<table><tr class=\"x\">', '</tr></table>'],\n    SELECT: ['<select class=\"x\">', '</select>']\n  };\n}\n\nexport default function(html, node) {\n  const nodes = [];\n\n  // render 0 and false\n  if (html == null || html === '') return nodes;\n\n  let container;\n  let wrapper;\n  let selectedOption;\n\n  /* istanbul ignore if */\n  if (ieBug && (wrapper = ieBlacklist[node.tagName])) {\n    container = element('DIV');\n    container.innerHTML = wrapper[0] + html + wrapper[1];\n    container = container.querySelector('.x');\n\n    if (container.tagName === 'SELECT') {\n      selectedOption = container.options[container.selectedIndex];\n    }\n  } else if (node.namespaceURI === svg) {\n    container = element('DIV');\n    container.innerHTML = '<svg class=\"x\">' + html + '</svg>';\n    container = container.querySelector('.x');\n  } else if (node.tagName === 'TEXTAREA') {\n    container = createElement('div');\n\n    if (typeof container.textContent !== 'undefined') {\n      container.textContent = html;\n    } else {\n      container.innerHTML = html;\n    }\n  } else {\n    container = element(node.tagName);\n    container.innerHTML = html;\n\n    if (container.tagName === 'SELECT') {\n      selectedOption = container.options[container.selectedIndex];\n    }\n  }\n\n  let child;\n  while ((child = container.firstChild)) {\n    nodes.push(child);\n    container.removeChild(child);\n  }\n\n  // This is really annoying. Extracting <option> nodes from the\n  // temporary container <select> causes the remaining ones to\n  // become selected. So now we have to deselect them. IE8, you\n  // amaze me. You really do\n  // ...and now Chrome too\n  let i;\n  if (node.tagName === 'SELECT') {\n    i = nodes.length;\n    while (i--) {\n      if (nodes[i] !== selectedOption) {\n        nodes[i].selected = false;\n      }\n    }\n  }\n\n  return nodes;\n}\n\nfunction element(tagName) {\n  return elementCache[tagName] || (elementCache[tagName] = createElement(tagName));\n}\n","import { createDocumentFragment, matches } from 'utils/dom';\nimport { detachNode } from 'utils/dom';\nimport { decodeCharacterReferences } from 'utils/html';\nimport runloop from 'src/global/runloop';\nimport Mustache from './shared/Mustache';\nimport insertHtml from './triple/insertHtml';\nimport { inAttribute } from './element/Attribute';\n\nexport default class Triple extends Mustache {\n  constructor(options) {\n    super(options);\n  }\n\n  detach() {\n    const docFrag = createDocumentFragment();\n    if (this.nodes) this.nodes.forEach(node => docFrag.appendChild(node));\n    return docFrag;\n  }\n\n  find(selector) {\n    const len = this.nodes.length;\n    let i;\n\n    for (i = 0; i < len; i += 1) {\n      const node = this.nodes[i];\n\n      if (node.nodeType !== 1) continue;\n\n      if (matches(node, selector)) return node;\n\n      const queryResult = node.querySelector(selector);\n      if (queryResult) return queryResult;\n    }\n\n    return null;\n  }\n\n  findAll(selector, options) {\n    const { result } = options;\n    const len = this.nodes.length;\n    let i;\n\n    for (i = 0; i < len; i += 1) {\n      const node = this.nodes[i];\n\n      if (node.nodeType !== 1) continue;\n\n      if (matches(node, selector)) result.push(node);\n\n      const queryAllResult = node.querySelectorAll(selector);\n      if (queryAllResult) {\n        result.push.apply(result, queryAllResult);\n      }\n    }\n  }\n\n  findComponent() {\n    return null;\n  }\n\n  firstNode() {\n    return this.rendered && this.nodes[0];\n  }\n\n  render(target, occupants, anchor) {\n    if (!this.nodes) {\n      const html = this.model ? this.model.get() : '';\n      this.nodes = insertHtml(html, target);\n    }\n\n    let nodes = this.nodes;\n\n    // progressive enhancement\n    if (occupants) {\n      let i = -1;\n      let next;\n\n      // start with the first node that should be rendered\n      while (occupants.length && (next = this.nodes[i + 1])) {\n        let n;\n        // look through the occupants until a matching node is found\n        while ((n = occupants.shift())) {\n          const t = n.nodeType;\n\n          if (\n            t === next.nodeType &&\n            ((t === 1 && n.outerHTML === next.outerHTML) ||\n              ((t === 3 || t === 8) && n.nodeValue === next.nodeValue))\n          ) {\n            this.nodes.splice(++i, 1, n); // replace the generated node with the existing one\n            break;\n          } else {\n            target.removeChild(n); // remove the non-matching existing node\n          }\n        }\n      }\n\n      if (i >= 0) {\n        // update the list of remaining nodes to attach, excluding any that were replaced by existing nodes\n        nodes = this.nodes.slice(i);\n      }\n\n      // update the anchor to be the next occupant\n      if (occupants.length) anchor = occupants[0];\n    }\n\n    // attach any remainging nodes to the parent\n    if (nodes.length) {\n      const frag = createDocumentFragment();\n      nodes.forEach(n => frag.appendChild(n));\n\n      if (anchor) {\n        target.insertBefore(frag, anchor);\n      } else {\n        target.appendChild(frag);\n      }\n    }\n\n    this.rendered = true;\n  }\n\n  toString() {\n    let value = this.model && this.model.get();\n    value = value != null ? '' + value : '';\n\n    return inAttribute() ? decodeCharacterReferences(value) : value;\n  }\n\n  unrender() {\n    if (this.nodes)\n      this.nodes.forEach(node => {\n        // defer detachment until all relevant outros are done\n        runloop.detachWhenReady({\n          node,\n          detach() {\n            detachNode(node);\n          }\n        });\n      });\n    this.rendered = false;\n    this.nodes = null;\n  }\n\n  update() {\n    if (this.rendered && this.dirty) {\n      this.dirty = false;\n\n      this.unrender();\n      this.render(this.up.findParentNode(), null, this.up.findNextNode(this));\n    } else {\n      // make sure to reset the dirty flag even if not rendered\n      this.dirty = false;\n    }\n  }\n}\n","import { noRegistryFunctionReturn } from 'config/errors';\nimport { warnIfDebug } from 'utils/log';\nimport { findInstance } from 'shared/registry';\nimport { hasOwn } from 'utils/object';\nimport { isFunction, isString } from 'utils/is';\n\n// finds the component constructor in the registry or view hierarchy registries\nexport default function getComponentConstructor(ractive, name) {\n  const instance = findInstance('components', ractive, name);\n  let Component;\n\n  if (instance) {\n    Component = instance.components[name];\n\n    if (Component && !Component.isInstance) {\n      if (Component.default && Component.default.isInstance) Component = Component.default;\n      else if (!Component.then && isFunction(Component)) {\n        // function option, execute and store for reset\n        const fn = Component.bind(instance);\n        fn.isOwner = hasOwn(instance.components, name);\n        Component = fn();\n\n        if (!Component) {\n          warnIfDebug(noRegistryFunctionReturn, name, 'component', 'component', {\n            ractive\n          });\n          return;\n        }\n\n        if (isString(Component)) {\n          // allow string lookup\n          Component = getComponentConstructor(ractive, Component);\n        }\n\n        Component._fn = fn;\n        instance.components[name] = Component;\n      }\n    }\n  }\n\n  return Component;\n}\n","import Partial from './Partial';\nimport { ELEMENT } from 'config/types';\nimport { assign } from 'utils/object';\n\nexport default function asyncProxy(promise, options) {\n  const partials = options.template.p || {};\n  const name = options.template.e;\n\n  const opts = assign({}, options, {\n    template: { t: ELEMENT, e: name },\n    macro(handle) {\n      handle.setTemplate(partials['async-loading'] || []);\n      promise.then(\n        cmp => {\n          options.up.ractive.components[name] = cmp;\n          if (partials['async-loaded']) {\n            handle.partials.component = [options.template];\n            handle.setTemplate(partials['async-loaded']);\n          } else {\n            handle.setTemplate([options.template]);\n          }\n        },\n        err => {\n          if (partials['async-failed']) {\n            handle.aliasLocal('error', 'error');\n            handle.set('@local.error', err);\n            handle.setTemplate(partials['async-failed']);\n          } else {\n            handle.setTemplate([]);\n          }\n        }\n      );\n    }\n  });\n  return new Partial(opts);\n}\n","import { ATTRIBUTE, CATCH, ELEMENT, ELSE, INTERPOLATOR, SECTION, THEN } from 'src/config/types';\nimport Partial from './Partial';\nimport { assign } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nfunction extract(tpl, type, name) {\n  const p = tpl.f.find(s => s.t === type);\n  if (p) {\n    if (p.n)\n      return [\n        {\n          t: 19,\n          n: 54,\n          f: p.f || [],\n          z: [{ n: p.n, x: { r: `__await.${name}` } }]\n        }\n      ];\n    else return p.f || [];\n  } else return [];\n}\n\nexport default function Await(options) {\n  const tpl = options.template;\n\n  const success = extract(tpl, THEN, 'value');\n  const error = extract(tpl, CATCH, 'error');\n  const pending = extract(tpl, SECTION);\n  const undef = extract(tpl, ELSE);\n\n  const opts = assign({}, options, {\n    template: {\n      t: ELEMENT,\n      m: [\n        {\n          t: ATTRIBUTE,\n          n: 'for',\n          f: [{ t: INTERPOLATOR, r: tpl.r, rx: tpl.rx, x: tpl.x }]\n        }\n      ]\n    },\n    macro(handle, attrs) {\n      handle.aliasLocal('__await');\n\n      function update(attrs) {\n        if (attrs.for && isFunction(attrs.for.then)) {\n          handle.setTemplate(pending);\n\n          attrs.for.then(\n            v => {\n              handle.set('@local.value', v);\n              handle.setTemplate(success);\n            },\n            e => {\n              handle.set('@local.error', e);\n              handle.setTemplate(error);\n            }\n          );\n        } else if (attrs.for === undefined) {\n          handle.setTemplate(undef);\n        } else {\n          handle.set('@local.value', attrs.for);\n          handle.setTemplate(success);\n        }\n      }\n\n      update(attrs);\n\n      return {\n        update\n      };\n    }\n  });\n\n  opts.macro.attributes = ['for'];\n\n  return new Partial(opts);\n}\n","import {\n  ALIAS,\n  ANCHOR,\n  AWAIT,\n  COMMENT,\n  COMPONENT,\n  DOCTYPE,\n  ELEMENT,\n  INTERPOLATOR,\n  PARTIAL,\n  SECTION,\n  TRIPLE,\n  YIELDER\n} from 'config/types';\nimport { ATTRIBUTE, BINDING_FLAG, DECORATOR, EVENT, TRANSITION } from 'config/types';\nimport Alias from './Alias';\nimport Attribute from './element/Attribute';\nimport BindingFlag from './element/BindingFlag';\nimport Comment from './Comment';\nimport Component from './Component';\nimport Decorator from './element/Decorator';\nimport Doctype from './Doctype';\nimport Form from './element/specials/Form';\nimport Element from './Element';\nimport EventDirective from './shared/EventDirective';\nimport Interpolator from './Interpolator';\nimport Input from './element/specials/Input';\nimport Mapping from './component/Mapping';\nimport Option from './element/specials/Option';\nimport Partial from './Partial';\nimport Section from './Section';\nimport Select from './element/specials/Select';\nimport Textarea from './element/specials/Textarea';\nimport Text from './Text';\nimport Transition from './element/Transition';\nimport Triple from './Triple';\nimport getComponentConstructor from './component/getComponentConstructor';\nimport findElement from './shared/findElement';\nimport { findInstance } from 'shared/registry';\nimport asyncProxy from './asyncProxy';\nimport Await from './Await';\nimport { isString, isFunction } from 'utils/is';\n\nconst constructors = {};\nconstructors[ALIAS] = Alias;\nconstructors[ANCHOR] = Component;\nconstructors[AWAIT] = Await;\nconstructors[DOCTYPE] = Doctype;\nconstructors[INTERPOLATOR] = Interpolator;\nconstructors[PARTIAL] = Partial;\nconstructors[SECTION] = Section;\nconstructors[TRIPLE] = Triple;\nconstructors[YIELDER] = Partial;\n\nconstructors[ATTRIBUTE] = Attribute;\nconstructors[BINDING_FLAG] = BindingFlag;\nconstructors[DECORATOR] = Decorator;\nconstructors[EVENT] = EventDirective;\nconstructors[TRANSITION] = Transition;\nconstructors[COMMENT] = Comment;\n\nconst specialElements = {\n  doctype: Doctype,\n  form: Form,\n  input: Input,\n  option: Option,\n  select: Select,\n  textarea: Textarea\n};\n\nexport default function createItem(options) {\n  if (isString(options.template)) {\n    return new Text(options);\n  }\n\n  let ctor;\n  let name;\n  const type = options.template.t;\n\n  if (type === ELEMENT) {\n    name = options.template.e;\n\n    // could be a macro partial\n    ctor = findInstance('partials', options.up.ractive, name);\n    if (ctor) {\n      ctor = ctor.partials[name];\n      if (ctor.styleSet) {\n        options.macro = ctor;\n        return new Partial(options);\n      }\n    }\n\n    // could be component or element\n    ctor = getComponentConstructor(options.up.ractive, name);\n    if (ctor) {\n      if (isFunction(ctor.then)) {\n        return asyncProxy(ctor, options);\n      } else if (isFunction(ctor)) {\n        return new Component(options, ctor);\n      }\n    }\n\n    ctor = specialElements[name.toLowerCase()] || Element;\n    return new ctor(options);\n  }\n\n  let Item;\n\n  // component mappings are a special case of attribute\n  if (type === ATTRIBUTE) {\n    let el = options.owner;\n    if (!el || (el.type !== ANCHOR && el.type !== COMPONENT && el.type !== ELEMENT)) {\n      el = findElement(options.up);\n    }\n    options.element = el;\n\n    Item = el.type === COMPONENT || el.type === ANCHOR ? Mapping : Attribute;\n  } else {\n    Item = constructors[type];\n  }\n\n  if (!Item) throw new Error(`Unrecognised item type ${type}`);\n\n  return new Item(options);\n}\n","import { TEXT } from 'config/types';\n\n// TODO all this code needs to die\nexport default function processItems(items, values, guid, counter = 0) {\n  return items\n    .map(item => {\n      if (item.type === TEXT) {\n        return item.template;\n      }\n\n      if (item.fragment) {\n        if (item.fragment.iterations) {\n          return item.fragment.iterations\n            .map(fragment => {\n              return processItems(fragment.items, values, guid, counter);\n            })\n            .join('');\n        } else {\n          return processItems(item.fragment.items, values, guid, counter);\n        }\n      }\n\n      const placeholderId = `${guid}-${counter++}`;\n      const model = item.model || item.newModel;\n\n      values[placeholderId] = model\n        ? model.wrapper\n          ? model.wrapperValue\n          : model.get()\n        : undefined;\n\n      return '${' + placeholderId + '}';\n    })\n    .join('');\n}\n","import { ELEMENT, YIELDER } from 'config/types';\nimport runloop from 'src/global/runloop';\nimport { findMap } from 'utils/array';\nimport { getContext, findParentWithContext } from 'shared/getRactiveContext';\nimport { shuffled, toEscapedString, toString } from 'shared/methodCallers';\nimport createItem from './items/createItem';\nimport processItems from './helpers/processItems';\nimport parseJSON from 'utils/parseJSON';\nimport { createDocumentFragment } from 'utils/dom';\nimport KeyModel from 'src/model/specials/KeyModel';\n\nexport default class Fragment {\n  constructor(options) {\n    this.owner = options.owner; // The item that owns this fragment - an element, section, partial, or attribute\n\n    this.isRoot = !options.owner.up;\n    this.parent = this.isRoot ? null : this.owner.up;\n    this.ractive = options.ractive || (this.isRoot ? options.owner : this.parent.ractive);\n\n    this.componentParent = this.isRoot && this.ractive.component ? this.ractive.component.up : null;\n    if (!this.isRoot || this.ractive.delegate) {\n      this.delegate = this.owner.containerFragment\n        ? this.owner.containerFragment && this.owner.containerFragment.delegate\n        : (this.componentParent && this.componentParent.delegate) ||\n          (this.parent && this.parent.delegate);\n    } else {\n      this.delegate = false;\n    }\n\n    this.context = null;\n    this.rendered = false;\n\n    // encapsulated styles should be inherited until they get applied by an element\n    if ('cssIds' in options) {\n      this.cssIds = options.cssIds && options.cssIds.length && options.cssIds;\n    } else {\n      this.cssIds = this.parent ? this.parent.cssIds : null;\n    }\n\n    this.dirty = false;\n    this.dirtyValue = true; // used for attribute values\n\n    this.template = options.template || [];\n    this.createItems();\n  }\n\n  bind(context) {\n    this.context = context;\n    const len = this.items.length;\n    for (let i = 0; i < len; i++) this.items[i].bind();\n    this.bound = true;\n\n    // in rare cases, a forced resolution (or similar) will cause the\n    // fragment to be dirty before it's even finished binding. In those\n    // cases we update immediately\n    if (this.dirty) this.update();\n\n    return this;\n  }\n\n  bubble() {\n    this.dirtyValue = true;\n\n    if (!this.dirty) {\n      this.dirty = true;\n\n      if (this.isRoot) {\n        // TODO encapsulate 'is component root, but not overall root' check?\n        if (this.ractive.component) {\n          this.ractive.component.bubble();\n        } else if (this.bound) {\n          runloop.addFragment(this);\n        }\n      } else {\n        this.owner.bubble(this.index);\n      }\n    }\n  }\n\n  createItems() {\n    // this is a hot code path\n    const max = this.template.length;\n    this.items = [];\n    for (let i = 0; i < max; i++) {\n      this.items[i] = createItem({\n        up: this,\n        template: this.template[i],\n        index: i\n      });\n    }\n  }\n\n  destroyed() {\n    const len = this.items.length;\n    for (let i = 0; i < len; i++) this.items[i].destroyed();\n    if (this.pathModel) this.pathModel.destroyed();\n    if (this.rootModel) this.rootModel.destroyed();\n  }\n\n  detach() {\n    const docFrag = createDocumentFragment();\n    const xs = this.items;\n    const len = xs.length;\n    for (let i = 0; i < len; i++) {\n      docFrag.appendChild(xs[i].detach());\n    }\n    return docFrag;\n  }\n\n  find(selector, options) {\n    return findMap(this.items, i => i.find(selector, options));\n  }\n\n  findAll(selector, options) {\n    if (this.items) {\n      this.items.forEach(i => i.findAll && i.findAll(selector, options));\n    }\n  }\n\n  findComponent(name, options) {\n    return findMap(this.items, i => i.findComponent(name, options));\n  }\n\n  findAllComponents(name, options) {\n    if (this.items) {\n      this.items.forEach(i => i.findAllComponents && i.findAllComponents(name, options));\n    }\n  }\n\n  findContext() {\n    const base = findParentWithContext(this);\n    if (!base || !base.context) return this.ractive.viewmodel;\n    else return base.context;\n  }\n\n  findNextNode(item) {\n    // search for the next node going forward\n    if (item) {\n      let it;\n      for (let i = item.index + 1; i < this.items.length; i++) {\n        it = this.items[i];\n        if (!it || !it.firstNode) continue;\n\n        const node = it.firstNode(true);\n        if (node) return node;\n      }\n    }\n\n    // if this is the root fragment, and there are no more items,\n    // it means we're at the end...\n    if (this.isRoot) {\n      if (this.ractive.component) {\n        return this.ractive.component.up.findNextNode(this.ractive.component);\n      }\n\n      // TODO possible edge case with other content\n      // appended to this.ractive.el?\n      return null;\n    }\n\n    if (this.parent) return this.owner.findNextNode(this); // the argument is in case the parent is a RepeatedFragment\n  }\n\n  findParentNode() {\n    let fragment = this;\n\n    do {\n      if (fragment.owner.type === ELEMENT) {\n        return fragment.owner.node;\n      }\n\n      if (fragment.isRoot && !fragment.ractive.component) {\n        // TODO encapsulate check\n        return fragment.ractive.el;\n      }\n\n      if (fragment.owner.type === YIELDER) {\n        fragment = fragment.owner.containerFragment;\n      } else {\n        fragment = fragment.componentParent || fragment.parent; // TODO ugh\n      }\n    } while (fragment);\n\n    throw new Error('Could not find parent node'); // TODO link to issue tracker\n  }\n\n  firstNode(skipParent) {\n    const node = findMap(this.items, i => i.firstNode(true));\n    if (node) return node;\n    if (skipParent) return null;\n\n    return this.parent.findNextNode(this.owner);\n  }\n\n  getKey() {\n    return this.keyModel || (this.keyModel = new KeyModel(this.key));\n  }\n\n  getIndex() {\n    return this.idxModel || (this.idxModel = new KeyModel(this.index));\n  }\n\n  rebind(next) {\n    this.context = next;\n    if (this.rootModel) this.rootModel.context = this.context;\n    if (this.pathModel) this.pathModel.context = this.context;\n  }\n\n  rebound(update) {\n    this.items.forEach(x => x.rebound(update));\n    if (update) {\n      if (this.rootModel) this.rootModel.applyValue(this.context.getKeypath(this.ractive.root));\n      if (this.pathModel) this.pathModel.applyValue(this.context.getKeypath());\n    }\n  }\n\n  render(target, occupants) {\n    if (this.rendered) throw new Error('Fragment is already rendered!');\n    this.rendered = true;\n\n    const xs = this.items;\n    const len = xs.length;\n    for (let i = 0; i < len; i++) {\n      xs[i].render(target, occupants);\n    }\n  }\n\n  resetTemplate(template) {\n    const wasBound = this.bound;\n    const wasRendered = this.rendered;\n\n    // TODO ensure transitions are disabled globally during reset\n\n    if (wasBound) {\n      if (wasRendered) this.unrender(true);\n      this.unbind();\n    }\n\n    this.template = template;\n    this.createItems();\n\n    if (wasBound) {\n      this.bind(this.context);\n\n      if (wasRendered) {\n        const parentNode = this.findParentNode();\n        const anchor = this.findNextNode();\n\n        if (anchor) {\n          const docFrag = createDocumentFragment();\n          this.render(docFrag);\n          parentNode.insertBefore(docFrag, anchor);\n        } else {\n          this.render(parentNode);\n        }\n      }\n    }\n  }\n\n  shuffled() {\n    this.items.forEach(shuffled);\n    if (this.rootModel) this.rootModel.applyValue(this.context.getKeypath(this.ractive.root));\n    if (this.pathModel) this.pathModel.applyValue(this.context.getKeypath());\n  }\n\n  toString(escape) {\n    return this.items.map(escape ? toEscapedString : toString).join('');\n  }\n\n  unbind() {\n    this.context = null;\n    const len = this.items.length;\n    for (let i = 0; i < len; i++) this.items[i].unbind();\n    this.bound = false;\n\n    return this;\n  }\n\n  unrender(shouldDestroy) {\n    const len = this.items.length;\n    for (let i = 0; i < len; i++) this.items[i].unrender(shouldDestroy);\n    this.rendered = false;\n  }\n\n  update() {\n    if (this.dirty) {\n      if (!this.updating) {\n        this.dirty = false;\n        this.updating = true;\n        const len = this.items.length;\n        for (let i = 0; i < len; i++) this.items[i].update();\n        this.updating = false;\n      } else if (this.isRoot) {\n        runloop.addFragmentToRoot(this);\n      }\n    }\n  }\n\n  valueOf() {\n    if (this.items.length === 1) {\n      return this.items[0].valueOf();\n    }\n\n    if (this.dirtyValue) {\n      const values = {};\n      const source = processItems(this.items, values, this.ractive._guid);\n      const parsed = parseJSON(source, values);\n\n      this.value = parsed ? parsed.value : this.toString();\n\n      this.dirtyValue = false;\n    }\n\n    return this.value;\n  }\n}\nFragment.prototype.getContext = getContext;\nFragment.prototype.getKeypath = getKeypath;\n\nexport function getKeypath(root) {\n  const base = findParentWithContext(this);\n  let model;\n  if (root) {\n    if (!this.rootModel) {\n      this.rootModel = new KeyModel(\n        this.context.getKeypath(this.ractive.root),\n        this.context,\n        this.ractive.root\n      );\n      model = this.rootModel;\n    } else return this.rootModel;\n  } else {\n    if (!this.pathModel) {\n      this.pathModel = new KeyModel(this.context.getKeypath(), this.context);\n      model = this.pathModel;\n    } else return this.pathModel;\n  }\n\n  if (base && base.context) base.getKeypath(root).registerChild(model);\n\n  return model;\n}\n","import { logIfDebug, warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { getElement } from 'utils/dom';\nimport { isArray } from 'utils/is';\nimport config from './config/config';\nimport Fragment from 'src/view/Fragment';\nimport hooks from 'src/events/Hook';\nimport Ractive from '../Ractive';\nimport subscribe from './helpers/subscribe';\n\nexport default function initialise(ractive, userOptions, options) {\n  // initialize settable computeds\n  const computed = ractive.viewmodel.computed;\n  if (computed) {\n    for (const k in computed) {\n      if (k in ractive.viewmodel.value && computed[k] && !computed[k].isReadonly) {\n        computed[k].set(ractive.viewmodel.value[k]);\n      }\n    }\n  }\n\n  // init config from Parent and options\n  config.init(ractive.constructor, ractive, userOptions);\n\n  hooks.config.fire(ractive);\n\n  hooks.init.begin(ractive);\n\n  const fragment = (ractive.fragment = createFragment(ractive, options));\n  if (fragment) fragment.bind(ractive.viewmodel);\n\n  hooks.init.end(ractive);\n\n  // general config done, set up observers\n  subscribe(ractive, userOptions, 'observe');\n\n  // call any passed in plugins\n  if (isArray(userOptions.use))\n    ractive.use.apply(ractive, userOptions.use.filter(p => !p.construct));\n\n  if (fragment) {\n    // render automatically ( if `el` is specified )\n    const el = (ractive.el = ractive.target = getElement(ractive.el || ractive.target));\n    if (el && !ractive.component) {\n      const promise = ractive.render(el, ractive.append);\n\n      if (Ractive.DEBUG_PROMISES) {\n        promise.catch(err => {\n          warnOnceIfDebug(\n            'Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\\n  Ractive.DEBUG_PROMISES = false;'\n          );\n          warnIfDebug('An error happened during rendering', { ractive });\n          logIfDebug(err);\n\n          throw err;\n        });\n      }\n    }\n  }\n}\n\nexport function createFragment(ractive, options = {}) {\n  if (ractive.template) {\n    const cssIds = [].concat(ractive.constructor._cssIds || [], options.cssIds || []);\n\n    return new Fragment({\n      owner: ractive,\n      template: ractive.template,\n      cssIds\n    });\n  }\n}\n","import { doc } from 'config/environment';\nimport { applyCSS } from 'src/global/css';\nimport hooks from 'src/events/Hook';\nimport { getElement } from 'utils/dom';\nimport runloop from 'src/global/runloop';\nimport { createFragment } from './initialise';\n\nexport default function render(ractive, target, anchor, occupants) {\n  // set a flag to let any transitions know that this instance is currently rendering\n  ractive.rendering = true;\n\n  const promise = runloop.start();\n  runloop.scheduleTask(() => hooks.render.fire(ractive), true);\n\n  if (ractive.fragment.rendered) {\n    throw new Error(\n      'You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first'\n    );\n  }\n\n  if (ractive.destroyed) {\n    ractive.destroyed = false;\n    ractive.fragment = createFragment(ractive).bind(ractive.viewmodel);\n  }\n\n  anchor = getElement(anchor) || ractive.anchor;\n\n  ractive.el = ractive.target = target;\n  ractive.anchor = anchor;\n\n  // ensure encapsulated CSS is up-to-date\n  if (ractive.cssId) applyCSS();\n\n  if (target) {\n    (target.__ractive_instances__ || (target.__ractive_instances__ = [])).push(ractive);\n\n    if (anchor) {\n      const docFrag = doc.createDocumentFragment();\n      ractive.fragment.render(docFrag);\n      target.insertBefore(docFrag, anchor);\n    } else {\n      ractive.fragment.render(target, occupants);\n    }\n  }\n\n  runloop.end();\n  ractive.rendering = false;\n\n  return promise.then(() => {\n    if (ractive.torndown) return;\n\n    hooks.complete.fire(ractive);\n  });\n}\n","import { getElement } from 'utils/dom';\nimport { toArray } from 'utils/array';\nimport { warnIfDebug } from 'utils/log';\nimport render from '../render';\nimport { teardown } from 'shared/methodCallers';\n\nexport default function Ractive$render(target, anchor) {\n  if (this.torndown) {\n    warnIfDebug('ractive.render() was called on a Ractive instance that was already torn down');\n    return Promise.resolve();\n  }\n\n  target = getElement(target) || this.el;\n\n  if (!this.append && target) {\n    // Teardown any existing instances *before* trying to set up the new one -\n    // avoids certain weird bugs\n    const others = target.__ractive_instances__;\n    if (others) others.forEach(teardown);\n\n    // make sure we are the only occupants\n    if (!this.enhance) {\n      target.innerHTML = ''; // TODO is this quicker than removeChild? Initial research inconclusive\n    }\n  }\n\n  const occupants = this.enhance ? toArray(target.childNodes) : null;\n  const promise = render(this, target, anchor, occupants);\n\n  if (occupants) {\n    while (occupants.length) target.removeChild(occupants.pop());\n  }\n\n  return promise;\n}\n","import runloop from 'src/global/runloop';\nimport config from '../config/config';\nimport hooks from '../../events/Hook';\nimport dataConfigurator from '../config/custom/data';\nimport { isObjectType } from 'utils/is';\n\nconst shouldRerender = ['template', 'partials', 'components', 'decorators', 'events'];\n\nexport default function Ractive$reset(data) {\n  data = data || {};\n\n  if (!isObjectType(data)) {\n    throw new Error('The reset method takes either no arguments, or an object containing new data');\n  }\n\n  // TEMP need to tidy this up\n  data = dataConfigurator.init(this.constructor, this, { data });\n\n  const promise = runloop.start();\n\n  // If the root object is wrapped, try and use the wrapper's reset value\n  const wrapper = this.viewmodel.wrapper;\n  if (wrapper && wrapper.reset) {\n    if (wrapper.reset(data) === false) {\n      // reset was rejected, we need to replace the object\n      this.viewmodel.set(data);\n    }\n  } else {\n    this.viewmodel.set(data);\n  }\n\n  // reset config items and track if need to rerender\n  const changes = config.reset(this);\n  let rerender;\n\n  let i = changes.length;\n  while (i--) {\n    if (shouldRerender.indexOf(changes[i]) > -1) {\n      rerender = true;\n      break;\n    }\n  }\n\n  if (rerender) {\n    hooks.unrender.fire(this);\n    this.fragment.resetTemplate(this.template);\n    hooks.render.fire(this);\n    hooks.complete.fire(this);\n  }\n\n  runloop.end();\n\n  hooks.reset.fire(this, data);\n\n  return promise;\n}\n","import runloop from 'src/global/runloop';\nimport { PARTIAL, COMPONENT, ELEMENT } from 'config/types';\nimport { isArray } from 'utils/is';\nimport { handleChange } from 'shared/methodCallers';\n\nfunction collect(source, name, attr, dest) {\n  source.forEach(item => {\n    // queue to rerender if the item is a partial and the current name matches\n    if (item.type === PARTIAL && (item.refName === name || item.name === name)) {\n      item.inAttribute = attr;\n      dest.push(item);\n      return; // go no further\n    }\n\n    // if it has a fragment, process its items\n    if (item.fragment) {\n      collect(item.fragment.iterations || item.fragment.items, name, attr, dest);\n    } else if (isArray(item.items)) {\n      // or if it is itself a fragment, process its items\n      collect(item.items, name, attr, dest);\n    } else if (item.type === COMPONENT && item.instance) {\n      // or if it is a component, step in and process its items\n      // ...unless the partial is shadowed\n      if (item.instance.partials[name]) return;\n      collect(item.instance.fragment.items, name, attr, dest);\n    }\n\n    // if the item is an element, process its attributes too\n    if (item.type === ELEMENT) {\n      if (isArray(item.attributes)) {\n        collect(item.attributes, name, true, dest);\n      }\n    }\n  });\n}\n\nexport default function(name, partial) {\n  const collection = [];\n  collect(this.fragment.items, name, false, collection);\n\n  const promise = runloop.start();\n\n  this.partials[name] = partial;\n  collection.forEach(handleChange);\n\n  runloop.end();\n\n  return promise;\n}\n","import { createDocumentFragment } from 'utils/dom';\nimport Fragment from 'src/view/Fragment';\nimport runloop from 'src/global/runloop';\nimport { default as templateConfigurator } from '../config/custom/template';\n\n// TODO should resetTemplate be asynchronous? i.e. should it be a case\n// of outro, update template, intro? I reckon probably not, since that\n// could be achieved with unrender-resetTemplate-render. Also, it should\n// conceptually be similar to resetPartial, which couldn't be async\n\nexport default function Ractive$resetTemplate(template) {\n  templateConfigurator.init(null, this, { template });\n\n  const transitionsEnabled = this.transitionsEnabled;\n  this.transitionsEnabled = false;\n\n  // Is this is a component, we need to set the `shouldDestroy`\n  // flag, otherwise it will assume by default that a parent node\n  // will be detached, and therefore it doesn't need to bother\n  // detaching its own nodes\n  const component = this.component;\n  if (component) component.shouldDestroy = true;\n  this.unrender();\n  if (component) component.shouldDestroy = false;\n\n  const promise = runloop.start();\n\n  // remove existing fragment and create new one\n  this.fragment.unbind().unrender(true);\n\n  this.fragment = new Fragment({\n    template: this.template,\n    root: this,\n    owner: this\n  });\n\n  const docFrag = createDocumentFragment();\n  this.fragment.bind(this.viewmodel).render(docFrag);\n\n  // if this is a component, its el may not be valid, so find a\n  // target based on the component container\n  if (component && !component.external) {\n    this.fragment.findParentNode().insertBefore(docFrag, component.findNextNode());\n  } else {\n    this.el.insertBefore(docFrag, this.anchor);\n  }\n\n  runloop.end();\n\n  this.transitionsEnabled = transitionsEnabled;\n\n  return promise;\n}\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('reverse').path;\n","import { build, set } from 'shared/set';\nimport { isObjectType } from 'utils/is';\n\nexport default function Ractive$set(keypath, value, options) {\n  const ractive = this;\n\n  const opts = isObjectType(keypath) ? value : options;\n\n  return set(build(ractive, keypath, value, opts && opts.isolated), opts);\n}\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('shift').path;\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('sort').path;\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('splice').path;\n","import add from './shared/add';\nimport { isNumber, isObjectType } from 'utils/is';\n\nexport default function Ractive$subtract(keypath, d, options) {\n  const num = isNumber(d) ? -d : -1;\n  const opts = isObjectType(d) ? d : options;\n  return add(this, keypath, num, opts);\n}\n","import { badArguments } from 'config/errors';\nimport { gather, set } from 'shared/set';\nimport { isString } from 'utils/is';\n\nexport default function Ractive$toggle(keypath, options) {\n  if (!isString(keypath)) {\n    throw new TypeError(badArguments);\n  }\n\n  return set(\n    gather(this, keypath, null, options && options.isolated).map(m => [m, !m.get()]),\n    options\n  );\n}\n","import { getCSS } from 'src/global/css';\nimport { keys } from 'utils/object';\n\nexport default function Ractive$toCSS() {\n  const cssIds = [this.cssId, ...this.findAllComponents().map(c => c.cssId)];\n  const uniqueCssIds = keys(cssIds.reduce((ids, id) => ((ids[id] = true), ids), {}));\n  return getCSS(uniqueCssIds);\n}\n","export default function Ractive$toHTML() {\n  return this.fragment.toString(true);\n}\n","export default function toText() {\n  return this.fragment.toString(false);\n}\n","import runloop from 'src/global/runloop';\nimport Transition from '../../view/items/element/Transition';\nimport { fatal } from 'utils/log';\nimport { isObject } from 'utils/is';\n\nexport default function Ractive$transition(name, node, params) {\n  if (node instanceof HTMLElement) {\n    // good to go\n  } else if (isObject(node)) {\n    // omitted, use event node\n    params = node;\n  }\n\n  // if we allow query selector, then it won't work\n  // simple params like \"fast\"\n\n  // else if ( typeof node === 'string' ) {\n  // \t// query selector\n  // \tnode = this.find( node )\n  // }\n\n  node = node || this.event.node;\n\n  if (!node || !node._ractive) {\n    fatal(`No node was supplied for transition ${name}`);\n  }\n\n  params = params || {};\n  const owner = node._ractive.proxy;\n  const transition = new Transition({ owner, up: owner.up, name, params });\n  transition.bind();\n\n  const promise = runloop.start();\n  runloop.registerTransition(transition);\n  runloop.end();\n\n  promise.then(() => transition.unbind());\n  return promise;\n}\n","import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\n\nexport default function unlink(here) {\n  const promise = runloop.start();\n  this.viewmodel.joinAll(splitKeypath(here), { lastLink: false }).unlink();\n  runloop.end();\n  return promise;\n}\n","import hooks from 'src/events/Hook';\nimport { warnIfDebug } from 'utils/log';\nimport { removeFromArray } from 'utils/array';\nimport runloop from 'src/global/runloop';\n\nexport default function Ractive$unrender() {\n  if (!this.fragment.rendered) {\n    warnIfDebug('ractive.unrender() was called on a Ractive instance that was not rendered');\n    return Promise.resolve();\n  }\n\n  this.unrendering = true;\n  const promise = runloop.start();\n\n  hooks.unrendering.fire(this);\n\n  // If this is a component, and the component isn't marked for destruction,\n  // don't detach nodes from the DOM unnecessarily\n  const shouldDestroy =\n    !this.component ||\n    (this.component.anchor || {}).shouldDestroy ||\n    this.component.shouldDestroy ||\n    this.shouldDestroy;\n  this.fragment.unrender(shouldDestroy);\n  if (shouldDestroy) this.destroyed = true;\n\n  removeFromArray(this.el.__ractive_instances__, this);\n\n  hooks.unrender.fire(this);\n\n  runloop.end();\n  this.unrendering = false;\n\n  return promise;\n}\n","import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('unshift').path;\n","import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\n\nexport default function Ractive$updateModel(keypath, cascade) {\n  const promise = runloop.start();\n\n  if (!keypath) {\n    this.viewmodel.updateFromBindings(true);\n  } else {\n    this.viewmodel.joinAll(splitKeypath(keypath)).updateFromBindings(cascade !== false);\n  }\n\n  runloop.end();\n\n  return promise;\n}\n","export default function use(...plugins) {\n  plugins.forEach(p => {\n    p({\n      proto: this,\n      Ractive: this.constructor.Ractive,\n      instance: this\n    });\n  });\n  return this;\n}\n","import add from './prototype/add';\nimport animate from './prototype/animate';\nimport attachChild from './prototype/attachChild';\nimport compute from './prototype/compute';\nimport detach from './prototype/detach';\nimport detachChild from './prototype/detachChild';\nimport find from './prototype/find';\nimport findAll from './prototype/findAll';\nimport findAllComponents from './prototype/findAllComponents';\nimport findComponent from './prototype/findComponent';\nimport findContainer from './prototype/findContainer';\nimport findParent from './prototype/findParent';\nimport fire from './prototype/fire';\nimport get from './prototype/get';\nimport getContext from './prototype/getContext';\nimport insert from './prototype/insert';\nimport link from './prototype/link';\nimport observe from './prototype/observe';\nimport observeOnce from './prototype/observeOnce';\nimport off from './prototype/off';\nimport on from './prototype/on';\nimport once from './prototype/once';\nimport pop from './prototype/pop';\nimport push from './prototype/push';\nimport readLink from './prototype/readLink';\nimport render from './prototype/render';\nimport reset from './prototype/reset';\nimport resetPartial from './prototype/resetPartial';\nimport resetTemplate from './prototype/resetTemplate';\nimport reverse from './prototype/reverse';\nimport set from './prototype/set';\nimport shift from './prototype/shift';\nimport sort from './prototype/sort';\nimport splice from './prototype/splice';\nimport subtract from './prototype/subtract';\nimport teardown from './prototype/teardown';\nimport toggle from './prototype/toggle';\nimport toCSS from './prototype/toCSS';\nimport toHTML from './prototype/toHTML';\nimport toText from './prototype/toText';\nimport transition from './prototype/transition';\nimport unlink from './prototype/unlink';\nimport unrender from './prototype/unrender';\nimport unshift from './prototype/unshift';\nimport update from './prototype/update';\nimport updateModel from './prototype/updateModel';\nimport use from './prototype/use';\n\nconst proto = {\n  add,\n  animate,\n  attachChild,\n  compute,\n  detach,\n  detachChild,\n  find,\n  findAll,\n  findAllComponents,\n  findComponent,\n  findContainer,\n  findParent,\n  fire,\n  get,\n  getContext,\n  insert,\n  link,\n  observe,\n  observeOnce,\n  off,\n  on,\n  once,\n  pop,\n  push,\n  readLink,\n  render,\n  reset,\n  resetPartial,\n  resetTemplate,\n  reverse,\n  set,\n  shift,\n  sort,\n  splice,\n  subtract,\n  teardown,\n  toggle,\n  toCSS,\n  toCss: toCSS,\n  toHTML,\n  toHtml: toHTML,\n  toText,\n  transition,\n  unlink,\n  unrender,\n  unshift,\n  update,\n  updateModel,\n  use\n};\n\nexport default proto;\n","export default function isInstance(object) {\n  return object && object instanceof this;\n}\n","import { splitKeypath } from 'shared/keypaths';\n\nexport default function styleGet(keypath, opts) {\n  return this._cssModel.joinAll(splitKeypath(keypath)).get(true, opts);\n}\n","import { isFunction } from 'utils/is';\nimport { addCSS, applyCSS } from 'src/global/css';\nimport { recomputeCSS } from './styleSet';\n\nconst styles = [];\n\nexport function addStyle(id, css) {\n  if (styles.find(s => s.id === id))\n    throw new Error(`Extra styles with the id '${id}' have already been added.`);\n  styles.push({ id, css });\n\n  if (!this.css) {\n    Object.defineProperty(this, 'css', { configurable: false, writable: false, value: buildCSS });\n  }\n\n  if (!this._cssDef) {\n    Object.defineProperty(this, '_cssDef', {\n      configurable: true,\n      writable: false,\n      value: {\n        transform: false,\n        id: 'Ractive.addStyle'\n      }\n    });\n\n    addCSS(this._cssDef);\n  }\n\n  recomputeCSS(this);\n  applyCSS(true);\n}\n\nfunction buildCSS(data) {\n  return styles\n    .map(s => `\\n/* ---- extra style ${s.id} */\\n` + (isFunction(s.css) ? s.css(data) : s.css))\n    .join('');\n}\n\nexport function hasStyle(id) {\n  return !!styles.find(s => s.id === id);\n}\n","import { build, set } from '../../shared/set';\nimport SharedModel from '../../model/specials/SharedModel';\nimport { isObjectType } from 'utils/is';\n\nexport default function sharedSet(keypath, value, options) {\n  const opts = isObjectType(keypath) ? value : options;\n  const model = SharedModel;\n\n  return set(build({ viewmodel: model }, keypath, value, true), opts);\n}\n","import SharedModel from '../../model/specials/SharedModel';\nimport { splitKeypath } from 'shared/keypaths';\n\nexport default function sharedGet(keypath, opts) {\n  return SharedModel.joinAll(splitKeypath(keypath)).get(true, opts);\n}\n","import { isFunction } from 'utils/is';\n\nexport default function use(...plugins) {\n  plugins.forEach(p => {\n    isFunction(p) &&\n      p({\n        proto: this.prototype,\n        Ractive: this.Ractive,\n        instance: this\n      });\n  });\n  return this;\n}\n","import config from '../Ractive/config/config';\nimport dataConfigurator from '../Ractive/config/custom/data';\nimport construct from '../Ractive/construct';\nimport initialise from '../Ractive/initialise';\nimport Ractive from '../Ractive';\nimport isInstance from '../Ractive/static/isInstance';\nimport styleSet from '../Ractive/static/styleSet';\nimport styleGet from '../Ractive/static/styleGet';\nimport { addStyle, hasStyle } from '../Ractive/static/styles';\nimport sharedSet from '../Ractive/static/sharedSet';\nimport sharedGet from '../Ractive/static/sharedGet';\nimport use from '../Ractive/static/use';\nimport { create, defineProperties, toPairs, defineProperty } from 'utils/object';\nimport { isArray, isFunction } from 'utils/is';\n\nconst callsSuper = /super\\s*\\(|\\.call\\s*\\(\\s*this/;\n\nexport function extend(...options) {\n  if (!options.length) {\n    return extendOne(this);\n  } else {\n    return options.reduce(extendOne, this);\n  }\n}\n\nexport function extendWith(Class, options = {}) {\n  return extendOne(this, options, Class);\n}\n\nfunction extendOne(Parent, options = {}, Target) {\n  let proto;\n  let Child = isFunction(Target) && Target;\n\n  if (options.prototype instanceof Ractive) {\n    throw new Error(`Ractive no longer supports multiple inheritance.`);\n  }\n\n  if (Child) {\n    if (!(Child.prototype instanceof Parent)) {\n      throw new Error(\n        `Only classes that inherit the appropriate prototype may be used with extend`\n      );\n    }\n    if (!callsSuper.test(Child.toString())) {\n      throw new Error(`Only classes that call super in their constructor may be used with extend`);\n    }\n\n    proto = Child.prototype;\n  } else {\n    Child = function(options) {\n      if (!(this instanceof Child)) return new Child(options);\n\n      construct(this, options || {});\n      initialise(this, options || {}, {});\n    };\n\n    proto = create(Parent.prototype);\n    proto.constructor = Child;\n\n    Child.prototype = proto;\n  }\n\n  // Static properties\n  defineProperties(Child, {\n    // alias prototype as defaults\n    defaults: { value: proto },\n\n    extend: { value: extend, writable: true, configurable: true },\n    extendWith: { value: extendWith, writable: true, configurable: true },\n    extensions: { value: [] },\n    use: { value: use },\n\n    isInstance: { value: isInstance },\n\n    Parent: { value: Parent },\n    Ractive: { value: Ractive },\n\n    styleGet: { value: styleGet.bind(Child), configurable: true },\n    styleSet: { value: styleSet.bind(Child), configurable: true }\n  });\n\n  // extend configuration\n  config.extend(Parent, proto, options, Child);\n\n  // store event and observer registries on the constructor when extending\n  Child._on = (Parent._on || []).concat(toPairs(options.on));\n  Child._observe = (Parent._observe || []).concat(toPairs(options.observe));\n\n  Parent.extensions.push(Child);\n\n  // attribute defs are not inherited, but they need to be stored\n  if (options.attributes) {\n    let attrs;\n\n    // allow an array of optional props or an object with arrays for optional and required props\n    if (isArray(options.attributes)) {\n      attrs = { optional: options.attributes, required: [] };\n    } else {\n      attrs = options.attributes;\n    }\n\n    // make sure the requisite keys actually store arrays\n    if (!isArray(attrs.required)) attrs.required = [];\n    if (!isArray(attrs.optional)) attrs.optional = [];\n\n    Child.attributes = attrs;\n  }\n\n  dataConfigurator.extend(Parent, proto, options, Child);\n\n  defineProperty(Child, 'helpers', { writable: true, value: proto.helpers });\n\n  if (isArray(options.use)) Child.use.apply(Child, options.use);\n\n  return Child;\n}\n\ndefineProperties(Ractive, {\n  sharedGet: { value: sharedGet },\n  sharedSet: { value: sharedSet },\n  styleGet: { configurable: true, value: styleGet.bind(Ractive) },\n  styleSet: { configurable: true, value: styleSet.bind(Ractive) },\n  addCSS: { configurable: false, value: addStyle.bind(Ractive) },\n  hasCSS: { configurable: false, value: hasStyle.bind(Ractive) }\n});\n","import styleGet from '../Ractive/static/styleGet';\nimport styleSet from '../Ractive/static/styleSet';\nimport CSSModel from 'src/model/specials/CSSModel';\nimport { assign, create, defineProperties, defineProperty } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nimport { initCSS } from 'src/Ractive/config/custom/css/css';\n\nexport default function macro(fn, opts) {\n  if (!isFunction(fn)) throw new Error(`The macro must be a function`);\n\n  assign(fn, opts);\n\n  defineProperties(fn, {\n    extensions: { value: [] },\n    _cssIds: { value: [] },\n    cssData: { value: assign(create(this.cssData), fn.cssData || {}) },\n\n    styleGet: { value: styleGet.bind(fn) },\n    styleSet: { value: styleSet.bind(fn) }\n  });\n\n  defineProperty(fn, '_cssModel', { value: new CSSModel(fn) });\n\n  if (fn.css) initCSS(fn, fn, fn);\n\n  this.extensions.push(fn);\n\n  return fn;\n}\n","import { escapeKey, splitKeypath as splitKeypathI, unescapeKey } from 'shared/keypaths';\n\nexport function joinKeys(...keys) {\n  return keys.map(escapeKey).join('.');\n}\n\nexport function splitKeypath(keypath) {\n  return splitKeypathI(keypath).map(unescapeKey);\n}\n","import { findInViewHierarchy } from 'shared/registry';\n\nexport function findPlugin(name, type, instance) {\n  return findInViewHierarchy(type, instance, name);\n}\n","import './polyfills/Object.assign';\nimport './polyfills/array.find';\nimport './polyfills/node.contains';\nimport './polyfills/performance.now';\nimport './polyfills/Promise';\nimport './polyfills/requestAnimationFrame';\n\nimport defaults from './Ractive/config/defaults';\nimport easing from './Ractive/static/easing';\nimport interpolators from './Ractive/static/interpolators';\nimport { svg, win } from './config/environment';\nimport proto from './Ractive/prototype';\nimport { extend, extendWith } from './extend/_extend';\nimport macro from './extend/_macro';\nimport parse from './parse/_parse';\nimport getContext from './Ractive/static/getContext';\nimport isInstance from './Ractive/static/isInstance';\nimport use from './Ractive/static/use';\nimport construct from './Ractive/construct';\nimport initialise from './Ractive/initialise';\nimport { getCSS } from './global/css';\nimport { escapeKey, unescapeKey, normalise } from './shared/keypaths';\nimport { joinKeys, splitKeypath } from './Ractive/static/keypaths';\nimport shared from './Ractive/shared';\nimport { findPlugin } from './Ractive/static/findPlugin';\nimport parseJSON from './utils/parseJSON';\nimport CSSModel from './model/specials/CSSModel';\nimport { data as sharedData } from './model/specials/SharedModel';\nimport { extern } from './shared/getRactiveContext';\nimport { warn } from 'utils/log';\n\nimport { assign, defineProperty, defineProperties } from 'utils/object';\n\nexport default function Ractive(options) {\n  if (!(this instanceof Ractive)) return new Ractive(options);\n\n  construct(this, options || {});\n  initialise(this, options || {}, {});\n}\n\n// check to see if we're being asked to force Ractive as a global for some weird environments\nif (win && !win.Ractive) {\n  let opts = '';\n  const script =\n    document.currentScript ||\n    /* istanbul ignore next */ document.querySelector('script[data-ractive-options]');\n\n  if (script) opts = script.getAttribute('data-ractive-options') || '';\n\n  /* istanbul ignore next */\n  if (~opts.indexOf('ForceGlobal')) win.Ractive = Ractive;\n} else if (win) {\n  warn(`Ractive already appears to be loaded while loading 0.10.10.`);\n}\n\nassign(Ractive.prototype, proto, defaults);\nRactive.prototype.constructor = Ractive;\n\n// alias prototype as `defaults`\nRactive.defaults = Ractive.prototype;\n\n// share defaults with the parser\nshared.defaults = Ractive.defaults;\nshared.Ractive = Ractive;\n\n// static properties\ndefineProperties(Ractive, {\n  // debug flag\n  DEBUG: { writable: true, value: true },\n  DEBUG_PROMISES: { writable: true, value: true },\n\n  // static methods:\n  extend: { value: extend },\n  extendWith: { value: extendWith },\n  escapeKey: { value: escapeKey },\n  evalObjectString: { value: parseJSON },\n  findPlugin: { value: findPlugin },\n  getContext: { value: getContext },\n  getCSS: { value: getCSS },\n  isInstance: { value: isInstance },\n  joinKeys: { value: joinKeys },\n  macro: { value: macro },\n  normaliseKeypath: { value: normalise },\n  parse: { value: parse },\n  splitKeypath: { value: splitKeypath },\n  // sharedSet and styleSet are in _extend because circular refs\n  unescapeKey: { value: unescapeKey },\n  use: { value: use },\n\n  // support\n  enhance: { writable: true, value: false },\n  svg: { value: svg },\n\n  // version\n  VERSION: { value: '0.10.10' },\n\n  // plugins\n  adaptors: { writable: true, value: {} },\n  components: { writable: true, value: {} },\n  decorators: { writable: true, value: {} },\n  easing: { writable: true, value: easing },\n  events: { writable: true, value: {} },\n  extensions: { value: [] },\n  helpers: { writable: true, value: defaults.helpers },\n  interpolators: { writable: true, value: interpolators },\n  partials: { writable: true, value: {} },\n  transitions: { writable: true, value: {} },\n\n  // CSS variables\n  cssData: { configurable: true, value: {} },\n\n  // access to @shared without an instance\n  sharedData: { value: sharedData },\n\n  // for getting the source Ractive lib from a constructor\n  Ractive: { value: Ractive },\n\n  // to allow extending contexts\n  Context: { value: extern.Context.prototype }\n});\n\n// cssData must already be in place\ndefineProperty(Ractive, '_cssModel', {\n  configurable: true,\n  value: new CSSModel(Ractive)\n});\n\ndefineProperty(Ractive.prototype, 'rendered', {\n  get() {\n    return this.fragment && this.fragment.rendered;\n  }\n});\n"],"names":["keys","objectKeys","bind","toString","readNumberLiteral","stringMiddlePattern","namePattern","getKeyValuePair","readRegexpLiteral","name","readLogicalOr","readConditional","leadingWhitespace","readElement","readMustacheComment","shared","SharedModel","easing","update","sharedSet","build","protoAnimate","protoUpdate","getContext","staticContext","svg","star","updateOld","trim","transformCSS","combine","validate","RactiveProto","wrapPrototype","prototype","teardown","proto","div","set","SharedBase","registryNames","callRender","render","push","getValue","xmlns","specials","numberPattern","onlyWhitespace","prefix","createTransitions","html","createFragment","collect","add","animate","compute","detach","find","findAll","findAllComponents","findComponent","findContainer","findParent","fire","get","insert","off","on","once","reset","resetTemplate","subtract","toggle","toCSS","toHTML","transition","unrender","updateModel","use","styleSet","splitKeypath","splitKeypathI","sharedData"],"mappings":"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,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,GAAG;EACT,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,GAAG,EAAE,GAAG;EACR,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,GAAG;EACT,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,GAAG;EACT,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,GAAG,EAAE,GAAG;EACR,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV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"}