text:
(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define([], factory);
	else if(typeof exports === 'object')
		exports["kompo"] = factory();
	else
		root["kompo"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// identity function for calling harmony imports with the correct context
/******/ 	__webpack_require__.i = function(value) { return value; };
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 65);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };

exports.default = construct;
exports.constructClass = constructClass;
exports.render = render;
exports.update = update;
exports.kompo = kompo;
exports.setState = setState;
exports.getState = getState;
exports.mount = mount;
exports.unmount = unmount;
exports.unmountAll = unmountAll;
exports.mountIndex = mountIndex;
exports.react = react;
exports.slot = slot;
exports.hasSlot = hasSlot;
exports.getRouter = getRouter;
exports.compose = compose;
exports.getProps = getProps;
exports.getMethods = getMethods;
exports.getMounts = getMounts;
exports.mountable = mountable;
exports.debug = debug;
exports.debugLifeCycle = debugLifeCycle;
exports.getSelector = getSelector;

var _store = __webpack_require__(2);

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

/**
 * When KOMPO_DEBUG is defined it returns it, otherwise is returns false
 * @returns boolean
 */
function isKompoDebug() {
    if (typeof KOMPO_DEBUG != 'undefined') {
        return KOMPO_DEBUG;
    }

    return false;
}

/**
 * Adds construct function to Element prototype
 */
if ((typeof Element === 'undefined' ? 'undefined' : _typeof(Element)) === 'object') {
    Object.defineProperty(Element.prototype, 'construct', {
        writable: true,
        value: function value() {
            throw new Error('Must override the construct method');
        }
    });
}

/**
 * Creates a compnent from an Element
 *
 * @param tag
 * @param constructFn
 * @param defaultProps
 * @returns {function()}
 */
function construct(tag, constructFn) {
    var defaultProps = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];

    return function () {
        var props = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];

        var c = kompo(document.createElement(tag));
        c.kompo.props = _extends({}, defaultProps, props);
        c.construct = constructFn;
        return c;
    };
}

function constructClass(tag, constructClass) {
    var defaultProps = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];

    var methods = getMethods(constructClass.prototype);
    return function () {
        var props = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];

        var c = kompo(document.createElement(tag));
        c.kompo.props = _extends({}, defaultProps, props);
        _extends(c, methods);
        return c;
    };
}

/**
 * Renders given component
 *
 * @param Element
 */
function render(Element) {
    var kompo = Element.kompo;
    if (!kompo.initial) return;

    if (isKompoDebug() && kompo.debug) {
        console.groupCollapsed('RENDER: ');
        console.log(Element);
        console.log(kompo);
        console.groupCollapsed('CONSTRUCT: ');
    }

    // Construct then ...
    Element.construct(kompo.props);
    kompo.initial = false;

    if (isKompoDebug() && kompo.debug) {
        console.groupEnd();
    }

    // ... react
    var statefulls = kompo.statefulls,
        selector = kompo.selector,
        state = selector ? selector(Element.__kompo__.state) : Element.__kompo__.state;

    if (statefulls.length > 0 && state) {
        if (isKompoDebug() && kompo.debug) {
            console.log('HAS STATE: ', state);
            console.groupCollapsed('REACTS: ');
        }

        for (var i = 0, l = statefulls.length; i < l; ++i) {
            statefulls[i](state, Element);
        }

        if (isKompoDebug() && kompo.debug) {
            console.groupEnd();
        }
    }

    if (isKompoDebug() && kompo.debug) {
        console.groupEnd();
    }
}

function update(Element, state) {
    var kompo = Element.kompo;

    if (isKompoDebug() && kompo.debug) {
        console.groupCollapsed('UPDATE: ');
        console.log(Element);
        console.log(kompo);
    }

    updateStatefulls(Element, kompo, state);

    var mounts = kompo.mounts;
    if (mounts.length > 0) {
        if (isKompoDebug() && kompo.debug) {
            console.groupCollapsed('MOUNTS: ');
        }

        for (var i = 0, l = mounts.length; i < l; ++i) {
            update(mounts[i], state);
        }

        if (isKompoDebug() && kompo.debug) {
            console.groupEnd();
        }
    }

    if (isKompoDebug() && kompo.debug) {
        console.groupEnd();
    }
}

function updateStatefulls(Element, kompo, state) {
    var statefulls = kompo.statefulls;

    // Only run if a component has statefulls
    if (statefulls.length == 0) return;

    var selector = kompo.selector,
        selectedState = selector ? selector(Element.__kompo__.state) : Element.__kompo__.state;

    if (selectedState && (state === selectedState || inProperties(selectedState, state))) {
        if (isKompoDebug() && kompo.debug) {
            console.log('HAS DIRTY STATE: ', selectedState);
            console.groupCollapsed('REACTS: ');
        }

        for (var i = 0, l = statefulls.length; i < l; ++i) {
            var st = statefulls[i];

            if ((0, _store.shouldIgnore)(state, st)) {
                (0, _store.resetIgnore)(state);
                continue;
            }

            st(selectedState, Element);
        }

        if (isKompoDebug() && kompo.debug) {
            console.groupEnd();
        }
    }
}

function inProperties(selectedState, state) {
    if (selectedState && !(0, _store.isProxy)(selectedState)) {
        var keys = Object.keys(selectedState);
        for (var i = 0, l = keys.length; i < l; ++i) {
            if (state === selectedState[keys[i]]) {
                return true;
            }
        }
    }

    return false;
}

function kompo(Element) {
    Element.kompo = {
        initial: true,
        props: {},
        defaultProps: {},
        mounts: [],
        statefulls: [],
        slots: {},
        routed: undefined,
        selector: undefined,
        // state: undefined, // TODO Unavailable now but could perhaps be used as caching mechanism (also see setState())
        unmount: undefined,
        debug: false
    };

    return Element;
}

function setState(Element, selector) {
    var kompo = Element.kompo;
    // TODO Unavailable now but could perhaps be used as caching mechanism
    // if(apply) kompo.state = selector(Element.__kompo__.state);
    kompo.selector = selector;
    return Element;
}

function getState(Element) {
    var selector = Element.kompo.selector;
    return selector ? selector(Element.__kompo__.state) : Element.__kompo__.state;
}

function mount(parent, child, selector) {
    if (Array.isArray(child)) {
        _mountAll(parent, child, selector);
    } else {
        _mount(parent, child, selector);
    }
}

function _mount(parent, child, selector) {
    if (selector) {
        setState(child, selector);
    } else if (child instanceof Mountable) {
        setState(child.Element, child.selector);
        child = child.Element;
    }

    render(child);

    // Protection if same element is appended multiple times
    var mounts = parent.kompo.mounts;
    if (mounts.indexOf(child) === -1) {
        child.kompo.unmount = function () {
            mounts.splice(mounts.indexOf(child), 1);
        };
        mounts.push(child);
    }
}

function _mountAll(parent, children, selector) {
    // Mount all children ...
    for (var i = 0, l = children.length; i < l; ++i) {
        _mount(parent, children[i], selector ? selector : undefined);
    }
}

function unmount(Element) {
    Element.kompo.unmount();
}

function unmountAll(Element) {
    Element.kompo.mounts = [];
}

function mountIndex(parent, child) {
    return parent.kompo.mounts.indexOf(child);
}

function react(Element, statefull) {
    Element.kompo.statefulls.push(statefull);
}

/**
 * Mimics the slot functionality of
 * Web Components
 *
 * Slots are named, their name & location is
 * predefined in the component.
 *
 * @param Element
 * @param name
 * @param cb
 */
function slot(Element, name, cb) {
    if (arguments.length === 2) {
        Element.kompo.slots[name](Element);
    } else {
        Element.kompo.slots[name] = cb;
    }
}

/**
 * Checks whether a slot with the given name exists
 *
 * @param Element
 * @param name
 * @returns {boolean}
 */
function hasSlot(Element, name) {
    return Element.kompo.slots[name] ? true : false;
}

/**
 * Gets the router from an Element. The router is
 * add globally to the Element prototype
 *
 * @param Element
 * @returns {router}
 */
function getRouter(Element) {
    return Element.__kompo__.router;
}

/**
 * Adds properties to an existing component,
 * making it possible to compose a component with
 * different behavior.
 *
 * @param constructComponent
 * @param composeProps
 * @returns {function()}
 */
function compose(constructComponent, composeProps) {
    return function () {
        var props = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];

        return constructComponent(_extends(composeProps, props));
    };
}

function getProps(Element) {
    return Element.kompo.props;
}

function getMethods(clss) {
    var props = [],
        methods = {};

    var obj = clss;

    do {
        var ps = Object.getOwnPropertyNames(obj);

        var fps = [];
        for (var i = 0, l = ps.length; i < l; ++i) {
            var p = ps[i];
            if (typeof obj[p] === 'function' //only the methods
            && p != 'constructor' //not the constructor
            && (i == 0 || p !== ps[i - 1]) //not overriding in this prototype
            && props.indexOf(p) === -1 //not overridden in a child
            ) {
                    fps.push(p);
                    methods[p] = clss[p];
                }
        }

        props.push.apply(props, fps);
    } while ((obj = Object.getPrototypeOf(obj)) && //walk-up the prototype chain
    Object.getPrototypeOf(obj) //not the the Object prototype methods (hasOwnProperty, etc...)
    );

    return methods;
}

function getMounts(Element) {
    return Element.kompo.mounts;
}

