new file mode 100644
--- /dev/null
+++ b/devtools/client/shared/components/reps.js
@@ -0,0 +1,35193 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // SingleModulePlugin
+/******/ const smpCache = this.smpCache = this.smpCache || {};
+/******/ const smpMap = this.smpMap = this.smpMap || new Map();
+/******/ function sanitizeString(text) {
+/******/ return text.replace(/__webpack_require__\(\d+\)/g,"");
+/******/ }
+/******/ function getModuleBody(id) {
+/******/ if (smpCache.hasOwnProperty(id)) {
+/******/ return smpCache[id];
+/******/ }
+/******/
+/******/ const body = sanitizeString(String(modules[id]));
+/******/ smpCache[id] = body;
+/******/ return body;
+/******/ }
+/******/ if (!installedModules[moduleId]) {
+/******/ const body = getModuleBody(moduleId);
+/******/ if (smpMap.has(body)) {
+/******/ installedModules[moduleId] = installedModules[smpMap.get(body)];
+/******/ }
+/******/ else {
+/******/ smpMap.set(body, 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] = {
+/******/ exports: {},
+/******/ id: moduleId,
+/******/ loaded: false
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.loaded = 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;
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "/assets/build";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+ module.exports = __webpack_require__(1);
+
+
+/***/ },
+/* 1 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // require("./webconsole.css")
+ __webpack_require__(2);
+
+ const React = __webpack_require__(6);
+ const ReactDOM = __webpack_require__(7);
+ const { createFactory } = React;
+
+ const { bootstrap, L10N } = __webpack_require__(9);
+ const { isFirefoxPanel } = __webpack_require__(102);
+
+ if (!isFirefoxPanel()) {
+ const { Provider } = __webpack_require__(29);
+
+ const RepsConsole = createFactory(__webpack_require__(255));
+ const { configureStore } = __webpack_require__(306);
+
+ __webpack_require__(311);
+ L10N.setBundle(__webpack_require__(313));
+ window.l10n = L10N;
+
+ function onConnect({ client } = {}) {
+ if (!client) {
+ return;
+ }
+
+ let store = configureStore({
+ makeThunkArgs: (args, state) => {
+ return Object.assign({}, args, { client });
+ }
+ });
+
+ ReactDOM.render(React.createElement(Provider, { store }, RepsConsole({ client })), root);
+ }
+
+ let root = document.createElement("div");
+ root.innerText = "Waiting for connection";
+
+ bootstrap(React, ReactDOM, root).then(onConnect, e => console.error("An error occured during the connection", e)).catch(e => console.error("An error occured in the onConnect function", e));
+ } else {
+ const { MODE } = __webpack_require__(266);
+ const Rep = createFactory(__webpack_require__(267));
+ const Grip = __webpack_require__(278);
+ const repUtils = __webpack_require__(305);
+
+ module.exports = {
+ Rep,
+ Grip,
+ repUtils,
+ MODE
+ };
+ }
+
+/***/ },
+/* 2 */
+/***/ function(module, exports) {
+
+ // removed by extract-text-webpack-plugin
+
+/***/ },
+/* 3 */,
+/* 4 */,
+/* 5 */,
+/* 6 */
+/***/ function(module, exports) {
+
+ module.exports = require("devtools/client/shared/vendor/react");
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ module.exports = __webpack_require__(8);
+
+
+/***/ },
+/* 8 */
+/***/ function(module, exports) {
+
+ module.exports = require("devtools/client/shared/vendor/react-dom");
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* global window, document, DebuggerConfig */
+
+ const { bindActionCreators, combineReducers } = __webpack_require__(10);
+ const { Provider } = __webpack_require__(29);
+
+ const { DevToolsUtils, AppConstants } = __webpack_require__(38);
+ const { debugGlobal } = __webpack_require__(101);
+ const { setConfig, isEnabled, getValue, isDevelopment } = __webpack_require__(102);
+ const L10N = __webpack_require__(150);
+
+ setConfig(({"title":"Reps","hotReloading":true,"environment":"development","theme":"light","firefox":{"proxyHost":"localhost:9000","webSocketConnection":false,"websocketHost":"localhost:6080","mcPath":"./firefox"},"development":{"serverPort":8000}}));
+
+ // Set various flags before requiring app code.
+ if (isEnabled("logging.client")) {
+ DevToolsUtils.dumpn.wantLogging = true;
+ }
+
+ const { getClient, firefox, chrome, startDebugging } = __webpack_require__(151);
+ const Root = __webpack_require__(220);
+
+ // Using this static variable allows webpack to know at compile-time
+ // to avoid this require and not include it at all in the output.
+ if (false) {
+ const theme = getValue("theme");
+ switch (theme) {
+ case "dark":
+ require("./lib/themes/dark-theme.css");break;
+ case "light":
+ require("./lib/themes/light-theme.css");break;
+ case "firebug":
+ require("./lib/themes/firebug-theme.css");break;
+ }
+ document.body.parentNode.classList.add(`theme-${ theme }`);
+ }
+
+ function initApp() {
+ const configureStore = __webpack_require__(224);
+ const reducers = __webpack_require__(235);
+ const LaunchpadApp = __webpack_require__(240);
+
+ const createStore = configureStore({
+ log: getValue("logging.actions"),
+ makeThunkArgs: (args, state) => {
+ return Object.assign({}, args, { client: getClient(state) });
+ }
+ });
+
+ const store = createStore(combineReducers(reducers));
+ const actions = bindActionCreators(__webpack_require__(253), store.dispatch);
+
+ debugGlobal("launchpadStore", store);
+
+ if (isDevelopment()) {
+ AppConstants.DEBUG_JS_MODULES = true;
+ }
+
+ return { store, actions, LaunchpadApp };
+ }
+
+ function renderRoot(_React, _ReactDOM, component, _store) {
+ const { createElement } = _React;
+ const mount = document.querySelector("#mount");
+
+ // bail in test environments that do not have a mount
+ if (!mount) {
+ return;
+ }
+
+ const root = Root();
+ mount.appendChild(root);
+
+ if (component.props || component.propTypes) {
+ _ReactDOM.render(createElement(Provider, { store: _store }, createElement(component)), root);
+ } else {
+ root.appendChild(component);
+ }
+ }
+
+ function getTargetFromQuery() {
+ const href = window.location.href;
+ const nodeMatch = href.match(/node-tab=([^&#]*)/);
+ const firefoxMatch = href.match(/firefox-tab=([^&#]*)/);
+ const chromeMatch = href.match(/chrome-tab=([^&#]*)/);
+
+ if (nodeMatch) {
+ return { type: "node", param: nodeMatch[1] };
+ } else if (firefoxMatch) {
+ return { type: "firefox", param: firefoxMatch[1] };
+ } else if (chromeMatch) {
+ return { type: "chrome", param: chromeMatch[1] };
+ }
+
+ return null;
+ }
+
+ function bootstrap(React, ReactDOM, App, appActions, appStore) {
+ const connTarget = getTargetFromQuery();
+ if (connTarget) {
+ return startDebugging(connTarget, appActions).then(({ tab, client }) => {
+ debugGlobal("client", client.clientCommands);
+ renderRoot(React, ReactDOM, App, appStore);
+ return { tab, connTarget, client };
+ });
+ }
+
+ const { store, actions, LaunchpadApp } = initApp();
+ renderRoot(React, ReactDOM, LaunchpadApp, store);
+ chrome.connectClient().then(tabs => {
+ actions.newTabs(tabs);
+ }).catch(e => {
+ console.log("Connect to chrome:");
+ console.log("https://github.com/devtools-html/debugger.html/blob/master/CONTRIBUTING.md#chrome");
+ });
+
+ chrome.connectNodeClient().then(tabs => {
+ actions.newTabs(tabs);
+ });
+
+ return firefox.connectClient().then(tabs => {
+ actions.newTabs(tabs);
+ });
+ }
+
+ module.exports = {
+ bootstrap,
+ renderRoot,
+ debugGlobal,
+ L10N
+ };
+
+/***/ },
+/* 10 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports.compose = exports.applyMiddleware = exports.bindActionCreators = exports.combineReducers = exports.createStore = undefined;
+
+ var _createStore = __webpack_require__(11);
+
+ var _createStore2 = _interopRequireDefault(_createStore);
+
+ var _combineReducers = __webpack_require__(24);
+
+ var _combineReducers2 = _interopRequireDefault(_combineReducers);
+
+ var _bindActionCreators = __webpack_require__(26);
+
+ var _bindActionCreators2 = _interopRequireDefault(_bindActionCreators);
+
+ var _applyMiddleware = __webpack_require__(27);
+
+ var _applyMiddleware2 = _interopRequireDefault(_applyMiddleware);
+
+ var _compose = __webpack_require__(28);
+
+ var _compose2 = _interopRequireDefault(_compose);
+
+ var _warning = __webpack_require__(25);
+
+ var _warning2 = _interopRequireDefault(_warning);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ /*
+ * This is a dummy function to check if the function name has been altered by minification.
+ * If the function has been minified and NODE_ENV !== 'production', warn the user.
+ */
+ function isCrushed() {}
+
+ if (false) {
+ (0, _warning2["default"])('You are currently using minified code outside of NODE_ENV === \'production\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');
+ }
+
+ exports.createStore = _createStore2["default"];
+ exports.combineReducers = _combineReducers2["default"];
+ exports.bindActionCreators = _bindActionCreators2["default"];
+ exports.applyMiddleware = _applyMiddleware2["default"];
+ exports.compose = _compose2["default"];
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports.ActionTypes = undefined;
+ exports["default"] = createStore;
+
+ var _isPlainObject = __webpack_require__(12);
+
+ var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
+
+ var _symbolObservable = __webpack_require__(22);
+
+ var _symbolObservable2 = _interopRequireDefault(_symbolObservable);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ /**
+ * These are private action types reserved by Redux.
+ * For any unknown actions, you must return the current state.
+ * If the current state is undefined, you must return the initial state.
+ * Do not reference these action types directly in your code.
+ */
+ var ActionTypes = exports.ActionTypes = {
+ INIT: '@@redux/INIT'
+ };
+
+ /**
+ * Creates a Redux store that holds the state tree.
+ * The only way to change the data in the store is to call `dispatch()` on it.
+ *
+ * There should only be a single store in your app. To specify how different
+ * parts of the state tree respond to actions, you may combine several reducers
+ * into a single reducer function by using `combineReducers`.
+ *
+ * @param {Function} reducer A function that returns the next state tree, given
+ * the current state tree and the action to handle.
+ *
+ * @param {any} [initialState] The initial state. You may optionally specify it
+ * to hydrate the state from the server in universal apps, or to restore a
+ * previously serialized user session.
+ * If you use `combineReducers` to produce the root reducer function, this must be
+ * an object with the same shape as `combineReducers` keys.
+ *
+ * @param {Function} enhancer The store enhancer. You may optionally specify it
+ * to enhance the store with third-party capabilities such as middleware,
+ * time travel, persistence, etc. The only store enhancer that ships with Redux
+ * is `applyMiddleware()`.
+ *
+ * @returns {Store} A Redux store that lets you read the state, dispatch actions
+ * and subscribe to changes.
+ */
+ function createStore(reducer, initialState, enhancer) {
+ var _ref2;
+
+ if (typeof initialState === 'function' && typeof enhancer === 'undefined') {
+ enhancer = initialState;
+ initialState = undefined;
+ }
+
+ if (typeof enhancer !== 'undefined') {
+ if (typeof enhancer !== 'function') {
+ throw new Error('Expected the enhancer to be a function.');
+ }
+
+ return enhancer(createStore)(reducer, initialState);
+ }
+
+ if (typeof reducer !== 'function') {
+ throw new Error('Expected the reducer to be a function.');
+ }
+
+ var currentReducer = reducer;
+ var currentState = initialState;
+ var currentListeners = [];
+ var nextListeners = currentListeners;
+ var isDispatching = false;
+
+ function ensureCanMutateNextListeners() {
+ if (nextListeners === currentListeners) {
+ nextListeners = currentListeners.slice();
+ }
+ }
+
+ /**
+ * Reads the state tree managed by the store.
+ *
+ * @returns {any} The current state tree of your application.
+ */
+ function getState() {
+ return currentState;
+ }
+
+ /**
+ * Adds a change listener. It will be called any time an action is dispatched,
+ * and some part of the state tree may potentially have changed. You may then
+ * call `getState()` to read the current state tree inside the callback.
+ *
+ * You may call `dispatch()` from a change listener, with the following
+ * caveats:
+ *
+ * 1. The subscriptions are snapshotted just before every `dispatch()` call.
+ * If you subscribe or unsubscribe while the listeners are being invoked, this
+ * will not have any effect on the `dispatch()` that is currently in progress.
+ * However, the next `dispatch()` call, whether nested or not, will use a more
+ * recent snapshot of the subscription list.
+ *
+ * 2. The listener should not expect to see all state changes, as the state
+ * might have been updated multiple times during a nested `dispatch()` before
+ * the listener is called. It is, however, guaranteed that all subscribers
+ * registered before the `dispatch()` started will be called with the latest
+ * state by the time it exits.
+ *
+ * @param {Function} listener A callback to be invoked on every dispatch.
+ * @returns {Function} A function to remove this change listener.
+ */
+ function subscribe(listener) {
+ if (typeof listener !== 'function') {
+ throw new Error('Expected listener to be a function.');
+ }
+
+ var isSubscribed = true;
+
+ ensureCanMutateNextListeners();
+ nextListeners.push(listener);
+
+ return function unsubscribe() {
+ if (!isSubscribed) {
+ return;
+ }
+
+ isSubscribed = false;
+
+ ensureCanMutateNextListeners();
+ var index = nextListeners.indexOf(listener);
+ nextListeners.splice(index, 1);
+ };
+ }
+
+ /**
+ * Dispatches an action. It is the only way to trigger a state change.
+ *
+ * The `reducer` function, used to create the store, will be called with the
+ * current state tree and the given `action`. Its return value will
+ * be considered the **next** state of the tree, and the change listeners
+ * will be notified.
+ *
+ * The base implementation only supports plain object actions. If you want to
+ * dispatch a Promise, an Observable, a thunk, or something else, you need to
+ * wrap your store creating function into the corresponding middleware. For
+ * example, see the documentation for the `redux-thunk` package. Even the
+ * middleware will eventually dispatch plain object actions using this method.
+ *
+ * @param {Object} action A plain object representing “what changed”. It is
+ * a good idea to keep actions serializable so you can record and replay user
+ * sessions, or use the time travelling `redux-devtools`. An action must have
+ * a `type` property which may not be `undefined`. It is a good idea to use
+ * string constants for action types.
+ *
+ * @returns {Object} For convenience, the same action object you dispatched.
+ *
+ * Note that, if you use a custom middleware, it may wrap `dispatch()` to
+ * return something else (for example, a Promise you can await).
+ */
+ function dispatch(action) {
+ if (!(0, _isPlainObject2["default"])(action)) {
+ throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');
+ }
+
+ if (typeof action.type === 'undefined') {
+ throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?');
+ }
+
+ if (isDispatching) {
+ throw new Error('Reducers may not dispatch actions.');
+ }
+
+ try {
+ isDispatching = true;
+ currentState = currentReducer(currentState, action);
+ } finally {
+ isDispatching = false;
+ }
+
+ var listeners = currentListeners = nextListeners;
+ for (var i = 0; i < listeners.length; i++) {
+ listeners[i]();
+ }
+
+ return action;
+ }
+
+ /**
+ * Replaces the reducer currently used by the store to calculate the state.
+ *
+ * You might need this if your app implements code splitting and you want to
+ * load some of the reducers dynamically. You might also need this if you
+ * implement a hot reloading mechanism for Redux.
+ *
+ * @param {Function} nextReducer The reducer for the store to use instead.
+ * @returns {void}
+ */
+ function replaceReducer(nextReducer) {
+ if (typeof nextReducer !== 'function') {
+ throw new Error('Expected the nextReducer to be a function.');
+ }
+
+ currentReducer = nextReducer;
+ dispatch({ type: ActionTypes.INIT });
+ }
+
+ /**
+ * Interoperability point for observable/reactive libraries.
+ * @returns {observable} A minimal observable of state changes.
+ * For more information, see the observable proposal:
+ * https://github.com/zenparsing/es-observable
+ */
+ function observable() {
+ var _ref;
+
+ var outerSubscribe = subscribe;
+ return _ref = {
+ /**
+ * The minimal observable subscription method.
+ * @param {Object} observer Any object that can be used as an observer.
+ * The observer object should have a `next` method.
+ * @returns {subscription} An object with an `unsubscribe` method that can
+ * be used to unsubscribe the observable from the store, and prevent further
+ * emission of values from the observable.
+ */
+
+ subscribe: function subscribe(observer) {
+ if (typeof observer !== 'object') {
+ throw new TypeError('Expected the observer to be an object.');
+ }
+
+ function observeState() {
+ if (observer.next) {
+ observer.next(getState());
+ }
+ }
+
+ observeState();
+ var unsubscribe = outerSubscribe(observeState);
+ return { unsubscribe: unsubscribe };
+ }
+ }, _ref[_symbolObservable2["default"]] = function () {
+ return this;
+ }, _ref;
+ }
+
+ // When a store is created, an "INIT" action is dispatched so that every
+ // reducer returns their initial state. This effectively populates
+ // the initial state tree.
+ dispatch({ type: ActionTypes.INIT });
+
+ return _ref2 = {
+ dispatch: dispatch,
+ subscribe: subscribe,
+ getState: getState,
+ replaceReducer: replaceReducer
+ }, _ref2[_symbolObservable2["default"]] = observable, _ref2;
+ }
+
+/***/ },
+/* 12 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseGetTag = __webpack_require__(13),
+ getPrototype = __webpack_require__(19),
+ isObjectLike = __webpack_require__(21);
+
+ /** `Object#toString` result references. */
+ var objectTag = '[object Object]';
+
+ /** Used for built-in method references. */
+ var funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+ /** Used to resolve the decompiled source of functions. */
+ var funcToString = funcProto.toString;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /** Used to infer the `Object` constructor. */
+ var objectCtorString = funcToString.call(Object);
+
+ /**
+ * Checks if `value` is a plain object, that is, an object created by the
+ * `Object` constructor or one with a `[[Prototype]]` of `null`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.8.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * _.isPlainObject(new Foo);
+ * // => false
+ *
+ * _.isPlainObject([1, 2, 3]);
+ * // => false
+ *
+ * _.isPlainObject({ 'x': 0, 'y': 0 });
+ * // => true
+ *
+ * _.isPlainObject(Object.create(null));
+ * // => true
+ */
+ function isPlainObject(value) {
+ if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
+ return false;
+ }
+ var proto = getPrototype(value);
+ if (proto === null) {
+ return true;
+ }
+ var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
+ return typeof Ctor == 'function' && Ctor instanceof Ctor &&
+ funcToString.call(Ctor) == objectCtorString;
+ }
+
+ module.exports = isPlainObject;
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Symbol = __webpack_require__(14),
+ getRawTag = __webpack_require__(17),
+ objectToString = __webpack_require__(18);
+
+ /** `Object#toString` result references. */
+ var nullTag = '[object Null]',
+ undefinedTag = '[object Undefined]';
+
+ /** Built-in value references. */
+ var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
+
+ /**
+ * The base implementation of `getTag` without fallbacks for buggy environments.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+ function baseGetTag(value) {
+ if (value == null) {
+ return value === undefined ? undefinedTag : nullTag;
+ }
+ value = Object(value);
+ return (symToStringTag && symToStringTag in value)
+ ? getRawTag(value)
+ : objectToString(value);
+ }
+
+ module.exports = baseGetTag;
+
+
+/***/ },
+/* 14 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var root = __webpack_require__(15);
+
+ /** Built-in value references. */
+ var Symbol = root.Symbol;
+
+ module.exports = Symbol;
+
+
+/***/ },
+/* 15 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var freeGlobal = __webpack_require__(16);
+
+ /** Detect free variable `self`. */
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+ /** Used as a reference to the global object. */
+ var root = freeGlobal || freeSelf || Function('return this')();
+
+ module.exports = root;
+
+
+/***/ },
+/* 16 */
+/***/ function(module, exports) {
+
+ /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
+ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+ module.exports = freeGlobal;
+
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Symbol = __webpack_require__(14);
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var nativeObjectToString = objectProto.toString;
+
+ /** Built-in value references. */
+ var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
+
+ /**
+ * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the raw `toStringTag`.
+ */
+ function getRawTag(value) {
+ var isOwn = hasOwnProperty.call(value, symToStringTag),
+ tag = value[symToStringTag];
+
+ try {
+ value[symToStringTag] = undefined;
+ var unmasked = true;
+ } catch (e) {}
+
+ var result = nativeObjectToString.call(value);
+ if (unmasked) {
+ if (isOwn) {
+ value[symToStringTag] = tag;
+ } else {
+ delete value[symToStringTag];
+ }
+ }
+ return result;
+ }
+
+ module.exports = getRawTag;
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports) {
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+
+ /**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var nativeObjectToString = objectProto.toString;
+
+ /**
+ * Converts `value` to a string using `Object.prototype.toString`.
+ *
+ * @private
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ */
+ function objectToString(value) {
+ return nativeObjectToString.call(value);
+ }
+
+ module.exports = objectToString;
+
+
+/***/ },
+/* 19 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var overArg = __webpack_require__(20);
+
+ /** Built-in value references. */
+ var getPrototype = overArg(Object.getPrototypeOf, Object);
+
+ module.exports = getPrototype;
+
+
+/***/ },
+/* 20 */
+/***/ function(module, exports) {
+
+ /**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+ function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+ }
+
+ module.exports = overArg;
+
+
+/***/ },
+/* 21 */
+/***/ function(module, exports) {
+
+ /**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+ function isObjectLike(value) {
+ return value != null && typeof value == 'object';
+ }
+
+ module.exports = isObjectLike;
+
+
+/***/ },
+/* 22 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(global) {/* global window */
+ 'use strict';
+
+ module.exports = __webpack_require__(23)(global || window || this);
+
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 23 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ module.exports = function symbolObservablePonyfill(root) {
+ var result;
+ var Symbol = root.Symbol;
+
+ if (typeof Symbol === 'function') {
+ if (Symbol.observable) {
+ result = Symbol.observable;
+ } else {
+ result = Symbol('observable');
+ Symbol.observable = result;
+ }
+ } else {
+ result = '@@observable';
+ }
+
+ return result;
+ };
+
+
+/***/ },
+/* 24 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports["default"] = combineReducers;
+
+ var _createStore = __webpack_require__(11);
+
+ var _isPlainObject = __webpack_require__(12);
+
+ var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
+
+ var _warning = __webpack_require__(25);
+
+ var _warning2 = _interopRequireDefault(_warning);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ function getUndefinedStateErrorMessage(key, action) {
+ var actionType = action && action.type;
+ var actionName = actionType && '"' + actionType.toString() + '"' || 'an action';
+
+ return 'Given action ' + actionName + ', reducer "' + key + '" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state.';
+ }
+
+ function getUnexpectedStateShapeWarningMessage(inputState, reducers, action) {
+ var reducerKeys = Object.keys(reducers);
+ var argumentName = action && action.type === _createStore.ActionTypes.INIT ? 'initialState argument passed to createStore' : 'previous state received by the reducer';
+
+ if (reducerKeys.length === 0) {
+ return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';
+ }
+
+ if (!(0, _isPlainObject2["default"])(inputState)) {
+ return 'The ' + argumentName + ' has unexpected type of "' + {}.toString.call(inputState).match(/\s([a-z|A-Z]+)/)[1] + '". Expected argument to be an object with the following ' + ('keys: "' + reducerKeys.join('", "') + '"');
+ }
+
+ var unexpectedKeys = Object.keys(inputState).filter(function (key) {
+ return !reducers.hasOwnProperty(key);
+ });
+
+ if (unexpectedKeys.length > 0) {
+ return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('"' + unexpectedKeys.join('", "') + '" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('"' + reducerKeys.join('", "') + '". Unexpected keys will be ignored.');
+ }
+ }
+
+ function assertReducerSanity(reducers) {
+ Object.keys(reducers).forEach(function (key) {
+ var reducer = reducers[key];
+ var initialState = reducer(undefined, { type: _createStore.ActionTypes.INIT });
+
+ if (typeof initialState === 'undefined') {
+ throw new Error('Reducer "' + key + '" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined.');
+ }
+
+ var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.');
+ if (typeof reducer(undefined, { type: type }) === 'undefined') {
+ throw new Error('Reducer "' + key + '" returned undefined when probed with a random type. ' + ('Don\'t try to handle ' + _createStore.ActionTypes.INIT + ' or other actions in "redux/*" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined.');
+ }
+ });
+ }
+
+ /**
+ * Turns an object whose values are different reducer functions, into a single
+ * reducer function. It will call every child reducer, and gather their results
+ * into a single state object, whose keys correspond to the keys of the passed
+ * reducer functions.
+ *
+ * @param {Object} reducers An object whose values correspond to different
+ * reducer functions that need to be combined into one. One handy way to obtain
+ * it is to use ES6 `import * as reducers` syntax. The reducers may never return
+ * undefined for any action. Instead, they should return their initial state
+ * if the state passed to them was undefined, and the current state for any
+ * unrecognized action.
+ *
+ * @returns {Function} A reducer function that invokes every reducer inside the
+ * passed object, and builds a state object with the same shape.
+ */
+ function combineReducers(reducers) {
+ var reducerKeys = Object.keys(reducers);
+ var finalReducers = {};
+ for (var i = 0; i < reducerKeys.length; i++) {
+ var key = reducerKeys[i];
+ if (typeof reducers[key] === 'function') {
+ finalReducers[key] = reducers[key];
+ }
+ }
+ var finalReducerKeys = Object.keys(finalReducers);
+
+ var sanityError;
+ try {
+ assertReducerSanity(finalReducers);
+ } catch (e) {
+ sanityError = e;
+ }
+
+ return function combination() {
+ var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+ var action = arguments[1];
+
+ if (sanityError) {
+ throw sanityError;
+ }
+
+ if (false) {
+ var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action);
+ if (warningMessage) {
+ (0, _warning2["default"])(warningMessage);
+ }
+ }
+
+ var hasChanged = false;
+ var nextState = {};
+ for (var i = 0; i < finalReducerKeys.length; i++) {
+ var key = finalReducerKeys[i];
+ var reducer = finalReducers[key];
+ var previousStateForKey = state[key];
+ var nextStateForKey = reducer(previousStateForKey, action);
+ if (typeof nextStateForKey === 'undefined') {
+ var errorMessage = getUndefinedStateErrorMessage(key, action);
+ throw new Error(errorMessage);
+ }
+ nextState[key] = nextStateForKey;
+ hasChanged = hasChanged || nextStateForKey !== previousStateForKey;
+ }
+ return hasChanged ? nextState : state;
+ };
+ }
+
+/***/ },
+/* 25 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports["default"] = warning;
+ /**
+ * Prints a warning in the console if it exists.
+ *
+ * @param {String} message The warning message.
+ * @returns {void}
+ */
+ function warning(message) {
+ /* eslint-disable no-console */
+ if (typeof console !== 'undefined' && typeof console.error === 'function') {
+ console.error(message);
+ }
+ /* eslint-enable no-console */
+ try {
+ // This error was thrown as a convenience so that if you enable
+ // "break on all exceptions" in your console,
+ // it would pause the execution at this line.
+ throw new Error(message);
+ /* eslint-disable no-empty */
+ } catch (e) {}
+ /* eslint-enable no-empty */
+ }
+
+/***/ },
+/* 26 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports["default"] = bindActionCreators;
+ function bindActionCreator(actionCreator, dispatch) {
+ return function () {
+ return dispatch(actionCreator.apply(undefined, arguments));
+ };
+ }
+
+ /**
+ * Turns an object whose values are action creators, into an object with the
+ * same keys, but with every function wrapped into a `dispatch` call so they
+ * may be invoked directly. This is just a convenience method, as you can call
+ * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.
+ *
+ * For convenience, you can also pass a single function as the first argument,
+ * and get a function in return.
+ *
+ * @param {Function|Object} actionCreators An object whose values are action
+ * creator functions. One handy way to obtain it is to use ES6 `import * as`
+ * syntax. You may also pass a single function.
+ *
+ * @param {Function} dispatch The `dispatch` function available on your Redux
+ * store.
+ *
+ * @returns {Function|Object} The object mimicking the original object, but with
+ * every action creator wrapped into the `dispatch` call. If you passed a
+ * function as `actionCreators`, the return value will also be a single
+ * function.
+ */
+ function bindActionCreators(actionCreators, dispatch) {
+ if (typeof actionCreators === 'function') {
+ return bindActionCreator(actionCreators, dispatch);
+ }
+
+ if (typeof actionCreators !== 'object' || actionCreators === null) {
+ throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : typeof actionCreators) + '. ' + 'Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?');
+ }
+
+ var keys = Object.keys(actionCreators);
+ var boundActionCreators = {};
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ var actionCreator = actionCreators[key];
+ if (typeof actionCreator === 'function') {
+ boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);
+ }
+ }
+ return boundActionCreators;
+ }
+
+/***/ },
+/* 27 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = 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"] = applyMiddleware;
+
+ var _compose = __webpack_require__(28);
+
+ var _compose2 = _interopRequireDefault(_compose);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ /**
+ * Creates a store enhancer that applies middleware to the dispatch method
+ * of the Redux store. This is handy for a variety of tasks, such as expressing
+ * asynchronous actions in a concise manner, or logging every action payload.
+ *
+ * See `redux-thunk` package as an example of the Redux middleware.
+ *
+ * Because middleware is potentially asynchronous, this should be the first
+ * store enhancer in the composition chain.
+ *
+ * Note that each middleware will be given the `dispatch` and `getState` functions
+ * as named arguments.
+ *
+ * @param {...Function} middlewares The middleware chain to be applied.
+ * @returns {Function} A store enhancer applying the middleware.
+ */
+ function applyMiddleware() {
+ for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {
+ middlewares[_key] = arguments[_key];
+ }
+
+ return function (createStore) {
+ return function (reducer, initialState, enhancer) {
+ var store = createStore(reducer, initialState, enhancer);
+ var _dispatch = store.dispatch;
+ var chain = [];
+
+ var middlewareAPI = {
+ getState: store.getState,
+ dispatch: function dispatch(action) {
+ return _dispatch(action);
+ }
+ };
+ chain = middlewares.map(function (middleware) {
+ return middleware(middlewareAPI);
+ });
+ _dispatch = _compose2["default"].apply(undefined, chain)(store.dispatch);
+
+ return _extends({}, store, {
+ dispatch: _dispatch
+ });
+ };
+ };
+ }
+
+/***/ },
+/* 28 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ exports["default"] = compose;
+ /**
+ * Composes single-argument functions from right to left. The rightmost
+ * function can take multiple arguments as it provides the signature for
+ * the resulting composite function.
+ *
+ * @param {...Function} funcs The functions to compose.
+ * @returns {Function} A function obtained by composing the argument functions
+ * from right to left. For example, compose(f, g, h) is identical to doing
+ * (...args) => f(g(h(...args))).
+ */
+
+ function compose() {
+ for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
+ funcs[_key] = arguments[_key];
+ }
+
+ if (funcs.length === 0) {
+ return function (arg) {
+ return arg;
+ };
+ } else {
+ var _ret = function () {
+ var last = funcs[funcs.length - 1];
+ var rest = funcs.slice(0, -1);
+ return {
+ v: function v() {
+ return rest.reduceRight(function (composed, f) {
+ return f(composed);
+ }, last.apply(undefined, arguments));
+ }
+ };
+ }();
+
+ if (typeof _ret === "object") return _ret.v;
+ }
+ }
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports.connect = exports.Provider = undefined;
+
+ var _Provider = __webpack_require__(30);
+
+ var _Provider2 = _interopRequireDefault(_Provider);
+
+ var _connect = __webpack_require__(33);
+
+ var _connect2 = _interopRequireDefault(_connect);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ exports.Provider = _Provider2["default"];
+ exports.connect = _connect2["default"];
+
+/***/ },
+/* 30 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports["default"] = undefined;
+
+ var _react = __webpack_require__(6);
+
+ var _storeShape = __webpack_require__(31);
+
+ var _storeShape2 = _interopRequireDefault(_storeShape);
+
+ var _warning = __webpack_require__(32);
+
+ var _warning2 = _interopRequireDefault(_warning);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+ var didWarnAboutReceivingStore = false;
+ function warnAboutReceivingStore() {
+ if (didWarnAboutReceivingStore) {
+ return;
+ }
+ didWarnAboutReceivingStore = true;
+
+ (0, _warning2["default"])('<Provider> does not support changing `store` on the fly. ' + 'It is most likely that you see this error because you updated to ' + 'Redux 2.x and React Redux 2.x which no longer hot reload reducers ' + 'automatically. See https://github.com/reactjs/react-redux/releases/' + 'tag/v2.0.0 for the migration instructions.');
+ }
+
+ var Provider = function (_Component) {
+ _inherits(Provider, _Component);
+
+ Provider.prototype.getChildContext = function getChildContext() {
+ return { store: this.store };
+ };
+
+ function Provider(props, context) {
+ _classCallCheck(this, Provider);
+
+ var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));
+
+ _this.store = props.store;
+ return _this;
+ }
+
+ Provider.prototype.render = function render() {
+ var children = this.props.children;
+
+ return _react.Children.only(children);
+ };
+
+ return Provider;
+ }(_react.Component);
+
+ exports["default"] = Provider;
+
+ if (false) {
+ Provider.prototype.componentWillReceiveProps = function (nextProps) {
+ var store = this.store;
+ var nextStore = nextProps.store;
+
+ if (store !== nextStore) {
+ warnAboutReceivingStore();
+ }
+ };
+ }
+
+ Provider.propTypes = {
+ store: _storeShape2["default"].isRequired,
+ children: _react.PropTypes.element.isRequired
+ };
+ Provider.childContextTypes = {
+ store: _storeShape2["default"].isRequired
+ };
+
+/***/ },
+/* 31 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _react = __webpack_require__(6);
+
+ exports["default"] = _react.PropTypes.shape({
+ subscribe: _react.PropTypes.func.isRequired,
+ dispatch: _react.PropTypes.func.isRequired,
+ getState: _react.PropTypes.func.isRequired
+ });
+
+/***/ },
+/* 32 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports["default"] = warning;
+ /**
+ * Prints a warning in the console if it exists.
+ *
+ * @param {String} message The warning message.
+ * @returns {void}
+ */
+ function warning(message) {
+ /* eslint-disable no-console */
+ if (typeof console !== 'undefined' && typeof console.error === 'function') {
+ console.error(message);
+ }
+ /* eslint-enable no-console */
+ try {
+ // This error was thrown as a convenience so that you can use this stack
+ // to find the callsite that caused this warning to fire.
+ throw new Error(message);
+ /* eslint-disable no-empty */
+ } catch (e) {}
+ /* eslint-enable no-empty */
+ }
+
+/***/ },
+/* 33 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ 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.__esModule = true;
+ exports["default"] = connect;
+
+ var _react = __webpack_require__(6);
+
+ var _storeShape = __webpack_require__(31);
+
+ var _storeShape2 = _interopRequireDefault(_storeShape);
+
+ var _shallowEqual = __webpack_require__(34);
+
+ var _shallowEqual2 = _interopRequireDefault(_shallowEqual);
+
+ var _wrapActionCreators = __webpack_require__(35);
+
+ var _wrapActionCreators2 = _interopRequireDefault(_wrapActionCreators);
+
+ var _warning = __webpack_require__(32);
+
+ var _warning2 = _interopRequireDefault(_warning);
+
+ var _isPlainObject = __webpack_require__(12);
+
+ var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
+
+ var _hoistNonReactStatics = __webpack_require__(36);
+
+ var _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics);
+
+ var _invariant = __webpack_require__(37);
+
+ var _invariant2 = _interopRequireDefault(_invariant);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+ var defaultMapStateToProps = function defaultMapStateToProps(state) {
+ return {};
+ }; // eslint-disable-line no-unused-vars
+ var defaultMapDispatchToProps = function defaultMapDispatchToProps(dispatch) {
+ return { dispatch: dispatch };
+ };
+ var defaultMergeProps = function defaultMergeProps(stateProps, dispatchProps, parentProps) {
+ return _extends({}, parentProps, stateProps, dispatchProps);
+ };
+
+ function getDisplayName(WrappedComponent) {
+ return WrappedComponent.displayName || WrappedComponent.name || 'Component';
+ }
+
+ var errorObject = { value: null };
+ function tryCatch(fn, ctx) {
+ try {
+ return fn.apply(ctx);
+ } catch (e) {
+ errorObject.value = e;
+ return errorObject;
+ }
+ }
+
+ // Helps track hot reloading.
+ var nextVersion = 0;
+
+ function connect(mapStateToProps, mapDispatchToProps, mergeProps) {
+ var options = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
+
+ var shouldSubscribe = Boolean(mapStateToProps);
+ var mapState = mapStateToProps || defaultMapStateToProps;
+
+ var mapDispatch = undefined;
+ if (typeof mapDispatchToProps === 'function') {
+ mapDispatch = mapDispatchToProps;
+ } else if (!mapDispatchToProps) {
+ mapDispatch = defaultMapDispatchToProps;
+ } else {
+ mapDispatch = (0, _wrapActionCreators2["default"])(mapDispatchToProps);
+ }
+
+ var finalMergeProps = mergeProps || defaultMergeProps;
+ var _options$pure = options.pure;
+ var pure = _options$pure === undefined ? true : _options$pure;
+ var _options$withRef = options.withRef;
+ var withRef = _options$withRef === undefined ? false : _options$withRef;
+
+ var checkMergedEquals = pure && finalMergeProps !== defaultMergeProps;
+
+ // Helps track hot reloading.
+ var version = nextVersion++;
+
+ return function wrapWithConnect(WrappedComponent) {
+ var connectDisplayName = 'Connect(' + getDisplayName(WrappedComponent) + ')';
+
+ function checkStateShape(props, methodName) {
+ if (!(0, _isPlainObject2["default"])(props)) {
+ (0, _warning2["default"])(methodName + '() in ' + connectDisplayName + ' must return a plain object. ' + ('Instead received ' + props + '.'));
+ }
+ }
+
+ function computeMergedProps(stateProps, dispatchProps, parentProps) {
+ var mergedProps = finalMergeProps(stateProps, dispatchProps, parentProps);
+ if (false) {
+ checkStateShape(mergedProps, 'mergeProps');
+ }
+ return mergedProps;
+ }
+
+ var Connect = function (_Component) {
+ _inherits(Connect, _Component);
+
+ Connect.prototype.shouldComponentUpdate = function shouldComponentUpdate() {
+ return !pure || this.haveOwnPropsChanged || this.hasStoreStateChanged;
+ };
+
+ function Connect(props, context) {
+ _classCallCheck(this, Connect);
+
+ var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));
+
+ _this.version = version;
+ _this.store = props.store || context.store;
+
+ (0, _invariant2["default"])(_this.store, 'Could not find "store" in either the context or ' + ('props of "' + connectDisplayName + '". ') + 'Either wrap the root component in a <Provider>, ' + ('or explicitly pass "store" as a prop to "' + connectDisplayName + '".'));
+
+ var storeState = _this.store.getState();
+ _this.state = { storeState: storeState };
+ _this.clearCache();
+ return _this;
+ }
+
+ Connect.prototype.computeStateProps = function computeStateProps(store, props) {
+ if (!this.finalMapStateToProps) {
+ return this.configureFinalMapState(store, props);
+ }
+
+ var state = store.getState();
+ var stateProps = this.doStatePropsDependOnOwnProps ? this.finalMapStateToProps(state, props) : this.finalMapStateToProps(state);
+
+ if (false) {
+ checkStateShape(stateProps, 'mapStateToProps');
+ }
+ return stateProps;
+ };
+
+ Connect.prototype.configureFinalMapState = function configureFinalMapState(store, props) {
+ var mappedState = mapState(store.getState(), props);
+ var isFactory = typeof mappedState === 'function';
+
+ this.finalMapStateToProps = isFactory ? mappedState : mapState;
+ this.doStatePropsDependOnOwnProps = this.finalMapStateToProps.length !== 1;
+
+ if (isFactory) {
+ return this.computeStateProps(store, props);
+ }
+
+ if (false) {
+ checkStateShape(mappedState, 'mapStateToProps');
+ }
+ return mappedState;
+ };
+
+ Connect.prototype.computeDispatchProps = function computeDispatchProps(store, props) {
+ if (!this.finalMapDispatchToProps) {
+ return this.configureFinalMapDispatch(store, props);
+ }
+
+ var dispatch = store.dispatch;
+
+ var dispatchProps = this.doDispatchPropsDependOnOwnProps ? this.finalMapDispatchToProps(dispatch, props) : this.finalMapDispatchToProps(dispatch);
+
+ if (false) {
+ checkStateShape(dispatchProps, 'mapDispatchToProps');
+ }
+ return dispatchProps;
+ };
+
+ Connect.prototype.configureFinalMapDispatch = function configureFinalMapDispatch(store, props) {
+ var mappedDispatch = mapDispatch(store.dispatch, props);
+ var isFactory = typeof mappedDispatch === 'function';
+
+ this.finalMapDispatchToProps = isFactory ? mappedDispatch : mapDispatch;
+ this.doDispatchPropsDependOnOwnProps = this.finalMapDispatchToProps.length !== 1;
+
+ if (isFactory) {
+ return this.computeDispatchProps(store, props);
+ }
+
+ if (false) {
+ checkStateShape(mappedDispatch, 'mapDispatchToProps');
+ }
+ return mappedDispatch;
+ };
+
+ Connect.prototype.updateStatePropsIfNeeded = function updateStatePropsIfNeeded() {
+ var nextStateProps = this.computeStateProps(this.store, this.props);
+ if (this.stateProps && (0, _shallowEqual2["default"])(nextStateProps, this.stateProps)) {
+ return false;
+ }
+
+ this.stateProps = nextStateProps;
+ return true;
+ };
+
+ Connect.prototype.updateDispatchPropsIfNeeded = function updateDispatchPropsIfNeeded() {
+ var nextDispatchProps = this.computeDispatchProps(this.store, this.props);
+ if (this.dispatchProps && (0, _shallowEqual2["default"])(nextDispatchProps, this.dispatchProps)) {
+ return false;
+ }
+
+ this.dispatchProps = nextDispatchProps;
+ return true;
+ };
+
+ Connect.prototype.updateMergedPropsIfNeeded = function updateMergedPropsIfNeeded() {
+ var nextMergedProps = computeMergedProps(this.stateProps, this.dispatchProps, this.props);
+ if (this.mergedProps && checkMergedEquals && (0, _shallowEqual2["default"])(nextMergedProps, this.mergedProps)) {
+ return false;
+ }
+
+ this.mergedProps = nextMergedProps;
+ return true;
+ };
+
+ Connect.prototype.isSubscribed = function isSubscribed() {
+ return typeof this.unsubscribe === 'function';
+ };
+
+ Connect.prototype.trySubscribe = function trySubscribe() {
+ if (shouldSubscribe && !this.unsubscribe) {
+ this.unsubscribe = this.store.subscribe(this.handleChange.bind(this));
+ this.handleChange();
+ }
+ };
+
+ Connect.prototype.tryUnsubscribe = function tryUnsubscribe() {
+ if (this.unsubscribe) {
+ this.unsubscribe();
+ this.unsubscribe = null;
+ }
+ };
+
+ Connect.prototype.componentDidMount = function componentDidMount() {
+ this.trySubscribe();
+ };
+
+ Connect.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
+ if (!pure || !(0, _shallowEqual2["default"])(nextProps, this.props)) {
+ this.haveOwnPropsChanged = true;
+ }
+ };
+
+ Connect.prototype.componentWillUnmount = function componentWillUnmount() {
+ this.tryUnsubscribe();
+ this.clearCache();
+ };
+
+ Connect.prototype.clearCache = function clearCache() {
+ this.dispatchProps = null;
+ this.stateProps = null;
+ this.mergedProps = null;
+ this.haveOwnPropsChanged = true;
+ this.hasStoreStateChanged = true;
+ this.haveStatePropsBeenPrecalculated = false;
+ this.statePropsPrecalculationError = null;
+ this.renderedElement = null;
+ this.finalMapDispatchToProps = null;
+ this.finalMapStateToProps = null;
+ };
+
+ Connect.prototype.handleChange = function handleChange() {
+ if (!this.unsubscribe) {
+ return;
+ }
+
+ var storeState = this.store.getState();
+ var prevStoreState = this.state.storeState;
+ if (pure && prevStoreState === storeState) {
+ return;
+ }
+
+ if (pure && !this.doStatePropsDependOnOwnProps) {
+ var haveStatePropsChanged = tryCatch(this.updateStatePropsIfNeeded, this);
+ if (!haveStatePropsChanged) {
+ return;
+ }
+ if (haveStatePropsChanged === errorObject) {
+ this.statePropsPrecalculationError = errorObject.value;
+ }
+ this.haveStatePropsBeenPrecalculated = true;
+ }
+
+ this.hasStoreStateChanged = true;
+ this.setState({ storeState: storeState });
+ };
+
+ Connect.prototype.getWrappedInstance = function getWrappedInstance() {
+ (0, _invariant2["default"])(withRef, 'To access the wrapped instance, you need to specify ' + '{ withRef: true } as the fourth argument of the connect() call.');
+
+ return this.refs.wrappedInstance;
+ };
+
+ Connect.prototype.render = function render() {
+ var haveOwnPropsChanged = this.haveOwnPropsChanged;
+ var hasStoreStateChanged = this.hasStoreStateChanged;
+ var haveStatePropsBeenPrecalculated = this.haveStatePropsBeenPrecalculated;
+ var statePropsPrecalculationError = this.statePropsPrecalculationError;
+ var renderedElement = this.renderedElement;
+
+ this.haveOwnPropsChanged = false;
+ this.hasStoreStateChanged = false;
+ this.haveStatePropsBeenPrecalculated = false;
+ this.statePropsPrecalculationError = null;
+
+ if (statePropsPrecalculationError) {
+ throw statePropsPrecalculationError;
+ }
+
+ var shouldUpdateStateProps = true;
+ var shouldUpdateDispatchProps = true;
+ if (pure && renderedElement) {
+ shouldUpdateStateProps = hasStoreStateChanged || haveOwnPropsChanged && this.doStatePropsDependOnOwnProps;
+ shouldUpdateDispatchProps = haveOwnPropsChanged && this.doDispatchPropsDependOnOwnProps;
+ }
+
+ var haveStatePropsChanged = false;
+ var haveDispatchPropsChanged = false;
+ if (haveStatePropsBeenPrecalculated) {
+ haveStatePropsChanged = true;
+ } else if (shouldUpdateStateProps) {
+ haveStatePropsChanged = this.updateStatePropsIfNeeded();
+ }
+ if (shouldUpdateDispatchProps) {
+ haveDispatchPropsChanged = this.updateDispatchPropsIfNeeded();
+ }
+
+ var haveMergedPropsChanged = true;
+ if (haveStatePropsChanged || haveDispatchPropsChanged || haveOwnPropsChanged) {
+ haveMergedPropsChanged = this.updateMergedPropsIfNeeded();
+ } else {
+ haveMergedPropsChanged = false;
+ }
+
+ if (!haveMergedPropsChanged && renderedElement) {
+ return renderedElement;
+ }
+
+ if (withRef) {
+ this.renderedElement = (0, _react.createElement)(WrappedComponent, _extends({}, this.mergedProps, {
+ ref: 'wrappedInstance'
+ }));
+ } else {
+ this.renderedElement = (0, _react.createElement)(WrappedComponent, this.mergedProps);
+ }
+
+ return this.renderedElement;
+ };
+
+ return Connect;
+ }(_react.Component);
+
+ Connect.displayName = connectDisplayName;
+ Connect.WrappedComponent = WrappedComponent;
+ Connect.contextTypes = {
+ store: _storeShape2["default"]
+ };
+ Connect.propTypes = {
+ store: _storeShape2["default"]
+ };
+
+ if (false) {
+ Connect.prototype.componentWillUpdate = function componentWillUpdate() {
+ if (this.version === version) {
+ return;
+ }
+
+ // We are hot reloading!
+ this.version = version;
+ this.trySubscribe();
+ this.clearCache();
+ };
+ }
+
+ return (0, _hoistNonReactStatics2["default"])(Connect, WrappedComponent);
+ };
+ }
+
+/***/ },
+/* 34 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ exports["default"] = shallowEqual;
+ function shallowEqual(objA, objB) {
+ if (objA === objB) {
+ return true;
+ }
+
+ var keysA = Object.keys(objA);
+ var keysB = Object.keys(objB);
+
+ if (keysA.length !== keysB.length) {
+ return false;
+ }
+
+ // Test for A's keys different from B.
+ var hasOwn = Object.prototype.hasOwnProperty;
+ for (var i = 0; i < keysA.length; i++) {
+ if (!hasOwn.call(objB, keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+/***/ },
+/* 35 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports["default"] = wrapActionCreators;
+
+ var _redux = __webpack_require__(10);
+
+ function wrapActionCreators(actionCreators) {
+ return function (dispatch) {
+ return (0, _redux.bindActionCreators)(actionCreators, dispatch);
+ };
+ }
+
+/***/ },
+/* 36 */
+/***/ function(module, exports) {
+
+ /**
+ * Copyright 2015, Yahoo! Inc.
+ * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
+ */
+ 'use strict';
+
+ var REACT_STATICS = {
+ childContextTypes: true,
+ contextTypes: true,
+ defaultProps: true,
+ displayName: true,
+ getDefaultProps: true,
+ mixins: true,
+ propTypes: true,
+ type: true
+ };
+
+ var KNOWN_STATICS = {
+ name: true,
+ length: true,
+ prototype: true,
+ caller: true,
+ arguments: true,
+ arity: true
+ };
+
+ var isGetOwnPropertySymbolsAvailable = typeof Object.getOwnPropertySymbols === 'function';
+
+ module.exports = function hoistNonReactStatics(targetComponent, sourceComponent, customStatics) {
+ if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components
+ var keys = Object.getOwnPropertyNames(sourceComponent);
+
+ /* istanbul ignore else */
+ if (isGetOwnPropertySymbolsAvailable) {
+ keys = keys.concat(Object.getOwnPropertySymbols(sourceComponent));
+ }
+
+ for (var i = 0; i < keys.length; ++i) {
+ if (!REACT_STATICS[keys[i]] && !KNOWN_STATICS[keys[i]] && (!customStatics || !customStatics[keys[i]])) {
+ try {
+ targetComponent[keys[i]] = sourceComponent[keys[i]];
+ } catch (error) {
+
+ }
+ }
+ }
+ }
+
+ return targetComponent;
+ };
+
+
+/***/ },
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Copyright 2013-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+ 'use strict';
+
+ /**
+ * Use invariant() to assert state which your program assumes to be true.
+ *
+ * Provide sprintf-style format (only %s is supported) and arguments
+ * to provide information about what broke and what you were
+ * expecting.
+ *
+ * The invariant message will be stripped in production, but the invariant
+ * will remain to ensure logic does not differ in production.
+ */
+
+ var invariant = function(condition, format, a, b, c, d, e, f) {
+ if (false) {
+ if (format === undefined) {
+ throw new Error('invariant requires an error message argument');
+ }
+ }
+
+ if (!condition) {
+ var error;
+ if (format === undefined) {
+ error = new Error(
+ 'Minified exception occurred; use the non-minified dev environment ' +
+ 'for the full error message and additional helpful warnings.'
+ );
+ } else {
+ var args = [a, b, c, d, e, f];
+ var argIndex = 0;
+ error = new Error(
+ format.replace(/%s/g, function() { return args[argIndex++]; })
+ );
+ error.name = 'Invariant Violation';
+ }
+
+ error.framesToPop = 1; // we don't care about invariant's own frame
+ throw error;
+ }
+ };
+
+ module.exports = invariant;
+
+
+/***/ },
+/* 38 */
+/***/ function(module, exports, __webpack_require__) {
+
+ const { KeyShortcuts } = __webpack_require__(39);
+ const { DebuggerTransport } = __webpack_require__(77);
+ const { DebuggerClient } = __webpack_require__(89);
+ const PrefsHelper = __webpack_require__(93).PrefsHelper;
+ const { TargetFactory } = __webpack_require__(94);
+ const DevToolsUtils = __webpack_require__(78);
+ const AppConstants = __webpack_require__(80);
+ const EventEmitter = __webpack_require__(70);
+ const WebsocketTransport = __webpack_require__(95);
+ const Menu = __webpack_require__(96);
+ const MenuItem = __webpack_require__(97);
+ const Tree = __webpack_require__(98);
+ const sourceUtils = __webpack_require__(99);
+ const frame = __webpack_require__(100);
+
+ module.exports = {
+ KeyShortcuts,
+ PrefsHelper,
+ DebuggerClient,
+ DebuggerTransport,
+ TargetFactory,
+ DevToolsUtils,
+ AppConstants,
+ EventEmitter,
+ WebsocketTransport,
+ Menu,
+ MenuItem,
+ Tree,
+ sourceUtils,
+ frame
+ };
+
+
+/***/ },
+/* 39 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ const { Services: { appinfo }} = __webpack_require__(40);
+ const EventEmitter = __webpack_require__(70);
+ const isOSX = appinfo.OS === "Darwin";
+ "use strict";
+
+ // List of electron keys mapped to DOM API (DOM_VK_*) key code
+ const ElectronKeysMapping = {
+ "F1": "DOM_VK_F1",
+ "F2": "DOM_VK_F2",
+ "F3": "DOM_VK_F3",
+ "F4": "DOM_VK_F4",
+ "F5": "DOM_VK_F5",
+ "F6": "DOM_VK_F6",
+ "F7": "DOM_VK_F7",
+ "F8": "DOM_VK_F8",
+ "F9": "DOM_VK_F9",
+ "F10": "DOM_VK_F10",
+ "F11": "DOM_VK_F11",
+ "F12": "DOM_VK_F12",
+ "F13": "DOM_VK_F13",
+ "F14": "DOM_VK_F14",
+ "F15": "DOM_VK_F15",
+ "F16": "DOM_VK_F16",
+ "F17": "DOM_VK_F17",
+ "F18": "DOM_VK_F18",
+ "F19": "DOM_VK_F19",
+ "F20": "DOM_VK_F20",
+ "F21": "DOM_VK_F21",
+ "F22": "DOM_VK_F22",
+ "F23": "DOM_VK_F23",
+ "F24": "DOM_VK_F24",
+ "Space": "DOM_VK_SPACE",
+ "Backspace": "DOM_VK_BACK_SPACE",
+ "Delete": "DOM_VK_DELETE",
+ "Insert": "DOM_VK_INSERT",
+ "Return": "DOM_VK_RETURN",
+ "Enter": "DOM_VK_RETURN",
+ "Up": "DOM_VK_UP",
+ "Down": "DOM_VK_DOWN",
+ "Left": "DOM_VK_LEFT",
+ "Right": "DOM_VK_RIGHT",
+ "Home": "DOM_VK_HOME",
+ "End": "DOM_VK_END",
+ "PageUp": "DOM_VK_PAGE_UP",
+ "PageDown": "DOM_VK_PAGE_DOWN",
+ "Escape": "DOM_VK_ESCAPE",
+ "Esc": "DOM_VK_ESCAPE",
+ "Tab": "DOM_VK_TAB",
+ "VolumeUp": "DOM_VK_VOLUME_UP",
+ "VolumeDown": "DOM_VK_VOLUME_DOWN",
+ "VolumeMute": "DOM_VK_VOLUME_MUTE",
+ "PrintScreen": "DOM_VK_PRINTSCREEN",
+ };
+
+ /**
+ * Helper to listen for keyboard events decribed in .properties file.
+ *
+ * let shortcuts = new KeyShortcuts({
+ * window
+ * });
+ * shortcuts.on("Ctrl+F", event => {
+ * // `event` is the KeyboardEvent which relates to the key shortcuts
+ * });
+ *
+ * @param DOMWindow window
+ * The window object of the document to listen events from.
+ * @param DOMElement target
+ * Optional DOM Element on which we should listen events from.
+ * If omitted, we listen for all events fired on `window`.
+ */
+ function KeyShortcuts({ window, target }) {
+ this.window = window;
+ this.target = target || window;
+ this.keys = new Map();
+ this.eventEmitter = new EventEmitter();
+ this.target.addEventListener("keydown", this);
+ }
+
+ /*
+ * Parse an electron-like key string and return a normalized object which
+ * allow efficient match on DOM key event. The normalized object matches DOM
+ * API.
+ *
+ * @param DOMWindow window
+ * Any DOM Window object, just to fetch its `KeyboardEvent` object
+ * @param String str
+ * The shortcut string to parse, following this document:
+ * https://github.com/electron/electron/blob/master/docs/api/accelerator.md
+ */
+ KeyShortcuts.parseElectronKey = function(window, str) {
+ let modifiers = str.split("+");
+ let key = modifiers.pop();
+
+ let shortcut = {
+ ctrl: false,
+ meta: false,
+ alt: false,
+ shift: false,
+ // Set for character keys
+ key: undefined,
+ // Set for non-character keys
+ keyCode: undefined,
+ };
+ for (let mod of modifiers) {
+ if (mod === "Alt") {
+ shortcut.alt = true;
+ } else if (["Command", "Cmd"].includes(mod)) {
+ shortcut.meta = true;
+ } else if (["CommandOrControl", "CmdOrCtrl"].includes(mod)) {
+ if (isOSX) {
+ shortcut.meta = true;
+ } else {
+ shortcut.ctrl = true;
+ }
+ } else if (["Control", "Ctrl"].includes(mod)) {
+ shortcut.ctrl = true;
+ } else if (mod === "Shift") {
+ shortcut.shift = true;
+ } else {
+ console.error("Unsupported modifier:", mod, "from key:", str);
+ return null;
+ }
+ }
+
+ // Plus is a special case. It's a character key and shouldn't be matched
+ // against a keycode as it is only accessible via Shift/Capslock
+ if (key === "Plus") {
+ key = "+";
+ }
+
+ if (typeof key === "string" && key.length === 1) {
+ // Match any single character
+ shortcut.key = key.toLowerCase();
+ } else if (key in ElectronKeysMapping) {
+ // Maps the others manually to DOM API DOM_VK_*
+ key = ElectronKeysMapping[key];
+ shortcut.keyCode = window.KeyboardEvent[key];
+ // Used only to stringify the shortcut
+ shortcut.keyCodeString = key;
+ shortcut.key = key;
+ } else {
+ console.error("Unsupported key:", key);
+ return null;
+ }
+
+ return shortcut;
+ };
+
+ KeyShortcuts.stringify = function(shortcut) {
+ let list = [];
+ if (shortcut.alt) {
+ list.push("Alt");
+ }
+ if (shortcut.ctrl) {
+ list.push("Ctrl");
+ }
+ if (shortcut.meta) {
+ list.push("Cmd");
+ }
+ if (shortcut.shift) {
+ list.push("Shift");
+ }
+ let key;
+ if (shortcut.key) {
+ key = shortcut.key.toUpperCase();
+ } else {
+ key = shortcut.keyCodeString;
+ }
+ list.push(key);
+ return list.join("+");
+ };
+
+ KeyShortcuts.prototype = {
+ destroy() {
+ this.target.removeEventListener("keydown", this);
+ this.keys.clear();
+ },
+
+ doesEventMatchShortcut(event, shortcut) {
+ if (shortcut.meta != event.metaKey) {
+ return false;
+ }
+ if (shortcut.ctrl != event.ctrlKey) {
+ return false;
+ }
+ if (shortcut.alt != event.altKey) {
+ return false;
+ }
+ // Shift is a special modifier, it may implicitely be required if the
+ // expected key is a special character accessible via shift.
+ if (shortcut.shift != event.shiftKey && event.key &&
+ event.key.match(/[a-zA-Z]/)) {
+ return false;
+ }
+ if (shortcut.keyCode) {
+ return event.keyCode == shortcut.keyCode;
+ } else if (event.key in ElectronKeysMapping) {
+ return ElectronKeysMapping[event.key] === shortcut.key;
+ }
+
+ // get the key from the keyCode if key is not provided.
+ let key = event.key || String.fromCharCode(event.keyCode);
+
+ // For character keys, we match if the final character is the expected one.
+ // But for digits we also accept indirect match to please azerty keyboard,
+ // which requires Shift to be pressed to get digits.
+ return key.toLowerCase() == shortcut.key ||
+ (shortcut.key.match(/[0-9]/) &&
+ event.keyCode == shortcut.key.charCodeAt(0));
+ },
+
+ handleEvent(event) {
+ for (let [key, shortcut] of this.keys) {
+ if (this.doesEventMatchShortcut(event, shortcut)) {
+ this.eventEmitter.emit(key, event);
+ }
+ }
+ },
+
+ on(key, listener) {
+ if (typeof listener !== "function") {
+ throw new Error("KeyShortcuts.on() expects a function as " +
+ "second argument");
+ }
+ if (!this.keys.has(key)) {
+ let shortcut = KeyShortcuts.parseElectronKey(this.window, key);
+ // The key string is wrong and we were unable to compute the key shortcut
+ if (!shortcut) {
+ return;
+ }
+ this.keys.set(key, shortcut);
+ }
+ this.eventEmitter.on(key, listener);
+ },
+
+ off(key, listener) {
+ this.eventEmitter.off(key, listener);
+ },
+ };
+ exports.KeyShortcuts = KeyShortcuts;
+
+
+/***/ },
+/* 40 */
+/***/ function(module, exports, __webpack_require__) {
+
+ const Services = __webpack_require__(41);
+ const SplitBox = __webpack_require__(42);
+ // const SplitBoxCSS = require("./client/shared/components/splitter/SplitBox.css")
+ const Rep = __webpack_require__(44).Rep;
+ const repUtils = __webpack_require__(45);
+ const StringRep = __webpack_require__(48).StringRep;
+
+ // const repCSS = require("./client/shared/components/reps/reps.css");
+ const Grip = __webpack_require__(54).Grip;
+ const sprintf = __webpack_require__(69).sprintf;
+
+ module.exports = {
+ Services,
+ SplitBox,
+ // SplitBoxCSS,
+ Rep,
+ repUtils,
+ StringRep,
+ // repCSS,
+ Grip,
+ sprintf
+ };
+
+
+/***/ },
+/* 41 */
+/***/ function(module, exports) {
+
+ module.exports = require("Services");
+
+/***/ },
+/* 42 */
+/***/ function(module, exports, __webpack_require__) {
+
+ const React = __webpack_require__(6);
+ const ReactDOM = __webpack_require__(7);
+ const Draggable = React.createFactory(
+ __webpack_require__(43));
+ const { DOM: dom, PropTypes } = React;
+
+ /**
+ * This component represents a Splitter. The splitter supports vertical
+ * as well as horizontal mode.
+ */
+ const SplitBox = React.createClass({
+
+ propTypes: {
+ // Custom class name. You can use more names separated by a space.
+ className: PropTypes.string,
+ // Initial size of controlled panel.
+ initialSize: PropTypes.any,
+ // Optional initial width of controlled panel.
+ initialWidth: PropTypes.number,
+ // Optional initial height of controlled panel.
+ initialHeight: PropTypes.number,
+ // Left/top panel
+ startPanel: PropTypes.any,
+ // Left/top panel collapse state.
+ startPanelCollapsed: PropTypes.bool,
+ // Min panel size.
+ minSize: PropTypes.any,
+ // Max panel size.
+ maxSize: PropTypes.any,
+ // Right/bottom panel
+ endPanel: PropTypes.any,
+ // Right/bottom panel collapse state.
+ endPanelCollapsed: PropTypes.bool,
+ // True if the right/bottom panel should be controlled.
+ endPanelControl: PropTypes.bool,
+ // Size of the splitter handle bar.
+ splitterSize: PropTypes.number,
+ // True if the splitter bar is vertical (default is vertical).
+ vert: PropTypes.bool,
+ // Optional style properties passed into the splitbox
+ style: PropTypes.object
+ },
+
+ displayName: "SplitBox",
+
+ getDefaultProps() {
+ return {
+ splitterSize: 5,
+ vert: true,
+ endPanelControl: false,
+ endPanelCollapsed: false,
+ startPanelCollapsed: false
+ };
+ },
+
+ /**
+ * The state stores the current orientation (vertical or horizontal)
+ * and the current size (width/height). All these values can change
+ * during the component's life time.
+ */
+ getInitialState() {
+ return {
+ vert: this.props.vert,
+ width: this.props.initialWidth || this.props.initialSize,
+ height: this.props.initialHeight || this.props.initialSize
+ };
+ },
+
+ componentWillReceiveProps(nextProps) {
+ if (this.props.vert !== nextProps.vert) {
+ this.setState({ vert: nextProps.vert });
+ }
+ },
+
+ // Dragging Events
+
+ /**
+ * Set 'resizing' cursor on entire document during splitter dragging.
+ * This avoids cursor-flickering that happens when the mouse leaves
+ * the splitter bar area (happens frequently).
+ */
+ onStartMove() {
+ const splitBox = ReactDOM.findDOMNode(this);
+ const doc = splitBox.ownerDocument;
+ let defaultCursor = doc.documentElement.style.cursor;
+ doc.documentElement.style.cursor =
+ (this.state.vert ? "ew-resize" : "ns-resize");
+
+ splitBox.classList.add("dragging");
+
+ this.setState({
+ defaultCursor: defaultCursor
+ });
+ },
+
+ onStopMove() {
+ const splitBox = ReactDOM.findDOMNode(this);
+ const doc = splitBox.ownerDocument;
+ doc.documentElement.style.cursor = this.state.defaultCursor;
+
+ splitBox.classList.remove("dragging");
+ },
+
+ screenX() {
+ const borderWidth = (window.outerWidth - window.innerWidth) / 2;
+ return window.screenX + borderWidth;
+ },
+
+ screenY() {
+ const borderHeignt = (window.outerHeight - window.innerHeight);
+ return window.screenY + borderHeignt;
+ },
+
+ /**
+ * Adjust size of the controlled panel. Depending on the current
+ * orientation we either remember the width or height of
+ * the splitter box.
+ */
+ onMove(x, y) {
+ const node = ReactDOM.findDOMNode(this);
+ const doc = node.ownerDocument;
+ const win = doc.defaultView;
+
+ let size;
+ let { endPanelControl } = this.props;
+
+ if (this.state.vert) {
+ // Switch the control flag in case of RTL. Note that RTL
+ // has impact on vertical splitter only.
+ let dir = win.getComputedStyle(doc.documentElement).direction;
+ if (dir == "rtl") {
+ endPanelControl = !endPanelControl;
+ }
+
+ let innerOffset = x - this.screenX();
+ size = endPanelControl ?
+ (node.offsetLeft + node.offsetWidth) - innerOffset :
+ innerOffset - node.offsetLeft;
+
+ this.setState({
+ width: size
+ });
+ } else {
+ let innerOffset = y - this.screenY();
+ size = endPanelControl ?
+ (node.offsetTop + node.offsetHeight) - innerOffset :
+ innerOffset - node.offsetTop;
+
+ this.setState({
+ height: size
+ });
+ }
+ },
+
+ // Rendering
+ preparePanelStyles() {
+ const vert = this.state.vert;
+ const {
+ minSize, maxSize, startPanelCollapsed, endPanelControl,
+ endPanelCollapsed } = this.props;
+ let leftPanelStyle, rightPanelStyle;
+
+ // Set proper size for panels depending on the current state.
+ if (vert) {
+ let startWidth = endPanelControl ? null : this.state.width,
+ endWidth = endPanelControl ? this.state.width : null;
+
+ leftPanelStyle = {
+ maxWidth: endPanelControl ? null : maxSize,
+ minWidth: endPanelControl ? null : minSize,
+ width: startPanelCollapsed ? 0 : startWidth
+ };
+ rightPanelStyle = {
+ maxWidth: endPanelControl ? maxSize : null,
+ minWidth: endPanelControl ? minSize : null,
+ width: endPanelCollapsed ? 0 : endWidth
+ };
+ } else {
+ leftPanelStyle = {
+ maxHeight: endPanelControl ? null : maxSize,
+ minHeight: endPanelControl ? null : minSize,
+ height: endPanelControl ? null : this.state.height
+ };
+ rightPanelStyle = {
+ maxHeight: endPanelControl ? maxSize : null,
+ minHeight: endPanelControl ? minSize : null,
+ height: endPanelControl ? this.state.height : null
+ };
+ }
+
+ return { leftPanelStyle, rightPanelStyle };
+ },
+
+ render() {
+ const vert = this.state.vert;
+ const { startPanel, endPanel, endPanelControl, splitterSize } = this.props;
+
+ let style = Object.assign({}, this.props.style);
+
+ // Calculate class names list.
+ let classNames = ["split-box"];
+ classNames.push(vert ? "vert" : "horz");
+ if (this.props.className) {
+ classNames = classNames.concat(this.props.className.split(" "));
+ }
+
+ const { leftPanelStyle, rightPanelStyle } = this.preparePanelStyles();
+
+ // Calculate splitter size
+ let splitterStyle = {
+ flex: `0 0 ${splitterSize}px`
+ };
+
+ return (
+ dom.div({
+ className: classNames.join(" "),
+ style: style },
+ startPanel ?
+ dom.div({
+ className: endPanelControl ? "uncontrolled" : "controlled",
+ style: leftPanelStyle },
+ startPanel
+ ) : null,
+ Draggable({
+ className: "splitter",
+ style: splitterStyle,
+ onStart: this.onStartMove,
+ onStop: this.onStopMove,
+ onMove: this.onMove
+ }),
+ endPanel ?
+ dom.div({
+ className: endPanelControl ? "controlled" : "uncontrolled",
+ style: rightPanelStyle },
+ endPanel
+ ) : null
+ )
+ );
+ }
+ });
+
+ module.exports = SplitBox;
+
+
+/***/ },
+/* 43 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ const React = __webpack_require__(6);
+ const ReactDOM = __webpack_require__(7);
+ const { DOM: dom, PropTypes } = React;
+
+ const Draggable = React.createClass({
+ displayName: "Draggable",
+
+ propTypes: {
+ onMove: PropTypes.func.isRequired,
+ onStart: PropTypes.func,
+ onStop: PropTypes.func,
+ style: PropTypes.object,
+ className: PropTypes.string
+ },
+
+ startDragging(ev) {
+ ev.preventDefault();
+ const doc = ReactDOM.findDOMNode(this).ownerDocument;
+ doc.addEventListener("mousemove", this.onMove);
+ doc.addEventListener("mouseup", this.onUp);
+ this.props.onStart && this.props.onStart();
+ },
+
+ onMove(ev) {
+ ev.preventDefault();
+ // Use screen coordinates so, moving mouse over iframes
+ // doesn't mangle (relative) coordinates.
+ this.props.onMove(ev.screenX, ev.screenY);
+ },
+
+ onUp(ev) {
+ ev.preventDefault();
+ const doc = ReactDOM.findDOMNode(this).ownerDocument;
+ doc.removeEventListener("mousemove", this.onMove);
+ doc.removeEventListener("mouseup", this.onUp);
+ this.props.onStop && this.props.onStop();
+ },
+
+ render() {
+ return dom.div({
+ style: this.props.style,
+ className: this.props.className,
+ onMouseDown: this.startDragging
+ });
+ }
+ });
+
+ module.exports = Draggable;
+
+
+/***/ },
+/* 44 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+
+ const { isGrip } = __webpack_require__(45);
+
+ // Load all existing rep templates
+ const { Undefined } = __webpack_require__(46);
+ const { Null } = __webpack_require__(47);
+ const { StringRep } = __webpack_require__(48);
+ const { Number } = __webpack_require__(49);
+ const { ArrayRep } = __webpack_require__(50);
+ const { Obj } = __webpack_require__(52);
+ const { SymbolRep } = __webpack_require__(55);
+
+ // DOM types (grips)
+ const { Attribute } = __webpack_require__(56);
+ const { DateTime } = __webpack_require__(57);
+ const { Document } = __webpack_require__(58);
+ const { Event } = __webpack_require__(59);
+ const { Func } = __webpack_require__(60);
+ const { RegExp } = __webpack_require__(61);
+ const { StyleSheet } = __webpack_require__(62);
+ const { TextNode } = __webpack_require__(63);
+ const { Window } = __webpack_require__(64);
+ const { ObjectWithText } = __webpack_require__(65);
+ const { ObjectWithURL } = __webpack_require__(66);
+ const { GripArray } = __webpack_require__(67);
+ const { GripMap } = __webpack_require__(68);
+ const { Grip } = __webpack_require__(54);
+
+ // List of all registered template.
+ // XXX there should be a way for extensions to register a new
+ // or modify an existing rep.
+ let reps = [
+ RegExp,
+ StyleSheet,
+ Event,
+ DateTime,
+ TextNode,
+ Attribute,
+ Func,
+ ArrayRep,
+ Document,
+ Window,
+ ObjectWithText,
+ ObjectWithURL,
+ GripArray,
+ GripMap,
+ Grip,
+ Undefined,
+ Null,
+ StringRep,
+ Number,
+ SymbolRep,
+ ];
+
+ /**
+ * Generic rep that is using for rendering native JS types or an object.
+ * The right template used for rendering is picked automatically according
+ * to the current value type. The value must be passed is as 'object'
+ * property.
+ */
+ const Rep = React.createClass({
+ displayName: "Rep",
+
+ propTypes: {
+ object: React.PropTypes.any,
+ defaultRep: React.PropTypes.object,
+ mode: React.PropTypes.string
+ },
+
+ render: function () {
+ let rep = getRep(this.props.object, this.props.defaultRep);
+ return rep(this.props);
+ },
+ });
+
+ // Helpers
+
+ /**
+ * Return a rep object that is responsible for rendering given
+ * object.
+ *
+ * @param object {Object} Object to be rendered in the UI. This
+ * can be generic JS object as well as a grip (handle to a remote
+ * debuggee object).
+ *
+ * @param defaultObject {React.Component} The default template
+ * that should be used to render given object if none is found.
+ */
+ function getRep(object, defaultRep = Obj) {
+ let type = typeof object;
+ if (type == "object" && object instanceof String) {
+ type = "string";
+ } else if (type == "object" && object.type === "symbol") {
+ type = "symbol";
+ }
+
+ if (isGrip(object)) {
+ type = object.class;
+ }
+
+ for (let i = 0; i < reps.length; i++) {
+ let rep = reps[i];
+ try {
+ // supportsObject could return weight (not only true/false
+ // but a number), which would allow to priorities templates and
+ // support better extensibility.
+ if (rep.supportsObject(object, type)) {
+ return React.createFactory(rep.rep);
+ }
+ } catch (err) {
+ console.error(err);
+ }
+ }
+
+ return React.createFactory(defaultRep.rep);
+ }
+
+ // Exports from this module
+ exports.Rep = Rep;
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* globals URLSearchParams */
+ /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+
+ /**
+ * Create React factories for given arguments.
+ * Example:
+ * const { Rep } = createFactories(require("./rep"));
+ */
+ function createFactories(args) {
+ let result = {};
+ for (let p in args) {
+ result[p] = React.createFactory(args[p]);
+ }
+ return result;
+ }
+
+ /**
+ * Returns true if the given object is a grip (see RDP protocol)
+ */
+ function isGrip(object) {
+ return object && object.actor;
+ }
+
+ function escapeNewLines(value) {
+ return value.replace(/\r/gm, "\\r").replace(/\n/gm, "\\n");
+ }
+
+ function cropMultipleLines(text, limit) {
+ return escapeNewLines(cropString(text, limit));
+ }
+
+ function cropString(text, limit, alternativeText) {
+ if (!alternativeText) {
+ alternativeText = "\u2026";
+ }
+
+ // Make sure it's a string.
+ text = text + "";
+
+ // Replace all non-printable characters, except of
+ // (horizontal) tab (HT: \x09) and newline (LF: \x0A, CR: \x0D),
+ // with unicode replacement character (u+fffd).
+ // eslint-disable-next-line no-control-regex
+ let re = new RegExp("[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\x9F]", "g");
+ text = text.replace(re, "\ufffd");
+
+ // Crop the string only if a limit is actually specified.
+ if (!limit || limit <= 0) {
+ return text;
+ }
+
+ // Set the limit at least to the length of the alternative text
+ // plus one character of the original text.
+ if (limit <= alternativeText.length) {
+ limit = alternativeText.length + 1;
+ }
+
+ let halfLimit = (limit - alternativeText.length) / 2;
+
+ if (text.length > limit) {
+ return text.substr(0, Math.ceil(halfLimit)) + alternativeText +
+ text.substr(text.length - Math.floor(halfLimit));
+ }
+
+ return text;
+ }
+
+ function parseURLParams(url) {
+ url = new URL(url);
+ return parseURLEncodedText(url.searchParams);
+ }
+
+ function parseURLEncodedText(text) {
+ let params = [];
+
+ // In case the text is empty just return the empty parameters
+ if (text == "") {
+ return params;
+ }
+
+ let searchParams = new URLSearchParams(text);
+ let entries = [...searchParams.entries()];
+ return entries.map(entry => {
+ return {
+ name: entry[0],
+ value: entry[1]
+ };
+ });
+ }
+
+ function getFileName(url) {
+ let split = splitURLBase(url);
+ return split.name;
+ }
+
+ function splitURLBase(url) {
+ if (!isDataURL(url)) {
+ return splitURLTrue(url);
+ }
+ return {};
+ }
+
+ function getURLDisplayString(url) {
+ return cropString(url);
+ }
+
+ function isDataURL(url) {
+ return (url && url.substr(0, 5) == "data:");
+ }
+
+ function splitURLTrue(url) {
+ const reSplitFile = /(.*?):\/{2,3}([^\/]*)(.*?)([^\/]*?)($|\?.*)/;
+ let m = reSplitFile.exec(url);
+
+ if (!m) {
+ return {
+ name: url,
+ path: url
+ };
+ } else if (m[4] == "" && m[5] == "") {
+ return {
+ protocol: m[1],
+ domain: m[2],
+ path: m[3],
+ name: m[3] != "/" ? m[3] : m[2]
+ };
+ }
+
+ return {
+ protocol: m[1],
+ domain: m[2],
+ path: m[2] + m[3],
+ name: m[4] + m[5]
+ };
+ }
+
+ // Exports from this module
+ exports.createFactories = createFactories;
+ exports.isGrip = isGrip;
+ exports.cropString = cropString;
+ exports.cropMultipleLines = cropMultipleLines;
+ exports.parseURLParams = parseURLParams;
+ exports.parseURLEncodedText = parseURLEncodedText;
+ exports.getFileName = getFileName;
+ exports.getURLDisplayString = getURLDisplayString;
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 46 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders undefined value
+ */
+ const Undefined = React.createClass({
+ displayName: "UndefinedRep",
+
+ render: function () {
+ return (
+ span({className: "objectBox objectBox-undefined"},
+ "undefined"
+ )
+ );
+ },
+ });
+
+ function supportsObject(object, type) {
+ if (object && object.type && object.type == "undefined") {
+ return true;
+ }
+
+ return (type == "undefined");
+ }
+
+ // Exports from this module
+
+ exports.Undefined = {
+ rep: Undefined,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 47 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders null value
+ */
+ const Null = React.createClass({
+ displayName: "NullRep",
+
+ render: function () {
+ return (
+ span({className: "objectBox objectBox-null"},
+ "null"
+ )
+ );
+ },
+ });
+
+ function supportsObject(object, type) {
+ if (object && object.type && object.type == "null") {
+ return true;
+ }
+
+ return (object == null);
+ }
+
+ // Exports from this module
+
+ exports.Null = {
+ rep: Null,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 48 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+ const { cropMultipleLines } = __webpack_require__(45);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders a string. String value is enclosed within quotes.
+ */
+ const StringRep = React.createClass({
+ displayName: "StringRep",
+
+ propTypes: {
+ useQuotes: React.PropTypes.bool,
+ },
+
+ getDefaultProps: function () {
+ return {
+ useQuotes: true,
+ };
+ },
+
+ render: function () {
+ let text = this.props.object;
+ let member = this.props.member;
+ if (member && member.open) {
+ return (
+ span({className: "objectBox objectBox-string"},
+ "\"" + text + "\""
+ )
+ );
+ }
+
+ let croppedString = this.props.cropLimit ?
+ cropMultipleLines(text, this.props.cropLimit) : cropMultipleLines(text);
+
+ let formattedString = this.props.useQuotes ?
+ "\"" + croppedString + "\"" : croppedString;
+
+ return (
+ span({className: "objectBox objectBox-string"}, formattedString
+ )
+ );
+ },
+ });
+
+ function supportsObject(object, type) {
+ return (type == "string");
+ }
+
+ // Exports from this module
+
+ exports.StringRep = {
+ rep: StringRep,
+ supportsObject: supportsObject,
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 49 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders a number
+ */
+ const Number = React.createClass({
+ displayName: "Number",
+
+ stringify: function (object) {
+ let isNegativeZero = Object.is(object, -0) ||
+ (object.type && object.type == "-0");
+
+ return (isNegativeZero ? "-0" : String(object));
+ },
+
+ render: function () {
+ let value = this.props.object;
+
+ return (
+ span({className: "objectBox objectBox-number"},
+ this.stringify(value)
+ )
+ );
+ }
+ });
+
+ function supportsObject(object, type) {
+ return type == "boolean" || type == "number" ||
+ (type == "object" && object.type == "-0");
+ }
+
+ // Exports from this module
+
+ exports.Number = {
+ rep: Number,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 50 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+ const { createFactories } = __webpack_require__(45);
+ const { Caption } = createFactories(__webpack_require__(51));
+
+ // Shortcuts
+ const DOM = React.DOM;
+
+ /**
+ * Renders an array. The array is enclosed by left and right bracket
+ * and the max number of rendered items depends on the current mode.
+ */
+ let ArrayRep = React.createClass({
+ displayName: "ArrayRep",
+
+ getTitle: function (object, context) {
+ return "[" + object.length + "]";
+ },
+
+ arrayIterator: function (array, max) {
+ let items = [];
+ let delim;
+
+ for (let i = 0; i < array.length && i < max; i++) {
+ try {
+ let value = array[i];
+
+ delim = (i == array.length - 1 ? "" : ", ");
+
+ items.push(ItemRep({
+ key: i,
+ object: value,
+ // Hardcode tiny mode to avoid recursive handling.
+ mode: "tiny",
+ delim: delim
+ }));
+ } catch (exc) {
+ items.push(ItemRep({
+ key: i,
+ object: exc,
+ mode: "tiny",
+ delim: delim
+ }));
+ }
+ }
+
+ if (array.length > max) {
+ let objectLink = this.props.objectLink || DOM.span;
+ items.push(Caption({
+ key: "more",
+ object: objectLink({
+ object: this.props.object
+ }, (array.length - max) + " more…")
+ }));
+ }
+
+ return items;
+ },
+
+ /**
+ * Returns true if the passed object is an array with additional (custom)
+ * properties, otherwise returns false. Custom properties should be
+ * displayed in extra expandable section.
+ *
+ * Example array with a custom property.
+ * let arr = [0, 1];
+ * arr.myProp = "Hello";
+ *
+ * @param {Array} array The array object.
+ */
+ hasSpecialProperties: function (array) {
+ function isInteger(x) {
+ let y = parseInt(x, 10);
+ if (isNaN(y)) {
+ return false;
+ }
+ return x === y.toString();
+ }
+
+ let props = Object.getOwnPropertyNames(array);
+ for (let i = 0; i < props.length; i++) {
+ let p = props[i];
+
+ // Valid indexes are skipped
+ if (isInteger(p)) {
+ continue;
+ }
+
+ // Ignore standard 'length' property, anything else is custom.
+ if (p != "length") {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ // Event Handlers
+
+ onToggleProperties: function (event) {
+ },
+
+ onClickBracket: function (event) {
+ },
+
+ render: function () {
+ let mode = this.props.mode || "short";
+ let object = this.props.object;
+ let items;
+ let brackets;
+ let needSpace = function (space) {
+ return space ? { left: "[ ", right: " ]"} : { left: "[", right: "]"};
+ };
+
+ if (mode == "tiny") {
+ let isEmpty = object.length === 0;
+ items = DOM.span({className: "length"}, isEmpty ? "" : object.length);
+ brackets = needSpace(false);
+ } else {
+ let max = (mode == "short") ? 3 : 300;
+ items = this.arrayIterator(object, max);
+ brackets = needSpace(items.length > 0);
+ }
+
+ let objectLink = this.props.objectLink || DOM.span;
+
+ return (
+ DOM.span({
+ className: "objectBox objectBox-array"},
+ objectLink({
+ className: "arrayLeftBracket",
+ object: object
+ }, brackets.left),
+ items,
+ objectLink({
+ className: "arrayRightBracket",
+ object: object
+ }, brackets.right),
+ DOM.span({
+ className: "arrayProperties",
+ role: "group"}
+ )
+ )
+ );
+ },
+ });
+
+ /**
+ * Renders array item. Individual values are separated by a comma.
+ */
+ let ItemRep = React.createFactory(React.createClass({
+ displayName: "ItemRep",
+
+ render: function () {
+ const { Rep } = createFactories(__webpack_require__(44));
+
+ let object = this.props.object;
+ let delim = this.props.delim;
+ let mode = this.props.mode;
+ return (
+ DOM.span({},
+ Rep({object: object, mode: mode}),
+ delim
+ )
+ );
+ }
+ }));
+
+ function supportsObject(object, type) {
+ return Array.isArray(object) ||
+ Object.prototype.toString.call(object) === "[object Arguments]";
+ }
+
+ // Exports from this module
+ exports.ArrayRep = {
+ rep: ArrayRep,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 51 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+ const DOM = React.DOM;
+
+ /**
+ * Renders a caption. This template is used by other components
+ * that needs to distinguish between a simple text/value and a label.
+ */
+ const Caption = React.createClass({
+ displayName: "Caption",
+
+ render: function () {
+ return (
+ DOM.span({"className": "caption"}, this.props.object)
+ );
+ },
+ });
+
+ // Exports from this module
+ exports.Caption = Caption;
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 52 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+ const { createFactories } = __webpack_require__(45);
+ const { Caption } = createFactories(__webpack_require__(51));
+ const { PropRep } = createFactories(__webpack_require__(53));
+ // Shortcuts
+ const { span } = React.DOM;
+ /**
+ * Renders an object. An object is represented by a list of its
+ * properties enclosed in curly brackets.
+ */
+ const Obj = React.createClass({
+ displayName: "Obj",
+
+ propTypes: {
+ object: React.PropTypes.object,
+ mode: React.PropTypes.string,
+ },
+
+ getTitle: function (object) {
+ let className = object && object.class ? object.class : "Object";
+ if (this.props.objectLink) {
+ return this.props.objectLink({
+ object: object
+ }, className);
+ }
+ return className;
+ },
+
+ safePropIterator: function (object, max) {
+ max = (typeof max === "undefined") ? 3 : max;
+ try {
+ return this.propIterator(object, max);
+ } catch (err) {
+ console.error(err);
+ }
+ return [];
+ },
+
+ propIterator: function (object, max) {
+ let isInterestingProp = (t, value) => {
+ // Do not pick objects, it could cause recursion.
+ return (t == "boolean" || t == "number" || (t == "string" && value));
+ };
+
+ // Work around https://bugzilla.mozilla.org/show_bug.cgi?id=945377
+ if (Object.prototype.toString.call(object) === "[object Generator]") {
+ object = Object.getPrototypeOf(object);
+ }
+
+ // Object members with non-empty values are preferred since it gives the
+ // user a better overview of the object.
+ let props = this.getProps(object, max, isInterestingProp);
+
+ if (props.length <= max) {
+ // There are not enough props yet (or at least, not enough props to
+ // be able to know whether we should print "more…" or not).
+ // Let's display also empty members and functions.
+ props = props.concat(this.getProps(object, max, (t, value) => {
+ return !isInterestingProp(t, value);
+ }));
+ }
+
+ if (props.length > max) {
+ props.pop();
+ let objectLink = this.props.objectLink || span;
+
+ props.push(Caption({
+ key: "more",
+ object: objectLink({
+ object: object
+ }, (Object.keys(object).length - max) + " more…")
+ }));
+ } else if (props.length > 0) {
+ // Remove the last comma.
+ props[props.length - 1] = React.cloneElement(
+ props[props.length - 1], { delim: "" });
+ }
+
+ return props;
+ },
+
+ getProps: function (object, max, filter) {
+ let props = [];
+
+ max = max || 3;
+ if (!object) {
+ return props;
+ }
+
+ // Hardcode tiny mode to avoid recursive handling.
+ let mode = "tiny";
+
+ try {
+ for (let name in object) {
+ if (props.length > max) {
+ return props;
+ }
+
+ let value;
+ try {
+ value = object[name];
+ } catch (exc) {
+ continue;
+ }
+
+ let t = typeof value;
+ if (filter(t, value)) {
+ props.push(PropRep({
+ key: name,
+ mode: mode,
+ name: name,
+ object: value,
+ equal: ": ",
+ delim: ", ",
+ }));
+ }
+ }
+ } catch (err) {
+ console.error(err);
+ }
+
+ return props;
+ },
+
+ render: function () {
+ let object = this.props.object;
+ let props = this.safePropIterator(object);
+ let objectLink = this.props.objectLink || span;
+
+ if (this.props.mode == "tiny" || !props.length) {
+ return (
+ span({className: "objectBox objectBox-object"},
+ objectLink({className: "objectTitle"}, this.getTitle(object))
+ )
+ );
+ }
+
+ return (
+ span({className: "objectBox objectBox-object"},
+ this.getTitle(object),
+ objectLink({
+ className: "objectLeftBrace",
+ object: object
+ }, " { "),
+ props,
+ objectLink({
+ className: "objectRightBrace",
+ object: object
+ }, " }")
+ )
+ );
+ },
+ });
+ function supportsObject(object, type) {
+ return true;
+ }
+
+ // Exports from this module
+ exports.Obj = {
+ rep: Obj,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 53 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ const React = __webpack_require__(6);
+ const { createFactories } = __webpack_require__(45);
+ const { span } = React.DOM;
+
+ /**
+ * Property for Obj (local JS objects), Grip (remote JS objects)
+ * and GripMap (remote JS maps and weakmaps) reps.
+ * It's used to render object properties.
+ */
+ let PropRep = React.createFactory(React.createClass({
+ displayName: "PropRep",
+
+ propTypes: {
+ // Property name.
+ name: React.PropTypes.oneOfType([
+ React.PropTypes.string,
+ React.PropTypes.object,
+ ]).isRequired,
+ // Equal character rendered between property name and value.
+ equal: React.PropTypes.string,
+ // Delimiter character used to separate individual properties.
+ delim: React.PropTypes.string,
+ mode: React.PropTypes.string,
+ },
+
+ render: function () {
+ const { Grip } = __webpack_require__(54);
+ let { Rep } = createFactories(__webpack_require__(44));
+
+ let key;
+ // The key can be a simple string, for plain objects,
+ // or another object for maps and weakmaps.
+ if (typeof this.props.name === "string") {
+ key = span({"className": "nodeName"}, this.props.name);
+ } else {
+ key = Rep({
+ object: this.props.name,
+ mode: this.props.mode || "tiny",
+ defaultRep: Grip,
+ objectLink: this.props.objectLink,
+ });
+ }
+
+ return (
+ span({},
+ key,
+ span({
+ "className": "objectEqual"
+ }, this.props.equal),
+ Rep(this.props),
+ span({
+ "className": "objectComma"
+ }, this.props.delim)
+ )
+ );
+ }
+ }));
+
+ // Exports from this module
+ exports.PropRep = PropRep;
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 54 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+ // Dependencies
+ const { createFactories, isGrip } = __webpack_require__(45);
+ const { Caption } = createFactories(__webpack_require__(51));
+ const { PropRep } = createFactories(__webpack_require__(53));
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders generic grip. Grip is client representation
+ * of remote JS object and is used as an input object
+ * for this rep component.
+ */
+ const GripRep = React.createClass({
+ displayName: "Grip",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired,
+ mode: React.PropTypes.string,
+ isInterestingProp: React.PropTypes.func
+ },
+
+ getTitle: function (object) {
+ if (this.props.objectLink) {
+ return this.props.objectLink({
+ object: object
+ }, object.class);
+ }
+ return object.class || "Object";
+ },
+
+ safePropIterator: function (object, max) {
+ max = (typeof max === "undefined") ? 3 : max;
+ try {
+ return this.propIterator(object, max);
+ } catch (err) {
+ console.error(err);
+ }
+ return [];
+ },
+
+ propIterator: function (object, max) {
+ // Property filter. Show only interesting properties to the user.
+ let isInterestingProp = this.props.isInterestingProp || ((type, value) => {
+ return (
+ type == "boolean" ||
+ type == "number" ||
+ (type == "string" && value.length != 0)
+ );
+ });
+
+ let ownProperties = object.preview ? object.preview.ownProperties : [];
+ let indexes = this.getPropIndexes(ownProperties, max, isInterestingProp);
+ if (indexes.length < max && indexes.length < object.ownPropertyLength) {
+ // There are not enough props yet. Then add uninteresting props to display them.
+ indexes = indexes.concat(
+ this.getPropIndexes(ownProperties, max - indexes.length, (t, value, name) => {
+ return !isInterestingProp(t, value, name);
+ })
+ );
+ }
+
+ let props = this.getProps(ownProperties, indexes);
+ if (props.length < object.ownPropertyLength) {
+ // There are some undisplayed props. Then display "more...".
+ let objectLink = this.props.objectLink || span;
+
+ props.push(Caption({
+ key: "more",
+ object: objectLink({
+ object: object
+ }, ((object ? object.ownPropertyLength : 0) - max) + " more…")
+ }));
+ } else if (props.length > 0) {
+ // Remove the last comma.
+ // NOTE: do not change comp._store.props directly to update a property,
+ // it should be re-rendered or cloned with changed props
+ let last = props.length - 1;
+ props[last] = React.cloneElement(props[last], {
+ delim: ""
+ });
+ }
+
+ return props;
+ },
+
+ /**
+ * Get props ordered by index.
+ *
+ * @param {Object} ownProperties Props object.
+ * @param {Array} indexes Indexes of props.
+ * @return {Array} Props.
+ */
+ getProps: function (ownProperties, indexes) {
+ let props = [];
+
+ if (!ownProperties || ownProperties.length == 0) {
+ return props;
+ }
+
+ // Make indexes ordered by ascending.
+ indexes.sort(function (a, b) {
+ return a - b;
+ });
+
+ indexes.forEach((i) => {
+ let name = Object.keys(ownProperties)[i];
+ let prop = ownProperties[name];
+ let value = prop.value !== undefined ? prop.value : prop;
+ props.push(PropRep(Object.assign({}, this.props, {
+ key: name,
+ mode: "tiny",
+ name: name,
+ object: value,
+ equal: ": ",
+ delim: ", ",
+ defaultRep: Grip
+ })));
+ });
+
+ return props;
+ },
+
+ /**
+ * Get the indexes of props in the object.
+ *
+ * @param {Object} ownProperties Props object.
+ * @param {Number} max The maximum length of indexes array.
+ * @param {Function} filter Filter the props you want.
+ * @return {Array} Indexes of interesting props in the object.
+ */
+ getPropIndexes: function (ownProperties, max, filter) {
+ let indexes = [];
+
+ try {
+ let i = 0;
+ for (let name in ownProperties) {
+ if (indexes.length >= max) {
+ return indexes;
+ }
+
+ let prop = ownProperties[name];
+ let value = prop.value !== undefined ? prop.value : prop;
+
+ // Type is specified in grip's "class" field and for primitive
+ // values use typeof.
+ let type = (value.class || typeof value);
+ type = type.toLowerCase();
+
+ if (filter(type, value, name)) {
+ indexes.push(i);
+ }
+ i++;
+ }
+ } catch (err) {
+ console.error(err);
+ }
+
+ return indexes;
+ },
+
+ render: function () {
+ let object = this.props.object;
+ let props = this.safePropIterator(object,
+ (this.props.mode == "long") ? 100 : 3);
+
+ let objectLink = this.props.objectLink || span;
+ if (this.props.mode == "tiny" || !props.length) {
+ return (
+ span({className: "objectBox objectBox-object"},
+ this.getTitle(object),
+ objectLink({
+ className: "objectLeftBrace",
+ object: object
+ }, "")
+ )
+ );
+ }
+
+ return (
+ span({className: "objectBox objectBox-object"},
+ this.getTitle(object),
+ objectLink({
+ className: "objectLeftBrace",
+ object: object
+ }, " { "),
+ props,
+ objectLink({
+ className: "objectRightBrace",
+ object: object
+ }, " }")
+ )
+ );
+ },
+ });
+
+ // Registration
+ function supportsObject(object, type) {
+ if (!isGrip(object)) {
+ return false;
+ }
+ return (object.preview && object.preview.ownProperties);
+ }
+
+ let Grip = {
+ rep: GripRep,
+ supportsObject: supportsObject
+ };
+
+ // Exports from this module
+ exports.Grip = Grip;
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 55 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders a symbol.
+ */
+ const SymbolRep = React.createClass({
+ displayName: "SymbolRep",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired
+ },
+
+ render: function () {
+ let {object} = this.props;
+ let {name} = object;
+
+ return (
+ span({className: "objectBox objectBox-symbol"},
+ `Symbol(${name || ""})`
+ )
+ );
+ },
+ });
+
+ function supportsObject(object, type) {
+ return (type == "symbol");
+ }
+
+ // Exports from this module
+ exports.SymbolRep = {
+ rep: SymbolRep,
+ supportsObject: supportsObject,
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 56 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { createFactories, isGrip } = __webpack_require__(45);
+ const { StringRep } = __webpack_require__(48);
+
+ // Shortcuts
+ const { span } = React.DOM;
+ const { rep: StringRepFactory } = createFactories(StringRep);
+
+ /**
+ * Renders DOM attribute
+ */
+ let Attribute = React.createClass({
+ displayName: "Attr",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired
+ },
+
+ getTitle: function (grip) {
+ return grip.preview.nodeName;
+ },
+
+ render: function () {
+ let grip = this.props.object;
+ let value = grip.preview.value;
+ let objectLink = this.props.objectLink || span;
+
+ return (
+ objectLink({className: "objectLink-Attr"},
+ span({},
+ span({className: "attrTitle"},
+ this.getTitle(grip)
+ ),
+ span({className: "attrEqual"},
+ "="
+ ),
+ StringRepFactory({object: value})
+ )
+ )
+ );
+ },
+ });
+
+ // Registration
+
+ function supportsObject(grip, type) {
+ if (!isGrip(grip)) {
+ return false;
+ }
+
+ return (type == "Attr" && grip.preview);
+ }
+
+ exports.Attribute = {
+ rep: Attribute,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 57 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { isGrip } = __webpack_require__(45);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Used to render JS built-in Date() object.
+ */
+ let DateTime = React.createClass({
+ displayName: "Date",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired
+ },
+
+ getTitle: function (grip) {
+ if (this.props.objectLink) {
+ return this.props.objectLink({
+ object: grip
+ }, grip.class + " ");
+ }
+ return "";
+ },
+
+ render: function () {
+ let grip = this.props.object;
+ return (
+ span({className: "objectBox"},
+ this.getTitle(grip),
+ span({className: "Date"},
+ new Date(grip.preview.timestamp).toISOString()
+ )
+ )
+ );
+ },
+ });
+
+ // Registration
+
+ function supportsObject(grip, type) {
+ if (!isGrip(grip)) {
+ return false;
+ }
+
+ return (type == "Date" && grip.preview);
+ }
+
+ // Exports from this module
+ exports.DateTime = {
+ rep: DateTime,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 58 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { isGrip, getURLDisplayString } = __webpack_require__(45);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders DOM document object.
+ */
+ let Document = React.createClass({
+ displayName: "Document",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired
+ },
+
+ getLocation: function (grip) {
+ let location = grip.preview.location;
+ return location ? getURLDisplayString(location) : "";
+ },
+
+ getTitle: function (grip) {
+ if (this.props.objectLink) {
+ return span({className: "objectBox"},
+ this.props.objectLink({
+ object: grip
+ }, grip.class + " ")
+ );
+ }
+ return "";
+ },
+
+ getTooltip: function (doc) {
+ return doc.location.href;
+ },
+
+ render: function () {
+ let grip = this.props.object;
+
+ return (
+ span({className: "objectBox objectBox-object"},
+ this.getTitle(grip),
+ span({className: "objectPropValue"},
+ this.getLocation(grip)
+ )
+ )
+ );
+ },
+ });
+
+ // Registration
+
+ function supportsObject(object, type) {
+ if (!isGrip(object)) {
+ return false;
+ }
+
+ return (object.preview && type == "HTMLDocument");
+ }
+
+ // Exports from this module
+ exports.Document = {
+ rep: Document,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 59 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { createFactories, isGrip } = __webpack_require__(45);
+ const { rep } = createFactories(__webpack_require__(54).Grip);
+
+ /**
+ * Renders DOM event objects.
+ */
+ let Event = React.createClass({
+ displayName: "event",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired
+ },
+
+ render: function () {
+ // Use `Object.assign` to keep `this.props` without changes because:
+ // 1. JSON.stringify/JSON.parse is slow.
+ // 2. Immutable.js is planned for the future.
+ let props = Object.assign({}, this.props);
+ props.object = Object.assign({}, this.props.object);
+ props.object.preview = Object.assign({}, this.props.object.preview);
+ props.object.preview.ownProperties = props.object.preview.properties;
+ delete props.object.preview.properties;
+ props.object.ownPropertyLength =
+ Object.keys(props.object.preview.ownProperties).length;
+
+ switch (props.object.class) {
+ case "MouseEvent":
+ props.isInterestingProp = (type, value, name) => {
+ return (name == "clientX" ||
+ name == "clientY" ||
+ name == "layerX" ||
+ name == "layerY");
+ };
+ break;
+ case "KeyboardEvent":
+ props.isInterestingProp = (type, value, name) => {
+ return (name == "key" ||
+ name == "charCode" ||
+ name == "keyCode");
+ };
+ break;
+ case "MessageEvent":
+ props.isInterestingProp = (type, value, name) => {
+ return (name == "isTrusted" ||
+ name == "data");
+ };
+ break;
+ }
+ return rep(props);
+ }
+ });
+
+ // Registration
+
+ function supportsObject(grip, type) {
+ if (!isGrip(grip)) {
+ return false;
+ }
+
+ return (grip.preview && grip.preview.kind == "DOMEvent");
+ }
+
+ // Exports from this module
+ exports.Event = {
+ rep: Event,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 60 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { isGrip, cropString } = __webpack_require__(45);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * This component represents a template for Function objects.
+ */
+ let Func = React.createClass({
+ displayName: "Func",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired
+ },
+
+ getTitle: function (grip) {
+ if (this.props.objectLink) {
+ return this.props.objectLink({
+ object: grip
+ }, "function ");
+ }
+ return "";
+ },
+
+ summarizeFunction: function (grip) {
+ let name = grip.userDisplayName || grip.displayName || grip.name || "function";
+ return cropString(name + "()", 100);
+ },
+
+ render: function () {
+ let grip = this.props.object;
+
+ return (
+ span({className: "objectBox objectBox-function"},
+ this.getTitle(grip),
+ this.summarizeFunction(grip)
+ )
+ );
+ },
+ });
+
+ // Registration
+
+ function supportsObject(grip, type) {
+ if (!isGrip(grip)) {
+ return (type == "function");
+ }
+
+ return (type == "Function");
+ }
+
+ // Exports from this module
+
+ exports.Func = {
+ rep: Func,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 61 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { isGrip } = __webpack_require__(45);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders a grip object with regular expression.
+ */
+ let RegExp = React.createClass({
+ displayName: "regexp",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired,
+ },
+
+ getSource: function (grip) {
+ return grip.displayString;
+ },
+
+ render: function () {
+ let grip = this.props.object;
+ let objectLink = this.props.objectLink || span;
+
+ return (
+ span({className: "objectBox objectBox-regexp"},
+ objectLink({
+ object: grip,
+ className: "regexpSource"
+ }, this.getSource(grip))
+ )
+ );
+ },
+ });
+
+ // Registration
+
+ function supportsObject(object, type) {
+ if (!isGrip(object)) {
+ return false;
+ }
+
+ return (type == "RegExp");
+ }
+
+ // Exports from this module
+ exports.RegExp = {
+ rep: RegExp,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 62 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { isGrip, getURLDisplayString } = __webpack_require__(45);
+
+ // Shortcuts
+ const DOM = React.DOM;
+
+ /**
+ * Renders a grip representing CSSStyleSheet
+ */
+ let StyleSheet = React.createClass({
+ displayName: "object",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired,
+ },
+
+ getTitle: function (grip) {
+ let title = "StyleSheet ";
+ if (this.props.objectLink) {
+ return DOM.span({className: "objectBox"},
+ this.props.objectLink({
+ object: grip
+ }, title)
+ );
+ }
+ return title;
+ },
+
+ getLocation: function (grip) {
+ // Embedded stylesheets don't have URL and so, no preview.
+ let url = grip.preview ? grip.preview.url : "";
+ return url ? getURLDisplayString(url) : "";
+ },
+
+ render: function () {
+ let grip = this.props.object;
+
+ return (
+ DOM.span({className: "objectBox objectBox-object"},
+ this.getTitle(grip),
+ DOM.span({className: "objectPropValue"},
+ this.getLocation(grip)
+ )
+ )
+ );
+ },
+ });
+
+ // Registration
+
+ function supportsObject(object, type) {
+ if (!isGrip(object)) {
+ return false;
+ }
+
+ return (type == "CSSStyleSheet");
+ }
+
+ // Exports from this module
+
+ exports.StyleSheet = {
+ rep: StyleSheet,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 63 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { isGrip, cropMultipleLines } = __webpack_require__(45);
+
+ // Shortcuts
+ const DOM = React.DOM;
+
+ /**
+ * Renders DOM #text node.
+ */
+ let TextNode = React.createClass({
+ displayName: "TextNode",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired,
+ mode: React.PropTypes.string,
+ },
+
+ getTextContent: function (grip) {
+ return cropMultipleLines(grip.preview.textContent);
+ },
+
+ getTitle: function (grip) {
+ if (this.props.objectLink) {
+ return this.props.objectLink({
+ object: grip
+ }, "#text");
+ }
+ return "";
+ },
+
+ render: function () {
+ let grip = this.props.object;
+ let mode = this.props.mode || "short";
+
+ if (mode == "short" || mode == "tiny") {
+ return (
+ DOM.span({className: "objectBox objectBox-textNode"},
+ this.getTitle(grip),
+ "\"" + this.getTextContent(grip) + "\""
+ )
+ );
+ }
+
+ let objectLink = this.props.objectLink || DOM.span;
+ return (
+ DOM.span({className: "objectBox objectBox-textNode"},
+ this.getTitle(grip),
+ objectLink({
+ object: grip
+ }, "<"),
+ DOM.span({className: "nodeTag"}, "TextNode"),
+ " textContent=\"",
+ DOM.span({className: "nodeValue"},
+ this.getTextContent(grip)
+ ),
+ "\"",
+ objectLink({
+ object: grip
+ }, ">;")
+ )
+ );
+ },
+ });
+
+ // Registration
+
+ function supportsObject(grip, type) {
+ if (!isGrip(grip)) {
+ return false;
+ }
+
+ return (grip.preview && grip.class == "Text");
+ }
+
+ // Exports from this module
+ exports.TextNode = {
+ rep: TextNode,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 64 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { isGrip, getURLDisplayString } = __webpack_require__(45);
+
+ // Shortcuts
+ const DOM = React.DOM;
+
+ /**
+ * Renders a grip representing a window.
+ */
+ let Window = React.createClass({
+ displayName: "Window",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired,
+ mode: React.PropTypes.string
+ },
+
+ getTitle: function (grip) {
+ if (this.props.objectLink) {
+ return DOM.span({className: "objectBox"},
+ this.props.objectLink({
+ object: grip
+ }, grip.class + " ")
+ );
+ }
+ return "";
+ },
+
+ getLocation: function (grip) {
+ return getURLDisplayString(grip.preview.url);
+ },
+
+ getDisplayValue: function (grip) {
+ if (this.props.mode === "tiny") {
+ return grip.isGlobal ? "Global" : "Window";
+ } else {
+ return this.getLocation(grip);
+ }
+ },
+
+ render: function () {
+ let grip = this.props.object;
+
+ return (
+ DOM.span({className: "objectBox objectBox-Window"},
+ this.getTitle(grip),
+ DOM.span({className: "objectPropValue"},
+ this.getDisplayValue(grip)
+ )
+ )
+ );
+ },
+ });
+
+ // Registration
+
+ function supportsObject(object, type) {
+ if (!isGrip(object)) {
+ return false;
+ }
+
+ return (object.preview && type == "Window");
+ }
+
+ // Exports from this module
+ exports.Window = {
+ rep: Window,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 65 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { isGrip } = __webpack_require__(45);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders a grip object with textual data.
+ */
+ let ObjectWithText = React.createClass({
+ displayName: "ObjectWithText",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired,
+ },
+
+ getTitle: function (grip) {
+ if (this.props.objectLink) {
+ return span({className: "objectBox"},
+ this.props.objectLink({
+ object: grip
+ }, this.getType(grip) + " ")
+ );
+ }
+ return "";
+ },
+
+ getType: function (grip) {
+ return grip.class;
+ },
+
+ getDescription: function (grip) {
+ return "\"" + grip.preview.text + "\"";
+ },
+
+ render: function () {
+ let grip = this.props.object;
+ return (
+ span({className: "objectBox objectBox-" + this.getType(grip)},
+ this.getTitle(grip),
+ span({className: "objectPropValue"},
+ this.getDescription(grip)
+ )
+ )
+ );
+ },
+ });
+
+ // Registration
+
+ function supportsObject(grip, type) {
+ if (!isGrip(grip)) {
+ return false;
+ }
+
+ return (grip.preview && grip.preview.kind == "ObjectWithText");
+ }
+
+ // Exports from this module
+ exports.ObjectWithText = {
+ rep: ObjectWithText,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 66 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // ReactJS
+ const React = __webpack_require__(6);
+
+ // Reps
+ const { isGrip, getURLDisplayString } = __webpack_require__(45);
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders a grip object with URL data.
+ */
+ let ObjectWithURL = React.createClass({
+ displayName: "ObjectWithURL",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired,
+ },
+
+ getTitle: function (grip) {
+ if (this.props.objectLink) {
+ return span({className: "objectBox"},
+ this.props.objectLink({
+ object: grip
+ }, this.getType(grip) + " ")
+ );
+ }
+ return "";
+ },
+
+ getType: function (grip) {
+ return grip.class;
+ },
+
+ getDescription: function (grip) {
+ return getURLDisplayString(grip.preview.url);
+ },
+
+ render: function () {
+ let grip = this.props.object;
+ return (
+ span({className: "objectBox objectBox-" + this.getType(grip)},
+ this.getTitle(grip),
+ span({className: "objectPropValue"},
+ this.getDescription(grip)
+ )
+ )
+ );
+ },
+ });
+
+ // Registration
+
+ function supportsObject(grip, type) {
+ if (!isGrip(grip)) {
+ return false;
+ }
+
+ return (grip.preview && grip.preview.kind == "ObjectWithURL");
+ }
+
+ // Exports from this module
+ exports.ObjectWithURL = {
+ rep: ObjectWithURL,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 67 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+ const { createFactories, isGrip } = __webpack_require__(45);
+ const { Caption } = createFactories(__webpack_require__(51));
+
+ // Shortcuts
+ const { span } = React.DOM;
+
+ /**
+ * Renders an array. The array is enclosed by left and right bracket
+ * and the max number of rendered items depends on the current mode.
+ */
+ let GripArray = React.createClass({
+ displayName: "GripArray",
+
+ propTypes: {
+ object: React.PropTypes.object.isRequired,
+ mode: React.PropTypes.string,
+ provider: React.PropTypes.object,
+ },
+
+ getLength: function (grip) {
+ return grip.preview ? grip.preview.length : 0;
+ },
+
+ getTitle: function (object, context) {
+ let objectLink = this.props.objectLink || span;
+ if (this.props.mode != "tiny") {
+ return objectLink({
+ object: object
+ }, object.class + " ");
+ }
+ return "";
+ },
+
+ arrayIterator: function (grip, max) {
+ let items = [];
+
+ if (!grip.preview || !grip.preview.length) {
+ return items;
+ }
+
+ let array = grip.preview.items;
+ if (!array) {
+ return items;
+ }
+
+ let delim;
+ // number of grip.preview.items is limited to 10, but we may have more
+ // items in grip-array
+ let delimMax = grip.preview.length > array.length ?
+ array.length : array.length - 1;
+ let provider = this.props.provider;
+
+ for (let i = 0; i < array.length && i < max; i++) {
+ try {
+ let itemGrip = array[i];
+ let value = provider ? provider.getValue(itemGrip) : itemGrip;
+
+ delim = (i == delimMax ? "" : ", ");
+
+ items.push(GripArrayItem(Object.assign({}, this.props, {
+ key: i,
+ object: value,
+ delim: delim}
+ )));
+ } catch (exc) {
+ items.push(GripArrayItem(Object.assign({}, this.props, {
+ object: exc,
+ delim: delim,
+ key: i}
+ )));
+ }
+ }
+ if (array.length > max || grip.preview.length > array.length) {
+ let objectLink = this.props.objectLink || span;
+ let leftItemNum = grip.preview.length - max > 0 ?
+ grip.preview.length - max : grip.preview.length - array.length;
+ items.push(Caption({
+ key: "more",
+ object: objectLink({
+ object: this.props.object
+ }, leftItemNum + " more…")
+ }));
+ }
+
+ return items;
+ },
+
+ render: function () {
+ let mode = this.props.mode || "short";
+ let object = this.props.object;
+
+ let items;
+ let brackets;
+ let needSpace = function (space) {
+ return space ? { left: "[ ", right: " ]"} : { left: "[", right: "]"};
+ };
+
+ if (mode == "tiny") {
+ let objectLength = this.getLength(object);
+ let isEmpty = objectLength === 0;
+ items = span({className: "length"}, isEmpty ? "" : objectLength);
+ brackets = needSpace(false);
+ } else {
+ let max = (mode == "short") ? 3 : 300;
+ items = this.arrayIterator(object, max);
+ brackets = needSpace(items.length > 0);
+ }
+
+ let objectLink = this.props.objectLink || span;
+ let title = this.getTitle(object);
+
+ return (
+ span({
+ className: "objectBox objectBox-array"},
+ title,
+ objectLink({
+ className: "arrayLeftBracket",
+ object: object
+ }, brackets.left),
+ items,
+ objectLink({
+ className: "arrayRightBracket",
+ object: object
+ }, brackets.right),
+ span({
+ className: "arrayProperties",
+ role: "group"}
+ )
+ )
+ );
+ },
+ });
+
+ /**
+ * Renders array item. Individual values are separated by
+ * a delimiter (a comma by default).
+ */
+ let GripArrayItem = React.createFactory(React.createClass({
+ displayName: "GripArrayItem",
+
+ propTypes: {
+ delim: React.PropTypes.string,
+ },
+
+ render: function () {
+ let { Rep } = createFactories(__webpack_require__(44));
+
+ return (
+ span({},
+ Rep(Object.assign({}, this.props, {
+ mode: "tiny"
+ })),
+ this.props.delim
+ )
+ );
+ }
+ }));
+
+ function supportsObject(grip, type) {
+ if (!isGrip(grip)) {
+ return false;
+ }
+
+ return (grip.preview && grip.preview.kind == "ArrayLike");
+ }
+
+ // Exports from this module
+ exports.GripArray = {
+ rep: GripArray,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 68 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_RESULT__;/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ "use strict";
+ // Make this available to both AMD and CJS environments
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) {
+ // Dependencies
+ const React = __webpack_require__(6);
+ const { createFactories, isGrip } = __webpack_require__(45);
+ const { Caption } = createFactories(__webpack_require__(51));
+ const { PropRep } = createFactories(__webpack_require__(53));
+
+ // Shortcuts
+ const { span } = React.DOM;
+ /**
+ * Renders an map. A map is represented by a list of its
+ * entries enclosed in curly brackets.
+ */
+ const GripMap = React.createClass({
+ displayName: "GripMap",
+
+ propTypes: {
+ object: React.PropTypes.object,
+ mode: React.PropTypes.string,
+ },
+
+ getTitle: function (object) {
+ let title = object && object.class ? object.class : "Map";
+ if (this.props.objectLink) {
+ return this.props.objectLink({
+ object: object
+ }, title);
+ }
+ return title;
+ },
+
+ safeEntriesIterator: function (object, max) {
+ max = (typeof max === "undefined") ? 3 : max;
+ try {
+ return this.entriesIterator(object, max);
+ } catch (err) {
+ console.error(err);
+ }
+ return [];
+ },
+
+ entriesIterator: function (object, max) {
+ // Entry filter. Show only interesting entries to the user.
+ let isInterestingEntry = this.props.isInterestingEntry || ((type, value) => {
+ return (
+ type == "boolean" ||
+ type == "number" ||
+ (type == "string" && value.length != 0)
+ );
+ });
+
+ let mapEntries = object.preview && object.preview.entries
+ ? object.preview.entries : [];
+
+ let indexes = this.getEntriesIndexes(mapEntries, max, isInterestingEntry);
+ if (indexes.length < max && indexes.length < mapEntries.length) {
+ // There are not enough entries yet, so we add uninteresting entries.
+ indexes = indexes.concat(
+ this.getEntriesIndexes(mapEntries, max - indexes.length, (t, value, name) => {
+ return !isInterestingEntry(t, value, name);
+ })
+ );
+ }
+
+ let entries = this.getEntries(mapEntries, indexes);
+ if (entries.length < mapEntries.length) {
+ // There are some undisplayed entries. Then display "more…".
+ let objectLink = this.props.objectLink || span;
+
+ entries.push(Caption({
+ key: "more",
+ object: objectLink({
+ object: object
+ }, `${mapEntries.length - max} more…`)
+ }));
+ }
+
+ return entries;
+ },
+
+ /**
+ * Get entries ordered by index.
+ *
+ * @param {Array} entries Entries array.
+ * @param {Array} indexes Indexes of entries.
+ * @return {Array} Array of PropRep.
+ */
+ getEntries: function (entries, indexes) {
+ // Make indexes ordered by ascending.
+ indexes.sort(function (a, b) {
+ return a - b;
+ });
+
+ return indexes.map((index, i) => {
+ let [key, entryValue] = entries[index];
+ let value = entryValue.value !== undefined ? entryValue.value : entryValue;
+
+ return PropRep({
+ // key,
+ name: key,
+ equal: ": ",
+ object: value,
+ // Do not add a trailing comma on the last entry
+ // if there won't be a "more..." item.
+ delim: (i < indexes.length - 1 || indexes.length < entries.length) ? ", " : "",
+ mode: "tiny",
+ objectLink: this.props.objectLink,
+ });
+ });
+ },
+
+ /**
+ * Get the indexes of entries in the map.
+ *
+ * @param {Array} entries Entries array.
+ * @param {Number} max The maximum length of indexes array.
+ * @param {Function} filter Filter the entry you want.
+ * @return {Array} Indexes of filtered entries in the map.
+ */
+ getEntriesIndexes: function (entries, max, filter) {
+ return entries
+ .reduce((indexes, [key, entry], i) => {
+ if (indexes.length < max) {
+ let value = (entry && entry.value !== undefined) ? entry.value : entry;
+ // Type is specified in grip's "class" field and for primitive
+ // values use typeof.
+ let type = (value && value.class ? value.class : typeof value).toLowerCase();
+
+ if (filter(type, value, key)) {
+ indexes.push(i);
+ }
+ }
+
+ return indexes;
+ }, []);
+ },
+
+ render: function () {
+ let object = this.props.object;
+ let props = this.safeEntriesIterator(object,
+ (this.props.mode == "long") ? 100 : 3);
+
+ let objectLink = this.props.objectLink || span;
+ if (this.props.mode == "tiny") {
+ return (
+ span({className: "objectBox objectBox-object"},
+ this.getTitle(object),
+ objectLink({
+ className: "objectLeftBrace",
+ object: object
+ }, "")
+ )
+ );
+ }
+
+ return (
+ span({className: "objectBox objectBox-object"},
+ this.getTitle(object),
+ objectLink({
+ className: "objectLeftBrace",
+ object: object
+ }, " { "),
+ props,
+ objectLink({
+ className: "objectRightBrace",
+ object: object
+ }, " }")
+ )
+ );
+ },
+ });
+
+ function supportsObject(grip, type) {
+ if (!isGrip(grip)) {
+ return false;
+ }
+ return (grip.preview && grip.preview.kind == "MapLike");
+ }
+
+ // Exports from this module
+ exports.GripMap = {
+ rep: GripMap,
+ supportsObject: supportsObject
+ };
+ }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+
+
+/***/ },
+/* 69 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /**
+ * Copyright (c) 2007-2016, Alexandru Marasteanu <hello [at) alexei (dot] ro>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of this software nor the names of its contributors may be
+ * used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+ /* globals window, exports, define */
+
+ (function(window) {
+ 'use strict'
+
+ var re = {
+ not_string: /[^s]/,
+ not_bool: /[^t]/,
+ not_type: /[^T]/,
+ not_primitive: /[^v]/,
+ number: /[diefg]/,
+ numeric_arg: /bcdiefguxX/,
+ json: /[j]/,
+ not_json: /[^j]/,
+ text: /^[^\x25]+/,
+ modulo: /^\x25{2}/,
+ placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosStTuvxX])/,
+ key: /^([a-z_][a-z_\d]*)/i,
+ key_access: /^\.([a-z_][a-z_\d]*)/i,
+ index_access: /^\[(\d+)\]/,
+ sign: /^[\+\-]/
+ }
+
+ function sprintf() {
+ var key = arguments[0], cache = sprintf.cache
+ if (!(cache[key] && cache.hasOwnProperty(key))) {
+ cache[key] = sprintf.parse(key)
+ }
+ return sprintf.format.call(null, cache[key], arguments)
+ }
+
+ sprintf.format = function(parse_tree, argv) {
+ var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = ''
+ for (i = 0; i < tree_length; i++) {
+ node_type = get_type(parse_tree[i])
+ if (node_type === 'string') {
+ output[output.length] = parse_tree[i]
+ }
+ else if (node_type === 'array') {
+ match = parse_tree[i] // convenience purposes only
+ if (match[2]) { // keyword argument
+ arg = argv[cursor]
+ for (k = 0; k < match[2].length; k++) {
+ if (!arg.hasOwnProperty(match[2][k])) {
+ throw new Error(sprintf('[sprintf] property "%s" does not exist', match[2][k]))
+ }
+ arg = arg[match[2][k]]
+ }
+ }
+ else if (match[1]) { // positional argument (explicit)
+ arg = argv[match[1]]
+ }
+ else { // positional argument (implicit)
+ arg = argv[cursor++]
+ }
+
+ if (re.not_type.test(match[8]) && re.not_primitive.test(match[8]) && get_type(arg) == 'function') {
+ arg = arg()
+ }
+
+ if (re.numeric_arg.test(match[8]) && (get_type(arg) != 'number' && isNaN(arg))) {
+ throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg)))
+ }
+
+ if (re.number.test(match[8])) {
+ is_positive = arg >= 0
+ }
+
+ switch (match[8]) {
+ case 'b':
+ arg = parseInt(arg, 10).toString(2)
+ break
+ case 'c':
+ arg = String.fromCharCode(parseInt(arg, 10))
+ break
+ case 'd':
+ case 'i':
+ arg = parseInt(arg, 10)
+ break
+ case 'j':
+ arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0)
+ break
+ case 'e':
+ arg = match[7] ? parseFloat(arg).toExponential(match[7]) : parseFloat(arg).toExponential()
+ break
+ case 'f':
+ arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg)
+ break
+ case 'g':
+ arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg)
+ break
+ case 'o':
+ arg = arg.toString(8)
+ break
+ case 's':
+ case 'S':
+ arg = String(arg)
+ arg = (match[7] ? arg.substring(0, match[7]) : arg)
+ break
+ case 't':
+ arg = String(!!arg)
+ arg = (match[7] ? arg.substring(0, match[7]) : arg)
+ break
+ case 'T':
+ arg = get_type(arg)
+ arg = (match[7] ? arg.substring(0, match[7]) : arg)
+ break
+ case 'u':
+ arg = parseInt(arg, 10) >>> 0
+ break
+ case 'v':
+ arg = arg.valueOf()
+ arg = (match[7] ? arg.substring(0, match[7]) : arg)
+ break
+ case 'x':
+ arg = parseInt(arg, 10).toString(16)
+ break
+ case 'X':
+ arg = parseInt(arg, 10).toString(16).toUpperCase()
+ break
+ }
+ if (re.json.test(match[8])) {
+ output[output.length] = arg
+ }
+ else {
+ if (re.number.test(match[8]) && (!is_positive || match[3])) {
+ sign = is_positive ? '+' : '-'
+ arg = arg.toString().replace(re.sign, '')
+ }
+ else {
+ sign = ''
+ }
+ pad_character = match[4] ? match[4] === '0' ? '0' : match[4].charAt(1) : ' '
+ pad_length = match[6] - (sign + arg).length
+ pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : '') : ''
+ output[output.length] = match[5] ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)
+ }
+ }
+ }
+ return output.join('')
+ }
+
+ sprintf.cache = {}
+
+ sprintf.parse = function(fmt) {
+ var _fmt = fmt, match = [], parse_tree = [], arg_names = 0
+ while (_fmt) {
+ if ((match = re.text.exec(_fmt)) !== null) {
+ parse_tree[parse_tree.length] = match[0]
+ }
+ else if ((match = re.modulo.exec(_fmt)) !== null) {
+ parse_tree[parse_tree.length] = '%'
+ }
+ else if ((match = re.placeholder.exec(_fmt)) !== null) {
+ if (match[2]) {
+ arg_names |= 1
+ var field_list = [], replacement_field = match[2], field_match = []
+ if ((field_match = re.key.exec(replacement_field)) !== null) {
+ field_list[field_list.length] = field_match[1]
+ while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
+ if ((field_match = re.key_access.exec(replacement_field)) !== null) {
+ field_list[field_list.length] = field_match[1]
+ }
+ else if ((field_match = re.index_access.exec(replacement_field)) !== null) {
+ field_list[field_list.length] = field_match[1]
+ }
+ else {
+ throw new SyntaxError("[sprintf] failed to parse named argument key")
+ }
+ }
+ }
+ else {
+ throw new SyntaxError("[sprintf] failed to parse named argument key")
+ }
+ match[2] = field_list
+ }
+ else {
+ arg_names |= 2
+ }
+ if (arg_names === 3) {
+ throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported")
+ }
+ parse_tree[parse_tree.length] = match
+ }
+ else {
+ throw new SyntaxError("[sprintf] unexpected placeholder")
+ }
+ _fmt = _fmt.substring(match[0].length)
+ }
+ return parse_tree
+ }
+
+ var vsprintf = function(fmt, argv, _argv) {
+ _argv = (argv || []).slice(0)
+ _argv.splice(0, 0, fmt)
+ return sprintf.apply(null, _argv)
+ }
+
+ /**
+ * helpers
+ */
+ function get_type(variable) {
+ if (typeof variable === 'number') {
+ return 'number'
+ }
+ else if (typeof variable === 'string') {
+ return 'string'
+ }
+ else {
+ return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase()
+ }
+ }
+
+ var preformattedPadding = {
+ '0': ['', '0', '00', '000', '0000', '00000', '000000', '0000000'],
+ ' ': ['', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
+ '_': ['', '_', '__', '___', '____', '_____', '______', '_______'],
+ }
+ function str_repeat(input, multiplier) {
+ if (multiplier >= 0 && multiplier <= 7 && preformattedPadding[input]) {
+ return preformattedPadding[input][multiplier]
+ }
+ return Array(multiplier + 1).join(input)
+ }
+
+ /**
+ * export to either browser or node.js
+ */
+ if (true) {
+ exports.sprintf = sprintf
+ exports.vsprintf = vsprintf
+ }
+ else {
+ window.sprintf = sprintf
+ window.vsprintf = vsprintf
+
+ if (typeof define === 'function' && define.amd) {
+ define(function() {
+ return {
+ sprintf: sprintf,
+ vsprintf: vsprintf
+ }
+ })
+ }
+ }
+ })(typeof window === 'undefined' ? this : window);
+
+
+/***/ },
+/* 70 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ /**
+ * EventEmitter.
+ */
+
+ var EventEmitter = function EventEmitter() {};
+ module.exports = EventEmitter;
+
+ const { Cu } = __webpack_require__(71);
+ const promise = __webpack_require__(76);
+
+ /**
+ * Decorate an object with event emitter functionality.
+ *
+ * @param Object aObjectToDecorate
+ * Bind all public methods of EventEmitter to
+ * the aObjectToDecorate object.
+ */
+ EventEmitter.decorate = function EventEmitter_decorate (aObjectToDecorate) {
+ let emitter = new EventEmitter();
+ aObjectToDecorate.on = emitter.on.bind(emitter);
+ aObjectToDecorate.off = emitter.off.bind(emitter);
+ aObjectToDecorate.once = emitter.once.bind(emitter);
+ aObjectToDecorate.emit = emitter.emit.bind(emitter);
+ };
+
+ EventEmitter.prototype = {
+ /**
+ * Connect a listener.
+ *
+ * @param string aEvent
+ * The event name to which we're connecting.
+ * @param function aListener
+ * Called when the event is fired.
+ */
+ on: function EventEmitter_on(aEvent, aListener) {
+ if (!this._eventEmitterListeners)
+ this._eventEmitterListeners = new Map();
+ if (!this._eventEmitterListeners.has(aEvent)) {
+ this._eventEmitterListeners.set(aEvent, []);
+ }
+ this._eventEmitterListeners.get(aEvent).push(aListener);
+ },
+
+ /**
+ * Listen for the next time an event is fired.
+ *
+ * @param string aEvent
+ * The event name to which we're connecting.
+ * @param function aListener
+ * (Optional) Called when the event is fired. Will be called at most
+ * one time.
+ * @return promise
+ * A promise which is resolved when the event next happens. The
+ * resolution value of the promise is the first event argument. If
+ * you need access to second or subsequent event arguments (it's rare
+ * that this is needed) then use aListener
+ */
+ once: function EventEmitter_once(aEvent, aListener) {
+ let deferred = promise.defer();
+
+ let handler = (aEvent, aFirstArg, ...aRest) => {
+ this.off(aEvent, handler);
+ if (aListener) {
+ aListener.apply(null, [aEvent, aFirstArg, ...aRest]);
+ }
+ deferred.resolve(aFirstArg);
+ };
+
+ handler._originalListener = aListener;
+ this.on(aEvent, handler);
+
+ return deferred.promise;
+ },
+
+ /**
+ * Remove a previously-registered event listener. Works for events
+ * registered with either on or once.
+ *
+ * @param string aEvent
+ * The event name whose listener we're disconnecting.
+ * @param function aListener
+ * The listener to remove.
+ */
+ off: function EventEmitter_off(aEvent, aListener) {
+ if (!this._eventEmitterListeners)
+ return;
+ let listeners = this._eventEmitterListeners.get(aEvent);
+ if (listeners) {
+ this._eventEmitterListeners.set(aEvent, listeners.filter(l => {
+ return l !== aListener && l._originalListener !== aListener;
+ }));
+ }
+ },
+
+ /**
+ * Emit an event. All arguments to this method will
+ * be sent to listener functions.
+ */
+ emit: function EventEmitter_emit(aEvent) {
+ if (!this._eventEmitterListeners || !this._eventEmitterListeners.has(aEvent)) {
+ return;
+ }
+
+ let originalListeners = this._eventEmitterListeners.get(aEvent);
+ for (let listener of this._eventEmitterListeners.get(aEvent)) {
+ // If the object was destroyed during event emission, stop
+ // emitting.
+ if (!this._eventEmitterListeners) {
+ break;
+ }
+
+ // If listeners were removed during emission, make sure the
+ // event handler we're going to fire wasn't removed.
+ if (originalListeners === this._eventEmitterListeners.get(aEvent) ||
+ this._eventEmitterListeners.get(aEvent).some(l => l === listener)) {
+ try {
+ listener.apply(null, arguments);
+ }
+ catch (ex) {
+ // Prevent a bad listener from interfering with the others.
+ let msg = ex + ": " + ex.stack;
+ //console.error(msg);
+ console.log(msg);
+ }
+ }
+ }
+ },
+ };
+
+
+/***/ },
+/* 71 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /*
+ * A sham for https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/chrome
+ */
+
+ var { inDOMUtils } = __webpack_require__(72);
+
+ var ourServices = {
+ inIDOMUtils: inDOMUtils,
+ nsIClipboardHelper: {
+ copyString: () => {}
+ },
+ nsIXULChromeRegistry: {
+ isLocaleRTL: () => {return false;}
+ },
+ nsIDOMParser: {
+
+ },
+ };
+
+ module.exports = {
+ Cc: name => {
+ if(typeof console !== "undefined") {
+ console.log('Cc sham for', name);
+ }
+ return {
+ getService: (name) => ourServices[name],
+ createInstance: (iface) => ourServices[iface],
+ };
+ },
+ CC: (name, iface, method) => {
+ if(typeof console !== "undefined") {
+ console.log('CC sham for', name, iface, method);
+ }
+ return {
+ };
+ },
+ Ci: {
+ nsIThread: {
+ "DISPATCH_NORMAL":0,
+ "DISPATCH_SYNC":1
+ },
+ nsIDOMNode: typeof HTMLElement !== "undefined" ? HTMLElement : null,
+ nsIFocusManager: {
+ MOVEFOCUS_BACKWARD: 2,
+ MOVEFOCUS_FORWARD: 1,
+ },
+ nsIDOMKeyEvent: {
+
+ },
+ nsIDOMCSSRule: {"UNKNOWN_RULE":0,"STYLE_RULE":1,"CHARSET_RULE":2,"IMPORT_RULE":3,"MEDIA_RULE":4,"FONT_FACE_RULE":5,"PAGE_RULE":6,"KEYFRAMES_RULE":7,"KEYFRAME_RULE":8,"MOZ_KEYFRAMES_RULE":7,"MOZ_KEYFRAME_RULE":8,"NAMESPACE_RULE":10,"COUNTER_STYLE_RULE":11,"SUPPORTS_RULE":12,"FONT_FEATURE_VALUES_RULE":14},
+ inIDOMUtils: "inIDOMUtils",
+ nsIClipboardHelper: "nsIClipboardHelper",
+ nsIXULChromeRegistry: "nsIXULChromeRegistry",
+ },
+ Cu: {
+ reportError: msg => { (typeof console !== "undefined") ? console.error(msg) : dump(msg) },
+ callFunctionWithAsyncStack: fn => fn(),
+ },
+ Cr: {},
+ components: {
+ isSuccessCode: () => (returnCode & 0x80000000) === 0,
+ }
+ };
+
+
+/***/ },
+/* 72 */
+/***/ function(module, exports, __webpack_require__) {
+
+ // A sham for inDOMUtils.
+
+ "use strict";
+
+ var { CSSLexer } = __webpack_require__(73);
+ var { cssColors } = __webpack_require__(74);
+ var { cssProperties } = __webpack_require__(75);
+
+ var cssRGBMap;
+
+ // From inIDOMUtils.idl.
+ var EXCLUDE_SHORTHANDS = (1 << 0);
+ var INCLUDE_ALIASES = (1 << 1);
+ var TYPE_LENGTH = 0;
+ var TYPE_PERCENTAGE = 1;
+ var TYPE_COLOR = 2;
+ var TYPE_URL = 3;
+ var TYPE_ANGLE = 4;
+ var TYPE_FREQUENCY = 5;
+ var TYPE_TIME = 6;
+ var TYPE_GRADIENT = 7;
+ var TYPE_TIMING_FUNCTION = 8;
+ var TYPE_IMAGE_RECT = 9;
+ var TYPE_NUMBER = 10;
+
+ function getCSSLexer(text) {
+ return new CSSLexer(text);
+ }
+
+ function rgbToColorName(r, g, b) {
+ if (!cssRGBMap) {
+ cssRGBMap = new Map();
+ for (let name in cssColors) {
+ cssRGBMap.set(JSON.stringify(cssColors[name]), name);
+ }
+ }
+ let value = cssRGBMap.get(JSON.stringify([r, g, b]));
+ if (!value) {
+ throw new Error("no such color");
+ }
+ return value;
+ }
+
+ // Taken from dom/tests/mochitest/ajax/mochikit/MochiKit/Color.js
+ function _hslValue(n1, n2, hue) {
+ if (hue > 6.0) {
+ hue -= 6.0;
+ } else if (hue < 0.0) {
+ hue += 6.0;
+ }
+ var val;
+ if (hue < 1.0) {
+ val = n1 + (n2 - n1) * hue;
+ } else if (hue < 3.0) {
+ val = n2;
+ } else if (hue < 4.0) {
+ val = n1 + (n2 - n1) * (4.0 - hue);
+ } else {
+ val = n1;
+ }
+ return val;
+ }
+
+ // Taken from dom/tests/mochitest/ajax/mochikit/MochiKit/Color.js
+ // and then modified.
+ function hslToRGB([hue, saturation, lightness]) {
+ var red;
+ var green;
+ var blue;
+ if (saturation === 0) {
+ red = lightness;
+ green = lightness;
+ blue = lightness;
+ } else {
+ var m2;
+ if (lightness <= 0.5) {
+ m2 = lightness * (1.0 + saturation);
+ } else {
+ m2 = lightness + saturation - (lightness * saturation);
+ }
+ var m1 = (2.0 * lightness) - m2;
+ var f = _hslValue;
+ var h6 = hue * 6.0;
+ red = f(m1, m2, h6 + 2);
+ green = f(m1, m2, h6);
+ blue = f(m1, m2, h6 - 2);
+ }
+ return [red, green, blue];
+ }
+
+ function colorToRGBA(name) {
+ name = name.trim().toLowerCase();
+ if (name in cssColors) {
+ return cssColors[name];
+ }
+
+ if (name === "transparent") {
+ return [0, 0, 0, 0];
+ }
+
+ let lexer = getCSSLexer(name);
+
+ let getToken = function() {
+ while (true) {
+ let token = lexer.nextToken();
+ if (!token || token.tokenType !== "comment" ||
+ token.tokenType !== "whitespace") {
+ return token;
+ }
+ }
+ };
+
+ let requireComma = function(token) {
+ if (token.tokenType !== "symbol" || token.text !== ",") {
+ return null;
+ }
+ return getToken();
+ };
+
+ let func = getToken();
+ if (!func || func.tokenType !== "function") {
+ return null;
+ }
+ let alpha = false;
+ if (func.text === "rgb" || func.text === "hsl") {
+ // Nothing.
+ } else if (func.text === "rgba" || func.text === "hsla") {
+ alpha = true;
+ } else {
+ return null;
+ }
+
+ let vals = [];
+ for (let i = 0; i < 3; ++i) {
+ let token = getToken();
+ if (i > 0) {
+ token = requireComma(token);
+ }
+ if (token.tokenType !== "number" || !token.isInteger) {
+ return null;
+ }
+ let num = token.number;
+ if (num < 0) {
+ num = 0;
+ } else if (num > 255) {
+ num = 255;
+ }
+ vals.push(num);
+ }
+
+ if (func.text === "hsl" || func.text === "hsla") {
+ vals = hslToRGB(vals);
+ }
+
+ if (alpha) {
+ let token = requireComma(getToken());
+ if (token.tokenType !== "number") {
+ return null;
+ }
+ let num = token.number;
+ if (num < 0) {
+ num = 0;
+ } else if (num > 1) {
+ num = 1;
+ }
+ vals.push(num);
+ } else {
+ vals.push(1);
+ }
+
+ let parenToken = getToken();
+ if (!parenToken || parenToken.tokenType !== "symbol" ||
+ parenToken.text !== ")") {
+ return null;
+ }
+ if (getToken() !== null) {
+ return null;
+ }
+
+ return vals;
+ }
+
+ function isValidCSSColor(name) {
+ return colorToRGBA(name) !== null;
+ }
+
+ function isVariable(name) {
+ return name.startsWith("--");
+ }
+
+ function cssPropertyIsShorthand(name) {
+ if (isVariable(name)) {
+ return false;
+ }
+ if (!(name in cssProperties)) {
+ throw Error("unknown property " + name);
+ }
+ return !!cssProperties[name].subproperties;
+ }
+
+ function getSubpropertiesForCSSProperty(name) {
+ if (isVariable(name)) {
+ return [name];
+ }
+ if (!(name in cssProperties)) {
+ throw Error("unknown property " + name);
+ }
+ if ("subproperties" in cssProperties[name]) {
+ return cssProperties[name].subproperties.slice();
+ }
+ return [name];
+ }
+
+ function getCSSValuesForProperty(name) {
+ if (isVariable(name)) {
+ return ["initial", "inherit", "unset"];
+ }
+ if (!(name in cssProperties)) {
+ throw Error("unknown property " + name);
+ }
+ return cssProperties[name].values.slice();
+ }
+
+ function getCSSPropertyNames(flags) {
+ let names = Object.keys(cssProperties);
+ if ((flags & EXCLUDE_SHORTHANDS) !== 0) {
+ names = names.filter((name) => cssProperties[name].subproperties);
+ }
+ if ((flags & INCLUDE_ALIASES) === 0) {
+ names = names.filter((name) => !cssProperties[name].alias);
+ }
+ return names;
+ }
+
+ function cssPropertySupportsType(name, type) {
+ if (isVariable(name)) {
+ return false;
+ }
+ if (!(name in cssProperties)) {
+ throw Error("unknown property " + name);
+ }
+ return (cssProperties[name].supports & (1 << type)) !== 0;
+ }
+
+ function isInheritedProperty(name) {
+ if (isVariable(name)) {
+ return true;
+ }
+ if (!(name in cssProperties)) {
+ return false;
+ }
+ return cssProperties[name].inherited;
+ }
+
+ function cssPropertyIsValid(name, value) {
+ if (isVariable(name)) {
+ return true;
+ }
+ if (!(name in cssProperties)) {
+ return false;
+ }
+ let elt = document.createElement("div");
+ elt.style = name + ":" + value;
+ return elt.style.length > 0;
+ }
+
+ exports.inDOMUtils = {
+ getCSSLexer,
+ rgbToColorName,
+ colorToRGBA,
+ isValidCSSColor,
+ cssPropertyIsShorthand,
+ getSubpropertiesForCSSProperty,
+ getCSSValuesForProperty,
+ getCSSPropertyNames,
+ cssPropertySupportsType,
+ isInheritedProperty,
+ cssPropertyIsValid,
+
+ // Constants.
+ EXCLUDE_SHORTHANDS,
+ INCLUDE_ALIASES,
+ TYPE_LENGTH,
+ TYPE_PERCENTAGE,
+ TYPE_COLOR,
+ TYPE_URL,
+ TYPE_ANGLE,
+ TYPE_FREQUENCY,
+ TYPE_TIME,
+ TYPE_GRADIENT,
+ TYPE_TIMING_FUNCTION,
+ TYPE_IMAGE_RECT,
+ TYPE_NUMBER,
+ };
+
+
+/***/ },
+/* 73 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
+
+ (function (root, factory) {
+ // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,
+ // Rhino, and plain browser loading.
+ if (true) {
+ !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+ } else if (typeof exports !== 'undefined') {
+ factory(exports);
+ } else {
+ factory(root);
+ }
+ }(this, function (exports) {
+
+ function between(num, first, last) { return num >= first && num <= last; }
+ function digit(code) { return between(code, 0x30,0x39); }
+ function hexdigit(code) { return digit(code) || between(code, 0x41,0x46) || between(code, 0x61,0x66); }
+ function uppercaseletter(code) { return between(code, 0x41,0x5a); }
+ function lowercaseletter(code) { return between(code, 0x61,0x7a); }
+ function letter(code) { return uppercaseletter(code) || lowercaseletter(code); }
+ function nonascii(code) { return code >= 0x80; }
+ function namestartchar(code) { return letter(code) || nonascii(code) || code == 0x5f; }
+ function namechar(code) { return namestartchar(code) || digit(code) || code == 0x2d; }
+ function nonprintable(code) { return between(code, 0,8) || code == 0xb || between(code, 0xe,0x1f) || code == 0x7f; }
+ function newline(code) { return code == 0xa; }
+ function whitespace(code) { return newline(code) || code == 9 || code == 0x20; }
+
+ var maximumallowedcodepoint = 0x10ffff;
+
+ var InvalidCharacterError = function(message) {
+ this.message = message;
+ };
+ InvalidCharacterError.prototype = new Error;
+ InvalidCharacterError.prototype.name = 'InvalidCharacterError';
+
+ function stringFromCode(code) {
+ if(code <= 0xffff) return String.fromCharCode(code);
+ // Otherwise, encode astral char as surrogate pair.
+ code -= Math.pow(2, 20);
+ var lead = Math.floor(code/Math.pow(2, 10)) + 0xd800;
+ var trail = code % Math.pow(2, 10) + 0xdc00;
+ return String.fromCharCode(lead) + String.fromCharCode(trail);
+ }
+
+ function* tokenize(str, options) {
+ if (options === undefined) {
+ options = {};
+ }
+ if (options.loc === undefined) {
+ options.loc = false;
+ }
+ if (options.offsets === undefined) {
+ options.offsets = false;
+ }
+ if (options.keepComments === undefined) {
+ options.keepComments = false;
+ }
+ if (options.startOffset === undefined) {
+ options.startOffset = 0;
+ }
+
+ var i = options.startOffset - 1;
+ var code;
+
+ // Line number information.
+ var line = 0;
+ var column = 0;
+ // The only use of lastLineLength is in reconsume().
+ var lastLineLength = 0;
+ var incrLineno = function() {
+ line += 1;
+ lastLineLength = column;
+ column = 0;
+ };
+ var locStart = {line:line, column:column};
+ var offsetStart = i;
+
+ var codepoint = function(i) {
+ if(i >= str.length) {
+ return -1;
+ }
+ return str.charCodeAt(i);
+ };
+ var next = function(num) {
+ if(num === undefined)
+ num = 1;
+ if(num > 3)
+ throw "Spec Error: no more than three codepoints of lookahead.";
+
+ var rcode;
+ for (var offset = i + 1; num-- > 0; ++offset) {
+ rcode = codepoint(offset);
+ if (rcode === 0xd && codepoint(offset+1) === 0xa) {
+ ++offset;
+ rcode = 0xa;
+ } else if (rcode === 0xd || rcode === 0xc) {
+ rcode = 0xa;
+ } else if (rcode === 0x0) {
+ rcode = 0xfffd;
+ }
+ }
+
+ return rcode;
+ };
+ var consume = function(num) {
+ if(num === undefined)
+ num = 1;
+ while(num-- > 0) {
+ ++i;
+ code = codepoint(i);
+ if (code === 0xd && codepoint(i+1) === 0xa) {
+ ++i;
+ code = 0xa;
+ } else if (code === 0xd || code === 0xc) {
+ code = 0xa;
+ } else if (code === 0x0) {
+ code = 0xfffd;
+ }
+ if(newline(code)) incrLineno();
+ else column++;
+ }
+ return true;
+ };
+ var reconsume = function() {
+ i -= 1; // This is ok even in the \r\n case.
+ if (newline(code)) {
+ line -= 1;
+ column = lastLineLength;
+ } else {
+ column -= 1;
+ }
+ return true;
+ };
+ var eof = function(codepoint) {
+ if(codepoint === undefined) codepoint = code;
+ return codepoint == -1;
+ };
+ var donothing = function() {};
+ var parseerror = function() { console.log("Parse error at index " + i + ", processing codepoint 0x" + code.toString(16) + ".");return true; };
+
+ var consumeAToken = function() {
+ consume();
+ if (!options.keepComments) {
+ while(code == 0x2f && next() == 0x2a) {
+ consumeAComment();
+ consume();
+ }
+ }
+ locStart.line = line;
+ locStart.column = column;
+ offsetStart = i;
+ if(whitespace(code)) {
+ while(whitespace(next())) consume();
+ return new WhitespaceToken;
+ }
+ else if(code == 0x2f && next() == 0x2a) return consumeAComment();
+ else if(code == 0x22) return consumeAStringToken();
+ else if(code == 0x23) {
+ if(namechar(next()) || areAValidEscape(next(1), next(2))) {
+ var token = new HashToken();
+ if(wouldStartAnIdentifier(next(1), next(2), next(3))) {
+ token.type = "id";
+ token.tokenType = "id";
+ }
+ token.value = consumeAName();
+ token.text = token.value;
+ return token;
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x24) {
+ if(next() == 0x3d) {
+ consume();
+ return new SuffixMatchToken();
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x27) return consumeAStringToken();
+ else if(code == 0x28) return new OpenParenToken();
+ else if(code == 0x29) return new CloseParenToken();
+ else if(code == 0x2a) {
+ if(next() == 0x3d) {
+ consume();
+ return new SubstringMatchToken();
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x2b) {
+ if(startsWithANumber()) {
+ reconsume();
+ return consumeANumericToken();
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x2c) return new CommaToken();
+ else if(code == 0x2d) {
+ if(startsWithANumber()) {
+ reconsume();
+ return consumeANumericToken();
+ } else if(next(1) == 0x2d && next(2) == 0x3e) {
+ consume(2);
+ return new CDCToken();
+ } else if(startsWithAnIdentifier()) {
+ reconsume();
+ return consumeAnIdentlikeToken();
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x2e) {
+ if(startsWithANumber()) {
+ reconsume();
+ return consumeANumericToken();
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x3a) return new ColonToken;
+ else if(code == 0x3b) return new SemicolonToken;
+ else if(code == 0x3c) {
+ if(next(1) == 0x21 && next(2) == 0x2d && next(3) == 0x2d) {
+ consume(3);
+ return new CDOToken();
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x40) {
+ if(wouldStartAnIdentifier(next(1), next(2), next(3))) {
+ return new AtKeywordToken(consumeAName());
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x5b) return new OpenSquareToken();
+ else if(code == 0x5c) {
+ if(startsWithAValidEscape()) {
+ reconsume();
+ return consumeAnIdentlikeToken();
+ } else {
+ parseerror();
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x5d) return new CloseSquareToken();
+ else if(code == 0x5e) {
+ if(next() == 0x3d) {
+ consume();
+ return new PrefixMatchToken();
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x7b) return new OpenCurlyToken();
+ else if(code == 0x7c) {
+ if(next() == 0x3d) {
+ consume();
+ return new DashMatchToken();
+ // } else if(next() == 0x7c) {
+ // consume();
+ // return new ColumnToken();
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(code == 0x7d) return new CloseCurlyToken();
+ else if(code == 0x7e) {
+ if(next() == 0x3d) {
+ consume();
+ return new IncludeMatchToken();
+ } else {
+ return new DelimToken(code);
+ }
+ }
+ else if(digit(code)) {
+ reconsume();
+ return consumeANumericToken();
+ }
+ else if(namestartchar(code)) {
+ reconsume();
+ return consumeAnIdentlikeToken();
+ }
+ else if(eof()) return new EOFToken();
+ else return new DelimToken(code);
+ };
+
+ var consumeAComment = function() {
+ consume();
+ var comment = "";
+ while(true) {
+ consume();
+ if(code == 0x2a && next() == 0x2f) {
+ consume();
+ break;
+ } else if(eof()) {
+ break;
+ }
+ comment += stringFromCode(code);
+ }
+ return new CommentToken(comment);
+ };
+
+ var consumeANumericToken = function() {
+ var num = consumeANumber();
+ var token;
+ if(wouldStartAnIdentifier(next(1), next(2), next(3))) {
+ token = new DimensionToken();
+ token.value = num.value;
+ token.repr = num.repr;
+ token.type = num.type;
+ token.unit = consumeAName();
+ token.text = token.unit;
+ } else if(next() == 0x25) {
+ consume();
+ token = new PercentageToken();
+ token.value = num.value;
+ token.repr = num.repr;
+ } else {
+ var token = new NumberToken();
+ token.value = num.value;
+ token.repr = num.repr;
+ token.type = num.type;
+ }
+ token.number = token.value;
+ token.isInteger = token.type === "integer";
+ // FIXME hasSign
+ return token;
+ };
+
+ var consumeAnIdentlikeToken = function() {
+ var str = consumeAName();
+ if(str.toLowerCase() == "url" && next() == 0x28) {
+ consume();
+ while(whitespace(next(1)) && whitespace(next(2)))
+ consume();
+ if((next() == 0x22 || next() == 0x27) ||
+ (whitespace(next()) && (next(2) == 0x22 || next(2) == 0x27))) {
+ while(whitespace(next()))
+ consume();
+ consume();
+ let str = consumeAStringToken();
+ while(whitespace(next()))
+ consume();
+ // The closing paren.
+ consume();
+ return new URLToken(str.text);
+ } else {
+ return consumeAURLToken();
+ }
+ } else if(next() == 0x28) {
+ consume();
+ return new FunctionToken(str);
+ } else {
+ return new IdentToken(str);
+ }
+ };
+
+ var consumeAStringToken = function(endingCodePoint) {
+ if(endingCodePoint === undefined) endingCodePoint = code;
+ var string = "";
+ while(consume()) {
+ if(code == endingCodePoint || eof()) {
+ return new StringToken(string);
+ } else if(newline(code)) {
+ reconsume();
+ return new BadStringToken(string);
+ } else if(code == 0x5c) {
+ if(eof(next())) {
+ donothing();
+ } else if(newline(next())) {
+ consume();
+ } else {
+ string += stringFromCode(consumeEscape());
+ }
+ } else {
+ string += stringFromCode(code);
+ }
+ }
+ };
+
+ var consumeAURLToken = function() {
+ var token = new URLToken("");
+ while(whitespace(next())) consume();
+ if(eof(next())) return token;
+ while(consume()) {
+ if(code == 0x29 || eof()) {
+ break;
+ } else if(whitespace(code)) {
+ while(whitespace(next()))
+ consume();
+ if(next() == 0x29 || eof(next())) {
+ consume();
+ break;
+ } else {
+ consumeTheRemnantsOfABadURL();
+ return new BadURLToken();
+ }
+ } else if(code == 0x22 || code == 0x27 || code == 0x28 || nonprintable(code)) {
+ parseerror();
+ consumeTheRemnantsOfABadURL();
+ return new BadURLToken();
+ } else if(code == 0x5c) {
+ if(startsWithAValidEscape()) {
+ token.value += stringFromCode(consumeEscape());
+ } else {
+ parseerror();
+ consumeTheRemnantsOfABadURL();
+ return new BadURLToken();
+ }
+ } else {
+ token.value += stringFromCode(code);
+ }
+ }
+ token.text = token.value;
+ return token;
+ };
+
+ var consumeEscape = function() {
+ // Assume the the current character is the \
+ // and the next code point is not a newline.
+ consume();
+ if(hexdigit(code)) {
+ // Consume 1-6 hex digits
+ var digits = [code];
+ for(var total = 0; total < 5; total++) {
+ if(hexdigit(next())) {
+ consume();
+ digits.push(code);
+ } else {
+ break;
+ }
+ }
+ if(whitespace(next())) consume();
+ var value = parseInt(digits.map(function(x){return String.fromCharCode(x);}).join(''), 16);
+ if( value > maximumallowedcodepoint ) value = 0xfffd;
+ return value;
+ } else if(eof()) {
+ return 0xfffd;
+ } else {
+ return code;
+ }
+ };
+
+ var areAValidEscape = function(c1, c2) {
+ if(c1 != 0x5c) return false;
+ if(newline(c2)) return false;
+ return true;
+ };
+ var startsWithAValidEscape = function() {
+ return areAValidEscape(code, next());
+ };
+
+ var wouldStartAnIdentifier = function(c1, c2, c3) {
+ if(c1 == 0x2d) {
+ return namestartchar(c2) || c2 == 0x2d || areAValidEscape(c2, c3);
+ } else if(namestartchar(c1)) {
+ return true;
+ } else if(c1 == 0x5c) {
+ return areAValidEscape(c1, c2);
+ } else {
+ return false;
+ }
+ };
+ var startsWithAnIdentifier = function() {
+ return wouldStartAnIdentifier(code, next(1), next(2));
+ };
+
+ var wouldStartANumber = function(c1, c2, c3) {
+ if(c1 == 0x2b || c1 == 0x2d) {
+ if(digit(c2)) return true;
+ if(c2 == 0x2e && digit(c3)) return true;
+ return false;
+ } else if(c1 == 0x2e) {
+ if(digit(c2)) return true;
+ return false;
+ } else if(digit(c1)) {
+ return true;
+ } else {
+ return false;
+ }
+ };
+ var startsWithANumber = function() {
+ return wouldStartANumber(code, next(1), next(2));
+ };
+
+ var consumeAName = function() {
+ var result = "";
+ while(consume()) {
+ if(namechar(code)) {
+ result += stringFromCode(code);
+ } else if(startsWithAValidEscape()) {
+ result += stringFromCode(consumeEscape());
+ } else {
+ reconsume();
+ return result;
+ }
+ }
+ };
+
+ var consumeANumber = function() {
+ var repr = [];
+ var type = "integer";
+ if(next() == 0x2b || next() == 0x2d) {
+ consume();
+ repr += stringFromCode(code);
+ }
+ while(digit(next())) {
+ consume();
+ repr += stringFromCode(code);
+ }
+ if(next(1) == 0x2e && digit(next(2))) {
+ consume();
+ repr += stringFromCode(code);
+ consume();
+ repr += stringFromCode(code);
+ type = "number";
+ while(digit(next())) {
+ consume();
+ repr += stringFromCode(code);
+ }
+ }
+ var c1 = next(1), c2 = next(2), c3 = next(3);
+ if((c1 == 0x45 || c1 == 0x65) && digit(c2)) {
+ consume();
+ repr += stringFromCode(code);
+ consume();
+ repr += stringFromCode(code);
+ type = "number";
+ while(digit(next())) {
+ consume();
+ repr += stringFromCode(code);
+ }
+ } else if((c1 == 0x45 || c1 == 0x65) && (c2 == 0x2b || c2 == 0x2d) && digit(c3)) {
+ consume();
+ repr += stringFromCode(code);
+ consume();
+ repr += stringFromCode(code);
+ consume();
+ repr += stringFromCode(code);
+ type = "number";
+ while(digit(next())) {
+ consume();
+ repr += stringFromCode(code);
+ }
+ }
+ var value = convertAStringToANumber(repr);
+ return {type:type, value:value, repr:repr};
+ };
+
+ var convertAStringToANumber = function(string) {
+ // CSS's number rules are identical to JS, afaik.
+ return +string;
+ };
+
+ var consumeTheRemnantsOfABadURL = function() {
+ while(consume()) {
+ if(code == 0x2d || eof()) {
+ return;
+ } else if(startsWithAValidEscape()) {
+ consumeEscape();
+ donothing();
+ } else {
+ donothing();
+ }
+ }
+ };
+
+
+
+ var iterationCount = 0;
+ while(!eof(next())) {
+ var token = consumeAToken();
+ if (options.loc) {
+ token.loc = {};
+ token.loc.start = {line:locStart.line, column:locStart.column};
+ token.loc.end = {line:line, column:column};
+ }
+ if (options.offsets) {
+ token.startOffset = offsetStart;
+ token.endOffset = i + 1;
+ }
+ yield token;
+ iterationCount++;
+ if(iterationCount > str.length*2) return "I'm infinite-looping!";
+ }
+ }
+
+ function CSSParserToken() { throw "Abstract Base Class"; }
+ CSSParserToken.prototype.toJSON = function() {
+ return {token: this.tokenType};
+ };
+ CSSParserToken.prototype.toString = function() { return this.tokenType; };
+ CSSParserToken.prototype.toSource = function() { return ''+this; };
+
+ function BadStringToken(text) {
+ this.text = text;
+ return this;
+ }
+ BadStringToken.prototype = Object.create(CSSParserToken.prototype);
+ BadStringToken.prototype.tokenType = "bad_string";
+
+ function BadURLToken() { return this; }
+ BadURLToken.prototype = Object.create(CSSParserToken.prototype);
+ BadURLToken.prototype.tokenType = "bad_url";
+
+ function WhitespaceToken() { return this; }
+ WhitespaceToken.prototype = Object.create(CSSParserToken.prototype);
+ WhitespaceToken.prototype.tokenType = "whitespace";
+ WhitespaceToken.prototype.toString = function() { return "WS"; };
+ WhitespaceToken.prototype.toSource = function() { return " "; };
+
+ function CDOToken() { return this; }
+ CDOToken.prototype = Object.create(CSSParserToken.prototype);
+ CDOToken.prototype.tokenType = "htmlcomment";
+ CDOToken.prototype.toSource = function() { return "<!--"; };
+
+ function CDCToken() { return this; }
+ CDCToken.prototype = Object.create(CSSParserToken.prototype);
+ CDCToken.prototype.tokenType = "htmlcomment";
+ CDCToken.prototype.toSource = function() { return "-->"; };
+
+ function ColonToken() { return this; }
+ ColonToken.prototype = Object.create(CSSParserToken.prototype);
+ ColonToken.prototype.tokenType = "symbol";
+ ColonToken.prototype.text = ":";
+
+ function SemicolonToken() { return this; }
+ SemicolonToken.prototype = Object.create(CSSParserToken.prototype);
+ SemicolonToken.prototype.tokenType = "symbol";
+ SemicolonToken.prototype.text = ";";
+
+ function CommaToken() { return this; }
+ CommaToken.prototype = Object.create(CSSParserToken.prototype);
+ CommaToken.prototype.tokenType = "symbol";
+ CommaToken.prototype.text = ",";
+
+ function GroupingToken() { throw "Abstract Base Class"; }
+ GroupingToken.prototype = Object.create(CSSParserToken.prototype);
+
+ function OpenCurlyToken() { this.value = "{"; this.mirror = "}"; return this; }
+ OpenCurlyToken.prototype = Object.create(GroupingToken.prototype);
+ OpenCurlyToken.prototype.tokenType = "symbol";
+ OpenCurlyToken.prototype.text = "{";
+
+ function CloseCurlyToken() { this.value = "}"; this.mirror = "{"; return this; }
+ CloseCurlyToken.prototype = Object.create(GroupingToken.prototype);
+ CloseCurlyToken.prototype.tokenType = "symbol";
+ CloseCurlyToken.prototype.text = "}";
+
+ function OpenSquareToken() { this.value = "["; this.mirror = "]"; return this; }
+ OpenSquareToken.prototype = Object.create(GroupingToken.prototype);
+ OpenSquareToken.prototype.tokenType = "symbol";
+ OpenSquareToken.prototype.text = "[";
+
+ function CloseSquareToken() { this.value = "]"; this.mirror = "["; return this; }
+ CloseSquareToken.prototype = Object.create(GroupingToken.prototype);
+ CloseSquareToken.prototype.tokenType = "symbol";
+ CloseSquareToken.prototype.text = "]";
+
+ function OpenParenToken() { this.value = "("; this.mirror = ")"; return this; }
+ OpenParenToken.prototype = Object.create(GroupingToken.prototype);
+ OpenParenToken.prototype.tokenType = "symbol";
+ OpenParenToken.prototype.text = "(";
+
+ function CloseParenToken() { this.value = ")"; this.mirror = "("; return this; }
+ CloseParenToken.prototype = Object.create(GroupingToken.prototype);
+ CloseParenToken.prototype.tokenType = "symbol";
+ CloseParenToken.prototype.text = ")";
+
+ function IncludeMatchToken() { return this; }
+ IncludeMatchToken.prototype = Object.create(CSSParserToken.prototype);
+ IncludeMatchToken.prototype.tokenType = "includes";
+
+ function DashMatchToken() { return this; }
+ DashMatchToken.prototype = Object.create(CSSParserToken.prototype);
+ DashMatchToken.prototype.tokenType = "dashmatch";
+
+ function PrefixMatchToken() { return this; }
+ PrefixMatchToken.prototype = Object.create(CSSParserToken.prototype);
+ PrefixMatchToken.prototype.tokenType = "beginsmatch";
+
+ function SuffixMatchToken() { return this; }
+ SuffixMatchToken.prototype = Object.create(CSSParserToken.prototype);
+ SuffixMatchToken.prototype.tokenType = "endsmatch";
+
+ function SubstringMatchToken() { return this; }
+ SubstringMatchToken.prototype = Object.create(CSSParserToken.prototype);
+ SubstringMatchToken.prototype.tokenType = "containsmatch";
+
+ function ColumnToken() { return this; }
+ ColumnToken.prototype = Object.create(CSSParserToken.prototype);
+ ColumnToken.prototype.tokenType = "||";
+
+ function EOFToken() { return this; }
+ EOFToken.prototype = Object.create(CSSParserToken.prototype);
+ EOFToken.prototype.tokenType = "EOF";
+ EOFToken.prototype.toSource = function() { return ""; };
+
+ function DelimToken(code) {
+ this.value = stringFromCode(code);
+ this.text = this.value;
+ return this;
+ }
+ DelimToken.prototype = Object.create(CSSParserToken.prototype);
+ DelimToken.prototype.tokenType = "symbol";
+ DelimToken.prototype.toString = function() { return "DELIM("+this.value+")"; };
+ DelimToken.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.value = this.value;
+ return json;
+ };
+ DelimToken.prototype.toSource = function() {
+ if(this.value == "\\")
+ return "\\\n";
+ else
+ return this.value;
+ };
+
+ function StringValuedToken() { throw "Abstract Base Class"; }
+ StringValuedToken.prototype = Object.create(CSSParserToken.prototype);
+ StringValuedToken.prototype.ASCIIMatch = function(str) {
+ return this.value.toLowerCase() == str.toLowerCase();
+ };
+ StringValuedToken.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.value = this.value;
+ return json;
+ };
+
+ function IdentToken(val) {
+ this.value = val;
+ this.text = val;
+ }
+ IdentToken.prototype = Object.create(StringValuedToken.prototype);
+ IdentToken.prototype.tokenType = "ident";
+ IdentToken.prototype.toString = function() { return "IDENT("+this.value+")"; };
+ IdentToken.prototype.toSource = function() {
+ return escapeIdent(this.value);
+ };
+
+ function FunctionToken(val) {
+ this.value = val;
+ this.text = val;
+ this.mirror = ")";
+ }
+ FunctionToken.prototype = Object.create(StringValuedToken.prototype);
+ FunctionToken.prototype.tokenType = "function";
+ FunctionToken.prototype.toString = function() { return "FUNCTION("+this.value+")"; };
+ FunctionToken.prototype.toSource = function() {
+ return escapeIdent(this.value) + "(";
+ };
+
+ function AtKeywordToken(val) {
+ this.value = val;
+ this.text = val;
+ }
+ AtKeywordToken.prototype = Object.create(StringValuedToken.prototype);
+ AtKeywordToken.prototype.tokenType = "at";
+ AtKeywordToken.prototype.toString = function() { return "AT("+this.value+")"; };
+ AtKeywordToken.prototype.toSource = function() {
+ return "@" + escapeIdent(this.value);
+ };
+
+ function HashToken(val) {
+ this.value = val;
+ this.text = val;
+ this.type = "unrestricted";
+ }
+ HashToken.prototype = Object.create(StringValuedToken.prototype);
+ HashToken.prototype.tokenType = "hash";
+ HashToken.prototype.toString = function() { return "HASH("+this.value+")"; };
+ HashToken.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.value = this.value;
+ json.type = this.type;
+ return json;
+ };
+ HashToken.prototype.toSource = function() {
+ if(this.type == "id") {
+ return "#" + escapeIdent(this.value);
+ } else {
+ return "#" + escapeHash(this.value);
+ }
+ };
+
+ function StringToken(val) {
+ this.value = val;
+ this.text = val;
+ }
+ StringToken.prototype = Object.create(StringValuedToken.prototype);
+ StringToken.prototype.tokenType = "string";
+ StringToken.prototype.toString = function() {
+ return '"' + escapeString(this.value) + '"';
+ };
+
+ function CommentToken(val) {
+ this.value = val;
+ }
+ CommentToken.prototype = Object.create(StringValuedToken.prototype);
+ CommentToken.prototype.tokenType = "comment";
+ CommentToken.prototype.toString = function() {
+ return '/*' + this.value + '*/';
+ }
+ CommentToken.prototype.toSource = CommentToken.prototype.toString;
+
+ function URLToken(val) {
+ this.value = val;
+ this.text = val;
+ }
+ URLToken.prototype = Object.create(StringValuedToken.prototype);
+ URLToken.prototype.tokenType = "url";
+ URLToken.prototype.toString = function() { return "URL("+this.value+")"; };
+ URLToken.prototype.toSource = function() {
+ return 'url("' + escapeString(this.value) + '")';
+ };
+
+ function NumberToken() {
+ this.value = null;
+ this.type = "integer";
+ this.repr = "";
+ }
+ NumberToken.prototype = Object.create(CSSParserToken.prototype);
+ NumberToken.prototype.tokenType = "number";
+ NumberToken.prototype.toString = function() {
+ if(this.type == "integer")
+ return "INT("+this.value+")";
+ return "NUMBER("+this.value+")";
+ };
+ NumberToken.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.value = this.value;
+ json.type = this.type;
+ json.repr = this.repr;
+ return json;
+ };
+ NumberToken.prototype.toSource = function() { return this.repr; };
+
+ function PercentageToken() {
+ this.value = null;
+ this.repr = "";
+ }
+ PercentageToken.prototype = Object.create(CSSParserToken.prototype);
+ PercentageToken.prototype.tokenType = "percentage";
+ PercentageToken.prototype.toString = function() { return "PERCENTAGE("+this.value+")"; };
+ PercentageToken.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.value = this.value;
+ json.repr = this.repr;
+ return json;
+ };
+ PercentageToken.prototype.toSource = function() { return this.repr + "%"; };
+
+ function DimensionToken() {
+ this.value = null;
+ this.type = "integer";
+ this.repr = "";
+ this.unit = "";
+ }
+ DimensionToken.prototype = Object.create(CSSParserToken.prototype);
+ DimensionToken.prototype.tokenType = "dimension";
+ DimensionToken.prototype.toString = function() { return "DIM("+this.value+","+this.unit+")"; };
+ DimensionToken.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.value = this.value;
+ json.type = this.type;
+ json.repr = this.repr;
+ json.unit = this.unit;
+ return json;
+ };
+ DimensionToken.prototype.toSource = function() {
+ var source = this.repr;
+ var unit = escapeIdent(this.unit);
+ if(unit[0].toLowerCase() == "e" && (unit[1] == "-" || between(unit.charCodeAt(1), 0x30, 0x39))) {
+ // Unit is ambiguous with scinot
+ // Remove the leading "e", replace with escape.
+ unit = "\\65 " + unit.slice(1, unit.length);
+ }
+ return source+unit;
+ };
+
+ function escapeIdent(string) {
+ string = ''+string;
+ var result = '';
+ var firstcode = string.charCodeAt(0);
+ for(var i = 0; i < string.length; i++) {
+ var code = string.charCodeAt(i);
+ if(code === 0x0) {
+ throw new InvalidCharacterError('Invalid character: the input contains U+0000.');
+ }
+
+ if(
+ between(code, 0x1, 0x1f) || code == 0x7f ||
+ (i === 0 && between(code, 0x30, 0x39)) ||
+ (i == 1 && between(code, 0x30, 0x39) && firstcode == 0x2d)
+ ) {
+ result += '\\' + code.toString(16) + ' ';
+ } else if(
+ code >= 0x80 ||
+ code == 0x2d ||
+ code == 0x5f ||
+ between(code, 0x30, 0x39) ||
+ between(code, 0x41, 0x5a) ||
+ between(code, 0x61, 0x7a)
+ ) {
+ result += string[i];
+ } else {
+ result += '\\' + string[i];
+ }
+ }
+ return result;
+ }
+
+ function escapeHash(string) {
+ // Escapes the contents of "unrestricted"-type hash tokens.
+ // Won't preserve the ID-ness of "id"-type hash tokens;
+ // use escapeIdent() for that.
+ string = ''+string;
+ var result = '';
+ for(var i = 0; i < string.length; i++) {
+ var code = string.charCodeAt(i);
+ if(code === 0x0) {
+ throw new InvalidCharacterError('Invalid character: the input contains U+0000.');
+ }
+
+ if(
+ code >= 0x80 ||
+ code == 0x2d ||
+ code == 0x5f ||
+ between(code, 0x30, 0x39) ||
+ between(code, 0x41, 0x5a) ||
+ between(code, 0x61, 0x7a)
+ ) {
+ result += string[i];
+ } else {
+ result += '\\' + code.toString(16) + ' ';
+ }
+ }
+ return result;
+ }
+
+ function escapeString(string) {
+ string = ''+string;
+ var result = '';
+ for(var i = 0; i < string.length; i++) {
+ var code = string.charCodeAt(i);
+
+ if(code === 0x0) {
+ throw new InvalidCharacterError('Invalid character: the input contains U+0000.');
+ }
+
+ if(between(code, 0x1, 0x1f) || code == 0x7f) {
+ result += '\\' + code.toString(16) + ' ';
+ } else if(code == 0x22 || code == 0x5c) {
+ result += '\\' + string[i];
+ } else {
+ result += string[i];
+ }
+ }
+ return result;
+ }
+
+ // Exportation.
+ exports.tokenize = tokenize;
+ exports.IdentToken = IdentToken;
+ exports.FunctionToken = FunctionToken;
+ exports.AtKeywordToken = AtKeywordToken;
+ exports.HashToken = HashToken;
+ exports.StringToken = StringToken;
+ exports.BadStringToken = BadStringToken;
+ exports.URLToken = URLToken;
+ exports.BadURLToken = BadURLToken;
+ exports.DelimToken = DelimToken;
+ exports.NumberToken = NumberToken;
+ exports.PercentageToken = PercentageToken;
+ exports.DimensionToken = DimensionToken;
+ exports.IncludeMatchToken = IncludeMatchToken;
+ exports.DashMatchToken = DashMatchToken;
+ exports.PrefixMatchToken = PrefixMatchToken;
+ exports.SuffixMatchToken = SuffixMatchToken;
+ exports.SubstringMatchToken = SubstringMatchToken;
+ exports.ColumnToken = ColumnToken;
+ exports.WhitespaceToken = WhitespaceToken;
+ exports.CDOToken = CDOToken;
+ exports.CDCToken = CDCToken;
+ exports.ColonToken = ColonToken;
+ exports.SemicolonToken = SemicolonToken;
+ exports.CommaToken = CommaToken;
+ exports.OpenParenToken = OpenParenToken;
+ exports.CloseParenToken = CloseParenToken;
+ exports.OpenSquareToken = OpenSquareToken;
+ exports.CloseSquareToken = CloseSquareToken;
+ exports.OpenCurlyToken = OpenCurlyToken;
+ exports.CloseCurlyToken = CloseCurlyToken;
+ exports.EOFToken = EOFToken;
+ exports.CSSParserToken = CSSParserToken;
+ exports.GroupingToken = GroupingToken;
+
+ function TokenStream(tokens) {
+ // Assume that tokens is a iterator.
+ this.tokens = tokens;
+ this.token = undefined;
+ this.stored = [];
+ }
+ TokenStream.prototype.consume = function(num) {
+ if(num === undefined) num = 1;
+ while (num-- > 0) {
+ if (this.stored.length > 0) {
+ this.token = this.stored.shift();
+ } else {
+ var n = this.tokens.next();
+ while (!n.done && n.value instanceof CommentToken) {
+ n = this.tokens.next();
+ }
+ if (n.done) {
+ this.token = new EOFToken();
+ break;
+ }
+ this.token = n.value;
+ }
+ }
+ //console.log(this.i, this.token);
+ return true;
+ };
+ TokenStream.prototype.next = function() {
+ if (this.stored.length === 0) {
+ var n = this.tokens.next();
+ while (!n.done && n.value instanceof CommentToken) {
+ n = this.tokens.next();
+ }
+ if (n.done)
+ return new EOFToken();
+ this.stored.push(n.value);
+ }
+ return this.stored[0];
+ };
+ TokenStream.prototype.reconsume = function() {
+ this.stored.unshift(this.token);
+ };
+
+ function parseerror(s, msg) {
+ console.log("Parse error at token " + s.i + ": " + s.token + ".\n" + msg);
+ return true;
+ }
+ function donothing(){ return true; }
+
+ function consumeAListOfRules(s, topLevel) {
+ var rules = [];
+ var rule;
+ while(s.consume()) {
+ if(s.token instanceof WhitespaceToken) {
+ continue;
+ } else if(s.token instanceof EOFToken) {
+ return rules;
+ } else if(s.token instanceof CDOToken || s.token instanceof CDCToken) {
+ if(topLevel == "top-level") continue;
+ s.reconsume();
+ if(rule = consumeAQualifiedRule(s)) rules.push(rule);
+ } else if(s.token instanceof AtKeywordToken) {
+ s.reconsume();
+ if(rule = consumeAnAtRule(s)) rules.push(rule);
+ } else {
+ s.reconsume();
+ if(rule = consumeAQualifiedRule(s)) rules.push(rule);
+ }
+ }
+ }
+
+ function consumeAnAtRule(s) {
+ s.consume();
+ var rule = new AtRule(s.token.value);
+ while(s.consume()) {
+ if(s.token instanceof SemicolonToken || s.token instanceof EOFToken) {
+ return rule;
+ } else if(s.token instanceof OpenCurlyToken) {
+ rule.value = consumeASimpleBlock(s);
+ return rule;
+ } else {
+ s.reconsume();
+ rule.prelude.push(consumeAComponentValue(s));
+ }
+ }
+ }
+
+ function consumeAQualifiedRule(s) {
+ var rule = new QualifiedRule();
+ while(s.consume()) {
+ if(s.token instanceof EOFToken) {
+ parseerror(s, "Hit EOF when trying to parse the prelude of a qualified rule.");
+ return;
+ } else if(s.token instanceof OpenCurlyToken) {
+ rule.value = consumeASimpleBlock(s);
+ return rule;
+ } else {
+ s.reconsume();
+ rule.prelude.push(consumeAComponentValue(s));
+ }
+ }
+ }
+
+ function consumeAListOfDeclarations(s) {
+ var decls = [];
+ while(s.consume()) {
+ if(s.token instanceof WhitespaceToken || s.token instanceof SemicolonToken) {
+ donothing();
+ } else if(s.token instanceof EOFToken) {
+ return decls;
+ } else if(s.token instanceof AtKeywordToken) {
+ s.reconsume();
+ decls.push(consumeAnAtRule(s));
+ } else if(s.token instanceof IdentToken) {
+ var temp = [s.token];
+ while(!(s.next() instanceof SemicolonToken || s.next() instanceof EOFToken))
+ temp.push(consumeAComponentValue(s));
+ var decl;
+ if(decl = consumeADeclaration(new TokenStream(temp))) decls.push(decl);
+ } else {
+ parseerror(s);
+ s.reconsume();
+ while(!(s.next() instanceof SemicolonToken || s.next() instanceof EOFToken))
+ consumeAComponentValue(s);
+ }
+ }
+ }
+
+ function consumeADeclaration(s) {
+ // Assumes that the next input token will be an ident token.
+ s.consume();
+ var decl = new Declaration(s.token.value);
+ while(s.next() instanceof WhitespaceToken) s.consume();
+ if(!(s.next() instanceof ColonToken)) {
+ parseerror(s);
+ return;
+ } else {
+ s.consume();
+ }
+ while(!(s.next() instanceof EOFToken)) {
+ decl.value.push(consumeAComponentValue(s));
+ }
+ var foundImportant = false;
+ for(var i = decl.value.length - 1; i >= 0; i--) {
+ if(decl.value[i] instanceof WhitespaceToken) {
+ continue;
+ } else if(decl.value[i] instanceof IdentToken && decl.value[i].ASCIIMatch("important")) {
+ foundImportant = true;
+ } else if(foundImportant && decl.value[i] instanceof DelimToken && decl.value[i].value == "!") {
+ decl.value.splice(i, decl.value.length);
+ decl.important = true;
+ break;
+ } else {
+ break;
+ }
+ }
+ return decl;
+ }
+
+ function consumeAComponentValue(s) {
+ s.consume();
+ if(s.token instanceof OpenCurlyToken || s.token instanceof OpenSquareToken || s.token instanceof OpenParenToken)
+ return consumeASimpleBlock(s);
+ if(s.token instanceof FunctionToken)
+ return consumeAFunction(s);
+ return s.token;
+ }
+
+ function consumeASimpleBlock(s) {
+ var mirror = s.token.mirror;
+ var block = new SimpleBlock(s.token.value);
+ block.startToken = s.token;
+ while(s.consume()) {
+ if(s.token instanceof EOFToken || (s.token instanceof GroupingToken && s.token.value == mirror))
+ return block;
+ else {
+ s.reconsume();
+ block.value.push(consumeAComponentValue(s));
+ }
+ }
+ }
+
+ function consumeAFunction(s) {
+ var func = new Func(s.token.value);
+ while(s.consume()) {
+ if(s.token instanceof EOFToken || s.token instanceof CloseParenToken)
+ return func;
+ else {
+ s.reconsume();
+ func.value.push(consumeAComponentValue(s));
+ }
+ }
+ }
+
+ function normalizeInput(input) {
+ if(typeof input == "string")
+ return new TokenStream(tokenize(input));
+ if(input instanceof TokenStream)
+ return input;
+ if(typeof (input.next) == "function")
+ return new TokenStream(input);
+ if(input.length !== undefined)
+ return new TokenStream(input[Symbol.iterator]());
+ else throw SyntaxError(input);
+ }
+
+ function parseAStylesheet(s) {
+ s = normalizeInput(s);
+ var sheet = new Stylesheet();
+ sheet.value = consumeAListOfRules(s, "top-level");
+ return sheet;
+ }
+
+ function parseAListOfRules(s) {
+ s = normalizeInput(s);
+ return consumeAListOfRules(s);
+ }
+
+ function parseARule(s) {
+ s = normalizeInput(s);
+ while(s.next() instanceof WhitespaceToken) s.consume();
+ if(s.next() instanceof EOFToken) throw SyntaxError();
+ var rule;
+ var startToken = s.next();
+ if(startToken instanceof AtKeywordToken) {
+ rule = consumeAnAtRule(s);
+ } else {
+ rule = consumeAQualifiedRule(s);
+ if(!rule) throw SyntaxError();
+ }
+ rule.startToken = startToken;
+ rule.endToken = s.token;
+ return rule;
+ }
+
+ function parseADeclaration(s) {
+ s = normalizeInput(s);
+ while(s.next() instanceof WhitespaceToken) s.consume();
+ if(!(s.next() instanceof IdentToken)) throw SyntaxError();
+ var decl = consumeADeclaration(s);
+ if(decl)
+ return decl;
+ else
+ throw SyntaxError();
+ }
+
+ function parseAListOfDeclarations(s) {
+ s = normalizeInput(s);
+ return consumeAListOfDeclarations(s);
+ }
+
+ function parseAComponentValue(s) {
+ s = normalizeInput(s);
+ while(s.next() instanceof WhitespaceToken) s.consume();
+ if(s.next() instanceof EOFToken) throw SyntaxError();
+ var val = consumeAComponentValue(s);
+ if(!val) throw SyntaxError();
+ while(s.next() instanceof WhitespaceToken) s.consume();
+ if(s.next() instanceof EOFToken)
+ return val;
+ throw SyntaxError();
+ }
+
+ function parseAListOfComponentValues(s) {
+ s = normalizeInput(s);
+ var vals = [];
+ while(true) {
+ var val = consumeAComponentValue(s);
+ if(val instanceof EOFToken)
+ return vals;
+ else
+ vals.push(val);
+ }
+ }
+
+ function parseACommaSeparatedListOfComponentValues(s) {
+ s = normalizeInput(s);
+ var listOfCVLs = [];
+ while(true) {
+ var vals = [];
+ while(true) {
+ var val = consumeAComponentValue(s);
+ if(val instanceof EOFToken) {
+ listOfCVLs.push(vals);
+ return listOfCVLs;
+ } else if(val instanceof CommaToken) {
+ listOfCVLs.push(vals);
+ break;
+ } else {
+ vals.push(val);
+ }
+ }
+ }
+ }
+
+
+ function CSSParserRule() { throw "Abstract Base Class"; }
+ CSSParserRule.prototype.toString = function(indent) {
+ return JSON.stringify(this,null,indent);
+ };
+ CSSParserRule.prototype.toJSON = function() {
+ return {type:this.type, value:this.value};
+ };
+
+ function Stylesheet() {
+ this.value = [];
+ return this;
+ }
+ Stylesheet.prototype = Object.create(CSSParserRule.prototype);
+ Stylesheet.prototype.type = "STYLESHEET";
+
+ function AtRule(name) {
+ this.name = name;
+ this.prelude = [];
+ this.value = null;
+ return this;
+ }
+ AtRule.prototype = Object.create(CSSParserRule.prototype);
+ AtRule.prototype.type = "AT-RULE";
+ AtRule.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.name = this.name;
+ json.prelude = this.prelude;
+ return json;
+ };
+
+ function QualifiedRule() {
+ this.prelude = [];
+ this.value = [];
+ return this;
+ }
+ QualifiedRule.prototype = Object.create(CSSParserRule.prototype);
+ QualifiedRule.prototype.type = "QUALIFIED-RULE";
+ QualifiedRule.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.prelude = this.prelude;
+ return json;
+ };
+
+ function Declaration(name) {
+ this.name = name;
+ this.value = [];
+ this.important = false;
+ return this;
+ }
+ Declaration.prototype = Object.create(CSSParserRule.prototype);
+ Declaration.prototype.type = "DECLARATION";
+ Declaration.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.name = this.name;
+ json.important = this.important;
+ return json;
+ };
+
+ function SimpleBlock(type) {
+ this.name = type;
+ this.value = [];
+ return this;
+ }
+ SimpleBlock.prototype = Object.create(CSSParserRule.prototype);
+ SimpleBlock.prototype.type = "BLOCK";
+ SimpleBlock.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.name = this.name;
+ return json;
+ };
+
+ function Func(name) {
+ this.name = name;
+ this.value = [];
+ return this;
+ }
+ Func.prototype = Object.create(CSSParserRule.prototype);
+ Func.prototype.type = "FUNCTION";
+ Func.prototype.toJSON = function() {
+ var json = this.constructor.prototype.constructor.prototype.toJSON.call(this);
+ json.name = this.name;
+ return json;
+ };
+
+ function CSSLexer(text) {
+ this.stream = tokenize(text, {
+ loc: true,
+ offsets: true,
+ keepComments: true
+ });
+ this.lineNumber = 0;
+ this.columnNumber = 0;
+ return this;
+ }
+
+ CSSLexer.prototype.performEOFFixup = function(input, preserveBackslash) {
+ // Just lie for now.
+ return "";
+ };
+
+ CSSLexer.prototype.nextToken = function() {
+ if (!this.stream) {
+ return null;
+ }
+ let v = this.stream.next();
+ if (v.done || v.value.tokenType === "EOF") {
+ this.stream = null;
+ return null;
+ }
+ this.lineNumber = v.value.loc.start.line;
+ this.columnNumber = v.value.loc.start.column;
+ return v.value;
+ };
+
+ // Exportation.
+ exports.CSSParserRule = CSSParserRule;
+ exports.Stylesheet = Stylesheet;
+ exports.AtRule = AtRule;
+ exports.QualifiedRule = QualifiedRule;
+ exports.Declaration = Declaration;
+ exports.SimpleBlock = SimpleBlock;
+ exports.Func = Func;
+ exports.parseAStylesheet = parseAStylesheet;
+ exports.parseAListOfRules = parseAListOfRules;
+ exports.parseARule = parseARule;
+ exports.parseADeclaration = parseADeclaration;
+ exports.parseAListOfDeclarations = parseAListOfDeclarations;
+ exports.parseAComponentValue = parseAComponentValue;
+ exports.parseAListOfComponentValues = parseAListOfComponentValues;
+ exports.parseACommaSeparatedListOfComponentValues = parseACommaSeparatedListOfComponentValues;
+ exports.CSSLexer = CSSLexer;
+
+ }));
+
+
+/***/ },
+/* 74 */
+/***/ function(module, exports) {
+
+ // auto-generated from nsColorNameList.h
+ var cssColors = {
+ aliceblue: [240, 248, 255],
+ antiquewhite: [250, 235, 215],
+ aqua: [0, 255, 255],
+ aquamarine: [127, 255, 212],
+ azure: [240, 255, 255],
+ beige: [245, 245, 220],
+ bisque: [255, 228, 196],
+ black: [0, 0, 0],
+ blanchedalmond: [255, 235, 205],
+ blue: [0, 0, 255],
+ blueviolet: [138, 43, 226],
+ brown: [165, 42, 42],
+ burlywood: [222, 184, 135],
+ cadetblue: [95, 158, 160],
+ chartreuse: [127, 255, 0],
+ chocolate: [210, 105, 30],
+ coral: [255, 127, 80],
+ cornflowerblue: [100, 149, 237],
+ cornsilk: [255, 248, 220],
+ crimson: [220, 20, 60],
+ cyan: [0, 255, 255],
+ darkblue: [0, 0, 139],
+ darkcyan: [0, 139, 139],
+ darkgoldenrod: [184, 134, 11],
+ darkgray: [169, 169, 169],
+ darkgreen: [0, 100, 0],
+ darkgrey: [169, 169, 169],
+ darkkhaki: [189, 183, 107],
+ darkmagenta: [139, 0, 139],
+ darkolivegreen: [85, 107, 47],
+ darkorange: [255, 140, 0],
+ darkorchid: [153, 50, 204],
+ darkred: [139, 0, 0],
+ darksalmon: [233, 150, 122],
+ darkseagreen: [143, 188, 143],
+ darkslateblue: [72, 61, 139],
+ darkslategray: [47, 79, 79],
+ darkslategrey: [47, 79, 79],
+ darkturquoise: [0, 206, 209],
+ darkviolet: [148, 0, 211],
+ deeppink: [255, 20, 147],
+ deepskyblue: [0, 191, 255],
+ dimgray: [105, 105, 105],
+ dimgrey: [105, 105, 105],
+ dodgerblue: [30, 144, 255],
+ firebrick: [178, 34, 34],
+ floralwhite: [255, 250, 240],
+ forestgreen: [34, 139, 34],
+ fuchsia: [255, 0, 255],
+ gainsboro: [220, 220, 220],
+ ghostwhite: [248, 248, 255],
+ gold: [255, 215, 0],
+ goldenrod: [218, 165, 32],
+ gray: [128, 128, 128],
+ grey: [128, 128, 128],
+ green: [0, 128, 0],
+ greenyellow: [173, 255, 47],
+ honeydew: [240, 255, 240],
+ hotpink: [255, 105, 180],
+ indianred: [205, 92, 92],
+ indigo: [75, 0, 130],
+ ivory: [255, 255, 240],
+ khaki: [240, 230, 140],
+ lavender: [230, 230, 250],
+ lavenderblush: [255, 240, 245],
+ lawngreen: [124, 252, 0],
+ lemonchiffon: [255, 250, 205],
+ lightblue: [173, 216, 230],
+ lightcoral: [240, 128, 128],
+ lightcyan: [224, 255, 255],
+ lightgoldenrodyellow: [250, 250, 210],
+ lightgray: [211, 211, 211],
+ lightgreen: [144, 238, 144],
+ lightgrey: [211, 211, 211],
+ lightpink: [255, 182, 193],
+ lightsalmon: [255, 160, 122],
+ lightseagreen: [32, 178, 170],
+ lightskyblue: [135, 206, 250],
+ lightslategray: [119, 136, 153],
+ lightslategrey: [119, 136, 153],
+ lightsteelblue: [176, 196, 222],
+ lightyellow: [255, 255, 224],
+ lime: [0, 255, 0],
+ limegreen: [50, 205, 50],
+ linen: [250, 240, 230],
+ magenta: [255, 0, 255],
+ maroon: [128, 0, 0],
+ mediumaquamarine: [102, 205, 170],
+ mediumblue: [0, 0, 205],
+ mediumorchid: [186, 85, 211],
+ mediumpurple: [147, 112, 219],
+ mediumseagreen: [60, 179, 113],
+ mediumslateblue: [123, 104, 238],
+ mediumspringgreen: [0, 250, 154],
+ mediumturquoise: [72, 209, 204],
+ mediumvioletred: [199, 21, 133],
+ midnightblue: [25, 25, 112],
+ mintcream: [245, 255, 250],
+ mistyrose: [255, 228, 225],
+ moccasin: [255, 228, 181],
+ navajowhite: [255, 222, 173],
+ navy: [0, 0, 128],
+ oldlace: [253, 245, 230],
+ olive: [128, 128, 0],
+ olivedrab: [107, 142, 35],
+ orange: [255, 165, 0],
+ orangered: [255, 69, 0],
+ orchid: [218, 112, 214],
+ palegoldenrod: [238, 232, 170],
+ palegreen: [152, 251, 152],
+ paleturquoise: [175, 238, 238],
+ palevioletred: [219, 112, 147],
+ papayawhip: [255, 239, 213],
+ peachpuff: [255, 218, 185],
+ peru: [205, 133, 63],
+ pink: [255, 192, 203],
+ plum: [221, 160, 221],
+ powderblue: [176, 224, 230],
+ purple: [128, 0, 128],
+ rebeccapurple: [102, 51, 153],
+ red: [255, 0, 0],
+ rosybrown: [188, 143, 143],
+ royalblue: [65, 105, 225],
+ saddlebrown: [139, 69, 19],
+ salmon: [250, 128, 114],
+ sandybrown: [244, 164, 96],
+ seagreen: [46, 139, 87],
+ seashell: [255, 245, 238],
+ sienna: [160, 82, 45],
+ silver: [192, 192, 192],
+ skyblue: [135, 206, 235],
+ slateblue: [106, 90, 205],
+ slategray: [112, 128, 144],
+ slategrey: [112, 128, 144],
+ snow: [255, 250, 250],
+ springgreen: [0, 255, 127],
+ steelblue: [70, 130, 180],
+ tan: [210, 180, 140],
+ teal: [0, 128, 128],
+ thistle: [216, 191, 216],
+ tomato: [255, 99, 71],
+ turquoise: [64, 224, 208],
+ violet: [238, 130, 238],
+ wheat: [245, 222, 179],
+ white: [255, 255, 255],
+ whitesmoke: [245, 245, 245],
+ yellow: [255, 255, 0],
+ yellowgreen: [154, 205, 50],
+ };
+ module.exports = { cssColors };
+
+
+/***/ },
+/* 75 */
+/***/ function(module, exports) {
+
+ // auto-generated by means you would rather not know
+ var cssProperties = {
+ "-moz-appearance": {
+ inherited: false,
+ supports: 0,
+ values: ["-moz-gtk-info-bar", "-moz-mac-disclosure-button-closed", "-moz-mac-disclosure-button-open", "-moz-mac-fullscreen-button", "-moz-mac-help-button", "-moz-mac-vibrancy-dark", "-moz-mac-vibrancy-light", "-moz-win-borderless-glass", "-moz-win-browsertabbar-toolbox", "-moz-win-communications-toolbox", "-moz-win-exclude-glass", "-moz-win-glass", "-moz-win-media-toolbox", "-moz-window-button-box", "-moz-window-button-box-maximized", "-moz-window-button-close", "-moz-window-button-maximize", "-moz-window-button-minimize", "-moz-window-button-restore", "-moz-window-frame-bottom", "-moz-window-frame-left", "-moz-window-frame-right", "-moz-window-titlebar", "-moz-window-titlebar-maximized", "button", "button-arrow-down", "button-arrow-next", "button-arrow-previous", "button-arrow-up", "button-bevel", "button-focus", "caret", "checkbox", "checkbox-container", "checkbox-label", "checkmenuitem", "dialog", "dualbutton", "groupbox", "inherit", "initial", "listbox", "listitem", "menuarrow", "menubar", "menucheckbox", "menuimage", "menuitem", "menuitemtext", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "menupopup", "menuradio", "menuseparator", "meterbar", "meterchunk", "none", "number-input", "progressbar", "progressbar-vertical", "progresschunk", "progresschunk-vertical", "radio", "radio-container", "radio-label", "radiomenuitem", "range", "range-thumb", "resizer", "resizerpanel", "scale-horizontal", "scale-vertical", "scalethumb-horizontal", "scalethumb-vertical", "scalethumbend", "scalethumbstart", "scalethumbtick", "scrollbar", "scrollbar-small", "scrollbarbutton-down", "scrollbarbutton-left", "scrollbarbutton-right", "scrollbarbutton-up", "scrollbarthumb-horizontal", "scrollbarthumb-vertical", "scrollbartrack-horizontal", "scrollbartrack-vertical", "searchfield", "separator", "spinner", "spinner-downbutton", "spinner-textfield", "spinner-upbutton", "splitter", "statusbar", "statusbarpanel", "tab", "tab-scroll-arrow-back", "tab-scroll-arrow-forward", "tabpanel", "tabpanels", "textfield", "textfield-multiline", "toolbar", "toolbarbutton", "toolbarbutton-dropdown", "toolbargripper", "toolbox", "tooltip", "treeheader", "treeheadercell", "treeheadersortarrow", "treeitem", "treeline", "treetwisty", "treetwistyopen", "treeview", "unset", "window", ],
+ },
+ "-moz-outline-radius-topleft": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-outline-radius-topright": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-outline-radius-bottomright": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-outline-radius-bottomleft": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-tab-size": {
+ inherited: true,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "animation-delay": {
+ inherited: false,
+ supports: 64,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "animation-direction": {
+ inherited: false,
+ supports: 0,
+ values: ["alternate", "alternate-reverse", "inherit", "initial", "normal", "reverse", "unset", ],
+ },
+ "animation-duration": {
+ inherited: false,
+ supports: 64,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "animation-fill-mode": {
+ inherited: false,
+ supports: 0,
+ values: ["backwards", "both", "forwards", "inherit", "initial", "none", "unset", ],
+ },
+ "animation-iteration-count": {
+ inherited: false,
+ supports: 1024,
+ values: ["infinite", "inherit", "initial", "unset", ],
+ },
+ "animation-name": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "none", "unset", ],
+ },
+ "animation-play-state": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "paused", "running", "unset", ],
+ },
+ "animation-timing-function": {
+ inherited: false,
+ supports: 256,
+ values: ["cubic-bezier", "ease", "ease-in", "ease-in-out", "ease-out", "inherit", "initial", "linear", "step-end", "step-start", "steps", "unset", ],
+ },
+ "background-attachment": {
+ inherited: false,
+ supports: 0,
+ values: ["fixed", "inherit", "initial", "local", "scroll", "unset", ],
+ },
+ "background-clip": {
+ inherited: false,
+ supports: 0,
+ values: ["border-box", "content-box", "inherit", "initial", "padding-box", "unset", ],
+ },
+ "background-color": {
+ inherited: false,
+ supports: 4,
+ values: ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "background-image": {
+ inherited: false,
+ supports: 648,
+ values: ["-moz-element", "-moz-image-rect", "-moz-linear-gradient", "-moz-radial-gradient", "-moz-repeating-linear-gradient", "-moz-repeating-radial-gradient", "inherit", "initial", "linear-gradient", "none", "radial-gradient", "repeating-linear-gradient", "repeating-radial-gradient", "unset", "url", ],
+ },
+ "background-blend-mode": {
+ inherited: false,
+ supports: 0,
+ values: ["color", "color-burn", "color-dodge", "darken", "difference", "exclusion", "hard-light", "hue", "inherit", "initial", "lighten", "luminosity", "multiply", "normal", "overlay", "saturation", "screen", "soft-light", "unset", ],
+ },
+ "background-origin": {
+ inherited: false,
+ supports: 0,
+ values: ["border-box", "content-box", "inherit", "initial", "padding-box", "unset", ],
+ },
+ "background-position": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "background-repeat": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "no-repeat", "repeat", "repeat-x", "repeat-y", "unset", ],
+ },
+ "background-size": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-binding": {
+ inherited: false,
+ supports: 8,
+ values: ["inherit", "initial", "none", "unset", "url", ],
+ },
+ "block-size": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "border-block-end-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "border-block-end-style": {
+ inherited: false,
+ supports: 0,
+ values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
+ },
+ "border-block-end-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
+ },
+ "border-block-start-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "border-block-start-style": {
+ inherited: false,
+ supports: 0,
+ values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
+ },
+ "border-block-start-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
+ },
+ "border-bottom-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "-moz-border-bottom-colors": {
+ inherited: false,
+ supports: 4,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-bottom-style": {
+ inherited: false,
+ supports: 0,
+ values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
+ },
+ "border-bottom-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
+ },
+ "border-collapse": {
+ inherited: true,
+ supports: 0,
+ values: ["collapse", "inherit", "initial", "separate", "unset", ],
+ },
+ "border-image-source": {
+ inherited: false,
+ supports: 648,
+ values: ["-moz-element", "-moz-image-rect", "-moz-linear-gradient", "-moz-radial-gradient", "-moz-repeating-linear-gradient", "-moz-repeating-radial-gradient", "inherit", "initial", "linear-gradient", "none", "radial-gradient", "repeating-linear-gradient", "repeating-radial-gradient", "unset", "url", ],
+ },
+ "border-image-slice": {
+ inherited: false,
+ supports: 1026,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-image-width": {
+ inherited: false,
+ supports: 1027,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-image-outset": {
+ inherited: false,
+ supports: 1025,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-image-repeat": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-inline-end-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "border-inline-end-style": {
+ inherited: false,
+ supports: 0,
+ values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
+ },
+ "border-inline-end-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
+ },
+ "border-inline-start-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "border-inline-start-style": {
+ inherited: false,
+ supports: 0,
+ values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
+ },
+ "border-inline-start-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
+ },
+ "border-left-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "-moz-border-left-colors": {
+ inherited: false,
+ supports: 4,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-left-style": {
+ inherited: false,
+ supports: 0,
+ values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
+ },
+ "border-left-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
+ },
+ "border-right-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "-moz-border-right-colors": {
+ inherited: false,
+ supports: 4,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-right-style": {
+ inherited: false,
+ supports: 0,
+ values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
+ },
+ "border-right-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
+ },
+ "border-spacing": {
+ inherited: true,
+ supports: 1,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-top-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "-moz-border-top-colors": {
+ inherited: false,
+ supports: 4,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-top-style": {
+ inherited: false,
+ supports: 0,
+ values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
+ },
+ "border-top-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
+ },
+ "border-top-left-radius": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-top-right-radius": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-bottom-right-radius": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "border-bottom-left-radius": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "bottom": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "box-decoration-break": {
+ inherited: false,
+ supports: 0,
+ values: ["clone", "inherit", "initial", "slice", "unset", ],
+ },
+ "box-shadow": {
+ inherited: false,
+ supports: 5,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "box-sizing": {
+ inherited: false,
+ supports: 0,
+ values: ["border-box", "content-box", "inherit", "initial", "padding-box", "unset", ],
+ },
+ "caption-side": {
+ inherited: true,
+ supports: 0,
+ values: ["bottom", "bottom-outside", "inherit", "initial", "left", "right", "top", "top-outside", "unset", ],
+ },
+ "clear": {
+ inherited: false,
+ supports: 0,
+ values: ["both", "inherit", "initial", "inline-end", "inline-start", "left", "none", "right", "unset", ],
+ },
+ "clip": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "color": {
+ inherited: true,
+ supports: 4,
+ values: ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "-moz-column-count": {
+ inherited: false,
+ supports: 1024,
+ values: ["auto", "inherit", "initial", "unset", ],
+ },
+ "-moz-column-fill": {
+ inherited: false,
+ supports: 0,
+ values: ["auto", "balance", "inherit", "initial", "unset", ],
+ },
+ "-moz-column-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "-moz-column-gap": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "normal", "unset", ],
+ },
+ "-moz-column-rule-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "-moz-column-rule-style": {
+ inherited: false,
+ supports: 0,
+ values: ["dashed", "dotted", "double", "groove", "hidden", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
+ },
+ "-moz-column-rule-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
+ },
+ "contain": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "layout", "none", "paint", "strict", "style", "unset", ],
+ },
+ "content": {
+ inherited: false,
+ supports: 8,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-control-character-visibility": {
+ inherited: true,
+ supports: 0,
+ values: ["hidden", "inherit", "initial", "unset", "visible", ],
+ },
+ "counter-increment": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "counter-reset": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "cursor": {
+ inherited: true,
+ supports: 8,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "direction": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "ltr", "rtl", "unset", ],
+ },
+ "display": {
+ inherited: false,
+ supports: 0,
+ values: ["-moz-box", "-moz-deck", "-moz-grid", "-moz-grid-group", "-moz-grid-line", "-moz-groupbox", "-moz-inline-box", "-moz-inline-grid", "-moz-inline-stack", "-moz-popup", "-moz-stack", "block", "contents", "flex", "grid", "inherit", "initial", "inline", "inline-block", "inline-flex", "inline-grid", "inline-table", "list-item", "none", "ruby", "ruby-base", "ruby-base-container", "ruby-text", "ruby-text-container", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "unset", ],
+ },
+ "empty-cells": {
+ inherited: true,
+ supports: 0,
+ values: ["hide", "inherit", "initial", "show", "unset", ],
+ },
+ "align-content": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "align-items": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "align-self": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "flex-basis": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "flex-direction": {
+ inherited: false,
+ supports: 0,
+ values: ["column", "column-reverse", "inherit", "initial", "row", "row-reverse", "unset", ],
+ },
+ "flex-grow": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "flex-shrink": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "flex-wrap": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "nowrap", "unset", "wrap", "wrap-reverse", ],
+ },
+ "order": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "justify-content": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "justify-items": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "justify-self": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "float": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "inline-end", "inline-start", "left", "none", "right", "unset", ],
+ },
+ "-moz-float-edge": {
+ inherited: false,
+ supports: 0,
+ values: ["content-box", "inherit", "initial", "margin-box", "unset", ],
+ },
+ "font-family": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "font-feature-settings": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "font-kerning": {
+ inherited: true,
+ supports: 0,
+ values: ["auto", "inherit", "initial", "none", "normal", "unset", ],
+ },
+ "font-language-override": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "normal", "unset", ],
+ },
+ "font-size": {
+ inherited: true,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "large", "larger", "medium", "small", "smaller", "unset", "x-large", "x-small", "xx-large", "xx-small", ],
+ },
+ "font-size-adjust": {
+ inherited: true,
+ supports: 1024,
+ values: ["inherit", "initial", "none", "unset", ],
+ },
+ "font-stretch": {
+ inherited: true,
+ supports: 0,
+ values: ["condensed", "expanded", "extra-condensed", "extra-expanded", "inherit", "initial", "normal", "semi-condensed", "semi-expanded", "ultra-condensed", "ultra-expanded", "unset", ],
+ },
+ "font-style": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "italic", "normal", "oblique", "unset", ],
+ },
+ "font-synthesis": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "font-variant-alternates": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "font-variant-caps": {
+ inherited: true,
+ supports: 0,
+ values: ["all-petite-caps", "all-small-caps", "inherit", "initial", "normal", "petite-caps", "small-caps", "titling-caps", "unicase", "unset", ],
+ },
+ "font-variant-east-asian": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "font-variant-ligatures": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "font-variant-numeric": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "font-variant-position": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "normal", "sub", "super", "unset", ],
+ },
+ "font-weight": {
+ inherited: true,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-force-broken-image-icon": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-auto-flow": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-auto-columns": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-auto-rows": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-template-areas": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-template-columns": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-template-rows": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-column-start": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-column-end": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-row-start": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-row-end": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "grid-column-gap": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "grid-row-gap": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "height": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "image-orientation": {
+ inherited: true,
+ supports: 16,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-image-region": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "ime-mode": {
+ inherited: false,
+ supports: 0,
+ values: ["active", "auto", "disabled", "inactive", "inherit", "initial", "normal", "unset", ],
+ },
+ "inline-size": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "left": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "letter-spacing": {
+ inherited: true,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "normal", "unset", ],
+ },
+ "line-height": {
+ inherited: true,
+ supports: 1027,
+ values: ["-moz-block-height", "inherit", "initial", "normal", "unset", ],
+ },
+ "list-style-image": {
+ inherited: true,
+ supports: 8,
+ values: ["inherit", "initial", "none", "unset", "url", ],
+ },
+ "list-style-position": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "inside", "outside", "unset", ],
+ },
+ "list-style-type": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "margin-block-end": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "margin-block-start": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "margin-bottom": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "margin-inline-end": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "margin-inline-start": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "margin-left": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "margin-right": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "margin-top": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "marker-offset": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "max-block-size": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "none", "unset", ],
+ },
+ "max-height": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "calc", "inherit", "initial", "none", "unset", ],
+ },
+ "max-inline-size": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "calc", "inherit", "initial", "none", "unset", ],
+ },
+ "max-width": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "calc", "inherit", "initial", "none", "unset", ],
+ },
+ "min-height": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "min-block-size": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "min-inline-size": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "min-width": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "mix-blend-mode": {
+ inherited: false,
+ supports: 0,
+ values: ["color", "color-burn", "color-dodge", "darken", "difference", "exclusion", "hard-light", "hue", "inherit", "initial", "lighten", "luminosity", "multiply", "normal", "overlay", "saturation", "screen", "soft-light", "unset", ],
+ },
+ "isolation": {
+ inherited: false,
+ supports: 0,
+ values: ["auto", "inherit", "initial", "isolate", "unset", ],
+ },
+ "object-fit": {
+ inherited: false,
+ supports: 0,
+ values: ["contain", "cover", "fill", "inherit", "initial", "none", "scale-down", "unset", ],
+ },
+ "object-position": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "offset-block-end": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "offset-block-start": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "offset-inline-end": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "offset-inline-start": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "opacity": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-orient": {
+ inherited: false,
+ supports: 0,
+ values: ["block", "horizontal", "inherit", "initial", "inline", "unset", "vertical", ],
+ },
+ "outline-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "outline-style": {
+ inherited: false,
+ supports: 0,
+ values: ["auto", "dashed", "dotted", "double", "groove", "inherit", "initial", "inset", "none", "outset", "ridge", "solid", "unset", ],
+ },
+ "outline-width": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "medium", "thick", "thin", "unset", ],
+ },
+ "outline-offset": {
+ inherited: false,
+ supports: 1,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "overflow-x": {
+ inherited: false,
+ supports: 0,
+ values: ["-moz-hidden-unscrollable", "auto", "hidden", "inherit", "initial", "scroll", "unset", "visible", ],
+ },
+ "overflow-y": {
+ inherited: false,
+ supports: 0,
+ values: ["-moz-hidden-unscrollable", "auto", "hidden", "inherit", "initial", "scroll", "unset", "visible", ],
+ },
+ "padding-block-end": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "padding-block-start": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "padding-bottom": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "padding-inline-end": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "padding-inline-start": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "padding-left": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "padding-right": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "padding-top": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "page-break-after": {
+ inherited: false,
+ supports: 0,
+ values: ["always", "auto", "avoid", "inherit", "initial", "left", "right", "unset", ],
+ },
+ "page-break-before": {
+ inherited: false,
+ supports: 0,
+ values: ["always", "auto", "avoid", "inherit", "initial", "left", "right", "unset", ],
+ },
+ "page-break-inside": {
+ inherited: false,
+ supports: 0,
+ values: ["auto", "avoid", "inherit", "initial", "unset", ],
+ },
+ "paint-order": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "pointer-events": {
+ inherited: true,
+ supports: 0,
+ values: ["all", "auto", "fill", "inherit", "initial", "none", "painted", "stroke", "unset", "visible", "visiblefill", "visiblepainted", "visiblestroke", ],
+ },
+ "position": {
+ inherited: false,
+ supports: 0,
+ values: ["absolute", "fixed", "inherit", "initial", "relative", "static", "sticky", "unset", ],
+ },
+ "quotes": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "resize": {
+ inherited: false,
+ supports: 0,
+ values: ["both", "horizontal", "inherit", "initial", "none", "unset", "vertical", ],
+ },
+ "right": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "ruby-align": {
+ inherited: true,
+ supports: 0,
+ values: ["center", "inherit", "initial", "space-around", "space-between", "start", "unset", ],
+ },
+ "ruby-position": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "over", "under", "unset", ],
+ },
+ "scroll-behavior": {
+ inherited: false,
+ supports: 0,
+ values: ["auto", "inherit", "initial", "smooth", "unset", ],
+ },
+ "scroll-snap-coordinate": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "scroll-snap-destination": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "scroll-snap-points-x": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "scroll-snap-points-y": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "scroll-snap-type-x": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "mandatory", "none", "proximity", "unset", ],
+ },
+ "scroll-snap-type-y": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "mandatory", "none", "proximity", "unset", ],
+ },
+ "table-layout": {
+ inherited: false,
+ supports: 0,
+ values: ["auto", "fixed", "inherit", "initial", "unset", ],
+ },
+ "text-align": {
+ inherited: true,
+ supports: 0,
+ values: ["-moz-center", "-moz-left", "-moz-right", "center", "end", "inherit", "initial", "justify", "left", "right", "start", "unset", ],
+ },
+ "-moz-text-align-last": {
+ inherited: true,
+ supports: 0,
+ values: ["auto", "center", "end", "inherit", "initial", "justify", "left", "right", "start", "unset", ],
+ },
+ "text-decoration-color": {
+ inherited: false,
+ supports: 4,
+ values: ["-moz-use-text-color", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "text-decoration-line": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "text-decoration-style": {
+ inherited: false,
+ supports: 0,
+ values: ["-moz-none", "dashed", "dotted", "double", "inherit", "initial", "solid", "unset", "wavy", ],
+ },
+ "text-indent": {
+ inherited: true,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "unset", ],
+ },
+ "text-orientation": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "mixed", "sideways", "sideways-right", "unset", "upright", ],
+ },
+ "text-overflow": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "text-shadow": {
+ inherited: true,
+ supports: 5,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-text-size-adjust": {
+ inherited: true,
+ supports: 0,
+ values: ["auto", "inherit", "initial", "none", "unset", ],
+ },
+ "text-transform": {
+ inherited: true,
+ supports: 0,
+ values: ["capitalize", "full-width", "inherit", "initial", "lowercase", "none", "unset", "uppercase", ],
+ },
+ "transform": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "transform-box": {
+ inherited: false,
+ supports: 0,
+ values: ["border-box", "fill-box", "inherit", "initial", "unset", "view-box", ],
+ },
+ "transform-origin": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "perspective-origin": {
+ inherited: false,
+ supports: 3,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "perspective": {
+ inherited: false,
+ supports: 1,
+ values: ["inherit", "initial", "none", "unset", ],
+ },
+ "transform-style": {
+ inherited: false,
+ supports: 0,
+ values: ["flat", "inherit", "initial", "preserve-3d", "unset", ],
+ },
+ "backface-visibility": {
+ inherited: false,
+ supports: 0,
+ values: ["hidden", "inherit", "initial", "unset", "visible", ],
+ },
+ "top": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "transition-delay": {
+ inherited: false,
+ supports: 64,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "transition-duration": {
+ inherited: false,
+ supports: 64,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "transition-property": {
+ inherited: false,
+ supports: 0,
+ values: ["all", "inherit", "initial", "none", "unset", ],
+ },
+ "transition-timing-function": {
+ inherited: false,
+ supports: 256,
+ values: ["cubic-bezier", "ease", "ease-in", "ease-in-out", "ease-out", "inherit", "initial", "linear", "step-end", "step-start", "steps", "unset", ],
+ },
+ "unicode-bidi": {
+ inherited: false,
+ supports: 0,
+ values: ["-moz-isolate", "-moz-isolate-override", "-moz-plaintext", "bidi-override", "embed", "inherit", "initial", "normal", "unset", ],
+ },
+ "-moz-user-focus": {
+ inherited: true,
+ supports: 0,
+ values: ["ignore", "inherit", "initial", "none", "normal", "select-after", "select-all", "select-before", "select-menu", "select-same", "unset", ],
+ },
+ "-moz-user-input": {
+ inherited: true,
+ supports: 0,
+ values: ["auto", "disabled", "enabled", "inherit", "initial", "none", "unset", ],
+ },
+ "-moz-user-modify": {
+ inherited: true,
+ supports: 0,
+ values: ["inherit", "initial", "read-only", "read-write", "unset", "write-only", ],
+ },
+ "-moz-user-select": {
+ inherited: false,
+ supports: 0,
+ values: ["-moz-all", "-moz-none", "-moz-text", "all", "auto", "element", "elements", "inherit", "initial", "none", "text", "toggle", "tri-state", "unset", ],
+ },
+ "vertical-align": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-calc", "-moz-middle-with-baseline", "baseline", "bottom", "calc", "inherit", "initial", "middle", "sub", "super", "text-bottom", "text-top", "top", "unset", ],
+ },
+ "visibility": {
+ inherited: true,
+ supports: 0,
+ values: ["collapse", "hidden", "inherit", "initial", "unset", "visible", ],
+ },
+ "white-space": {
+ inherited: true,
+ supports: 0,
+ values: ["-moz-pre-space", "inherit", "initial", "normal", "nowrap", "pre", "pre-line", "pre-wrap", "unset", ],
+ },
+ "width": {
+ inherited: false,
+ supports: 3,
+ values: ["-moz-available", "-moz-calc", "-moz-fit-content", "-moz-max-content", "-moz-min-content", "auto", "calc", "inherit", "initial", "unset", ],
+ },
+ "-moz-window-dragging": {
+ inherited: true,
+ supports: 0,
+ values: ["drag", "inherit", "initial", "no-drag", "unset", ],
+ },
+ "word-break": {
+ inherited: true,
+ supports: 0,
+ values: ["break-all", "inherit", "initial", "keep-all", "normal", "unset", ],
+ },
+ "word-spacing": {
+ inherited: true,
+ supports: 3,
+ values: ["-moz-calc", "calc", "inherit", "initial", "normal", "unset", ],
+ },
+ "word-wrap": {
+ inherited: true,
+ supports: 0,
+ values: ["break-word", "inherit", "initial", "normal", "unset", ],
+ },
+ "hyphens": {
+ inherited: true,
+ supports: 0,
+ values: ["auto", "inherit", "initial", "manual", "none", "unset", ],
+ },
+ "writing-mode": {
+ inherited: true,
+ supports: 0,
+ values: ["horizontal-tb", "inherit", "initial", "lr", "lr-tb", "rl", "rl-tb", "sideways-lr", "sideways-rl", "tb", "tb-rl", "unset", "vertical-lr", "vertical-rl", ],
+ },
+ "z-index": {
+ inherited: false,
+ supports: 1024,
+ values: ["auto", "inherit", "initial", "unset", ],
+ },
+ "-moz-box-align": {
+ inherited: false,
+ supports: 0,
+ values: ["baseline", "center", "end", "inherit", "initial", "start", "stretch", "unset", ],
+ },
+ "-moz-box-direction": {
+ inherited: false,
+ supports: 0,
+ values: ["inherit", "initial", "normal", "reverse", "unset", ],
+ },
+ "-moz-box-flex": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-box-orient": {
+ inherited: false,
+ supports: 0,
+ values: ["block-axis", "horizontal", "inherit", "initial", "inline-axis", "unset", "vertical", ],
+ },
+ "-moz-box-pack": {
+ inherited: false,
+ supports: 0,
+ values: ["center", "end", "inherit", "initial", "justify", "start", "unset", ],
+ },
+ "-moz-box-ordinal-group": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "-moz-stack-sizing": {
+ inherited: false,
+ supports: 0,
+ values: ["ignore", "inherit", "initial", "stretch-to-fit", "unset", ],
+ },
+ "clip-path": {
+ inherited: false,
+ supports: 8,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "clip-rule": {
+ inherited: true,
+ supports: 0,
+ values: ["evenodd", "inherit", "initial", "nonzero", "unset", ],
+ },
+ "color-interpolation": {
+ inherited: true,
+ supports: 0,
+ values: ["auto", "inherit", "initial", "linearrgb", "srgb", "unset", ],
+ },
+ "color-interpolation-filters": {
+ inherited: true,
+ supports: 0,
+ values: ["auto", "inherit", "initial", "linearrgb", "srgb", "unset", ],
+ },
+ "dominant-baseline": {
+ inherited: false,
+ supports: 0,
+ values: ["alphabetic", "auto", "central", "hanging", "ideographic", "inherit", "initial", "mathematical", "middle", "no-change", "reset-size", "text-after-edge", "text-before-edge", "unset", "use-script", ],
+ },
+ "fill": {
+ inherited: true,
+ supports: 12,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "fill-opacity": {
+ inherited: true,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "fill-rule": {
+ inherited: true,
+ supports: 0,
+ values: ["evenodd", "inherit", "initial", "nonzero", "unset", ],
+ },
+ "filter": {
+ inherited: false,
+ supports: 8,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "flood-color": {
+ inherited: false,
+ supports: 4,
+ values: ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "flood-opacity": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "image-rendering": {
+ inherited: true,
+ supports: 0,
+ values: ["-moz-crisp-edges", "auto", "inherit", "initial", "optimizequality", "optimizespeed", "unset", ],
+ },
+ "lighting-color": {
+ inherited: false,
+ supports: 4,
+ values: ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "marker-end": {
+ inherited: true,
+ supports: 8,
+ values: ["inherit", "initial", "none", "unset", "url", ],
+ },
+ "marker-mid": {
+ inherited: true,
+ supports: 8,
+ values: ["inherit", "initial", "none", "unset", "url", ],
+ },
+ "marker-start": {
+ inherited: true,
+ supports: 8,
+ values: ["inherit", "initial", "none", "unset", "url", ],
+ },
+ "mask": {
+ inherited: false,
+ supports: 8,
+ values: ["inherit", "initial", "none", "unset", "url", ],
+ },
+ "mask-type": {
+ inherited: false,
+ supports: 0,
+ values: ["alpha", "inherit", "initial", "luminance", "unset", ],
+ },
+ "shape-rendering": {
+ inherited: true,
+ supports: 0,
+ values: ["auto", "crispedges", "geometricprecision", "inherit", "initial", "optimizespeed", "unset", ],
+ },
+ "stop-color": {
+ inherited: false,
+ supports: 4,
+ values: ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "hsl", "hsla", "indianred", "indigo", "inherit", "initial", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rgb", "rgba", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "unset", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", ],
+ },
+ "stop-opacity": {
+ inherited: false,
+ supports: 1024,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "stroke": {
+ inherited: true,
+ supports: 12,
+ values: ["inherit", "initial", "unset", ],
+ },
+ "stroke-dasharray": {
+ inherited: true,
+ supports: 1027,