[
  {
    "__docId__": 0,
    "kind": "file",
    "name": "src/backed-element.js",
    "content": "import LitMixin from './mixins/lit-mixin.js';\nimport PropertyMixin from './mixins/property-mixin.js';\nimport {define} from './utils.js';\n\nwindow.define = window.define || define;\n\nexport default (base=HTMLElement) => {\n  return class BackedElement extends PropertyMixin(LitMixin(base)) {\n    static get properties() {\n      return {\n        template: {\n          renderer: 'render'\n        }\n      }\n    }\n    constructor() {\n      super({});\n    }\n    render() {\n      return customElements.get(this.localName).template;\n    }\n  }\n}\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/backed-element.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 1,
    "kind": "function",
    "name": "backedelement",
    "memberof": "src/backed-element.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/backed-element.js~backedelement",
    "access": null,
    "export": true,
    "importPath": "backed/src/backed-element.js",
    "importStyle": "backedelement",
    "description": null,
    "lineNumber": 7,
    "undocument": true
  },
  {
    "__docId__": 2,
    "kind": "file",
    "name": "src/backed.js",
    "content": "'use strict';\r\nimport base from './base.js';\r\n// import renderStatus from './internals/render-status.js';\r\nimport hyphenate from './utils/hyphenate.js';\nimport shouldRegister from './utils/should-register.js';\r\n\r\n\r\n/**\r\n *\r\n * @module backed\r\n * @param {class} _class\r\n */\r\nexport default _class => {\r\n  let klass;\r\n  // get the tagName or try to make one with class.name\r\n  let name = _class.is || hyphenate(_class.name);\r\n  // Setup properties & observers\r\n  const observedAttributes = [];\r\n  klass = class extends _class {\r\n    static get observedAttributes() {\r\n      return Object.entries(_class.properties).map(entry => {if (entry[1].reflect) {return entry[0]} else return null});\r\n    }\r\n    constructor() {\r\n      super();\r\n      base.constructorCallback(this, _class);\r\n    }\r\n    connectedCallback() {\r\n      base.connectedCallback(this, _class);\r\n    }\r\n    attributeChangedCallback(name, oldValue, newValue) {\r\n      this[name] = newValue;\r\n    }\r\n  }\r\n  if (shouldRegister(name, klass)) {\r\n    customElements.define(name, klass);\r\n  };\r\n};\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/backed.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 3,
    "kind": "function",
    "name": "backed",
    "memberof": "src/backed.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/backed.js~backed",
    "access": null,
    "export": true,
    "importPath": "backed/src/backed.js",
    "importStyle": "backed",
    "description": "",
    "lineNumber": 13,
    "unknown": [
      {
        "tagName": "@module",
        "tagValue": "backed"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "class"
        ],
        "spread": false,
        "optional": false,
        "name": "_class",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 4,
    "kind": "file",
    "name": "src/base.js",
    "content": "'use strict';\r\n\r\nimport loadScript from './utils/load-script.js';\nimport fireEvent from './utils/fire-event.js';\nimport toJsProp from './utils/to-js-prop.js';\nimport RenderStatus from './utils/render-status.js';\r\nimport PubSub from './internals/pub-sub.js';\r\n\r\nwindow.registeredElements = window.registeredElements || [];\r\n\r\nconst shouldShim = () => {\r\n  return /Edge/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent);\r\n}\r\n\r\nconst isValidRenderer = renderer => {\r\n  if (!renderer) {\r\n    return;\r\n  }\r\n  return String(renderer).includes('return html`')\r\n}\r\n\r\nconst handleProperties = (target, properties) => {\r\n  if (properties) {\r\n    for (let entry of Object.entries(properties)) {\r\n      handleProperty(target, entry[0], entry[1]);\r\n      // TODO: are we ignoring stuff ...?\r\n      // check if attribute has value else pass default property value\r\n      target[entry[0]] = target.hasAttribute(entry[0]) ? target.getAttribute(entry[0]) : entry[1].value;\r\n    }\r\n  }\r\n}\r\n\r\nconst handleProperty = (obj, property, {observer, strict, global, reflect, renderer, value }) => {\r\n\r\n  if (Boolean(observer || global) && _needsObserverSetup(obj, property)) {\r\n    // Ensure we don't do duplicate work\r\n    obj.observedProperties.push(property);\r\n\r\n    // subscribe only when a callback is defined, all other global options are still available ...\r\n    if (global && obj[observer]) {\r\n      // Warning, global observers don't work the same like bindings, each observer has it's namespace created like global.name,\r\n      // so whenever another element has an global observer for name, they will subscribe to the same publisher !\r\n      // TODO: Add local binding & improve global observers\r\n      // {{name}} for normal bindings & {{global::name}} for global bindings(observers) (like Polymer does)\r\n      // this means we need to build a system that keeps track of each component it's bindings &\r\n      // values should be set as property, so we know if a value needs to be set on attribute, rerender template, etc ..\r\n      PubSub.subscribe(`global.${property}`, obj[observer].bind(obj));\r\n    }\r\n    setupObserver(obj, property, observer, {strict, global, reflect, renderer: renderer})\r\n  } else if (!Boolean(observer || global) && Boolean(reflect || renderer)) {\r\n    setupObserver(obj, property, observer, {strict, global, reflect, renderer: renderer})\r\n  }\r\n}\r\n\r\nconst _needsObserverSetup = (obj, property) => {\r\n  if (!obj.observedProperties) {\r\n    obj.observedProperties = [];\r\n  }\r\n  if (obj.observedProperties[property]) {\r\n    console.warn(\r\n      'observer::ignoring duplicate property observer ' + property\r\n    );\r\n    return false;\r\n  } else {\r\n    return true;\r\n  }\r\n}\r\n\r\nconst forObservers = (target, observers, isGlobal=false) => {\r\n  for (let observe of observers) {\r\n    let parts = observe.split(/\\(|\\)/g);\r\n    let fn = parts[0];\r\n    parts = parts.slice(1);\r\n    for (let property of parts) {\r\n      if (property.length) {\r\n        handleProperty(target, property, fn, {\r\n          strict: false,\r\n          global: isGlobal\r\n        });\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Runs a method on target whenever given property changes\r\n *\r\n * example:\r\n * change(change) {\r\n *  change.property // name of the property\r\n *  change.value // value of the property\r\n * }\r\n *\r\n * @arg {object} obj target\r\n * @arg {string} property name\r\n * @arg {boolean} strict\r\n * @arg {method} fn The method to run on change\r\n */\r\nconst setupObserver = (obj, property, fn, {strict, global, reflect, renderer}) => {\r\n  if (renderer && !obj.shadowRoot) {\r\n    obj.attachShadow({mode: 'open'})\r\n  }\r\n  Object.defineProperty(obj, property, {\r\n    set(value) {\r\n      if (value === undefined) {\r\n        return\r\n      }\r\n      if (this[`_${property}`] === value) {\r\n        return;\r\n      }\r\n      this[`_${property}`] = value;\r\n      let data = {\r\n        property: property,\r\n        value: value\r\n      };\r\n      if (reflect) {\r\n        if (value) this.setAttribute(property, String(value));\r\n        else this.removeAttribute(property);\r\n      }\r\n      if (renderer) {\r\n          // adds support for multiple renderers\n          const object = {}\n          object[property] = value;\r\n          this.render(object, this[renderer]);\r\n      }\r\n      if (global) {\r\n        data.instance = this;\r\n        PubSub.publish(`global.${property}`, data);\r\n      } else if(fn) {\r\n        if (this[fn]) {\r\n          this[fn](data);\r\n        } else {\r\n          console.warn(`observer undefined::${fn} is not a function`);\r\n        }\r\n      }\r\n    },\r\n    get() {\r\n      return this[`_${property}`];\r\n    },\r\n    configurable: strict ? false : true\r\n  });\r\n}\r\n\r\n\r\nconst handleObservers = (target, observers=[], globalObservers=[]) => {\r\n  if (!observers && !globalObservers) {\r\n    return;\r\n  }\r\n  forObservers(target, observers);\r\n}\r\n\r\nconst handleListeners = target => {\r\n  const attributes = target.attributes;\r\n  for (const attribute of attributes) {\r\n    if (String(attribute.name).includes('on-')) {\r\n      const fn = attribute.value;\r\n      const name = attribute.name.replace('on-', '');\r\n      target.addEventListener(String(name), event => {\r\n        target = event.path[0];\r\n        while (!target.host) {\r\n          target = target.parentNode;\r\n        }\r\n        if (target.host[fn]) {\r\n          target.host[fn](event);\r\n        }\r\n      });\r\n    }\r\n  }\r\n}\r\n\r\nconst ready = target => {\r\n  requestAnimationFrame(() => {\r\n    if (target.ready) target.ready();\r\n  });\r\n}\r\n\r\nconst constructorCallback = (target=HTMLElement, klass=Function, hasWindow=false) => {\r\n\r\n  target.fireEvent = target.fireEvent || fireEvent.bind(target);\r\n  target.toJsProp = target.toJsProp || toJsProp.bind(target);\r\n  target.loadScript = target.loadScript || loadScript.bind(target);\r\n\r\n\r\n  // setup properties\r\n\r\n  if (!target.registered && target.created) target.created();\r\n\r\n  // let backed know the element is registered\r\n  target.registered = true;\r\n}\r\n\r\nconst connectedCallback = (target=HTMLElement, klass=Function) => {\r\n  if (target.connected) target.connected();\r\n  handleProperties(target, klass.properties);\r\n  handleObservers(target, klass.observers, klass.globalObservers);\r\n  // setup listeners\r\n  handleListeners(target)\r\n  // notify everything is ready\r\n  ready(target);\r\n}\r\n\r\nconst shouldRegister = (name, klass) => {\r\n  if (window.registeredElements.indexOf(name) === -1) {\r\n    window.registeredElements.push(name);\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\n\r\nexport default {\r\n  ready: ready,\r\n  connectedCallback: connectedCallback,\r\n  constructorCallback: constructorCallback,\r\n  shouldRegister: shouldRegister\r\n}\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/base.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 5,
    "kind": "function",
    "name": "shouldShim",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~shouldShim",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 11,
    "undocument": true
  },
  {
    "__docId__": 6,
    "kind": "function",
    "name": "isValidRenderer",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~isValidRenderer",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true
  },
  {
    "__docId__": 7,
    "kind": "function",
    "name": "handleProperties",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~handleProperties",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 22,
    "undocument": true
  },
  {
    "__docId__": 8,
    "kind": "function",
    "name": "handleProperty",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~handleProperty",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 33,
    "undocument": true
  },
  {
    "__docId__": 9,
    "kind": "function",
    "name": "_needsObserverSetup",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~_needsObserverSetup",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 55,
    "undocument": true
  },
  {
    "__docId__": 10,
    "kind": "function",
    "name": "forObservers",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~forObservers",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 69,
    "undocument": true
  },
  {
    "__docId__": 11,
    "kind": "function",
    "name": "setupObserver",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~setupObserver",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": "Runs a method on target whenever given property changes\n\nexample:\nchange(change) {\n change.property // name of the property\n change.value // value of the property\n}",
    "lineNumber": 99,
    "unknown": [
      {
        "tagName": "@arg",
        "tagValue": "{object} obj target"
      },
      {
        "tagName": "@arg",
        "tagValue": "{string} property name"
      },
      {
        "tagName": "@arg",
        "tagValue": "{boolean} strict"
      },
      {
        "tagName": "@arg",
        "tagValue": "{method} fn The method to run on change"
      }
    ]
  },
  {
    "__docId__": 12,
    "kind": "function",
    "name": "handleObservers",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~handleObservers",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 145,
    "undocument": true
  },
  {
    "__docId__": 13,
    "kind": "function",
    "name": "handleListeners",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~handleListeners",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 152,
    "undocument": true
  },
  {
    "__docId__": 14,
    "kind": "function",
    "name": "ready",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~ready",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 171,
    "undocument": true
  },
  {
    "__docId__": 15,
    "kind": "function",
    "name": "constructorCallback",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~constructorCallback",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 177,
    "undocument": true
  },
  {
    "__docId__": 16,
    "kind": "function",
    "name": "connectedCallback",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~connectedCallback",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 192,
    "undocument": true
  },
  {
    "__docId__": 17,
    "kind": "function",
    "name": "shouldRegister",
    "memberof": "src/base.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/base.js~shouldRegister",
    "access": null,
    "export": false,
    "importPath": "backed/src/base.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 202,
    "undocument": true
  },
  {
    "__docId__": 18,
    "kind": "file",
    "name": "src/internals/pub-sub.js",
    "content": "'use strict';\nclass PubSub {\r\n\r\n  /**\r\n   * Creates handlers\r\n   */\r\n  constructor() {\r\n    this.handlers = [];\r\n  }\r\n\r\n  /**\r\n   * @param {String} event\r\n   * @param {Method} handler\r\n   * @param {HTMLElement} context\r\n   */\r\n  subscribe(event, handler, context) {\r\n    if (typeof context === 'undefined') {\r\n      context = handler;\r\n    }\r\n    this.handlers.push({event: event, handler: handler.bind(context)});\r\n  }\r\n\r\n  /**\r\n   * @param {String} event\r\n   * @param {String|Number|Boolean|Object|Array} change\n   */\r\n  publish(event, change) {\n    for (let i = 0; i < this.handlers.length; i++) {\r\n      if (this.handlers[i].event === event) {\n        let oldValue = this.handlers[i].oldValue;\n        // dirty checking value, ensures that we don't create a loop\n        if (oldValue !== change.value) {\n          this.handlers[i].handler(change, this.handlers[i].oldValue);\n          this.handlers[i].oldValue = change.value;\n        }\n      }\r\n    }\r\n  }\r\n}\r\n\nexport default window.PubSub ? window.PubSub : window.PubSub = new PubSub();\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/internals/pub-sub.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 19,
    "kind": "class",
    "name": "PubSub",
    "memberof": "src/internals/pub-sub.js",
    "static": true,
    "longname": "src/internals/pub-sub.js~PubSub",
    "access": null,
    "export": false,
    "importPath": "backed/src/internals/pub-sub.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 2,
    "undocument": true,
    "interface": false
  },
  {
    "__docId__": 20,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/internals/pub-sub.js~PubSub",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/internals/pub-sub.js~PubSub#constructor",
    "access": null,
    "description": "Creates handlers",
    "lineNumber": 7
  },
  {
    "__docId__": 21,
    "kind": "member",
    "name": "handlers",
    "memberof": "src/internals/pub-sub.js~PubSub",
    "static": false,
    "longname": "src/internals/pub-sub.js~PubSub#handlers",
    "access": null,
    "description": null,
    "lineNumber": 8,
    "undocument": true
  },
  {
    "__docId__": 22,
    "kind": "method",
    "name": "subscribe",
    "memberof": "src/internals/pub-sub.js~PubSub",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/internals/pub-sub.js~PubSub#subscribe",
    "access": null,
    "description": "",
    "lineNumber": 16,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Method"
        ],
        "spread": false,
        "optional": false,
        "name": "handler",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "HTMLElement"
        ],
        "spread": false,
        "optional": false,
        "name": "context",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 23,
    "kind": "method",
    "name": "publish",
    "memberof": "src/internals/pub-sub.js~PubSub",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/internals/pub-sub.js~PubSub#publish",
    "access": null,
    "description": "",
    "lineNumber": 27,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "Number",
          "Boolean",
          "Object",
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "change",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 24,
    "kind": "file",
    "name": "src/internals/render-status.js",
    "content": "'use strict';\r\nlet sheduled = false;\r\nconst afterRenderQue = [];\r\nconst beforeRenderQue = [];\r\n\r\nconst callMethod = array => {\r\n  const context = array[0];\r\n  const callback = array[1];\r\n  const args = array[2];\r\n  try {\r\n    callback.apply(context, args);\r\n  } catch(e) {\r\n    setTimeout(() => {\r\n      throw e;\r\n    })\r\n  }\r\n};\r\n\r\nconst flushQue = que => {\r\n  while (que.length) {\r\n    callMethod(que.shift);\r\n  }\r\n};\r\n\r\nconst runQue = que => {\r\n  for (let i=0, l=que.length; i < l; i++) {\r\n    callMethod(que.shift());\r\n  }\r\n  sheduled = false;\r\n}\r\n\r\nconst shedule = () => {\r\n  sheduled = true;\r\n  requestAnimationFrame(() => {\r\n    flushQue(beforeRenderQue);\r\n    setTimeout(() => {\r\n      runQue(afterRenderQue);\r\n    });\r\n  });\r\n};\r\n\r\nexport default {\r\n  afterRender: (context, callback, args) => {\r\n    if (!sheduled) {\r\n      shedule();\r\n    }\r\n    afterRenderQue.push([context, callback, args]);\r\n  },\r\n  beforeRender: (context, callback, args) => {\r\n    if (!sheduled) {\r\n      shedule();\r\n    }\r\n    beforeRenderQue.push([context, callback, args]);\r\n  }\r\n\r\n}\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/internals/render-status.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 25,
    "kind": "variable",
    "name": "sheduled",
    "memberof": "src/internals/render-status.js",
    "static": true,
    "longname": "src/internals/render-status.js~sheduled",
    "access": null,
    "export": false,
    "importPath": "backed/src/internals/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 2,
    "undocument": true
  },
  {
    "__docId__": 26,
    "kind": "variable",
    "name": "afterRenderQue",
    "memberof": "src/internals/render-status.js",
    "static": true,
    "longname": "src/internals/render-status.js~afterRenderQue",
    "access": null,
    "export": false,
    "importPath": "backed/src/internals/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 3,
    "undocument": true
  },
  {
    "__docId__": 27,
    "kind": "variable",
    "name": "beforeRenderQue",
    "memberof": "src/internals/render-status.js",
    "static": true,
    "longname": "src/internals/render-status.js~beforeRenderQue",
    "access": null,
    "export": false,
    "importPath": "backed/src/internals/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true
  },
  {
    "__docId__": 28,
    "kind": "function",
    "name": "callMethod",
    "memberof": "src/internals/render-status.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/internals/render-status.js~callMethod",
    "access": null,
    "export": false,
    "importPath": "backed/src/internals/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true
  },
  {
    "__docId__": 29,
    "kind": "function",
    "name": "flushQue",
    "memberof": "src/internals/render-status.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/internals/render-status.js~flushQue",
    "access": null,
    "export": false,
    "importPath": "backed/src/internals/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 19,
    "undocument": true
  },
  {
    "__docId__": 30,
    "kind": "function",
    "name": "runQue",
    "memberof": "src/internals/render-status.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/internals/render-status.js~runQue",
    "access": null,
    "export": false,
    "importPath": "backed/src/internals/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 25,
    "undocument": true
  },
  {
    "__docId__": 31,
    "kind": "function",
    "name": "shedule",
    "memberof": "src/internals/render-status.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/internals/render-status.js~shedule",
    "access": null,
    "export": false,
    "importPath": "backed/src/internals/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 32,
    "undocument": true
  },
  {
    "__docId__": 32,
    "kind": "file",
    "name": "src/mixins/css-mixin.js",
    "content": "/**\r\n * @module CSSMixin\r\n * @mixin Backed\r\n * @param {class} base class to extend from\r\n */\r\n const mixins = {\r\n  'mixin(--css-row)': `display: flex;\r\n        flex-direction: row;\r\n  `,\r\n  'mixin(--css-column)': `display: flex;\r\n        flex-direction: column;\r\n  `,\r\n  'mixin(--css-center)': `align-items: center;`,\r\n  'mixin(--css-header)': `height: 128px;\r\n        width: 100%;\r\n        background: var(--primary-color);\r\n        color: var(--text-color);\r\n        mixin(--css-column)`,\r\n  'mixin(--css-flex)': `flex: 1;`,\r\n  'mixin(--css-flex-2)': `flex: 2;`,\r\n  'mixin(--css-flex-3)': `flex: 3;`,\r\n  'mixin(--css-flex-4)': `flex: 4;`,\r\n  'mixin(--material-palette)': `--dark-primary-color: #00796B;\r\n        --light-primary-color: #B2DFDB;\r\n        --primary-color: #009688;\r\n        --text-color: #FFF;\r\n        --primary-text-color: #212121;\r\n        --secondary-text-color: #757575;\r\n        --divider-color: #BDBDBD;\r\n        --accent-color: #4CAF50;\r\n        --disabled-text-color: #BDBDBD;\r\n        --primary-background-color: #f9ffff;\r\n        --dialog-background-color: #FFFFFF;`,\r\n  'mixin(--css-hero)': `display: flex;\r\n        max-width: 600px;\r\n        max-height: 340px;\r\n        height: 100%;\r\n        width: 100%;\r\n        box-shadow: 3px 2px 4px 2px rgba(0,0,0, 0.15),\r\n                    -2px 0px 4px 2px rgba(0,0,0, 0.15);\r\n        position: absolute;\r\n        left: 50%;\r\n        top: 50%;\r\n        transform: translate(-50%, -50%);\r\n        border-radius: 2px;\r\n  `,\n  'mixin(--css-elevation-2dp)': `\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n                0 1px 5px 0 rgba(0, 0, 0, 0.12),\n                0 3px 1px -2px rgba(0, 0, 0, 0.2);`,\n\n  'mixin(--css-elevation-3dp)': `\n    box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14),\n                0 1px 8px 0 rgba(0, 0, 0, 0.12),\n                0 3px 3px -2px rgba(0, 0, 0, 0.4);`,\n  'mixin(--css-elevation-4dp)': `\n    box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14),\n                0 1px 10px 0 rgba(0, 0, 0, 0.12),\n                0 2px 4px -1px rgba(0, 0, 0, 0.4);`,\n  'mixin(--css-elevation-6dp)': `\n    box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14),\n                0 1px 18px 0 rgba(0, 0, 0, 0.12),\n                0 3px 5px -1px rgba(0, 0, 0, 0.4);`,\n  'mixin(--css-elevation-8dp)': `\n    box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14),\n                0 3px 14px 2px rgba(0, 0, 0, 0.12),\n                0 5px 5px -3px rgba(0, 0, 0, 0.4);`,\n  'mixin(--css-elevation-12dp)': `\n    box-shadow: 0 12px 16px 1px rgba(0, 0, 0, 0.14),\n                0 4px 22px 3px rgba(0, 0, 0, 0.12),\n                0 6px 7px -4px rgba(0, 0, 0, 0.4);`,\n  'mixin(--css-elevation-16dp)': `\n    box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14),\n                0  6px 30px 5px rgba(0, 0, 0, 0.12),\n                0  8px 10px -5px rgba(0, 0, 0, 0.4);`,\n  'mixin(--css-elevation-24dp)': `\n    box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14),\n                0 9px 46px 8px rgba(0, 0, 0, 0.12),\n                0 11px 15px -7px rgba(0, 0, 0, 0.4);`\r\n };\r\n\r\n const classes = {\r\n   'apply(--css-row)': `.row {\r\n        mixin(--css-row)\r\n      }\r\n   `,\r\n   'apply(--css-column)': `.column {\r\n        mixin(--css-column)\r\n      }\r\n   `,\r\n   'apply(--css-flex)': `.flex {\r\n        mixin(--css-flex)\r\n      }\r\n   `,\r\n   'apply(--css-flex-2)': `.flex-2 {\r\n     mixin(--css-flex-2)\r\n   }`,\r\n   'apply(--css-flex-3)': `.flex-3 {\r\n     mixin(--css-flex-3)\r\n   }`,\r\n   'apply(--css-flex-4)': `.flex-4 {\r\n     mixin(--css-flex-4)\r\n   }`,\r\n   'apply(--css-center)': `.center {\r\n        align-items: center;\r\n      }\r\n   `,\r\n   'apply(--css-center-center)': `.center-center {\r\n        align-items: center;\r\n        justify-content: center;\r\n      }\r\n   `,\r\n   'apply(--css-header)': `header, .header {\r\n     mixin(--css-header)\r\n   }`,\r\n   'apply(--css-hero)': `.hero {\r\n      mixin(--css-hero)\r\n   }`,\n   'apply(--css-elevation-2dp)': `.elevation-2dp {\n      mixin(--css-elevation-2dp)\n   }`,\n   'apply(--css-elevation-3dp)': `.elevation-3dp {\n      mixin(--css-elevation-3dp)\n   }`,\n   'apply(--css-elevation-4dp)': `.elevation-4dp {\n      mixin(--css-elevation-4dp)\n   }`,\n   'apply(--css-elevation-6dp)': `.elevation-6dp {\n      mixin(--css-elevation-6dp)\n   }`,\n   'apply(--css-elevation-8dp)': `.elevation-8dp {\n      mixin(--css-elevation-8dp)\n   }`,\n   'apply(--css-elevation-12dp)': `.elevation-12dp {\n      mixin(--css-elevation-12dp)\n   }`,\n   'apply(--css-elevation-16dp)': `.elevation-16dp {\n      mixin(--css-elevation-16dp)\n   }`,\n   'apply(--css-elevation-18dp)': `.elevation-18dp {\n      mixin(--css-elevation-18dp)\n   }`\r\n }\r\nexport default base => {\r\n  return class CSSMixin extends base {\r\n\r\n    get __style() {\r\n      return this.shadowRoot.querySelector('style');\r\n    }\r\n    constructor() {\r\n      super();\r\n    }\r\n    connectedCallback() {\r\n      // TODO: test\r\n      if (super.connectedCallback) super.connectedCallback();\r\n      // TODO: Implement better way to check if a renderer is used\r\n      if (this.render) this.hasRenderer = true;\r\n      else if(this.template) console.log(`Render method undefined ${this.localname}`);\r\n\r\n      this._init()\r\n    }\r\n    _init() {\r\n      if (this.hasRenderer) {\r\n        if (!this.rendered) {\r\n          return requestAnimationFrame(() => {\r\n              this._init()\r\n            });\r\n        }\r\n      }\r\n      const styles = this.shadowRoot ? this.shadowRoot.querySelectorAll('style') : this.querySelectorAll('style');\r\n      // const matches = style.innerHTML.match(/apply((.*))/g);\r\n      styles.forEach(style => {\n        this._applyClasses(style.innerHTML).then(innerHTML => {\n          if (innerHTML) this.__style.innerHTML = innerHTML;\n          this._applyMixins(style.innerHTML).then(innerHTML => {\n            if (innerHTML) this.__style.innerHTML = innerHTML;\n          })\n        }).catch(error => {\n          console.error(error);\n        });\n      })\r\n      // this._applyVariables(matches, style);\r\n    }\r\n\r\n    _applyMixins(string) {\r\n      const mixinInMixin = string => {\n        if (!string) return console.warn(`Nothing found for ${string}`);\r\n        const matches = string.match(/mixin((.*))/g);\r\n        if (matches) {\r\n          for (const match of matches) {\r\n            const mixin = mixins[match];\r\n            string = string.replace(match, mixin)\r\n          }\r\n        }\r\n        return string;\r\n      }\r\n      return new Promise((resolve, reject) => {\r\n        const matches = string.match(/mixin((.*))/g);\r\n        if (matches) for (const match of matches) {\r\n          const mixin = mixinInMixin(mixins[match]);\r\n          string = string.replace(match, mixin);\r\n          // return [\r\n          //   match, mixins[match]\r\n          // ]\r\n\r\n        };\r\n        resolve(string);\r\n      });\r\n    }\r\n\r\n    _applyClasses(string) {\r\n      return new Promise((resolve, reject) => {\r\n        const matches = string.match(/apply((.*))/g);\r\n        if (matches) for (const match of matches) {\r\n          // this._applyMixins(classes[match]).then(klass => {\r\n            string = string.replace(match, classes[match]);\r\n          // });\r\n        }\r\n        // this.style.innerHTML = string;\r\n        resolve(string);\r\n      });\r\n    }\r\n  }\r\n}\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/mixins/css-mixin.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 33,
    "kind": "variable",
    "name": "mixins",
    "memberof": "src/mixins/css-mixin.js",
    "static": true,
    "longname": "src/mixins/css-mixin.js~mixins",
    "access": null,
    "export": false,
    "importPath": "backed/src/mixins/css-mixin.js",
    "importStyle": null,
    "description": "",
    "lineNumber": 6,
    "unknown": [
      {
        "tagName": "@module",
        "tagValue": "CSSMixin"
      },
      {
        "tagName": "@mixin",
        "tagValue": "Backed"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "class"
        ],
        "spread": false,
        "optional": false,
        "name": "base",
        "description": "class to extend from"
      }
    ]
  },
  {
    "__docId__": 34,
    "kind": "variable",
    "name": "classes",
    "memberof": "src/mixins/css-mixin.js",
    "static": true,
    "longname": "src/mixins/css-mixin.js~classes",
    "access": null,
    "export": false,
    "importPath": "backed/src/mixins/css-mixin.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 82,
    "undocument": true
  },
  {
    "__docId__": 35,
    "kind": "function",
    "name": "cssmixin",
    "memberof": "src/mixins/css-mixin.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/mixins/css-mixin.js~cssmixin",
    "access": null,
    "export": true,
    "importPath": "backed/src/mixins/css-mixin.js",
    "importStyle": "cssmixin",
    "description": null,
    "lineNumber": 144,
    "undocument": true
  },
  {
    "__docId__": 36,
    "kind": "file",
    "name": "src/mixins/property-mixin.js",
    "content": "window.Backed = window.Backed || {};\r\n// binding does it's magic using the propertyStore ...\r\nwindow.Backed.PropertyStore = window.Backed.PropertyStore || new Map();\r\n\r\n// TODO: Create & add global observer\r\nexport default base => {\r\n  return class PropertyMixin extends base {\n    static get observedAttributes() {\n      return Object.entries(this.properties).map(entry => {if (entry[1].reflect) {return entry[0]} else return null});\n    }\n\n    get properties() {\n      return customElements.get(this.localName).properties;\n    }\n\r\n    constructor() {\r\n      super();\n      if (this.properties) {\n        for (const entry of Object.entries(this.properties)) {\n          const { observer, reflect, renderer } = entry[1];\n          // allways define property even when renderer is not found.\n          this.defineProperty(entry[0], entry[1]);\n        }\n      }\r\n    }\n\n    connectedCallback() {\n      if (super.connectedCallback) super.connectedCallback();\n      if (this.attributes)\n        for (const attribute of this.attributes) {\n          if (String(attribute.name).includes('on-')) {\n            const fn = attribute.value;\n            const name = attribute.name.replace('on-', '');\n            this.addEventListener(String(name), event => {\n              let target = event.path[0];\n              while (!target.host) {\n                target = target.parentNode;\n              }\n              if (target.host[fn]) {\n                target.host[fn](event);\n              }\n            });\n          }\n      }\n    }\n\n    attributeChangedCallback(name, oldValue, newValue) {\n      this[name] = newValue;\n    }\r\n\r\n    /**\r\n     * @param {function} options.observer callback function returns {instance, property, value}\r\n     * @param {boolean} options.reflect when true, reflects value to attribute\r\n     * @param {function} options.render callback function for renderer (example: usage with lit-html, {render: render(html, shadowRoot)})\r\n     */\r\n    defineProperty(property = null, {strict = false, observer, reflect = false, renderer, value}) {\r\n      Object.defineProperty(this, property, {\r\n        set(value) {\r\n          if (value === this[`___${property}`]) return;\r\n          this[`___${property}`] = value;\r\n\r\n          if (reflect) {\r\n            if (value) this.setAttribute(property, String(value));\r\n            else this.removeAttribute(property);\r\n          }\r\n\r\n          if (observer) {\r\n            if (observer in this) this[observer]();\r\n            else console.warn(`observer::${observer} undefined`);\r\n          }\r\n\r\n          if (renderer) {\n            const obj = {};\n            obj[property] = value;\r\n            if (renderer in this) this.render(obj, this[renderer]);\r\n            else console.warn(`renderer::${renderer} undefined`);\r\n          }\r\n\r\n        },\r\n        get() {\r\n          return this[`___${property}`];\r\n        },\r\n        configurable: strict ? false : true\r\n      });\r\n      // check if attribute is defined and update property with it's value\r\n      // else fallback to it's default value (if any)\r\n      const attr = this.getAttribute(property);\r\n      this[property] = attr || this.hasAttribute(property) || value;\r\n    }\r\n  }\r\n}\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/mixins/property-mixin.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 37,
    "kind": "function",
    "name": "propertymixin",
    "memberof": "src/mixins/property-mixin.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/mixins/property-mixin.js~propertymixin",
    "access": null,
    "export": true,
    "importPath": "backed/src/mixins/property-mixin.js",
    "importStyle": "propertymixin",
    "description": null,
    "lineNumber": 6,
    "undocument": true
  },
  {
    "__docId__": 38,
    "kind": "file",
    "name": "src/poly-loader.js",
    "content": "'use strict';\r\nimport { loadScript } from './utils.js';\r\n\r\nconst bowerMinUrl = (name, main, root) => {\r\n  const url = main ? `${name}/${main}` : `${name}/${name}`;\r\n  return `${root}/${url}.min.js`;\r\n}\r\n\r\nconst ensureArray = array => {\r\n  if (Array.isArray(array)) {\r\n    return array;\r\n  }\r\n  return [...array];\r\n}\r\n\r\n/**\r\n * @module polyLoader\r\n * @param {string} name package name (folder)\r\n * @param {string} main script to use\r\n * @param {string} root location of your components\r\n */\r\nexport default (fills, root='bower_components') => {\r\n  return new Promise((resolve, reject) => {\r\n    fills = ensureArray(fills);\r\n    fills = fills.map(fill => {\r\n      let name;\r\n      let main = null;\r\n      if (typeof(fill) === 'object') {\r\n        name = fill.name;\r\n        main = fill.main;\r\n      } else {\r\n        name = fill;\r\n      }\r\n      if (name === 'shadycss' && !main) {\r\n        main = 'custom-style-interface';\r\n      }\r\n      return loadScript(bowerMinUrl(name, main, root));\r\n    });\r\n    Promise.all(fills).then(() => resolve()).catch(error => reject(error));\r\n  });\r\n}\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/poly-loader.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 39,
    "kind": "function",
    "name": "bowerMinUrl",
    "memberof": "src/poly-loader.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/poly-loader.js~bowerMinUrl",
    "access": null,
    "export": false,
    "importPath": "backed/src/poly-loader.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true
  },
  {
    "__docId__": 40,
    "kind": "function",
    "name": "ensureArray",
    "memberof": "src/poly-loader.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/poly-loader.js~ensureArray",
    "access": null,
    "export": false,
    "importPath": "backed/src/poly-loader.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 9,
    "undocument": true
  },
  {
    "__docId__": 41,
    "kind": "function",
    "name": "polyloader",
    "memberof": "src/poly-loader.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/poly-loader.js~polyloader",
    "access": null,
    "export": true,
    "importPath": "backed/src/poly-loader.js",
    "importStyle": "polyloader",
    "description": "",
    "lineNumber": 22,
    "unknown": [
      {
        "tagName": "@module",
        "tagValue": "polyLoader"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": "package name (folder)"
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "main",
        "description": "script to use"
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "root",
        "description": "location of your components"
      }
    ]
  },
  {
    "__docId__": 42,
    "kind": "file",
    "name": "src/utils/constants.js",
    "content": "export const WHITE_SPACES = [\n    ' ', '\\n', '\\r', '\\t', '\\f', '\\v', '\\u00A0', '\\u1680', '\\u180E',\n    '\\u2000', '\\u2001', '\\u2002', '\\u2003', '\\u2004', '\\u2005', '\\u2006',\n    '\\u2007', '\\u2008', '\\u2009', '\\u200A', '\\u2028', '\\u2029', '\\u202F',\n    '\\u205F', '\\u3000'\n];\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/constants.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 43,
    "kind": "variable",
    "name": "WHITE_SPACES",
    "memberof": "src/utils/constants.js",
    "static": true,
    "longname": "src/utils/constants.js~WHITE_SPACES",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/constants.js",
    "importStyle": "{WHITE_SPACES}",
    "description": null,
    "lineNumber": 1,
    "undocument": true
  },
  {
    "__docId__": 44,
    "kind": "file",
    "name": "src/utils/define.js",
    "content": "import hyphenate from './hyphenate.js';\nimport shouldRegister from './should-register.js';\n\nexport default klass => {\r\n  const name = hyphenate(klass.name);\r\n  return shouldRegister(name) ? customElements.define(name, klass) : '';\r\n}\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/define.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 45,
    "kind": "function",
    "name": "define",
    "memberof": "src/utils/define.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/define.js~define",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/define.js",
    "importStyle": "define",
    "description": null,
    "lineNumber": 4,
    "undocument": true
  },
  {
    "__docId__": 46,
    "kind": "file",
    "name": "src/utils/fire-event.js",
    "content": "/**\r\n * @mixin backed\r\n * @module utils\r\n * @export fireEvent\r\n *\r\n * @param {string} type Name of the event\r\n * @param {HTMLElement} target context\r\n * @param {string|boolean|number|object|array} detail\r\n */\r\nexport default (type='', detail=null, target=HTMLElement) => {\r\n  target.dispatchEvent(new CustomEvent(type, {detail: detail}));\r\n};\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/fire-event.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 47,
    "kind": "function",
    "name": "fireevent",
    "memberof": "src/utils/fire-event.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/fire-event.js~fireevent",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/fire-event.js",
    "importStyle": "fireevent",
    "description": "",
    "lineNumber": 10,
    "unknown": [
      {
        "tagName": "@mixin",
        "tagValue": "backed"
      },
      {
        "tagName": "@module",
        "tagValue": "utils"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "type",
        "description": "Name of the event"
      },
      {
        "nullable": null,
        "types": [
          "HTMLElement"
        ],
        "spread": false,
        "optional": false,
        "name": "target",
        "description": "context"
      },
      {
        "nullable": null,
        "types": [
          "string",
          "boolean",
          "number",
          "object",
          "array"
        ],
        "spread": false,
        "optional": false,
        "name": "detail",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 48,
    "kind": "file",
    "name": "src/utils/hyphenate.js",
    "content": "import unCamelCase from './un-camel-case.js';\nimport slugify from './slugify.js';\n/**\r\n* Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case.\r\n*/\r\nexport default string => {\r\n  string = unCamelCase(string);\r\n  return slugify(string, \"-\");\r\n}\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/hyphenate.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 49,
    "kind": "function",
    "name": "hyphenate",
    "memberof": "src/utils/hyphenate.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/hyphenate.js~hyphenate",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/hyphenate.js",
    "importStyle": "hyphenate",
    "description": "Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case.",
    "lineNumber": 6
  },
  {
    "__docId__": 50,
    "kind": "file",
    "name": "src/utils/load-module.js",
    "content": "import loadScript from './load-script.js';\r\n/**\r\n * @mixin utils\r\n * @export loadModule\r\n *\r\n * defer handles loading after the document is parsed, async loads while parsing\r\n *\r\n * @param {string} src link/path to the module to load\r\n * @param {string} method default: 'async',  options: `defer, async, ''`\r\n * @return {promise}\r\n */\r\n export default (src, method = 'async') => {\r\n   return loadScript(src, method, 'module');\r\n }\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/load-module.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 51,
    "kind": "function",
    "name": "loadmodule",
    "memberof": "src/utils/load-module.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/load-module.js~loadmodule",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/load-module.js",
    "importStyle": "loadmodule",
    "description": "",
    "lineNumber": 12,
    "unknown": [
      {
        "tagName": "@mixin",
        "tagValue": "utils"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "src",
        "description": "link/path to the module to load"
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "method",
        "description": "default: 'async',  options: `defer, async, ''`"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 52,
    "kind": "file",
    "name": "src/utils/load-script.js",
    "content": "/**\r\n * @mixin Backed\r\n * @module utils\r\n * @export loadScript\r\n *\r\n * defer handles loading after the document is parsed, async loads while parsing\r\n *\r\n * @param {string} src link/path to the script to load\r\n * @param {string} method default: 'async',  options: `defer, async, ''`\r\n * @param {string} type default: undefined,  options: `module, utf-8, ...`\r\n * @return {object} merge result\r\n */\r\n export default (src, method = 'async', type) => {\r\n   return new Promise((resolve, reject) => {\r\n     let script = document.createElement('script');\r\n     script.setAttribute(method, '');\r\n     if (type) script.setAttribute('type', type);\r\n     script.onload = result => {\r\n       resolve(result);\r\n     }\r\n     script.onerror = error => {\r\n       reject(error);\r\n     }\r\n     script.src = src;\r\n     document.body.appendChild(script);\r\n   });\r\n }\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/load-script.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 53,
    "kind": "function",
    "name": "loadscript",
    "memberof": "src/utils/load-script.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/load-script.js~loadscript",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/load-script.js",
    "importStyle": "loadscript",
    "description": "",
    "lineNumber": 13,
    "unknown": [
      {
        "tagName": "@mixin",
        "tagValue": "Backed"
      },
      {
        "tagName": "@module",
        "tagValue": "utils"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "src",
        "description": "link/path to the script to load"
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "method",
        "description": "default: 'async',  options: `defer, async, ''`"
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "type",
        "description": "default: undefined,  options: `module, utf-8, ...`"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "object"
      ],
      "spread": false,
      "description": "merge result"
    }
  },
  {
    "__docId__": 54,
    "kind": "file",
    "name": "src/utils/ltrim.js",
    "content": "import { WHITE_SPACES } from './constants.js';\r\n/**\n* Remove chars from beginning of string.\n*/\nexport default (string, chars) => {\n  chars = chars || WHITE_SPACES;\n\n  let start = 0,\n      len = string.length,\n      charLen = chars.length,\n      found = true,\n      i, c;\n\n  while (found && start < len) {\n      found = false;\n      i = -1;\n      c = string.charAt(start);\n\n      while (++i < charLen) {\n          if (c === chars[i]) {\n              found = true;\n              start++;\n              break;\n          }\n      }\n  }\n\n  return (start >= len) ? '' : string.substr(start, len);\n};\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/ltrim.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 55,
    "kind": "function",
    "name": "ltrim",
    "memberof": "src/utils/ltrim.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/ltrim.js~ltrim",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/ltrim.js",
    "importStyle": "ltrim",
    "description": "Remove chars from beginning of string.",
    "lineNumber": 5
  },
  {
    "__docId__": 56,
    "kind": "file",
    "name": "src/utils/merge.js",
    "content": "/**\r\n * @mixin Backed\r\n * @module utils\r\n * @export merge\r\n *\r\n * some-prop -> someProp\r\n *\r\n * @param {object} object The object to merge with\r\n * @param {object} source The object to merge\r\n * @return {object} merge result\r\n */\r\nexport default (object = {}, source = {}) => {\r\n  // deep assign\r\n  for (const key of Object.keys(object)) {\r\n    if (source[key]) {\r\n      Object.assign(object[key], source[key]);\r\n    }\r\n  }\r\n  // assign the rest\r\n  for (const key of Object.keys(source)) {\r\n    if (!object[key]) {\r\n      object[key] = source[key];\r\n    }\r\n  }\r\n  return object;\r\n}\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/merge.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 57,
    "kind": "function",
    "name": "merge",
    "memberof": "src/utils/merge.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/merge.js~merge",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/merge.js",
    "importStyle": "merge",
    "description": "",
    "lineNumber": 12,
    "unknown": [
      {
        "tagName": "@mixin",
        "tagValue": "Backed"
      },
      {
        "tagName": "@module",
        "tagValue": "utils"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "object"
        ],
        "spread": false,
        "optional": false,
        "name": "object",
        "description": "The object to merge with"
      },
      {
        "nullable": null,
        "types": [
          "object"
        ],
        "spread": false,
        "optional": false,
        "name": "source",
        "description": "The object to merge"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "object"
      ],
      "spread": false,
      "description": "merge result"
    }
  },
  {
    "__docId__": 58,
    "kind": "file",
    "name": "src/utils/remove-non-word.js",
    "content": "export default (string) => string.replace(/[^0-9a-zA-Z\\xC0-\\xFF \\-]/g, '');\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/remove-non-word.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 59,
    "kind": "function",
    "name": "removenonword",
    "memberof": "src/utils/remove-non-word.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/remove-non-word.js~removenonword",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/remove-non-word.js",
    "importStyle": "removenonword",
    "description": null,
    "lineNumber": 1,
    "undocument": true
  },
  {
    "__docId__": 60,
    "kind": "file",
    "name": "src/utils/render-status.js",
    "content": "let sheduled = false;\r\nconst afterRenderQue = [];\r\nconst beforeRenderQue = [];\r\n\r\nconst callMethod = array => {\r\n  const context = array[0];\r\n  const callback = array[1];\r\n  const args = array[2];\r\n  try {\r\n    callback.apply(context, args);\r\n  } catch(e) {\r\n    setTimeout(() => {\r\n      throw e;\r\n    })\r\n  }\r\n};\r\n\r\nconst flushQue = que => {\r\n  while (que.length) {\r\n    callMethod(que.shift);\r\n  }\r\n};\r\n\r\nconst runQue = que => {\r\n  for (let i=0, l=que.length; i < l; i++) {\r\n    callMethod(que.shift());\r\n  }\r\n  sheduled = false;\r\n}\r\n\r\nconst shedule = () => {\r\n  sheduled = true;\r\n  requestAnimationFrame(() => {\r\n    flushQue(beforeRenderQue);\r\n    setTimeout(() => {\r\n      runQue(afterRenderQue);\r\n    });\r\n  });\r\n};\r\n\r\nexport default (() => {\r\n  window.RenderStatus = window.RenderStatus || {\r\n    afterRender: (context, callback, args) => {\r\n      if (!sheduled) {\r\n        shedule();\r\n      }\r\n      afterRenderQue.push([context, callback, args]);\r\n    },\r\n    beforeRender: (context, callback, args) => {\r\n      if (!sheduled) {\r\n        shedule();\r\n      }\r\n      beforeRenderQue.push([context, callback, args]);\r\n    }\r\n  }\r\n})();\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/render-status.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 61,
    "kind": "variable",
    "name": "sheduled",
    "memberof": "src/utils/render-status.js",
    "static": true,
    "longname": "src/utils/render-status.js~sheduled",
    "access": null,
    "export": false,
    "importPath": "backed/src/utils/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 1,
    "undocument": true
  },
  {
    "__docId__": 62,
    "kind": "variable",
    "name": "afterRenderQue",
    "memberof": "src/utils/render-status.js",
    "static": true,
    "longname": "src/utils/render-status.js~afterRenderQue",
    "access": null,
    "export": false,
    "importPath": "backed/src/utils/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 2,
    "undocument": true
  },
  {
    "__docId__": 63,
    "kind": "variable",
    "name": "beforeRenderQue",
    "memberof": "src/utils/render-status.js",
    "static": true,
    "longname": "src/utils/render-status.js~beforeRenderQue",
    "access": null,
    "export": false,
    "importPath": "backed/src/utils/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 3,
    "undocument": true
  },
  {
    "__docId__": 64,
    "kind": "function",
    "name": "callMethod",
    "memberof": "src/utils/render-status.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/render-status.js~callMethod",
    "access": null,
    "export": false,
    "importPath": "backed/src/utils/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 5,
    "undocument": true
  },
  {
    "__docId__": 65,
    "kind": "function",
    "name": "flushQue",
    "memberof": "src/utils/render-status.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/render-status.js~flushQue",
    "access": null,
    "export": false,
    "importPath": "backed/src/utils/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 18,
    "undocument": true
  },
  {
    "__docId__": 66,
    "kind": "function",
    "name": "runQue",
    "memberof": "src/utils/render-status.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/render-status.js~runQue",
    "access": null,
    "export": false,
    "importPath": "backed/src/utils/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 24,
    "undocument": true
  },
  {
    "__docId__": 67,
    "kind": "function",
    "name": "shedule",
    "memberof": "src/utils/render-status.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/render-status.js~shedule",
    "access": null,
    "export": false,
    "importPath": "backed/src/utils/render-status.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 31,
    "undocument": true
  },
  {
    "__docId__": 68,
    "kind": "file",
    "name": "src/utils/replace-accents.js",
    "content": "/**\n* Replaces all accented chars with regular ones\n*/\nexport default (string) => {\n  // verifies if the String has accents and replace them\n  if (string.search(/[\\xC0-\\xFF]/g) > -1) {\n      string = string\n              .replace(/[\\xC0-\\xC5]/g, 'A')\n              .replace(/[\\xC6]/g, 'AE')\n              .replace(/[\\xC7]/g, 'C')\n              .replace(/[\\xC8-\\xCB]/g, 'E')\n              .replace(/[\\xCC-\\xCF]/g, 'I')\n              .replace(/[\\xD0]/g, 'D')\n              .replace(/[\\xD1]/g, 'N')\n              .replace(/[\\xD2-\\xD6\\xD8]/g, 'O')\n              .replace(/[\\xD9-\\xDC]/g, 'U')\n              .replace(/[\\xDD]/g, 'Y')\n              .replace(/[\\xDE]/g, 'P')\n              .replace(/[\\xE0-\\xE5]/g, 'a')\n              .replace(/[\\xE6]/g, 'ae')\n              .replace(/[\\xE7]/g, 'c')\n              .replace(/[\\xE8-\\xEB]/g, 'e')\n              .replace(/[\\xEC-\\xEF]/g, 'i')\n              .replace(/[\\xF1]/g, 'n')\n              .replace(/[\\xF2-\\xF6\\xF8]/g, 'o')\n              .replace(/[\\xF9-\\xFC]/g, 'u')\n              .replace(/[\\xFE]/g, 'p')\n              .replace(/[\\xFD\\xFF]/g, 'y');\n  }\n\n  return string;\n};\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/replace-accents.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 69,
    "kind": "function",
    "name": "replaceaccents",
    "memberof": "src/utils/replace-accents.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/replace-accents.js~replaceaccents",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/replace-accents.js",
    "importStyle": "replaceaccents",
    "description": "Replaces all accented chars with regular ones",
    "lineNumber": 4
  },
  {
    "__docId__": 70,
    "kind": "file",
    "name": "src/utils/rtrim.js",
    "content": "import { WHITE_SPACES } from './constants.js';\r\n/**\n* Remove chars from end of string.\n*/\nexport default (string, chars) => {\n  chars = chars || WHITE_SPACES;\n\n  var end = string.length - 1,\n      charLen = chars.length,\n      found = true,\n      i, c;\n\n  while (found && end >= 0) {\n      found = false;\n      i = -1;\n      c = string.charAt(end);\n\n      while (++i < charLen) {\n          if (c === chars[i]) {\n              found = true;\n              end--;\n              break;\n          }\n      }\n  }\n\n  return (end >= 0) ? string.substring(0, end + 1) : '';\n}\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/rtrim.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 71,
    "kind": "function",
    "name": "rtrim",
    "memberof": "src/utils/rtrim.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/rtrim.js~rtrim",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/rtrim.js",
    "importStyle": "rtrim",
    "description": "Remove chars from end of string.",
    "lineNumber": 5
  },
  {
    "__docId__": 72,
    "kind": "file",
    "name": "src/utils/should-register.js",
    "content": "const shouldRegister = name => {\n  return customElements.get(name) ? false : true;\n}\n\nexport default shouldRegister;\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/should-register.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 73,
    "kind": "function",
    "name": "shouldRegister",
    "memberof": "src/utils/should-register.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/should-register.js~shouldRegister",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/should-register.js",
    "importStyle": "shouldRegister",
    "description": null,
    "lineNumber": 1,
    "undocument": true
  },
  {
    "__docId__": 74,
    "kind": "file",
    "name": "src/utils/slugify.js",
    "content": "import replaceAccents from './replace-accents.js';\nimport removeNonWord from './remove-non-word.js';\nimport trim from './trim.js';\r\n\r\n/**\r\n * Convert to lower case, remove accents, remove non-word chars and\r\n * replace spaces with the specified delimeter.\r\n * Does not split camelCase text.\r\n */\r\nexport default (string, delimeter) => {\n  if (delimeter == null) {\n      delimeter = \"-\";\n  }\n\n  string = replaceAccents(string);\n  string = removeNonWord(string);\n  string = trim(string) //should come after removeNonWord\n          .replace(/ +/g, delimeter) //replace spaces with delimeter\n          .toLowerCase();\n  return string;\n};\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/slugify.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 75,
    "kind": "function",
    "name": "slugify",
    "memberof": "src/utils/slugify.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/slugify.js~slugify",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/slugify.js",
    "importStyle": "slugify",
    "description": "Convert to lower case, remove accents, remove non-word chars and\nreplace spaces with the specified delimeter.\nDoes not split camelCase text.",
    "lineNumber": 10
  },
  {
    "__docId__": 76,
    "kind": "file",
    "name": "src/utils/to-js-prop.js",
    "content": "/**\r\n * @mixin Backed\r\n * @module utils\r\n * @export toJsProp\r\n *\r\n * some-prop -> someProp\r\n *\r\n * @param {string} string The content to convert\r\n * @return {string} string\r\n */\nexport default string => {\n  let parts = string.split('-');\n  if (parts.length > 1) {\n    var upper = parts[1].charAt(0).toUpperCase();\n    string = parts[0] + upper + parts[1].slice(1).toLowerCase();\n  }\n  return string;\n};\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/to-js-prop.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 77,
    "kind": "function",
    "name": "tojsprop",
    "memberof": "src/utils/to-js-prop.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/to-js-prop.js~tojsprop",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/to-js-prop.js",
    "importStyle": "tojsprop",
    "description": "",
    "lineNumber": 11,
    "unknown": [
      {
        "tagName": "@mixin",
        "tagValue": "Backed"
      },
      {
        "tagName": "@module",
        "tagValue": "utils"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "string",
        "description": "The content to convert"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": "string"
    }
  },
  {
    "__docId__": 78,
    "kind": "file",
    "name": "src/utils/trim.js",
    "content": "import { WHITE_SPACES } from './constants.js';\nimport ltrim from './ltrim.js';\r\nimport rtrim from './rtrim.js';\r\n/**\r\n * Remove white-spaces from beginning and end of string.\r\n */\nexport default (string, chars) => {\n  chars = chars || WHITE_SPACES;\n  return ltrim(rtrim(string, chars), chars);\n}\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/trim.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 79,
    "kind": "function",
    "name": "trim",
    "memberof": "src/utils/trim.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/trim.js~trim",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/trim.js",
    "importStyle": "trim",
    "description": "Remove white-spaces from beginning and end of string.",
    "lineNumber": 7
  },
  {
    "__docId__": 80,
    "kind": "file",
    "name": "src/utils/un-camel-case.js",
    "content": "/**\n * Add space between camelCase text.\n */\nexport default (string) => {\n  string = string.replace(/([a-z\\xE0-\\xFF])([A-Z\\xC0\\xDF])/g, '$1 $2');\n  string = string.toLowerCase();\n  return string;\n};\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/utils/un-camel-case.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 81,
    "kind": "function",
    "name": "uncamelcase",
    "memberof": "src/utils/un-camel-case.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/un-camel-case.js~uncamelcase",
    "access": null,
    "export": true,
    "importPath": "backed/src/utils/un-camel-case.js",
    "importStyle": "uncamelcase",
    "description": "Add space between camelCase text.",
    "lineNumber": 4
  },
  {
    "__docId__": 82,
    "kind": "file",
    "name": "src/warnings.js",
    "content": "const _warnings = [];\r\n\r\nconst warnings = {\r\n  CESV0: 'Backed uses a ready method as lifeCycleCallback, please see the documentation for more info',\r\n  CESV1: 'Backed uses a ready method as lifeCycleCallback, things should work fine when CESV1 is supported, but CESV0 not, please see the documentation for more info'\r\n};\r\n\r\nconst warn = (name, warning) => {\r\n  if (!_warnings[warning]) {\r\n    console.warn(`${name}::${warnings[warning]}`);\r\n    _warnings.push(warning);\r\n  }\r\n}\r\n\r\nexport default {\r\n  warn: warn\r\n}\r\n",
    "static": true,
    "longname": "D:/Workspace/basicelements/backed/src/warnings.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 83,
    "kind": "variable",
    "name": "_warnings",
    "memberof": "src/warnings.js",
    "static": true,
    "longname": "src/warnings.js~_warnings",
    "access": null,
    "export": false,
    "importPath": "backed/src/warnings.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 1,
    "undocument": true
  },
  {
    "__docId__": 84,
    "kind": "variable",
    "name": "warnings",
    "memberof": "src/warnings.js",
    "static": true,
    "longname": "src/warnings.js~warnings",
    "access": null,
    "export": false,
    "importPath": "backed/src/warnings.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 3,
    "undocument": true
  },
  {
    "__docId__": 85,
    "kind": "function",
    "name": "warn",
    "memberof": "src/warnings.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/warnings.js~warn",
    "access": null,
    "export": false,
    "importPath": "backed/src/warnings.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 8,
    "undocument": true
  },
  {
    "kind": "index",
    "content": "# backed [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url]\r\n> Small web framework for quick app & component development\r\n\r\n## Features\r\n- ~~class development without the worry of constructors and calling super~~\r\n- internal/scoped & global property observers, checkout [using observers]\r\n- updates property values to attributes & the otherway around, checkout [using reflect]\r\n- easy to compose with other classes.\r\n- ~~templating using [lit-html], checkout [using render]~~ \r\n\r\nTemplating is not included out of the box anymore, checkout [custom-renderer-mixin] or [backed-lit-mixin] for rendering.\r\n\r\n## Installation\r\n\r\n```sh\r\n$ yarn add backed\r\n```\r\n\r\n```sh\r\n$ npm install --save backed\r\n```\r\n\r\n## Usage\r\n### Importing\r\n#### ES modules\r\nImports are found in the \"src\" folder\r\n```js\r\nimport package from 'package/location/src/package.js';\r\n```\r\n#### iife\r\nImports are found in the package root folder\r\n```html\r\n<script src=\"package/location/package.js\"></script>\r\n```\r\n\r\n### checkout some usage [examples](https://github.com/VandeurenGlenn/backed/examples.md)\r\n\r\n## More info\r\n- [wiki](https://github.com/VandeurenGlenn/backed/wiki)\r\n\r\n## Roadmap\r\n- [x] Support customElementsV1\r\n- [ ] Support commonjs (node)\r\n- [x] Add observer support\r\n- [x] Add global observer support\r\n\r\n## TODO\r\n\r\n- [ ] Add strict property support (wip)\r\n- [ ] Handle Commonjs (properties, observers, etc ...)\r\n- [ ] Bind properties & attributes (use pubsub to notify changes)\r\n- [x] Reflect properties & attributes\r\n- [ ] Add demo's\r\n- [ ] Add documentation\r\n\r\n## Notes\r\n- Currently working on splitting into modules as much possible/needed\r\n- LitMixin is about to be removed & can be found @ [backed-lit-mixin]\r\n\r\n## License\r\n\r\nCC-BY-NC-ND-4.0 © [Glenn Vandeuren]()\r\n\r\n[lit-html]: https://www.npmjs.com/package/lit-html\r\n[using observers]: examples.md#using-observers\r\n[using reflect]: examples.md#using-reflect\r\n[using render]: examples.md#using-render\r\n[backed-lit-mixin]: https://github.com/vandeurenglenn/backed-lit-mixin\r\n[custom-renderer-mixin]: https://github.com/vandeurenglenn/custom-renderer-mixin\r\n[npm-image]: https://badge.fury.io/js/backed.svg\r\n[npm-url]: https://npmjs.org/package/backed\r\n[travis-image]: https://travis-ci.org/basicelements/backed.svg?branch=master\r\n[travis-url]: https://travis-ci.org/basicelements/backed\r\n[daviddm-image]: https://david-dm.org/basicelements/backed.svg?theme=shields.io\r\n[daviddm-url]: https://david-dm.org/basicelements/backed\r\n[coveralls-image]: https://coveralls.io/repos/basicelements/backed/badge.svg\r\n[coveralls-url]: https://coveralls.io/r/basicelements/backed\r\n",
    "longname": "D:\\Workspace\\basicelements\\backed\\README.md",
    "name": "./README.md",
    "static": true,
    "access": "public"
  },
  {
    "kind": "packageJSON",
    "content": "{\r\n  \"name\": \"backed\",\r\n  \"version\": \"0.13.0\",\r\n  \"description\": \"Small web framework for quick app & component development\",\r\n  \"main\": \"backed.js\",\r\n  \"scripts\": {\r\n    \"prepublish\": \"esdoc && sh scripts/release.sh && sh scripts/gh-pages.sh\",\r\n    \"postpublish\": \"sh scripts/clean.sh\",\r\n    \"build\": \"rollup -c\",\r\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\r\n  },\r\n  \"flat\": true,\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"git+https://github.com/vandeurenglenn/backed.git\"\r\n  },\r\n  \"author\": \"Glenn Vadeuren <vandeurenglenn@gmail.com>\",\r\n  \"license\": \"CC-BY-NC-ND-4.0\",\r\n  \"bugs\": {\r\n    \"url\": \"https://github.com/vandeurenglenn/backed/issues\"\r\n  },\r\n  \"homepage\": \"https://github.com/vandeurenglenn/backed#readme\",\r\n  \"esdoc\": {\r\n    \"source\": \"src/\",\r\n    \"destination\": \"docs/\"\r\n  },\r\n  \"resolutions\": {\r\n    \"cheerio\": \"1.0.0-rc.2\",\r\n    \"color-logger\": \"0.0.6\",\r\n    \"minimist\": \"1.2.0\",\r\n    \"entities\": \"1.1.1\",\r\n    \"htmlparser2\": \"3.9.2\",\r\n    \"parse5\": \"3.0.3\",\r\n    \"domutils\": \"1.7.0\",\r\n    \"domelementtype\": \"1.3.0\",\r\n    \"domhandler\": \"2.4.2\",\r\n    \"readable-stream\": \"2.3.6\",\r\n    \"isarray\": \"1.0.0\",\r\n    \"string_decoder\": \"1.1.1\",\r\n    \"source-map\": \"0.6.1\",\r\n    \"debug\": \"3.1.0\",\r\n    \"globals\": \"11.5.0\",\r\n    \"chalk\": \"2.4.1\",\r\n    \"ansi-styles\": \"3.2.1\",\r\n    \"strip-ansi\": \"4.0.0\",\r\n    \"supports-color\": \"5.4.0\",\r\n    \"ansi-regex\": \"3.0.0\",\r\n    \"acorn\": \"5.5.3\",\r\n    \"esprima\": \"4.0.0\",\r\n    \"extsprintf\": \"1.4.0\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"esdoc\": \"^1.1.0\",\r\n    \"eslint\": \"^4.19.1\",\r\n    \"eslint-config-google\": \"^0.9.1\",\r\n    \"uglify-es\": \"^3.3.9\"\r\n  }\r\n}\r\n",
    "longname": "D:\\Workspace\\basicelements\\backed\\package.json",
    "name": "package.json",
    "static": true,
    "access": "public"
  }
]