var Mountable = function Mountable(Element, selector) {
    _classCallCheck(this, Mountable);

    this.Element = Element;
    this.selector = selector;
};

function mountable(Element, selector) {
    return new Mountable(Element, selector);
}

function debug(Element, level) {
    if (!Element instanceof HTMLElement) {
        throw new Error('Not an instance of Element');
    }

    if (!Element.hasOwnProperty('kompo')) {
        throw new Error('Is not a KompoElement');
    }

    var kompo = Element.kompo,
        mounts = kompo.mounts;

    console.log(Element, kompo);

    if (Number.isInteger(level) && level > 0 && mounts.length > 0) {
        console.groupCollapsed('MOUNTS: ');

        var nl = --level;
        for (var i = 0, l = mounts.length; i < l; ++i) {
            debug(mounts[i], nl);
            console.log('__END_OF_MOUNT__');
        }

        console.groupEnd();
    }

    return Element;
}

function debugLifeCycle(Element) {
    if (!Element instanceof HTMLElement) {
        throw new Error('Not an instance of Element');
    }

    if (!Element.hasOwnProperty('kompo')) {
        throw new Error('Is not a KompoElement');
    }

    // Set to true so render & update functions log the components life cycle
    Element.kompo.debug = true;

    return Element;
}

function getSelector(Element) {
    return Element.kompo.selector;
}

/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.util = exports.state = exports.router = undefined;

var _component = __webpack_require__(0);

var _component2 = _interopRequireDefault(_component);

var _link = __webpack_require__(19);

var _link2 = _interopRequireDefault(_link);

var _router = __webpack_require__(20);

var _router2 = _interopRequireDefault(_router);

var _app = __webpack_require__(21);

var _app2 = _interopRequireDefault(_app);

var _store = __webpack_require__(2);

var _store2 = _interopRequireDefault(_store);

var _hasProxy = __webpack_require__(23);

var _hasProxy2 = _interopRequireDefault(_hasProxy);

var _deproxy = __webpack_require__(22);

var _deproxy2 = _interopRequireDefault(_deproxy);

var _isObject = __webpack_require__(3);

var _isObject2 = _interopRequireDefault(_isObject);

var _merge = __webpack_require__(24);

var _merge2 = _interopRequireDefault(_merge);

var _isFunction = __webpack_require__(8);

var _isFunction2 = _interopRequireDefault(_isFunction);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var router = {
    construct: _router2.default,
    route: _router.route,
    indexRoute: _router.indexRoute,
    swap: _router.swap,
    link: _link2.default
};

var state = {
    app: _app2.default,
    observe: _store2.default,
    isProxy: _store.isProxy,
    ignore: _store.ignore,
    shouldIgnore: _store.shouldIgnore,
    resetIgnore: _store.resetIgnore,
    dispatch: _store.dispatch,
    ignoreUpdate: _store.ignoreUpdate,
    resetIgnoreUpdate: _store.resetIgnoreUpdate,
    triggerUpdate: _store.triggerUpdate
};

var util = {
    hasProxy: _hasProxy2.default,
    deproxy: _deproxy2.default,
    isObject: _isObject2.default,
    merge: _merge2.default,
    isFunction: _isFunction2.default
};

exports.default = {
    construct: _component2.default,
    render: _component.render,
    update: _component.update,
    kompo: _component.kompo,
    setState: _component.setState,
    mount: _component.mount,
    getMounts: _component.getMounts,
    mountable: _component.mountable,
    react: _component.react,
    slot: _component.slot,
    getRouter: _component.getRouter,
    unmount: _component.unmount,
    unmountAll: _component.unmountAll,
    mountIndex: _component.mountIndex,
    getState: _component.getState,
    compose: _component.compose,
    getProps: _component.getProps,
    constructClass: _component.constructClass,
    debug: _component.debug,
    debugLifeCycle: _component.debugLifeCycle,
    getSelector: _component.getSelector
};
exports.router = router;
exports.state = state;
exports.util = util;

/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = observe;
exports.isProxy = isProxy;
exports.ignore = ignore;
exports.shouldIgnore = shouldIgnore;
exports.resetIgnore = resetIgnore;
exports.dispatch = dispatch;
exports.ignoreUpdate = ignoreUpdate;
exports.resetIgnoreUpdate = resetIgnoreUpdate;
exports.triggerUpdate = triggerUpdate;

var _component = __webpack_require__(0);

var _isObject = __webpack_require__(3);

var _isObject2 = _interopRequireDefault(_isObject);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var OBSERVED_KEY = '__kompo_observed__',
    IGNORE_STATEFULL_KEY = '__kompo_ignore_statefulls__',
    IGNORE_KEY = '__kompo_ignore__',
    TRIGGER_UPDATE_KEY = '__kompo_trigger_update__',
    // IMPORTANT Should not be in reserved keys
reservedKeys = ['length', IGNORE_STATEFULL_KEY, IGNORE_KEY];

function observe(obj, root) {
    var isObj = (0, _isObject2.default)(obj),
        isArray = Array.isArray(obj);

    if (!isObj && !isArray || obj.hasOwnProperty(OBSERVED_KEY)) return obj;

    Object.defineProperty(obj, OBSERVED_KEY, {
        value: true
    });

    Object.defineProperty(obj, IGNORE_STATEFULL_KEY, {
        value: [],
        writable: true
    });

    Object.defineProperty(obj, IGNORE_KEY, {
        value: false,
        writable: true
    });

    Object.defineProperty(obj, TRIGGER_UPDATE_KEY, {
        value: true,
        writable: true
    });

    var keys = Object.keys(obj);
    for (var i = 0, l = keys.length; i < l; ++i) {
        var key = keys[i];
        if (reservedKeys.indexOf(key) === -1) {
            obj[key] = observe(obj[key], root);
        }
    }

    obj = new Proxy(obj, {
        deleteProperty: function deleteProperty(target, key) {
            delete target[key];
            if (!obj[IGNORE_KEY]) requestAnimationFrame(function () {
                return (0, _component.update)(root, obj);
            });
            return true;
        },
        set: function set(target, key, val) {
            if (reservedKeys.indexOf(key) > -1 || obj[IGNORE_KEY]) {
                target[key] = val;
            } else {
                target[key] = observe(val, root);
                requestAnimationFrame(function () {
                    return (0, _component.update)(root, obj);
                });
            }

            return true;
        }
    });

    return obj;
}

function isProxy(obj) {
    return obj.hasOwnProperty(OBSERVED_KEY);
}

function ignore(obj) {
    for (var _len = arguments.length, statefulls = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
        statefulls[_key - 1] = arguments[_key];
    }

    obj[IGNORE_STATEFULL_KEY] = statefulls;
}

function shouldIgnore(obj, statefull) {
    return obj[IGNORE_STATEFULL_KEY].indexOf(statefull) !== -1;
}

function resetIgnore(obj) {
    obj[IGNORE_STATEFULL_KEY] = [];
}

function dispatch(Element, cb, silent) {
    if (!cb) return;

    var state = (0, _component.getState)(Element);
    ignoreUpdate(state);
    cb(state);
    resetIgnoreUpdate(state);
    if (!silent) triggerUpdate(state);
}

function ignoreUpdate(obj) {
    obj[IGNORE_KEY] = true;
}

function resetIgnoreUpdate(obj) {
    obj[IGNORE_KEY] = false;
}

function triggerUpdate(obj) {
    obj[TRIGGER_UPDATE_KEY] = true;
}

/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };

exports.default = isObject;

/**
 * Checks if `value` is the language type of `Object`.
 * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
 *
 * **Note:** See the [ES5 spec](https://es5.github.io/#x8) for more details.
 *
 * @static
 * @memberOf _
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
 * @example
 *
 * _.isObject({});
 * // => true
 *
 * _.isObject([1, 2, 3]);
 * // => true
 *
 * _.isObject(1);
 * // => false
 */
function isObject(value) {
  // Avoid a V8 JIT bug in Chrome 19-20.
  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
  var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);
  return type == 'function' || value && type == 'object' || false;
}

/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.addClasses = exports.throttle = exports.replace = exports.remove = exports.merge = exports.matches = exports.isObject = exports.isFunction = exports.empty = exports.delegate = exports.debounce = exports.addAttributes = exports.createText = exports.createFragment = exports.create = exports.capitalize = undefined;

var _capitalize = __webpack_require__(10);

var _capitalize2 = _interopRequireDefault(_capitalize);

var _create = __webpack_require__(5);

var _create2 = _interopRequireDefault(_create);

var _debounce = __webpack_require__(11);

var _debounce2 = _interopRequireDefault(_debounce);

var _delegate = __webpack_require__(12);

var _delegate2 = _interopRequireDefault(_delegate);

var _empty = __webpack_require__(13);

var _empty2 = _interopRequireDefault(_empty);

var _isFunction = __webpack_require__(14);

var _isFunction2 = _interopRequireDefault(_isFunction);

var _isObject = __webpack_require__(6);

var _isObject2 = _interopRequireDefault(_isObject);

var _matches = __webpack_require__(7);

var _matches2 = _interopRequireDefault(_matches);

var _merge = __webpack_require__(15);

var _merge2 = _interopRequireDefault(_merge);

var _remove = __webpack_require__(16);

var _remove2 = _interopRequireDefault(_remove);

var _replace = __webpack_require__(17);

var _replace2 = _interopRequireDefault(_replace);

