react-native-styleman
Version:
Responsive styling library for react native
725 lines (581 loc) • 31.4 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("react"), require("react-native"));
else if(typeof define === 'function' && define.amd)
define("react-native-styleman", ["react", "react-native"], factory);
else if(typeof exports === 'object')
exports["react-native-styleman"] = factory(require("react"), require("react-native"));
else
root["react-native-styleman"] = factory(root["React"], root["react-native"]);
})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_react__, __WEBPACK_EXTERNAL_MODULE_react_native__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/index.js");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./src/Memo.js":
/*!*********************!*\
!*** ./src/Memo.js ***!
\*********************/
/*! exports provided: memo */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "memo", function() { return memo; });
/**
* Cache size 1.
* @param fn
* @returns {Function}
*/
function memo(fn) {
var result;
var cacheInput;
return function (input) {
if (cacheInput === input) {
return result;
} else {
cacheInput = input;
result = fn(input);
return result;
}
};
}
/***/ }),
/***/ "./src/NodeProcessors/MediaQuery.js":
/*!******************************************!*\
!*** ./src/NodeProcessors/MediaQuery.js ***!
\******************************************/
/*! exports provided: mediaProcessor */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mediaProcessor", function() { return mediaProcessor; });
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-native */ "react-native");
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_native__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils */ "./src/Utils.js");
/* harmony import */ var _Memo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Memo */ "./src/Memo.js");
var getCalcDims = function getCalcDims() {
// CSS pixel equivalent resolution or DP resolution.
var dims = react_native__WEBPACK_IMPORTED_MODULE_0__["Dimensions"].get('window');
return {
width: dims.width,
height: dims.height,
screenWidth: dims.width * dims.scale,
screenHeight: dims.height * dims.scale
};
};
var getMediaQueryData = Object(_Memo__WEBPACK_IMPORTED_MODULE_2__["memo"])(function () {
var calcDims = getCalcDims();
return {
width: calcDims.width,
height: calcDims.height,
version: parseFloat(react_native__WEBPACK_IMPORTED_MODULE_0__["Platform"].Version),
orientation: calcDims.width > calcDims.height ? 'landscape' : 'portrait',
platform: react_native__WEBPACK_IMPORTED_MODULE_0__["Platform"].OS,
direction: react_native__WEBPACK_IMPORTED_MODULE_0__["I18nManager"].isRTL ? 'rtl' : 'ltr'
};
}); // validators
var mediaValidators = {
platform: function platform(mediaQueryData, checkDevice) {
return mediaQueryData.device === checkDevice;
},
minVersion: function minVersion(mediaQueryData, _minVersion) {
return mediaQueryData.version >= _minVersion;
},
maxVersion: function maxVersion(mediaQueryData, _maxVersion) {
return mediaQueryData.version <= _maxVersion;
},
minWidth: function minWidth(mediaQueryData, _minWidth) {
return mediaQueryData.width >= _minWidth;
},
maxWidth: function maxWidth(mediaQueryData, _maxWidth) {
return mediaQueryData.width <= _maxWidth;
},
minHeight: function minHeight(mediaQueryData, _minHeight) {
return mediaQueryData.height >= _minHeight;
},
maxHeight: function maxHeight(mediaQueryData, _maxHeight) {
return mediaQueryData.height <= _maxHeight;
},
orientation: function orientation(mediaQueryData, checkOrientation) {
return checkOrientation === mediaQueryData.orientation;
},
direction: function direction(mediaQueryData, layoutDirection) {
return layoutDirection === mediaQueryData.direction;
},
styles: function styles() {
return true;
}
};
/**
* Supported queries:
* - platform: ios | android
* - platformVersion: minVersion, maxVersion,
* - height: minHeight, maxHeight (Normalized, dpi based measure)
* - width: minWidth, maxWidth (Normalized, dpi based measure)
* - orientation: landscape, portrait
* - direction: rtl, ltr
*/
function mediaProcessor(cacheId, styles, key, value) {
if (!Array.isArray(value)) {
value = [value];
}
var mediaQueryData = getMediaQueryData(cacheId);
for (var i = 0; i < value.length; i++) {
var valid = true;
for (var rule in value[i]) {
if (value[i].hasOwnProperty(rule)) {
var validator = mediaValidators[rule];
if (!validator) {
throw new Error('React Native Styleman: Unkown Media rule defined.');
}
if (!validator(mediaQueryData, value[i][rule])) {
valid = false;
break;
}
}
}
if (valid) {
// rule matched apply styles and quit.
var processedStyles = Object(_Utils__WEBPACK_IMPORTED_MODULE_1__["processStyles"])(value[i].styles, cacheId);
Object.assign(styles, processedStyles);
break;
}
}
return styles;
}
/***/ }),
/***/ "./src/NodeProcessors/index.js":
/*!*************************************!*\
!*** ./src/NodeProcessors/index.js ***!
\*************************************/
/*! exports provided: nodeProcessors, registerNodeProcessor */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nodeProcessors", function() { return nodeProcessors; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerNodeProcessor", function() { return registerNodeProcessor; });
/* harmony import */ var _MediaQuery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MediaQuery */ "./src/NodeProcessors/MediaQuery.js");
/**
* Supports following node processors
* @type {Array}
*/
var nodeProcessors = [];
function registerNodeProcessor(keyName, processFunction) {
nodeProcessors.push([keyName, processFunction]);
} // register default processors
registerNodeProcessor('@media', _MediaQuery__WEBPACK_IMPORTED_MODULE_0__["mediaProcessor"]);
/***/ }),
/***/ "./src/Utils.js":
/*!**********************!*\
!*** ./src/Utils.js ***!
\**********************/
/*! exports provided: processStyles, provideValueProcessors */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "processStyles", function() { return processStyles; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "provideValueProcessors", function() { return provideValueProcessors; });
/* harmony import */ var _NodeProcessors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NodeProcessors */ "./src/NodeProcessors/index.js");
/* harmony import */ var _ValueProcessors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ValueProcessors */ "./src/ValueProcessors/index.js");
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function processStyles(stylesObj, cacheId) {
var updatedStylesObj = _objectSpread({}, stylesObj);
for (var i = 0; i < _NodeProcessors__WEBPACK_IMPORTED_MODULE_0__["nodeProcessors"].length; i++) {
var _nodeProcessors$i = _slicedToArray(_NodeProcessors__WEBPACK_IMPORTED_MODULE_0__["nodeProcessors"][i], 2),
key = _nodeProcessors$i[0],
processor = _nodeProcessors$i[1];
if (updatedStylesObj[key]) {
processor(cacheId, updatedStylesObj, key, updatedStylesObj[key]);
delete updatedStylesObj[key];
}
}
return updatedStylesObj;
}
function provideValueProcessors(themeFn) {
return themeFn(_ValueProcessors__WEBPACK_IMPORTED_MODULE_1__["valueProcessors"]);
}
/***/ }),
/***/ "./src/ValueProcessors/Mrem.js":
/*!*************************************!*\
!*** ./src/ValueProcessors/Mrem.js ***!
\*************************************/
/*! exports provided: getMRem */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMRem", function() { return getMRem; });
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-native */ "react-native");
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_native__WEBPACK_IMPORTED_MODULE_0__);
// Styling Utils
var getMRem = function getMRem(SCREEN_WIDTH_DP, DESIGN_GUIDELINES_BASE_WIDTH_DP, MODERATE_SCALING_FACTOR) {
var mulFactor = SCREEN_WIDTH_DP / DESIGN_GUIDELINES_BASE_WIDTH_DP;
return function (value) {
return react_native__WEBPACK_IMPORTED_MODULE_0__["PixelRatio"].roundToNearestPixel(value + (mulFactor * value - value) * MODERATE_SCALING_FACTOR);
};
};
/***/ }),
/***/ "./src/ValueProcessors/Rem.js":
/*!************************************!*\
!*** ./src/ValueProcessors/Rem.js ***!
\************************************/
/*! exports provided: getRem */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRem", function() { return getRem; });
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-native */ "react-native");
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_native__WEBPACK_IMPORTED_MODULE_0__);
// Styling Utils
var getRem = function getRem(SCREEN_WIDTH_DP, DESIGN_GUIDELINES_BASE_WIDTH_DP) {
var mulFactor = SCREEN_WIDTH_DP / DESIGN_GUIDELINES_BASE_WIDTH_DP;
return function (value) {
return react_native__WEBPACK_IMPORTED_MODULE_0__["PixelRatio"].roundToNearestPixel(mulFactor * value);
};
};
/***/ }),
/***/ "./src/ValueProcessors/Round.js":
/*!**************************************!*\
!*** ./src/ValueProcessors/Round.js ***!
\**************************************/
/*! exports provided: getRound */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRound", function() { return getRound; });
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-native */ "react-native");
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_native__WEBPACK_IMPORTED_MODULE_0__);
var getRound = function getRound() {
return function (value) {
return react_native__WEBPACK_IMPORTED_MODULE_0__["PixelRatio"].roundToNearestPixel(value);
};
};
/***/ }),
/***/ "./src/ValueProcessors/ScreenDimsDP.js":
/*!*********************************************!*\
!*** ./src/ValueProcessors/ScreenDimsDP.js ***!
\*********************************************/
/*! exports provided: getScreenWidthDP, getScreenHeightDP */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getScreenWidthDP", function() { return getScreenWidthDP; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getScreenHeightDP", function() { return getScreenHeightDP; });
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-native */ "react-native");
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_native__WEBPACK_IMPORTED_MODULE_0__);
var getScreenWidthDP = function getScreenWidthDP() {
return react_native__WEBPACK_IMPORTED_MODULE_0__["Dimensions"].get('window').width;
};
var getScreenHeightDP = function getScreenHeightDP() {
return react_native__WEBPACK_IMPORTED_MODULE_0__["Dimensions"].get('window').height;
};
/***/ }),
/***/ "./src/ValueProcessors/ScreenDimsPX.js":
/*!*********************************************!*\
!*** ./src/ValueProcessors/ScreenDimsPX.js ***!
\*********************************************/
/*! exports provided: getScreenWidthPX, getScreenHeightPX */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getScreenWidthPX", function() { return getScreenWidthPX; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getScreenHeightPX", function() { return getScreenHeightPX; });
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-native */ "react-native");
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_native__WEBPACK_IMPORTED_MODULE_0__);
var getScreenWidthPX = function getScreenWidthPX() {
var dims = react_native__WEBPACK_IMPORTED_MODULE_0__["Dimensions"].get('window');
return dims.width * dims.scale;
};
var getScreenHeightPX = function getScreenHeightPX() {
var dims = react_native__WEBPACK_IMPORTED_MODULE_0__["Dimensions"].get('window');
return dims.height * dims.scale;
};
/***/ }),
/***/ "./src/ValueProcessors/VRem.js":
/*!*************************************!*\
!*** ./src/ValueProcessors/VRem.js ***!
\*************************************/
/*! exports provided: getVRem */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVRem", function() { return getVRem; });
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-native */ "react-native");
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_native__WEBPACK_IMPORTED_MODULE_0__);
// Styling Utils
var getVRem = function getVRem(SCREEN_HEIGHT_DP, DESIGN_GUIDELINES_BASE_HEIGHT_DP) {
var mulFactor = SCREEN_HEIGHT_DP / DESIGN_GUIDELINES_BASE_HEIGHT_DP;
return function (value) {
return react_native__WEBPACK_IMPORTED_MODULE_0__["PixelRatio"].roundToNearestPixel(mulFactor * value);
};
};
/***/ }),
/***/ "./src/ValueProcessors/index.js":
/*!**************************************!*\
!*** ./src/ValueProcessors/index.js ***!
\**************************************/
/*! exports provided: valueProcessors, registerValueProcessor */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "valueProcessors", function() { return valueProcessors; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerValueProcessor", function() { return registerValueProcessor; });
/* harmony import */ var _Mrem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Mrem */ "./src/ValueProcessors/Mrem.js");
/* harmony import */ var _VRem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VRem */ "./src/ValueProcessors/VRem.js");
/* harmony import */ var _Rem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Rem */ "./src/ValueProcessors/Rem.js");
/* harmony import */ var _Round__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Round */ "./src/ValueProcessors/Round.js");
/* harmony import */ var _ScreenDimsDP__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ScreenDimsDP */ "./src/ValueProcessors/ScreenDimsDP.js");
/* harmony import */ var _ScreenDimsPX__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ScreenDimsPX */ "./src/ValueProcessors/ScreenDimsPX.js");
var valueProcessors = {};
function registerValueProcessor(processFunctionName, processFunction) {
if (!valueProcessors[processFunctionName]) {
valueProcessors[processFunctionName] = processFunction;
} else {
throw new Error("".concat(processFunctionName, " is already registered"));
}
}
registerValueProcessor('getScreenWidthDP', _ScreenDimsDP__WEBPACK_IMPORTED_MODULE_4__["getScreenWidthDP"]);
registerValueProcessor('getScreenHeightDP', _ScreenDimsDP__WEBPACK_IMPORTED_MODULE_4__["getScreenHeightDP"]);
registerValueProcessor('getScreenWidthPX', _ScreenDimsPX__WEBPACK_IMPORTED_MODULE_5__["getScreenWidthPX"]);
registerValueProcessor('getScreenHeightPX', _ScreenDimsPX__WEBPACK_IMPORTED_MODULE_5__["getScreenHeightPX"]);
registerValueProcessor('getRem', _Rem__WEBPACK_IMPORTED_MODULE_2__["getRem"]);
registerValueProcessor('getMRem', _Mrem__WEBPACK_IMPORTED_MODULE_0__["getMRem"]);
registerValueProcessor('getVRem', _VRem__WEBPACK_IMPORTED_MODULE_1__["getVRem"]);
registerValueProcessor('getRound', _Round__WEBPACK_IMPORTED_MODULE_3__["getRound"]);
/***/ }),
/***/ "./src/index.js":
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
/*! exports provided: withStyles, StyleManProvider */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "withStyles", function() { return withStyles; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StyleManProvider", function() { return StyleManProvider; });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-native */ "react-native");
/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_native__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Memo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Memo */ "./src/Memo.js");
/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Utils */ "./src/Utils.js");
function _extends() { _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; }; return _extends.apply(this, arguments); }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var View = react_native__WEBPACK_IMPORTED_MODULE_1___default.a.View;
var ThemeContext = react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext();
var StyleManProvider =
/*#__PURE__*/
function (_React$Component) {
_inherits(StyleManProvider, _React$Component);
function StyleManProvider(props) {
var _this;
_classCallCheck(this, StyleManProvider);
_this = _possibleConstructorReturn(this, _getPrototypeOf(StyleManProvider).call(this, props));
_this.setTheme = _this.setTheme.bind(_assertThisInitialized(_this));
_this.getTheme = _this.getTheme.bind(_assertThisInitialized(_this));
_this.onLayout = _this.onLayout.bind(_assertThisInitialized(_this));
_this.state = {
defaultStyles: {
flex: 1
},
theme: {},
cacheId: 1,
setTheme: _this.setTheme,
getTheme: _this.getTheme
};
return _this;
}
_createClass(StyleManProvider, [{
key: "setTheme",
value: function setTheme(themeFn) {
this.processStyles(themeFn);
}
}, {
key: "getTheme",
value: function getTheme() {
return this.state.theme;
}
}, {
key: "componentWillMount",
value: function componentWillMount() {
this.processStyles();
}
}, {
key: "onLayout",
value: function onLayout(e) {
this.processStyles();
}
}, {
key: "processStyles",
value: function processStyles(themeArg) {
var themeFn = themeArg || this.props.theme;
if (!themeFn || typeof themeFn !== 'function') {
throw 'React Native Styleman: theme prop should be a function.';
}
var cacheId = this.state.cacheId + 1;
var partiallyComputedTheme = Object(_Utils__WEBPACK_IMPORTED_MODULE_3__["provideValueProcessors"])(themeFn);
this.setState({
theme: Object(_Utils__WEBPACK_IMPORTED_MODULE_3__["processStyles"])(partiallyComputedTheme, cacheId),
cacheId: cacheId
});
}
}, {
key: "render",
value: function render() {
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ThemeContext.Provider, {
value: this.state
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(View, {
style: this.props.styles || this.state.defaultStyles,
onLayout: this.onLayout
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.Children.only(this.props.children) && this.props.children));
}
}]);
return StyleManProvider;
}(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component);
function withStyles(stylesFn) {
if (!stylesFn || typeof stylesFn !== 'function') {
throw 'React Native Styleman: styles passed in withStyles function should be wrapped in a function.';
}
var stylesSelector = Object(_Memo__WEBPACK_IMPORTED_MODULE_2__["memo"])(function (themeObj) {
var styles = stylesFn(themeObj.theme);
var processedStyles = {};
var generatedStylesheet;
Object.keys(styles).forEach(function (componentName) {
processedStyles[componentName] = Object(_Utils__WEBPACK_IMPORTED_MODULE_3__["processStyles"])(styles[componentName], themeObj.cacheId);
});
generatedStylesheet = react_native__WEBPACK_IMPORTED_MODULE_1___default.a.StyleSheet.create(processedStyles);
return {
styles: generatedStylesheet,
getTheme: themeObj.getTheme,
setTheme: themeObj.setTheme
};
});
return function (WrapperComponent) {
return function (props) {
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ThemeContext.Consumer, null, function (themeObj) {
var stylesObj = stylesSelector(themeObj);
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrapperComponent, _extends({}, props, {
styles: stylesObj.styles,
setTheme: stylesObj.setTheme,
getTheme: stylesObj.getTheme
}));
});
};
};
}
/***/ }),
/***/ "react":
/*!**************************************************************************************!*\
!*** external {"commonjs":"react","commonjs2":"react","amd":"react","root":"React"} ***!
\**************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_react__;
/***/ }),
/***/ "react-native":
/*!*******************************!*\
!*** external "react-native" ***!
\*******************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_react_native__;
/***/ })
/******/ });
});
//# sourceMappingURL=react-native-styleman.js.map