JSFiddle - React, Tailwind, and code Playground

JavaScript

( function( window, document, undefined ) {
	"use strict";

	/**
	 * Main framework.
	 * Consists of utility methods, ConfigManager and ModuleManager.
	 *
	 * Краткое описание (눈_눈;)
	 *
	 * Фреймворк позволяет строить приложение из компонент.
	 * Приложение состоит из компонент разных типов:
	 *   - module - часть приложения, singleton работающий по принципу init-refresh-destroy;
	 *   - class - конструктор некоторого класса;
	 *   - lib - набор методов/свойств;
	 *   - fn - простая функция.
	 *
	 * Компоненты могут зависеть от других компонент, образуя иерархию.
	 * Чем больше зависимостей у компоненты, тем больше ее вес: weight = max(dependence weight) + 1.
	 *
	 * По URL и/или DOM приложение понимает, какие компоненты нужно использовать в данный момент.
	 * Формируется 3 списка:
	 *   - компоненты для удаления;
	 *   - компоненты для обновления;
	 *   - компоненты для инициализации.
	 *
	 * Сначала происходит удаление (от самых тяжелых к самым легким),
	 * затем обновление и инициализация (от самых легких к самым тяжелым).
	 * Компоненты могут удаляться, обновляться или инититься асинхронно,
	 * при этом зависимые компоненты будут дожидаться их.
	 *
	 * TODO:
	 * – Сделать, чтобы Air.define понимал тип модуля по префиксу "module.", "class.", "lib." или "fn.".
	 * – В классах приходится делать util.inherit чтобы пользоваться модулями. Подумать на этот счет.
	 */
	var framework = new function() {
		var self = this;

		/**
		 * Set of utility functions.
		 * @module utility
		 */
		self.utility = new function() {
			var manager = this,
				current_uid = 0;

			/**
			  * Creates function which messages to console with color markers.
			  * @param {string} color - HEX-color.
			  * @return {function} log.
			  *
			  * @callback log
			  * @param {...*} - Usual console.log arguments
			  */
			manager.consoleMessage = function( color, sign, type ) {
				return function() {
					var args = [],
						args_length = arguments.length,
						i;

					for ( i = 0; i <...