var _throttle = __webpack_require__(18);

var _throttle2 = _interopRequireDefault(_throttle);

var _addClasses = __webpack_require__(9);

var _addClasses2 = _interopRequireDefault(_addClasses);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

exports.capitalize = _capitalize2.default;
exports.create = _create2.default;
exports.createFragment = _create.createFragment;
exports.createText = _create.createText;
exports.addAttributes = _create.addAttributes;
exports.debounce = _debounce2.default;
exports.delegate = _delegate2.default;
exports.empty = _empty2.default;
exports.isFunction = _isFunction2.default;
exports.isObject = _isObject2.default;
exports.matches = _matches2.default;
exports.merge = _merge2.default;
exports.remove = _remove2.default;
exports.replace = _replace2.default;
exports.throttle = _throttle2.default;
exports.addClasses = _addClasses2.default;

/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = create;
exports.addAttributes = addAttributes;
exports.createFragment = createFragment;
exports.createText = createText;
var doc = document;

/**
 * Creates an Element, when no tagName
 * is given it create an empty div to serve
 * as root.
 *
 * @param {string|undefined} tagName
 * @returns {Element}
 */
function create(tagName, attributes) {
    var Element = void 0;
    if (!tagName) {
        Element = doc.createElement('div');
    } else {
        Element = doc.createElement(tagName);
    }

    if (attributes) {
        addAttributes(Element, attributes);
    }

    return Element;
}

/**
 * Adds attributes to an Element
 * through iterating through an object
 *
 * @param {Element} Element
 * @param {Object} obj
 * @returns {Element}
 */
function addAttributes(Element, obj) {
    var keys = Object.keys(obj);
    for (var i = 0, l = keys.length; i < l; i++) {
        var key = keys[i],
            value = obj[key];
        Element.setAttribute(key, value);
    }
    return Element;
}

/**
 * Syntactic sugar for creating a DocumentFragment
 *
 * @returns {DocumentFragment}
 */
function createFragment() {
    return doc.createDocumentFragment();
}

/**
 * Syntactic sugar for creating a TextNode
 *
 * @param {string} str
 * @returns {Text}
 */
function createText(str) {
    return doc.createTextNode(str);
}

/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };

exports.default = isObject;

/**
 * Checks if `value` is the language type of `Object`.
 * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
 *
 * **Note:** See the [ES5 spec](https://es5.github.io/#x8) for more details.
 *
 * @static
 * @memberOf _
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
 * @example
 *
 * _.isObject({});
 * // => true
 *
 * _.isObject([1, 2, 3]);
 * // => true
 *
 * _.isObject(1);
 * // => false
 */
function isObject(value) {
  // Avoid a V8 JIT bug in Chrome 19-20.
  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
  var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);
  return type == 'function' || value && type == 'object' || false;
}

/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});

/**
 * Polyfills the matches function on Elements
 *
 * Used with event delegation in Components class
 */
exports.default = function () {
    if (!Element.prototype.matches) {
        var ep = Element.prototype;

        if (ep.webkitMatchesSelector) // Chrome <34, SF<7.1, iOS<8
            ep.matches = ep.webkitMatchesSelector;

        if (ep.msMatchesSelector) // IE9/10/11 & Edge
            ep.matches = ep.msMatchesSelector;

        if (ep.mozMatchesSelector) // FF<34
            ep.matches = ep.mozMatchesSelector;
    }
}();

/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = isFunction;

/**
 * Checks if given variable is a function
 *
 * @param {*} functionToCheck
 * @returns {boolean}
 */
function isFunction(functionToCheck) {
  var getType = {};
  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
}

/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = addClasses;
function addClasses(Element, classes) {
    for (var i = 0, l = classes.length; i < l; ++i) {
        Element.classList.add(classes[i]);
    }
}

/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = capitalize;

/**
 * Capitalizes string
 *
 * @param {string} str
 * @returns {string}
 */
function capitalize(str) {
    if (typeof str === "string") {
        return str.charAt(0).toUpperCase() + str.slice(1);
    }
}

/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = debounce;

/**
 * Debounces a function call
 *
 * @param {Function} fn - function to debounce
 * @param {Number} delay - timeout for debouncing
 * @param {Object} scope
 * @returns {Function}
 */
function debounce(fn, delay, scope) {
    var timer = null;
    return function () {
        var context = scope || this,
            args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
            fn.apply(context, args);
        }, delay);
    };
}

/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = delegate;

__webpack_require__(7);

// Self-executing

function delegate(Element, selector, type, listener) {
    Element.addEventListener(type, function (e) {
        for (var target = e.target; target && target != this; target = target.parentNode) {
            // loop parent nodes from the target to the delegation node
            if (target.matches(selector)) {
                listener.bind(target)(e);
                break;
            }
        }
    }, false);
}

/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = empty;
function empty(Element) {
    while (Element.lastChild) {
        Element.removeChild(Element.lastChild);
    }
    return Element;
}

/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = isFunction;

/**
 * Checks if given variable is a function
 *
 * @param {*} functionToCheck
 * @returns {boolean}
 */
function isFunction(functionToCheck) {
  var getType = {};
  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
}

/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = merge;
/**
 * Merges given objects
 *
 * @param {...Object} objs - Any given amount of objects
 * @returns {Object}
 */
function merge() {
    var object = Array.prototype.shift.call(arguments);
    for (var i = 0; i < arguments.length; i++) {
        var obj = arguments[i];
        for (var j in obj) {
            object[j] = obj[j];
        }
    }

    return object;
}

/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function (Element) {
    var parent = Element.parentNode;
    if (parent) {
        parent.removeChild(Element);
    }
};

/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = replace;

var _create = __webpack_require__(5);

var _create2 = _interopRequireDefault(_create);

var _isObject = __webpack_require__(6);

var _isObject2 = _interopRequireDefault(_isObject);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 *  Replaces an Node for another one
 *
 * @param {Node} parent - parent element to replace child on
 * @param {*} child - new child to replace for old child
 * @param {(boolean|Object)} replaceLastChild - replace first or last child | represents an attribute object
 * @param {boolean} rLC
 * @returns {Element} child - child element
 */
function replace(parent, child) {
    var replaceLastChild = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
    var rLC = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];

    var arg2isObject = (0, _isObject2.default)(arguments[2]);
    var replacedChild = void 0;
    if (arg2isObject) {
        replacedChild = rLC ? parent.lastChild : parent.firstChild;
    } else {
        replacedChild = replaceLastChild ? parent.lastChild : parent.firstChild;
    }

    if (typeof child === 'string') {
        child = (0, _create2.default)(child);
    }

    if (arg2isObject) {
        (0, _create.addAttributes)(child, replaceLastChild);
    }

    if (replacedChild) {
        parent.replaceChild(child, replacedChild);
    } else {
        parent.appendChild(child);
    }

    return child;
}

/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = throttle;

/**
 * Throttle function
 *
 * @param {Function} fn - function to throttle
 * @param {Number} threshold - timeout for throttling
 * @param {Object} scope
 * @returns {Function}
 */
function throttle(fn, threshold, scope) {
    threshold || (threshold = 250);
    var last = void 0,
        deferTimer = void 0;
    return function () {
        var context = scope || this,
            now = +new Date(),
            args = arguments;
        if (last && now < last + threshold) {
            // hold on to it
            clearTimeout(deferTimer);
            deferTimer = setTimeout(function () {
                last = now;
                fn.apply(context, args);
            }, threshold);
        } else {
            last = now;
            return fn.apply(context, args);
        }
    };
}

/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});

var _component = __webpack_require__(0);

var _component2 = _interopRequireDefault(_component);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

exports.default = (0, _component2.default)('a', function (_ref) {
    var _this = this;

    var url = _ref.url;
    var child = _ref.child;
    var classNames = _ref.classNames;
    var data = _ref.data;
    var title = _ref.title;
    var defaultEvent = _ref.defaultEvent;
    var activeClass = _ref.activeClass;
    var onClick = _ref.onClick;

    // First add classes
    for (var i = 0, l = classNames.length; i < l; ++i) {
        this.classList.add(classNames[i]);
    }

    var router = (0, _component.getRouter)(this);

    (0, _component.react)(this, function () {
        if (router.isUrl(url)) {
            _this.classList.add(activeClass);
        } else {
            _this.classList.remove(activeClass);
        }
    });

    this.setAttribute('href', url);

    if (typeof child === 'string') {
        this.textContent = child;
    } else if (child.hasOwnProperty('kompo')) {
        (0, _component.mount)(this, child);
        this.appendChild(child);
    } else if (child instanceof Node) {
        this.appendChild(child);
    } else if ((0, _component.hasSlot)(this, 'child')) {
        (0, _component.slot)(this, 'child');
    } else {
        throw new Error('Child should be a string, KompoElement, Node or a slot callback named "child"');
    }

    this.addEventListener(defaultEvent, function (e) {
        e.preventDefault();
        if (onClick) {
            onClick(e);
        }
        router.goTo(url, title, data);
        var state = (0, _component.getState)(_this);
        state.url = url;
    });
}, {
    url: '',
    child: '',
    classNames: [],
    data: undefined, // Data to push with pushState()
    title: '',
    defaultEvent: 'click',
    activeClass: 'active',
    onClick: undefined
});

/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

exports.default = construct;
exports.route = route;
exports.indexRoute = indexRoute;
exports.swap = swap;

var _component = __webpack_require__(0);

