Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

211 linhas
7.1 KiB

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  6. 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; };
  7. var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  8. var _isInBrowser = require('is-in-browser');
  9. var _isInBrowser2 = _interopRequireDefault(_isInBrowser);
  10. var _StyleSheet = require('./StyleSheet');
  11. var _StyleSheet2 = _interopRequireDefault(_StyleSheet);
  12. var _PluginsRegistry = require('./PluginsRegistry');
  13. var _PluginsRegistry2 = _interopRequireDefault(_PluginsRegistry);
  14. var _rules = require('./plugins/rules');
  15. var _rules2 = _interopRequireDefault(_rules);
  16. var _observables = require('./plugins/observables');
  17. var _observables2 = _interopRequireDefault(_observables);
  18. var _functions = require('./plugins/functions');
  19. var _functions2 = _interopRequireDefault(_functions);
  20. var _sheets = require('./sheets');
  21. var _sheets2 = _interopRequireDefault(_sheets);
  22. var _StyleRule = require('./rules/StyleRule');
  23. var _StyleRule2 = _interopRequireDefault(_StyleRule);
  24. var _createGenerateClassName = require('./utils/createGenerateClassName');
  25. var _createGenerateClassName2 = _interopRequireDefault(_createGenerateClassName);
  26. var _createRule2 = require('./utils/createRule');
  27. var _createRule3 = _interopRequireDefault(_createRule2);
  28. var _DomRenderer = require('./renderers/DomRenderer');
  29. var _DomRenderer2 = _interopRequireDefault(_DomRenderer);
  30. var _VirtualRenderer = require('./renderers/VirtualRenderer');
  31. var _VirtualRenderer2 = _interopRequireDefault(_VirtualRenderer);
  32. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  33. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  34. var defaultPlugins = _rules2['default'].concat([_observables2['default'], _functions2['default']]);
  35. var instanceCounter = 0;
  36. var Jss = function () {
  37. function Jss(options) {
  38. _classCallCheck(this, Jss);
  39. this.id = instanceCounter++;
  40. this.version = "9.8.7";
  41. this.plugins = new _PluginsRegistry2['default']();
  42. this.options = {
  43. createGenerateClassName: _createGenerateClassName2['default'],
  44. Renderer: _isInBrowser2['default'] ? _DomRenderer2['default'] : _VirtualRenderer2['default'],
  45. plugins: []
  46. };
  47. this.generateClassName = (0, _createGenerateClassName2['default'])();
  48. // eslint-disable-next-line prefer-spread
  49. this.use.apply(this, defaultPlugins);
  50. this.setup(options);
  51. }
  52. _createClass(Jss, [{
  53. key: 'setup',
  54. value: function setup() {
  55. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  56. if (options.createGenerateClassName) {
  57. this.options.createGenerateClassName = options.createGenerateClassName;
  58. // $FlowFixMe
  59. this.generateClassName = options.createGenerateClassName();
  60. }
  61. if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint;
  62. if (options.virtual || options.Renderer) {
  63. this.options.Renderer = options.Renderer || (options.virtual ? _VirtualRenderer2['default'] : _DomRenderer2['default']);
  64. }
  65. // eslint-disable-next-line prefer-spread
  66. if (options.plugins) this.use.apply(this, options.plugins);
  67. return this;
  68. }
  69. /**
  70. * Create a Style Sheet.
  71. */
  72. }, {
  73. key: 'createStyleSheet',
  74. value: function createStyleSheet(styles) {
  75. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  76. var index = options.index;
  77. if (typeof index !== 'number') {
  78. index = _sheets2['default'].index === 0 ? 0 : _sheets2['default'].index + 1;
  79. }
  80. var sheet = new _StyleSheet2['default'](styles, _extends({}, options, {
  81. jss: this,
  82. generateClassName: options.generateClassName || this.generateClassName,
  83. insertionPoint: this.options.insertionPoint,
  84. Renderer: this.options.Renderer,
  85. index: index
  86. }));
  87. this.plugins.onProcessSheet(sheet);
  88. return sheet;
  89. }
  90. /**
  91. * Detach the Style Sheet and remove it from the registry.
  92. */
  93. }, {
  94. key: 'removeStyleSheet',
  95. value: function removeStyleSheet(sheet) {
  96. sheet.detach();
  97. _sheets2['default'].remove(sheet);
  98. return this;
  99. }
  100. /**
  101. * Create a rule without a Style Sheet.
  102. */
  103. }, {
  104. key: 'createRule',
  105. value: function createRule(name) {
  106. var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  107. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  108. // Enable rule without name for inline styles.
  109. if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {
  110. options = style;
  111. style = name;
  112. name = undefined;
  113. }
  114. // Cast from RuleFactoryOptions to RuleOptions
  115. // https://stackoverflow.com/questions/41328728/force-casting-in-flow
  116. var ruleOptions = options;
  117. ruleOptions.jss = this;
  118. ruleOptions.Renderer = this.options.Renderer;
  119. if (!ruleOptions.generateClassName) ruleOptions.generateClassName = this.generateClassName;
  120. if (!ruleOptions.classes) ruleOptions.classes = {};
  121. var rule = (0, _createRule3['default'])(name, style, ruleOptions);
  122. if (!ruleOptions.selector && rule instanceof _StyleRule2['default']) {
  123. rule.selector = '.' + ruleOptions.generateClassName(rule);
  124. }
  125. this.plugins.onProcessRule(rule);
  126. return rule;
  127. }
  128. /**
  129. * Register plugin. Passed function will be invoked with a rule instance.
  130. */
  131. }, {
  132. key: 'use',
  133. value: function use() {
  134. var _this = this;
  135. for (var _len = arguments.length, plugins = Array(_len), _key = 0; _key < _len; _key++) {
  136. plugins[_key] = arguments[_key];
  137. }
  138. plugins.forEach(function (plugin) {
  139. // Avoids applying same plugin twice, at least based on ref.
  140. if (_this.options.plugins.indexOf(plugin) === -1) {
  141. _this.options.plugins.push(plugin);
  142. _this.plugins.use(plugin);
  143. }
  144. });
  145. return this;
  146. }
  147. }]);
  148. return Jss;
  149. }();
  150. exports['default'] = Jss;