var _isFunction = __webpack_require__(8);

var _isFunction2 = _interopRequireDefault(_isFunction);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function construct(props) {
    props = _extends({
        base: '/',
        url: '/',
        notFoundCallback: function notFoundCallback(url) {
            throw new Error('No matching route found for url: ' + url + '. Provide a notFoundCallback callback option or correct the url or route.');
        }
    }, props);

    var base = void 0,
        url = void 0,
        index = 0,
        params = [];

    var rawRoutes = {},
        routes = {};

    setBase(props.base);
    setUrl(props.url);
    parseRoute(props.routes);

    function setBase(b) {
        if (b[0] !== '/') {
            b = '/' + b;
        }

        if (b.slice(-1) === '/') {
            b = b.slice(0, -1);
        }

        base = b;
    }

    function setUrl(u) {
        url = u[0] === '/' ? u : '/' + u;
    }

    function isUrl(u) {
        u = u[0] === '/' ? u : '/' + u;
        return url === u;
    }

    function parseRoute(Route) {
        buildPath(Route);

        var rawKeys = Object.keys(rawRoutes);
        for (var i = 0, l = rawKeys.length; i < l; i++) {
            var k = rawKeys[i],

            // TODO: Could this be improved?
            nk = k.replace(/(:([\w-]+))/g, '([\\w-]+)').replace(/\//g, '\\/');
            routes[nk] = rawRoutes[k];
        }
    }

    function buildPath(route) {
        var ancestors = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];
        var hierarchy = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];
        var level = arguments.length <= 3 || arguments[3] === undefined ? 0 : arguments[3];

        var children = route.children;
        var routeComponent = route.component;

        if (routeComponent instanceof Element) {
            routeComponent.kompo.level = level;
        } else if (routeComponent instanceof Promise || (0, _isFunction2.default)(routeComponent)) {
            // Set a level to the promise
            routeComponent.kompo = { level: level };
        }

        if (!children) return;

        var basePath = route.path,
            isRoot = ancestors.length === 0;

        for (var i = 0, l = children.length; i < l; i++) {
            var childRoute = children[i],
                componentPath = !isRoot ? ancestors.concat(childRoute.component) : ancestors.concat(routeComponent, childRoute.component),
                childHierarchy = hierarchy.concat(i);

            var _path = void 0;

            if (childRoute.path[0] === '/') {
                _path = childRoute.path;
            } else if (isRoot) {
                _path = basePath + childRoute.path;
            } else if (childRoute.path === '') {
                _path = basePath;
            } else {
                _path = basePath + '/' + childRoute.path;
            }

            childRoute.path = _path;
            rawRoutes[_path] = {
                components: componentPath,
                hierarchy: childHierarchy
            };
            buildPath(childRoute, componentPath, childHierarchy, level + 1);
        }
    }

    function match(url, against) {
        var keys = Object.keys(against);
        for (var i = 0, l = keys.length; i < l; i++) {
            var regexstr = keys[i],
                _match = url.match(new RegExp('^' + regexstr + '$'));
            if (_match !== null) {
                _match.shift();
                params = _match;
                return against[regexstr];
            }
        }

        if (props.notFoundCallback) {
            props.notFoundCallback(url);
        }

        return []; // Return empty array to keep it all running
    }

    function getSiblingRoutes(hierarchy, index) {
        return scanSiblingsRoutes(hierarchy, props.routes, index - 1, 0);
    }

    function scanSiblingsRoutes(hierarchy, parentRoute, toIndex, currentIndex) {
        hierarchy = hierarchy.slice(); // Slice in order to prevent editing original array
        if (currentIndex === toIndex) {
            return parentRoute.children;
        }

        return scanSiblingsRoutes(hierarchy, parentRoute.children[hierarchy.shift()], toIndex, currentIndex + 1);
    }

    return {
        getParams: function getParams() {
            return params;
        },
        isUrl: isUrl,
        getUrl: function getUrl() {
            return url;
        },
        setTo: function setTo(u) {
            u = u.replace(base, '');
            if (isUrl(u)) return false;

            setUrl(u);
            return true;
        },
        goTo: function goTo(u) {
            var title = arguments.length <= 1 || arguments[1] === undefined ? '' : arguments[1];
            var data = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];

            if (isUrl(u)) return false;

            setUrl(u);

            history.pushState(data, title, base + url);
            return true;
        },
        get: function get(parent, depth, includeSiblings) {
            if (parent instanceof Element) {
                index = parent.kompo.level + 1;
            }

            var md = match(url, routes),
                mc = md.components;

            if (depth) {
                if (includeSiblings) {
                    mc[index] = {
                        component: mc[index],
                        siblings: getSiblingRoutes(md.hierarchy, index)
                    };
                }
                // For negative values, do + because index-(-depth) will be positive instead of negative
                if (depth < 0) return mc.slice(index + depth, index + 1);
                return mc.slice(index, index + depth);
            } else {
                return includeSiblings ? {
                    component: mc[index],
                    siblings: getSiblingRoutes(md.hierarchy, index)
                } : mc[index];
            }
        }
    };
}

function route(path, component, children) {
    return {
        path: path, component: component, children: children
    };
}

function indexRoute(component, children) {
    return route('', component, children);
}

function swap(component, router, element) {
    var c = router.get(component),
        fn = void 0;

    if (c) {
        if ((0, _isFunction2.default)(c)) {
            fn = c;
            c = _toPromise(c);
        }

        if (c instanceof Element) {
            _swap(component, c, element);
        } else if (c instanceof Promise) {
            if (c.kompo.resolved) {
                _swap(component, c.kompo.resolved, element);
            } else {
                c.then(function (rc) {
                    rc.kompo.level = c.kompo.level;
                    _swap(component, rc, element);
                    c.kompo.resolved = rc;
                    if (fn) fn.kompo.resolved = rc;
                }).catch(function () {
                    console.error("Cannot dynamically load module for route");
                });
            }
        }
    }
}

function _toPromise(fn) {
    var pr = fn();

    // Transfer kompo object including level to the promise
    pr.kompo = fn.kompo;

    return pr;
}

function _swap(parent, routedComponent, element) {
    var routed = parent.kompo.routed,
        el = element ? element : parent;

    if (routed === routedComponent) return;

    if (routed) {
        el.replaceChild(routedComponent, routed);
        (0, _component.unmount)(routed);
    } else {
        el.appendChild(routedComponent);
    }

    (0, _component.mount)(parent, routedComponent);
    parent.kompo.routed = routedComponent;
}

/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = app;

var _store = __webpack_require__(2);

var _store2 = _interopRequireDefault(_store);

var _component = __webpack_require__(0);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function app(root, state, router) {
    state = (0, _store2.default)(state, root);

    // Make available for all Elements
    Object.defineProperty(Element.prototype, '__kompo__', {
        value: {
            root: root,
            state: state,
            router: router
        }
    });

    return {
        start: function start(selector) {
            if (selector) {
                (0, _component.setState)(root, selector);
            }
            requestAnimationFrame(function () {
                return (0, _component.render)(root);
            });
            return root;
        }
    };
}

/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

exports.default = deproxy;

var _isObject = __webpack_require__(3);

var _isObject2 = _interopRequireDefault(_isObject);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function deproxy(obj) {
    var isObj = (0, _isObject2.default)(obj),
        isArray = Array.isArray(obj);

    if (!isObj && !isArray) return obj;

    if (isArray) {
        obj = obj.slice();
        for (var i = 0, l = obj.length; i < l; ++i) {
            obj[i] = deproxy(obj[i]);
        }
    } else {
        obj = _extends({}, obj);
        var keys = Object.keys(obj);
        for (var i = 0, l = keys.length; i < l; ++i) {
            obj[keys[i]] = deproxy(obj[keys[i]]);
        }
    }

    return obj;
}

/***/ }),
/* 23 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function () {
    if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {
        return 'Proxy' in self;
    } else {
        return 'Proxy' in window;
    }
}();

/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = merge;

/**
 * Merges given objects
 *
 * @param {...Object} objs - Any given amount of objects
 * @returns {Object}
 */
function merge() {
    var object = Array.prototype.shift.call(arguments);
    for (var i = 0; i < arguments.length; i++) {
        var obj = arguments[i];
        for (var j in obj) {
            object[j] = obj[j];
        }
    }

    return object;
}

/***/ }),
/* 25 */,
/* 26 */,
/* 27 */,
/* 28 */,
/* 29 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_kompo__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_kompo_util__);

/* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0_kompo___default.a.construct('tr', function (_ref) {
    var _this = this;

    var defaultClass = _ref.defaultClass;
    var selectedClass = _ref.selectedClass;
    var hasColumnFilter = _ref.hasColumnFilter;
    var columnFilter = _ref.columnFilter;

    if (defaultClass) this.classList.add(defaultClass);

    __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.react(this, function (s) {
        if (selectedClass) {
            if (_this.kompo.props.selected) {
                _this.classList.add(selectedClass);
            } else {
                _this.classList.remove(selectedClass);
            }
        }

        __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["empty"])(_this);
        var data = hasColumnFilter ? columnFilter(s) : s,
            keys = Object.keys(data);
        for (var i = 0, l = keys.length; i < l; ++i) {
            var k = keys[i],
                v = data[k];

            // if(typeof minimizeWhitelist !== 'undefined') {
            //     const onWhitelist = isObject?
            //     minimizeWhitelist.indexOf(k) === -1:
            //     minimizeWhitelist.indexOf(filtered[k]) === -1;
            //     if(minimize && onWhitelist) {
            //         continue;
            //     }
            // }

            var c = _this.appendChild(document.createElement('td'));
            if (v instanceof Node) {
                c.appendChild(v);
            } else {
                c.textContent = v;
            }
        }
    });
}, {
    defaultClass: ''
}));

/***/ }),
/* 30 */,
/* 31 */,
/* 32 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return tableActions; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_kompo__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_kompo_util__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__tableRow__ = __webpack_require__(29);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tableHead__ = __webpack_require__(34);

/* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0_kompo___default.a.construct('table', function (_ref) {
    var _this = this;

    var appendRow = _ref.appendRow;
    var on = _ref.on;
    var classes = _ref.classes;
    var oddRowClass = _ref.oddRowClass;
    var evenRowClass = _ref.evenRowClass;
    var selectedClass = _ref.selectedClass;
    var appendHead = _ref.appendHead;
    var headRowClass = _ref.headRowClass;
    var emptyNotice = _ref.emptyNotice;
    var emptyClass = _ref.emptyClass;

    var head = document.createElement('thead'),
        body = document.createElement('tbody'),
        props = __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.getProps(this),
        frag = document.createDocumentFragment();

    if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["isFunction"])(on)) on(this);

    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["addClasses"])(this, classes);

    var wasEmpty = false;

    __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.react(this, function (state) {
        var data = state.data;
        var offset = state.offset,
            limit = state.limit,
            minimize = state.minimize,
            rowFilter = props.rowFilter,
            columnFilter = props.columnFilter;

        if (!Array.isArray(data)) {
            if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["isObject"])(data)) {
                data = Object.values(data);
            } else {
                return;
            }
        }

        // Empty out before append
        __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["empty"])(head);
        __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.unmountAll(_this);

        // When empty...
        if (data.length == 0) {
            // ... render empty notice
            var tr = document.createElement('tr'),
                td = document.createElement('td');

            td.textContent = emptyNotice;
            tr.appendChild(td);
            head.appendChild(tr);
            _this.classList.add(emptyClass);
            wasEmpty = true;
            __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["empty"])(body);
            return;
        } else if (wasEmpty) {
            // Remove empty notice
            _this.classList.remove(emptyClass);
            wasEmpty = false;
        }

        var hasRowFilter = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["isFunction"])(rowFilter),
            hasColumnFilter = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["isFunction"])(columnFilter);

        appendHead(_this, head, {
            defaultClass: headRowClass,
            minimizeWhitelist: props.minimizeWhitelist,
            hasColumnFilter: hasColumnFilter,
            columnFilter: columnFilter
        });

        var dataLength = data.length;
        var os = offset && offset <= dataLength ? offset : 0;
        var l = typeof limit !== 'undefined' && os + limit < dataLength ? limit : dataLength;

        for (os; os < l; ++os) {
            if (hasRowFilter && !rowFilter(data[os])) continue;
            appendRow(_this, frag, os, {
                defaultClass: os % 2 == 0 ? evenRowClass : oddRowClass,
                selectedClass: selectedClass,
                hasColumnFilter: hasColumnFilter,
                columnFilter: columnFilter
            });
        }

        __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["empty"])(body);
        body.appendChild(frag);
    });

    this.appendChild(head);
    this.appendChild(body);
}, {
    classes: [],
    oddRowClass: '',
    evenRowClass: '',
    headRowClass: '',
    minimizeWhitelist: undefined,
    emptyNotice: 'No data found',
    emptyClass: 'empty',
    appendRow: function appendRow(table, frag, key, props) {
        var tr = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__tableRow__["a" /* default */])(props);
        __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.mount(table, tr, function (s) {
            return table.kompo.selector ? table.kompo.selector(s).data[key] : s.data[key];
        });
        frag.appendChild(tr);
    },
    appendHead: function appendHead(table, head, props) {
        var tr = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__tableHead__["a" /* default */])(props);
        __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.mount(table, tr, function (s) {
            return table.kompo.selector ? table.kompo.selector(s).data[0] : s.data[0];
        });
        head.appendChild(tr);
    }
}));

var tableActions = {
    addLimit: function addLimit(Element, add) {
        __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(Element, function (s) {
            s.limit = s.limit + add > s.data.length ? s.data.length : s.limit + add;
        });
    },
    subLimit: function subLimit(Element, sub) {
        __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(Element, function (s) {
            s.limit = s.limit - sub <= 0 ? 0 : s.limit - sub;
        });
    },
    setLimit: function setLimit(Element, limit) {
        __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(Element, function (s) {
            if (limit <= 0) {
                s.limit = 0;
                return;
            }

            if (limit > s.data.length) {
                s.limit = s.data.length;
                return;
            }

            s.limit = limit;
        });
    },
    addOffset: function addOffset(Element, add) {
        __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(Element, function (s) {
            s.offset = s.offset + add >= s.data.length ? s.data.length : s.offset + add;
        });
    },
    subOffset: function subOffset(Element, sub) {
        __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(Element, function (s) {
            s.offset = s.offset - sub <= 0 ? 0 : s.offset - sub;
        });
    },
    setOffset: function setOffset(Element, offset) {
        __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(Element, function (s) {
            if (offset <= 0) {
                s.offset = 0;
                return;
            }

            if (offset > s.data.length) {
                s.offset = s.data.length;
                return;
            }

            s.offset = offset;
        });
    },
    minimize: function minimize(Element) {
        __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(Element, function (s) {
            s.minimize = true;
        });
    },
    maximize: function maximize(Element) {
        __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(Element, function (s) {
            s.minimize = false;
        });
    }
};

/***/ }),
/* 33 */,
/* 34 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_kompo__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_kompo_util__);

/* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0_kompo___default.a.construct('tr', function (_ref) {
    var _this = this;

    var defaultClass = _ref.defaultClass;
    var hasColumnFilter = _ref.hasColumnFilter;
    var columnFilter = _ref.columnFilter;

    if (defaultClass) this.classList.add(defaultClass);

    __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.react(this, function (s) {
        __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["empty"])(_this);
        var data = hasColumnFilter ? columnFilter(s) : s,
            keys = Object.keys(data);
        for (var i = 0, l = keys.length; i < l; ++i) {
            // if(typeof minimizeWhitelist !== 'undefined') {
            //     const onWhitelist = isObject?
            //     minimizeWhitelist.indexOf(k) === -1:
            //     minimizeWhitelist.indexOf(filtered[k]) === -1;
            //     if(minimize && onWhitelist) {
            //         continue;
            //     }
            // }

            var c = _this.appendChild(document.createElement('th'));
            c.textContent = keys[i];
        }
    });
}, {
    defaultClass: ''
}));

/***/ }),
/* 35 */,
/* 36 */,
/* 37 */,
/* 38 */,
/* 39 */,
/* 40 */,
/* 41 */,
/* 42 */,
/* 43 */,
/* 44 */,
/* 45 */,
/* 46 */,
/* 47 */,
/* 48 */,
/* 49 */,
/* 50 */,
/* 51 */,
/* 52 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_kompo__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_kompo_util__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__table__ = __webpack_require__(32);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tableRow__ = __webpack_require__(29);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__accordionTableRow__ = __webpack_require__(69);

/* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0_kompo___default.a.compose(__WEBPACK_IMPORTED_MODULE_2__table__["a" /* default */], {
    rowSlot: function rowSlot(c, filtered, raw) {},
    appendRow: function appendRow(table, frag, key, props) {
        var tr = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__tableRow__["a" /* default */])(props),
            contentTr = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__accordionTableRow__["a" /* default */])(props),
            selector = function selector(s) {
            return table.kompo.selector ? table.kompo.selector(s).data[key] : s.data[key];
        };

        __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.mount(table, tr, selector);
        __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.mount(table, contentTr, selector);
        frag.appendChild(tr);
        frag.appendChild(contentTr);
    },
    on: function on(table) {
        var tableProps = __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.getProps(table),
            selector = 'tr';

        __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["delegate"])(table, selector, 'click', function (e) {
            e.preventDefault();
            var next = this.nextSibling,
                props = __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.getProps(table);
        });
    },

    rowClass: '',
    showOne: true
}));

/***/ }),
/* 53 */,
/* 54 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_kompo__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_kompo_util__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__table__ = __webpack_require__(32);

/* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0_kompo___default.a.compose(__WEBPACK_IMPORTED_MODULE_2__table__["a" /* default */], {
    on: function on(table) {
        var tableProps = __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.getProps(table),
            selector = tableProps.rowClass ? '.' + tableProps.rowClass : 'tr';

        __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["delegate"])(table, selector, 'click', function (e) {
            __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(this, function (s) {
                Object.defineProperty(s, 'selected', {
                    writable: true
                });

                s.selected = !s.selected;
            });
        });
    },

    rowClass: '',
    selectedClass: '',
    selectOne: false
}));

/***/ }),
/* 55 */,
/* 56 */,
/* 57 */,
/* 58 */,
/* 59 */,
/* 60 */,
/* 61 */,
/* 62 */,
/* 63 */,
/* 64 */,
/* 65 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_kompo__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_kompo_util__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_js_table_table__ = __webpack_require__(32);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_js_table_accordionTable__ = __webpack_require__(52);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_js_table_selectTable__ = __webpack_require__(54);
function _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError("Cannot destructure undefined"); }

// Component and content creation classes and functions

// Example components with self-explanatory name

var doc = document;

// Create root component
var root = __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.construct('div', function (_ref) {
    var _this = this;

    _objectDestructuringEmpty(_ref);

    var addLimit = doc.createElement('a'),
        subLimit = doc.createElement('a'),
        addOffset = doc.createElement('a'),
        subOffset = doc.createElement('a'),
        minimize = doc.createElement('a'),
        maximize = doc.createElement('a'),
        addState = doc.createElement('a'),
        removeState = doc.createElement('a'),
        t1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__src_js_table_table__["a" /* default */])({
        classes: ['o-Table', 'u-mtm'],
        oddRowClass: 'o-Table-row--isOdd',
        evenRowClass: 'o-Table-row--isEven',
        on: function on(table) {
            __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["delegate"])(table, 'tr', 'click', function (e) {
                console.log(table.kompo.props.rows);
            });
        },
        minimizeWhitelist: ['firstname']
    }),
        t2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__src_js_table_selectTable__["a" /* default */])({
        columnFilter: function columnFilter(data) {
            return {
                Firstname: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["capitalize"])(data.firstname),
                Lastname: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["capitalize"])(data.lastname)
            };
        },
        rowFilter: function rowFilter(data) {
            if (data.firstname === 'rocky') {
                return false;
            }

            return true;
        },

        selectedClass: 'selected'
    }),
        t3 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__src_js_table_accordionTable__["a" /* default */])({
        showOne: false,
        columnFilter: function columnFilter(data) {
            return {
                Firstname: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["capitalize"])(data.firstname),
                Lastname: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["capitalize"])(data.lastname)
            };
        },
        rowSlot: function rowSlot(columnElement, filtered, raw) {
            var h1 = doc.createElement('h1');
            h1.textContent = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["capitalize"])(raw.movie);
            columnElement.appendChild(h1);
        }
    });

    addLimit.textContent = 'Add 1 to limit';
    addLimit.addEventListener('click', function (e) {
        e.preventDefault();
        __WEBPACK_IMPORTED_MODULE_2__src_js_table_table__["b" /* tableActions */].addLimit(_this, 1);
    });

    subLimit.textContent = 'Subtract 1 of limit';
    subLimit.addEventListener('click', function (e) {
        e.preventDefault();
        __WEBPACK_IMPORTED_MODULE_2__src_js_table_table__["b" /* tableActions */].subLimit(_this, 1);
    });

    addOffset.textContent = 'Add 1 to offset';
    addOffset.addEventListener('click', function (e) {
        e.preventDefault();
        __WEBPACK_IMPORTED_MODULE_2__src_js_table_table__["b" /* tableActions */].addOffset(_this, 1);
    });

    subOffset.textContent = 'Subtract 1 of offset';
    subOffset.addEventListener('click', function (e) {
        e.preventDefault();
        __WEBPACK_IMPORTED_MODULE_2__src_js_table_table__["b" /* tableActions */].subOffset(_this, 1);
    });

    minimize.textContent = 'Minimize';
    minimize.addEventListener('click', function (e) {
        e.preventDefault();
        __WEBPACK_IMPORTED_MODULE_2__src_js_table_table__["b" /* tableActions */].minimize(_this);
    });

    maximize.textContent = 'Maximize';
    maximize.addEventListener('click', function (e) {
        e.preventDefault();
        __WEBPACK_IMPORTED_MODULE_2__src_js_table_table__["b" /* tableActions */].maximize(_this);
    });

    addState.textContent = 'addState';
    addState.addEventListener('click', function (e) {
        e.preventDefault();
        __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(_this, function (state) {
            state.data = [{
                firstname: 'rick',
                lastname: 'deckard',
                movie: 'blade runner'
            }, {
                firstname: 'mia',
                lastname: 'wallace',
                movie: 'pulp fiction'
            }, {
                firstname: 'rocky',
                lastname: 'balboa',
                movie: 'rocky'
            }];
        });
    });

    removeState.textContent = 'removeState';
    removeState.addEventListener('click', function (e) {
        e.preventDefault();
        __WEBPACK_IMPORTED_MODULE_0_kompo__["state"].dispatch(_this, function (state) {
            state.data = [];
        });
    });

    this.appendChild(addLimit);
    this.appendChild(subLimit);
    this.appendChild(addOffset);
    this.appendChild(subOffset);
    this.appendChild(minimize);
    this.appendChild(maximize);
    this.appendChild(addState);
    this.appendChild(removeState);
    __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.mount(this, [t1, t2, t3]);
    this.appendChild(t1);
    this.appendChild(t2);
    this.appendChild(t3);
});

// Create instance of root and
// append table to body
document.body.appendChild(__WEBPACK_IMPORTED_MODULE_0_kompo__["state"].app(root(), {
    limit: 2,
    minimize: true,
    offset: 0,
    data: [{
        firstname: 'rick',
        lastname: 'deckard',
        movie: 'blade runner'
    }, {
        firstname: 'mia',
        lastname: 'wallace',
        movie: 'pulp fiction'
    }, {
        firstname: 'rocky',
        lastname: 'balboa',
        movie: 'rocky'
    }]
}).start());

/***/ }),
/* 66 */,
/* 67 */,
/* 68 */,
/* 69 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_kompo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_kompo__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_kompo_util___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_kompo_util__);

/* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0_kompo___default.a.construct('tr', function (_ref) {
    var _this = this;

    var defaultClass = _ref.defaultClass;
    var rowSlot = _ref.rowSlot;

    if (defaultClass) this.classList.add(defaultClass);

    var c = this.appendChild(document.createElement('td'));

    rowSlot(this, c);

    __WEBPACK_IMPORTED_MODULE_0_kompo___default.a.react(this, function (s) {
        __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_kompo_util__["empty"])(_this);
        var l = Object.keys(s).length;

        c.setAttribute('colspan', l);
    });
}, {
    defaultClass: '',
    rowSlot: function rowSlot(tr, c) {}
}));

/***/ })
/******/ ]);
});
//# sourceMappingURL=table-bundle.js.map


PDF Link to the case study.
View the report in "Best Hospitals 2014-15: Overview and Honor Roll"
View the report in "Most Wired Advanced Hospitals of 2014"
The RFID in Healthcare Consortium (RHCC) is a not-for-profit, global organization founded to elevate awareness and to educate the Life Sciences community on the adoption of new technologies. The RHCC is an educationally focused, vendor neutral, technology and frequency agnostic, association dedicated to promoting the use and adoption of auto-ID, NFC, RFID, RTLS, sensors and wireless technologies in the healthcare, assisted and independent living and nursing home industries. For more information, please visit: www.intelligenthospital.tv, and www.intelligenthospital.org.
HAMDEN, CT and ELGIN, IL - June 23, 2011 - K2 Medical Systems and Clinical Computer Systems, Inc. (CCSI) have announced an agreement that will pair CCSI's industry-leading OBIX Perinatal Data System with K2's intelligent INFANT® software (www.k2ms.com/iFMTS-INFANT.html).
The K2 Infant decision-support software automatically analyzes electronic fetal monitoring (EFM) patterns. It extracts features of all relevant data and provides expert interpretation within a rule-based, expert system. Clinicians are informed about abnormal events, are able to review the logic behind the system's alerts and are able to quickly respond to changes in the patient's status. The patented INFANT technology, which has undergone extensive studies, was developed to provide intelligent assessment of EFM data, help improve the quality of patient care and reduce the costs associated with poor outcomes.
Ranked number one in all five, consecutive KLAS® reports* on labor and delivery systems, the OBIX Perinatal Data System is a comprehensive, computerized system for central, bedside and remote electronic fetal monitoring. The system includes archiving, point-of-care charting and Internet-based physician access. The OBIX system's exclusive E-Tools for EFM assessment provide decision support that helps clinicians improve their practice, educate their staff and promote patient safety in electronic fetal monitoring.
"We are excited to partner with K2 Medical Systems to help make their new pattern interpretation technology available in the US market for the benefit of our customers and for added value to our OBIX system," said Kim Sell, President of CCSI. "By joining forces with K2, we reinforce our commitment to providing advanced perinatal decision support tools that help caregivers improve their patient monitoring capabilities and quality of care."
"Our partnership is all about working together to improve maternal-fetal care and perinatal outcomes through the application of real-time, intelligent decision support systems," said David Shine, General Manager of K2. "This is an important step towards the reduction of perinatal risks. K2 believes the OBIX system is an ideal platform for our new generation of intelligent software."
K2 Medical Systems is a global organization founded in 1999 in Plymouth England, with offices in the US, UK and Australia. We serve over 100,000 users in more than 15 countries. Our vision has been to bring doctors, midwives, nurses and technologists together to develop innovative solutions to improve maternity care for clinicians, mothers, babies, and the hospital. Through R&D that began over 20 years ago with the Plymouth Perinatal Research group, K2 has developed a risk management strategy that delivers clinical training, fetal monitoring, blood gas interpretation, and decision support systems. These products prepare the clinician before childbirth, provide support during labor and present retrospective feedback and analysis after delivery. For more information, visit www.k2ms.com and www.k2ms-America.com.
Elgin, IL, April 4, 2011 - Clinical Computer Systems, Inc. (CCSI) announced today that the OBIX® Perinatal Data System, Version 7.0, is 2011/2012 compliant and was certified as an EHR Module on April 1, 2011 by the Certification Commission for Health Information Technology (CCHIT®), an ONC-ATCB, in accordance with the applicable certification criteria adopted by the Secretary of Health and Human Services. The 2011/2012 criteria support the Stage 1 meaningful use measures required to qualify eligible providers and hospitals for funding under the American Recovery and Reinvestment Act (ARRA).
"This certification of our OBIX Perinatal Data System Version 7.0 software is an important milestone for our company," said Kim Sell, President of CCSI. "It validates our commitment to deliver market leading software that meets the highest standards and helps hospitals achieve their quality care objectives." Randy Paul, Vice President of Marketing and Business Development, added "We look forward to further developing the clinical strengths and interfaces of our OBIX system in order to help our customers meet their Meaningful Use goals."
"CCHIT is pleased to be testing and certifying products so that companies are now able to offer these products to providers who wish to purchase and implement certified EHR technology and achieve meaningful use in time for the 2011-2012 incentives," said Karen M. Bell, M.D., M.S.S., Chair, CCHIT. The OBIX Perinatal Data System, Version 7.0's certification number is CC-1112-812000-1. ONC-ATCB 2011/2012 certification conferred by CCHIT does not represent an endorsement of the certified EHR technology by the U.S. Department of Health and Human Services nor does it guarantee the receipt of incentive payments.
Clinical Computer Systems, Inc. (CCSI) is an employee-owned, high technology company located in Elgin, Illinois. The company's business is dedicated exclusively to the development, marketing and support of the OBIX Perinatal Data System. For over 20 years, CCSI has been a leader in perinatal data systems with innovative, customer-driven software solutions and support services. The company's total-system approach includes the support of dedicated, expert service and support specialists. Its Success-Focused Education Program trains all users in an on-site, multi-phase, quality-assured process that has enabled thousands of clinicians to successfully adapt to electronic point-of-care charting. The OBIX Perinatal Data System has been ranked number one for labor and delivery systems in five, consecutive KLAS® reports.* Find out more by visiting www.obix.com.
**The research findings were published in the March 2008 KLAS report, "An Independent Report from Healthcare Executives and Professionals: Labor and Delivery" For more information about KLAS' report, visi twww.KLASresearch.com, or contact Steve Van Wagenen (steve@KLASresearch.com).
About AirStrip Technologies, L.P.: Headquartered in San Antonio, Texas, AirStrip Technologies is a pioneer in mobile medical software applications designed to work across any platform to improve patient safety and reduce risk in the healthcare setting. AirStrip Technologies engages, consults and employs leading technology and medical experts to ensure their products are the best in the industry. The core technology team is committed to bringing best-of-breed products to the market that enhance the ability of physicians and healthcare professionals to perform their work on a daily basis with the added assurances that their patients are being provided the best care available. Visit www.airstriptech.com for more information.


text:
Find your forever home at Acton Works
April 12, 2021 April 12, 2021 Editorial Team	0 Comments	Acton Works, Network Homes
Network Homes launches Acton Works …
Research has indicated that the London Borough of Brent is one of the top 10 places to find a 'forever home'; with local residents spending an average of 26 years in the same property proving that the area not only offers great value for money, but also provides first-time purchasers with the perfect location to put down roots and begin their home-ownership journey. Situated within this increasingly sought-after borough, as well as on the boarder of Ealing and Hammersmith and Fulham, is Acton Works by Network Homes. Recently launched on March 27th 2021, and offering a choice of one, two and three-bedroom Shared Ownership Apartments, there is truly something for everyone here.
Network Homes is proud to have worked alongside property developer, Hollybrook Homes to produce this top-tier selection of properties, which have been thoughtfully designed to offer tranquil ground and rooftop communal gardens, cycle storage and private allocated parking spaces to selected plots. Situated just moments away from a diverse range of shopping and dining facilities, Central Middlesex Hospital, and superb transport connections, Acton Works is an ideal choice for families, key workers and young professionals alike.
Acton Works will benefit from 13 stories, and boast its very own podium-level garden; complete with colourful planting, synthetic ground turf, raised planters and lounge benches to encourage relaxation, socialisation, and play. Another key feature of this development is 'The Street'; an oasis between the two landmark buildings of the scheme – offering a sanctuary of calm and intimacy – away from the urban landscape Acton Lane. Benches will be strategically placed along the north-south spine of 'The Street' to distinguish between private garden spaces and the public area.
Kalumba Musambachime, Head of Sales and Built to Rent at Network Homes comments: "Park Royal is quickly being recognised as the location for settling; whether that be for the long term, or the short term. I think this upturn in interest can be attributed to the vast changes this area has seen, and will continue to see in the years to come. Park Royal is no exception. Acton Works has been built to form part of the much wider Old Oak and Park Royal regeneration, meaning residents will witness a distinct and positive growth within their local area. We encourage prospective purchasers with an eye for potential to reach out and register their interest as soon as possible."
Historically an area populated by farms, and later, a hub for factories and warehouses aiding the war effort, Park Royal boasts a rich and fascinating history, characterised by its continual evolution and ability to move with the times. Echoing this, the newest regeneration scheme aims to transform the area; creating a sense of community, and guaranteeing connectivity with the rest of London. Major investment has been poured into rail infrastructure projects, HS2 and Crossrail over the past few years, and Park Royal is the only place in London where the two new transport links will meet. Old Oak Common will have six high-speed platforms and eight platforms for conventional trains via the Elizabeth Line; making it the perfect homing ground for commuters.
Residents at Acton Works are extremely well situated when it comes to shopping, leisure, green space and more. For some well-needed retail therapy, Ealing Broadway is an 18-minute bike ride away; or, for something a little further afield, Wembley Park's' London Designer Outlet and Westfield London are under half an hour away by tube respectively. The area is also home to a vast range of café's, bars, and eateries; from Polish and middle eastern restaurants to sushi bars, American diners and popular high-street chains. For those in search of that all-important green space, Wormwood Scrubs Nature Reserve offers 200 acres of green space; ready to be explored. Gunnersbury Park and Chiswick Common are also nearby.
Families with children are also well catered for here. Acton Works is advantageously positioned within easy reach of a number of educational establishments, including Ark Priory Primary Academy (Good), Ark Acton Academy Ark Acton Academy (no Ofsted rating available currently), East Acton Primary School (Good), Berrymead Primary School Berrymead Primary School (Good).
Finally, Residents at Acton Works will benefit from superb transport connections; with Harlesden, North Acton, and Park Royal Underground Station all within walking distance of the development; giving access to the Bakerloo, Central and `Piccadilly Lines. The Old Oaks and Park Royal area is also set to benefit from both Crossrail connections and HS2. Old Oak Common will have six high-speed platforms and eight further platforms for conventional trains via the Elizabeth Line, including Crossrail and services to Wales and the west of England. Bus stops can be found just three-minutes away on foot, and for those who like to get around on two wheels, the London Cycle Network Routes intersect the local area.
A spokesperson from Hollybrook Homes comments: "This development epitomises modern-day convenience. Not only is the scheme extremely well situated in terms of amenities and travel links, but the homes themselves have been crafted to offer hassle free living to those with busy, Twenty-first century lifestyles. We anticipate an influx of enquiries from a range of buyer-types here."
Each and every home blends style with functionality; with spacious internal layouts, a high-quality specification, and private outdoor space to every property. Kitchens feature designer units with soft-close doors, LED lighting and a range of fully integrated appliances. Bathrooms come complete with large format slip resistant ceramic floor and wall tiles, mirrored wall cabinets and sleek white fittings, and bedrooms come with floor to ceiling fitted wardrobes. Additional features include Hyperoptic Broadband connections to ensure home-working lifestyles are well catered for, secure on-site bicycle storage, and car parking spaces available to selected homes.
Prices at Acton Works start from £806,25 for a 25% share of a one-bedroom apartment with a full market value of £322,500, 106,250 for a 25% share of a two-bedroom apartment with a full market value of £425,000, or £118,125 for a 25% share of a three-bedroom apartment with a full market value of £472,500. For more information, visit For further information visit www.networkhomessales.co.uk/find-your-new-home/nw10-acton-works/
← Regional sales manager details eight year journey at Network Homes Rectory Park
In Bloom →
Buyers at Amber Lodge benefit from moving in costs
March 4, 2021 March 4, 2021 Editorial Team	0
And here's to you, The Robinson First glimpse of Quintain Living's latest London homes to rent
June 7, 2021 June 19, 2021 Editorial Team	0
New homes that tick all the boxes at the Maltings

redpajama_set_name: RedPajamaCommonCrawl


COLUMBIA, SC – JUNE 6, 2018 – IntelliSystems, a leader and one call resource for business IT solutions, cybersecurity, and telecommunications, is celebrating their 25th year in business this month.
Kevin Wade started IntelliSystems in 1993 and it has now grown to over 20 employees with three locations in Augusta and Columbia. As technology has advanced since 1993, many things are different at IntelliSystems but their mission has stayed the same throughout: to help business clients by getting computer, telephone and technology issues out if the way so that they can focus their time and energy on successfully running and growing their business.
To celebrate this milestone, IntelliSystems has unveiled a new logo to celebrate and commemorate their silver jubilee year.
For more information about IntelliSystems, please visit www.intellisystems.com.
Founded in 1993, IntelliSystems is a leader in Georgia and South Carolina for all business IT and phone solutions. The mission of IntelliSystems is to help business clients by getting computer, telephone and technology issues out of the way so that they can focus their time and energy on successfully running and growing their business. Featuring a 60 minutes or less response time for most technology problems, they use a proactive approach to leverage a variety of tools to manage client IT systems resulting in less "fixing" of recurring problems that rob organizations of employee productivity. Specializing in business IT services, cybersecurity, telecommunication systems, cabling and wireless contracting, cloud services, and backup and disaster recovery management, IntelliSystems strives to be a one call solution for IT, cybersecurity, and telephone communications in both the CSRA and the Midlands. For more information, visit www.intellisystems.com.


A lot of White men usually skip out the part that their woman has dark skin to avoid being perceived as racist.He also feels awkward around his girlfriend when his family and friends make racist comments or jokes around her.Black women sometimes wonder if the friends and family of their boyfriend think negatively about him for dating them.
This is the case especially for those older people who had been alive during the mass discrimination for Black people throughout the country.Do you know any more struggles black women deal with when dating white men? Below are our experts' reviews of the top online dating sites for black singles, based on the size of each site's user base, success rate, ease of use, safety and other factors. Dating is a free online resource that offers valuable content and comparison services to users.Most of the time, it is disapproving looks not only from White people but also from your fellow Black people.Your fellow Black women will think your ambitious to date a White man.
The key to understanding romantic relationships is an age-old mystery.
Phishing websites don't try to plant malware on your computer, so antivirus scans don't detect their chicanery.


text:
Buryan Stone Cross Walk
July 24, 2016 by Laetitia	in Community, Events and tagged Boskenna Cross, Buryan Church Stone Cross, Buryan Stone Crosses, Choone Stone Cross, Cross Base Merry Maidens, Gunrith Standing Stone, Market Square Cross St Buryan, Pendrea Stone Cross, St Buryan; Stone Crosses;, Stone Cross near Merry Maidens, Tregiffian Chamber Tomb, Tregurnow Cross, Trevorrian Stone Cross
A wonderful informative day with Andrew Langdon studying St Buryan's stone crosses and hearing their history. Photos – Laetitia Latham Jones
Boskenna Cross:
A wheel-headed wayside cross situated on the B3315 at a junction with a minor road to St. Buryan. It was discovered in a hedge 1869 and placed in a grass triangle built specially for the purpose in the middle of the road.
Boskenna Cross – Megalithic
Tregiffian Chamber Tomb
Tregiffian is a type of chambered tomb known as an entrance grave. It survives largely intact, despite the levelling of part of its mound to make a road in the 1840s. Entrance graves are funerary and ritual monuments dating to the later Neolithic, early and middle Bronze Age (around 3000–1000 BC).
Of 93 recorded examples in England, 79 are on the Isles of Scilly, and the remainder are confined to the Penwith peninsula at the western tip of Cornwall. They are also found on the Channel Islands and in Brittany.
Such tombs typically comprise a roughly circular mound of heaped rubble and earth built over a rectangular chamber, which is constructed from slabs set edge to edge, or rubble walling, and roofed with further slabs.
The few entrance graves that have been systematically excavated have revealed cremated human bone and funerary urns, usually within the chambers but occasionally within the mound.
Medieval Wayside Cross Base found near Merry Maidens stone circle
The medieval wayside cross-base 125m west of Merry Maidens stone circle survives well and is a good example of a natural boulder being utilised as a wayside cross-base. It has been suggested that it originally supported the Nun Careg Cross, 180m to the north east on the southern route around the Penwith peninsula. The cross base forms an integral member of an unusually well preserved network of crosses marking routes that linked the important and broadly contemporary ecclesiastical centre at St Buryan with its parish. The routes marked by this monument are also marked at intervals by other crosses, demonstrating the major role and disposition of wayside crosses and the longevity of many routes still in use. The monument includes a medieval wayside cross-base situated on the verge at the junction of a path leading to St Buryan with a road along the southern coastal belt of Penwith. The wayside cross-base is visible as a large, rounded, rectangular block of granite. The cross base measures 0.83m north-south by 1.22m east-west and is 0.45m high. The rectangular socket in the top measures 0.36m long by 0.27m wide and is 0.16m deep.
Historic England.
Cassandra speaking to the group about C.A.S.P.N while standing at the entrance of Merry Maidens stone circle.
The Cornish Ancient Sites Protection Network is a charitable partnership formed to look after the ancient sites and monuments of Cornwall. We work closely with local communities and official organisations to protect and promote our ancient heritage landscape through research, education and outreach activities. CASPN representatives come from a wide range of organisations and community groups that share an interest in Cornwall's ancient sites,
including: National Trust, Cornwall Council's Historic Environment Service, Cornwall Archaeological Society, English Heritage, Penwith Access and Rights of Way, Madron Community Forum, Pagan Moot and Meyn Mamvro.
Cornish Ancient Sites Protection Network
Nun Careg Cross
Nun Careg Cross stands beside the roadside between Lamorna and St Buryan Churchtown, one of a huge concentration of ancient crosses in this area.
Tregurnow Cross is a stone slab with a cross in relief on front and back, although little remains of the latter. It dates from sometime in the medieval period, and is one of many stone crosses in the area.
South West Coast Path.
Gunrith Standing Stone
Gun Rith is a standing stone measuring three and a half meters tall, located across the road from the Tregiffian burial chamber, near the Merry Maidens stone circle. It is one of a high concentration of menhirs, or standing stones, in Penwith, some of which reach over five meters.
Cornwalls.
The monument includes a medieval wayside cross, the Choone or Chyoone Cross, within a 2m protective margin, situated on the roadside verge beside a ridge-top thoroughfare running south-east from St Buryan at the junction with a track to Moor Croft farm and to Choone Farm in Penwith West Cornwall.
The monument includes a medieval churchyard cross to the south of the church at St Buryan on the Penwith peninsula in West Cornwall. The granite churchyard cross which is Grade 2 Listed survived as a round or 'wheel' head set on a granite base which is mounted on a massive four-step base.
Standing just outside the churchyard south gateway is an 12th century cross on a solid base of granite given to the church by Robert Edmund Tonkin, Lord of the Manor of St Buryan. A Charter of Edward 1 (1302) "grants to the Dean of the King's Free Chapel of St Buryan and his successors a market every Saturday at his Manor of St Buryan and three days fair on the Vigil, Feast and Morrow of St Buryan and another on the Vigil, Feast and Morrow of St Martin in the winter." (Patent Rolls) This cross is the Deanery Market Cross and is still held by the Rector and churchwardens.
St Buryan Church
The monument includes a wayside cross, set into a roadside hedge beside the entrance to Pendrea, to the south west of the settlement of St Buryan. The cross survives as a roughly circular socket stone with a diameter of 1.1m and measuring up to 0.3m thick set into the field boundary on its edge. The socket itself is 0.3m long, 0.15m wide and 0.2m deep with rounded ends. It was found at Pendrea sometime prior to 189,6 when it was recorded by Langdon and placed in its current location by 1908.
Ancient Monuments.
Trevorrian Stone Cross
After a 4 mile walk a glass of cider in the St Buryan Inn was most welcome!
← Sea Conjuring
Working with Beach Sand →


I'm a terrible DJ (unless you count success by the number of people you can force off the dance floor with one track, in which case I'm a total mix master), but I've worked with enough DJs to know the tricks of the tracks. And one of those tricks is the old left-it-at-home routine.
Now, Djs will have no excuse, becasue the new Pacemaker app will let you spin and mix tunes from Spotify's huge gazillion-song library.


You've heard over and over that identifying and reaching your target customer will be a huge part of your success as a business owner. Hopefully by now you know I've had some things to say about it, too! Like THIS and THIS! But I digress.
So you've heard that… a lot. On today's episode I am speaking with Paula Hoss, the founder of CLN and DRTY natural skincare about how she identified, connects with and serves her target audience and how this (and other things!) helps her to stand out in a crowded market.
Paula was kind enough to dive into the 3 practices she has in her business that help her stand apart as a skincare brand. You know there are like, several thousand skincare brands so this is critical for her!
I'm hoping you'll be inspired by her insights and strategies especially if you are selling in a crowded market, too!
Paula on using social media and the percentage breakdown she uses when sharing personal stuff and business stuff… and why!
Please enjoy this episode and be sure to check out CLN and DIRTY on Etsy and Instagram @CLNandDRTY.
Don't forget, my FULL ideal customer match class lives inside of The Council! Become a member today to access this and SO SO MANY other incredible trainings and resources.


text:
Matalan commercial chief exits - report
Matalan has reportedly made its chief commercial officer redundant with James Brown stepping down from his board-level role with immediate effect.
That's according to Businesslive, which said the senior post has been cut after a review by interim CEO Nigel Oddy. Former New Look and House of Fraser CEO Oddy took the top job at Matalan (on an interim basis) only a month ago.
Brown had been in his role since summer 2020, but he also worked for the company between 2001 and 2006. He's worked for M&S, Littlewoods, Sainsbury's and Argos as well.
Liverpool-based Matalan is going through a period of major change. Facing key debt deadlines, it's up for sale with firm bids having been due a month ago, although no news has emerged about who's most likely to take it over.
The retailer's founder, John Hargreaves, returned as chairman in the summer but soon stepped down in order to participate in the process and try to win back full control of the firm for his family.
Roland Armbruster is the new managing director of Manor
Brand Architekts CFO quits