@startlibs/core 1.0.0-alpha-6o → 1.0.0-alpha-6s

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/index.js +427 -57
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -7,8 +7,10 @@ var _createClass = require('@babel/runtime/helpers/createClass');
7
7
  var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstructorReturn');
8
8
  var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
9
9
  var _inherits = require('@babel/runtime/helpers/inherits');
10
+ var _debounce = require('lodash/fp/debounce');
10
11
  var React = require('react');
11
12
  var _objectDestructuringEmpty = require('@babel/runtime/helpers/objectDestructuringEmpty');
13
+ var _objectSpread = require('@babel/runtime/helpers/objectSpread');
12
14
  var _extends = require('@babel/runtime/helpers/extends');
13
15
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
14
16
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
@@ -17,19 +19,29 @@ var _uniqueId = require('lodash/fp/uniqueId');
17
19
  var _differenceBy = require('lodash/fp/differenceBy');
18
20
  var _set = require('lodash/fp/set');
19
21
  var _findIndex = require('lodash/fp/findIndex');
20
- var _update = require('lodash/fp/update');
22
+ var _isFinite = require('lodash/fp/isFinite');
23
+ var _max = require('lodash/fp/max');
21
24
  var _flatMap = require('lodash/fp/flatMap');
22
25
  var _without = require('lodash/fp/without');
23
- var _identity = require('lodash/fp/identity');
26
+ var _union = require('lodash/fp/union');
27
+ var _update = require('lodash/fp/update');
28
+ var _flow = require('lodash/fp/flow');
24
29
  var ReactDOM = require('react-dom');
25
30
  var styled = require('styled-components');
26
31
  var utils = require('@startlibs/utils');
27
- var _objectSpread = require('@babel/runtime/helpers/objectSpread');
32
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
28
33
  var _typeof = require('@babel/runtime/helpers/typeof');
29
34
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
30
35
  var mitt = require('mitt');
31
- var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
32
36
  var _isArray = require('lodash/fp/isArray');
37
+ require('@babel/runtime/helpers/asyncToGenerator');
38
+ require('@babel/runtime/regenerator');
39
+ require('@babel/runtime/helpers/awaitAsyncGenerator');
40
+ require('@babel/runtime/helpers/wrapAsyncGenerator');
41
+ var _ = require('lodash/fp');
42
+ var _taggedTemplateLiteral = require('@babel/runtime/helpers/taggedTemplateLiteral');
43
+ require('polished');
44
+ var emotion = require('emotion');
33
45
  var _isFunction = require('lodash/fp/isFunction');
34
46
 
35
47
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -39,8 +51,10 @@ var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
39
51
  var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_possibleConstructorReturn);
40
52
  var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);
41
53
  var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
54
+ var _debounce__default = /*#__PURE__*/_interopDefaultLegacy(_debounce);
42
55
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
43
56
  var _objectDestructuringEmpty__default = /*#__PURE__*/_interopDefaultLegacy(_objectDestructuringEmpty);
57
+ var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
44
58
  var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
45
59
  var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
46
60
  var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
@@ -49,18 +63,22 @@ var _uniqueId__default = /*#__PURE__*/_interopDefaultLegacy(_uniqueId);
49
63
  var _differenceBy__default = /*#__PURE__*/_interopDefaultLegacy(_differenceBy);
50
64
  var _set__default = /*#__PURE__*/_interopDefaultLegacy(_set);
51
65
  var _findIndex__default = /*#__PURE__*/_interopDefaultLegacy(_findIndex);
52
- var _update__default = /*#__PURE__*/_interopDefaultLegacy(_update);
66
+ var _isFinite__default = /*#__PURE__*/_interopDefaultLegacy(_isFinite);
67
+ var _max__default = /*#__PURE__*/_interopDefaultLegacy(_max);
53
68
  var _flatMap__default = /*#__PURE__*/_interopDefaultLegacy(_flatMap);
54
69
  var _without__default = /*#__PURE__*/_interopDefaultLegacy(_without);
55
- var _identity__default = /*#__PURE__*/_interopDefaultLegacy(_identity);
70
+ var _union__default = /*#__PURE__*/_interopDefaultLegacy(_union);
71
+ var _update__default = /*#__PURE__*/_interopDefaultLegacy(_update);
72
+ var _flow__default = /*#__PURE__*/_interopDefaultLegacy(_flow);
56
73
  var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
57
74
  var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
58
- var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
75
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
59
76
  var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
60
77
  var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
61
78
  var mitt__default = /*#__PURE__*/_interopDefaultLegacy(mitt);
62
- var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
63
79
  var _isArray__default = /*#__PURE__*/_interopDefaultLegacy(_isArray);
80
+ var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
81
+ var _taggedTemplateLiteral__default = /*#__PURE__*/_interopDefaultLegacy(_taggedTemplateLiteral);
64
82
  var _isFunction__default = /*#__PURE__*/_interopDefaultLegacy(_isFunction);
65
83
 
66
84
  var callList = function callList(list, firstArg) {
@@ -107,6 +125,11 @@ var willUseSharedCallback = function willUseSharedCallback() {
107
125
  return listenerCallbacks;
108
126
  };
109
127
 
128
+ var lastCall = {
129
+ current: null,
130
+ index: 0
131
+ };
132
+
110
133
  var call = function call() {
111
134
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
112
135
  args[_key2] = arguments[_key2];
@@ -114,6 +137,8 @@ var willUseSharedCallback = function willUseSharedCallback() {
114
137
 
115
138
  var resp = callList.apply(void 0, [get()].concat(args));
116
139
  callList.apply(void 0, [getListeners()].concat(args));
140
+ lastCall.current = args;
141
+ lastCall.index++;
117
142
  return resp;
118
143
  };
119
144
 
@@ -129,6 +154,7 @@ var willUseSharedCallback = function willUseSharedCallback() {
129
154
  ref.current = callback;
130
155
  }
131
156
 
157
+ var lastCallIndex = lastCall.index;
132
158
  useEffect(function () {
133
159
  if (!ref.current) {
134
160
  return;
@@ -138,6 +164,10 @@ var willUseSharedCallback = function willUseSharedCallback() {
138
164
  addListener(ref);
139
165
  } else {
140
166
  add(ref);
167
+
168
+ if (lastCallIndex !== lastCall.index && lastCall.current) {
169
+ callList.apply(void 0, [[ref]].concat(_toConsumableArray__default['default'](lastCall.current)));
170
+ }
141
171
  }
142
172
 
143
173
  return function () {
@@ -203,6 +233,26 @@ var willUseSharedState = function willUseSharedState(initialValue) {
203
233
  }, clear];
204
234
  };
205
235
 
236
+ var not_defined = {};
237
+ var useConstant = function useConstant(value) {
238
+ var ref = React.useRef(not_defined);
239
+
240
+ if (ref.current === not_defined) {
241
+ ref.current = value;
242
+ }
243
+
244
+ return ref.current;
245
+ };
246
+ var useLazyConstant = function useLazyConstant(value) {
247
+ var ref = React.useRef(not_defined);
248
+
249
+ if (ref.current === not_defined) {
250
+ ref.current = utils.callIfFunction(value);
251
+ }
252
+
253
+ return ref.current;
254
+ };
255
+
206
256
  var SlotContext = React__default['default'].createContext(new Map());
207
257
 
208
258
  var _willUseSharedState = willUseSharedState(),
@@ -226,30 +276,45 @@ var SlotProvider = function SlotProvider(_ref) {
226
276
  };
227
277
  var Slot = function Slot(_ref2) {
228
278
  var name = _ref2.name,
229
- rest = _objectWithoutProperties__default['default'](_ref2, ["name"]);
279
+ children = _ref2.children,
280
+ rest = _objectWithoutProperties__default['default'](_ref2, ["name", "children"]);
230
281
 
231
282
  var ref = React.useRef();
283
+ var slotInfo = useConstant({
284
+ ref: ref
285
+ });
232
286
  var slots = React.useContext(SlotContext);
233
287
  React.useLayoutEffect(function () {
234
288
  var previous = slots.get(name);
235
- var update = (previous === null || previous === void 0 ? void 0 : previous.update) || _identity__default['default'];
289
+ var updates = (previous === null || previous === void 0 ? void 0 : previous.updates) || [];
236
290
 
237
291
  if (previous === null || previous === void 0 ? void 0 : previous.children) ;
238
292
 
239
- slots.set(name, {
240
- refs: ((previous === null || previous === void 0 ? void 0 : previous.refs) || []).concat([ref])
293
+ slots.set(name, _flow__default['default'](_update__default['default']('infos', _union__default['default']([slotInfo])))(previous));
294
+ updates.forEach(function (v) {
295
+ return v({});
241
296
  });
242
- update();
243
297
  return function () {
298
+ var _previous$infos, _previous$updates;
299
+
244
300
  var previous = slots.get(name);
245
- previous.refs = _without__default['default']([ref], previous.refs);
301
+ previous.infos = _without__default['default']([slotInfo], previous.infos);
246
302
 
247
- if (!previous.refs.length) {
303
+ if (!((_previous$infos = previous.infos) === null || _previous$infos === void 0 ? void 0 : _previous$infos.length) && !((_previous$updates = previous.updates) === null || _previous$updates === void 0 ? void 0 : _previous$updates.length)) {
248
304
  slots.delete(name);
249
305
  }
250
306
  };
251
307
  }, [name]);
252
- return React__default['default'].createElement("div", _extends__default['default']({
308
+ return children ? React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement("div", _extends__default['default']({
309
+ "data-id": name
310
+ }, rest, {
311
+ ref: ref
312
+ })), React__default['default'].Children.map(children, function (c) {
313
+ return React__default['default'].cloneElement(c, _objectSpread__default['default']({}, c.props, {
314
+ name: name,
315
+ stack: Number.MIN_SAFE_INTEGER
316
+ }));
317
+ })) : React__default['default'].createElement("div", _extends__default['default']({
253
318
  "data-id": name
254
319
  }, rest, {
255
320
  ref: ref
@@ -269,12 +334,12 @@ var FillBeforeFlip = function FillBeforeFlip(_ref3) {
269
334
  React.useLayoutEffect(function () {
270
335
  var _slots$get;
271
336
 
272
- var slotRefs = ((_slots$get = slots.get(name)) === null || _slots$get === void 0 ? void 0 : _slots$get.refs) || [];
337
+ var infos = ((_slots$get = slots.get(name)) === null || _slots$get === void 0 ? void 0 : _slots$get.infos) || [];
273
338
 
274
339
  var mounted = _flatMap__default['default'](function (_ref4) {
275
- var current = _ref4.current;
276
- return current;
277
- }, slotRefs);
340
+ var ref = _ref4.ref;
341
+ return ref === null || ref === void 0 ? void 0 : ref.current;
342
+ }, infos);
278
343
 
279
344
  var clones = [];
280
345
 
@@ -299,30 +364,62 @@ var FillBeforeFlip = function FillBeforeFlip(_ref3) {
299
364
  }, children);
300
365
  };
301
366
 
367
+ var useFillState = function useFillState(name, stack) {
368
+ var forceUpdate = React__default['default'].useState(false)[1];
369
+ var slots = React.useContext(SlotContext);
370
+ var renderSlot = slots.get(name);
371
+
372
+ var maxStack = _max__default['default'](renderSlot === null || renderSlot === void 0 ? void 0 : renderSlot.stacks);
373
+
374
+ var onStack = !_isFinite__default['default'](maxStack) || maxStack === stack;
375
+ React.useLayoutEffect(function () {
376
+ var slot = slots.get(name);
377
+
378
+ var updatedSlot = _flow__default['default'](_update__default['default']('updates', _union__default['default']([forceUpdate])), _update__default['default']('stacks', _union__default['default']([stack])))(slot);
379
+
380
+ slots.set(name, updatedSlot);
381
+ updatedSlot.updates.forEach(function (v) {
382
+ return v({});
383
+ });
384
+ return function () {
385
+ var previous = slots.get(name);
386
+ var index = previous.updates.indexOf(forceUpdate);
387
+
388
+ var next = _flow__default['default'](_update__default['default']('updates', utils._s.removeAt(index)), _update__default['default']('stacks', utils._s.removeAt(index)))(previous);
389
+
390
+ slots.set(name, next);
391
+ next.updates.forEach(function (v) {
392
+ return v({});
393
+ });
394
+ };
395
+ }, []);
396
+ return [renderSlot, onStack];
397
+ };
398
+
302
399
  var Fill = function Fill(_ref5) {
303
400
  var name = _ref5.name,
304
401
  children = _ref5.children,
305
- withFlip = _ref5.withFlip;
306
- var slots = React.useContext(SlotContext);
307
- var forceUpdate = React__default['default'].useState({})[1];
308
- var slot = slots.get(name);
402
+ _ref5$stack = _ref5.stack,
403
+ stack = _ref5$stack === void 0 ? 0 : _ref5$stack,
404
+ mountBeforeFlip = _ref5.mountBeforeFlip;
405
+
406
+ var _useFillState = useFillState(name, stack),
407
+ _useFillState2 = _slicedToArray__default['default'](_useFillState, 2),
408
+ slot = _useFillState2[0],
409
+ onStack = _useFillState2[1];
309
410
 
310
- if (slot === null || slot === void 0 ? void 0 : slot.refs) {
311
- return slot === null || slot === void 0 ? void 0 : slot.refs.map(function (ref) {
312
- return (ref === null || ref === void 0 ? void 0 : ref.current) && ReactDOM__default['default'].createPortal(children, ref.current);
411
+ if ((slot === null || slot === void 0 ? void 0 : slot.infos) && onStack) {
412
+ return slot === null || slot === void 0 ? void 0 : slot.infos.map(function (info) {
413
+ var _info$ref;
414
+
415
+ return ((_info$ref = info.ref) === null || _info$ref === void 0 ? void 0 : _info$ref.current) && ReactDOM__default['default'].createPortal(utils.callIfFunction(children, info), info.ref.current);
313
416
  });
314
- } else if (withFlip) {
417
+ } else if (mountBeforeFlip) {
315
418
  return React__default['default'].createElement(FillBeforeFlip, {
316
419
  name: name,
317
420
  slot: slot
318
421
  }, children);
319
422
  } else {
320
- slots.set(name, {
321
- children: children,
322
- update: function update() {
323
- return forceUpdate({});
324
- }
325
- });
326
423
  return null;
327
424
  }
328
425
  };
@@ -536,8 +633,12 @@ var useToggleInternal = function useToggleInternal() {
536
633
  console.log(key, refIsOpen.get() !== value ? "toggle" : "clear", refIsOpen.get(), value);
537
634
  }
538
635
 
539
- if (refIsOpen.get() !== value) {
540
- toggleWith(value);
636
+ var nextValue = utils.callIfFunction(value, refIsOpen.get());
637
+
638
+ if (refIsOpen.get() !== nextValue) {
639
+ toggleWith(function () {
640
+ return nextValue;
641
+ });
541
642
  } else {
542
643
  clearClosing();
543
644
  }
@@ -699,6 +800,10 @@ var usePopupToggle = function usePopupToggle(startWith, callback) {
699
800
  return sameTick = false;
700
801
  }, 1);
701
802
  }
803
+
804
+ if (v === false) {
805
+ prevOpenToggleClose = function prevOpenToggleClose() {};
806
+ }
702
807
  });
703
808
  return toggle;
704
809
  };
@@ -763,6 +868,16 @@ function (_React$Component) {
763
868
  key: "componentDidMount",
764
869
  value: function componentDidMount() {
765
870
  utils.fixMediaQuery();
871
+
872
+ var addVHFix = function addVHFix() {
873
+ var _document$documentEle, _document$documentEle2;
874
+
875
+ var vh = window.innerHeight * 0.01;
876
+ (_document$documentEle = document.documentElement) === null || _document$documentEle === void 0 ? void 0 : (_document$documentEle2 = _document$documentEle.style) === null || _document$documentEle2 === void 0 ? void 0 : _document$documentEle2.setProperty('--vh', "".concat(vh, "px"));
877
+ };
878
+
879
+ window.addEventListener('resize', _debounce__default['default'](200, addVHFix));
880
+ addVHFix();
766
881
  }
767
882
  }, {
768
883
  key: "render",
@@ -937,6 +1052,184 @@ function (_React$Component) {
937
1052
  return WithRef;
938
1053
  }(React__default['default'].Component);
939
1054
 
1055
+ var scrollWidth = function () {
1056
+ if (!window.document) return 0;
1057
+ var html = document.documentElement;
1058
+ var oldOverflow = html.style.overflowY;
1059
+ html.style.overflowY = 'scroll';
1060
+ var width = window.innerWidth - html.clientWidth;
1061
+ html.style.overflowY = oldOverflow;
1062
+ return width;
1063
+ }();
1064
+
1065
+ var callIfFunction = function callIfFunction(prop) {
1066
+ for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {
1067
+ args[_key6 - 1] = arguments[_key6];
1068
+ }
1069
+
1070
+ return typeof prop === "function" ? prop.apply(void 0, args) : prop;
1071
+ };
1072
+ var ifUndefined = function ifUndefined(v) {
1073
+ for (var _len10 = arguments.length, or = new Array(_len10 > 1 ? _len10 - 1 : 0), _key10 = 1; _key10 < _len10; _key10++) {
1074
+ or[_key10 - 1] = arguments[_key10];
1075
+ }
1076
+
1077
+ return v !== undefined ? v : or.length === 1 ? or[0] : ifUndefined.apply(void 0, [or[0]].concat(_toConsumableArray__default['default'](or.slice(1))));
1078
+ };
1079
+
1080
+ var moveElement = ___default['default'].curry(function (from, to, list) {
1081
+ var el = list[from];
1082
+
1083
+ var without = ___default['default'].pullAt(from, list);
1084
+
1085
+ without.splice(to, 0, el);
1086
+ return without;
1087
+ });
1088
+ var unsetOrRemoveAt = ___default['default'].curry(function (path, value) {
1089
+ var pathArr = toPath(path);
1090
+
1091
+ var _pathArr$slice = pathArr.slice(-1),
1092
+ _pathArr$slice2 = _slicedToArray__default['default'](_pathArr$slice, 1),
1093
+ lastKey = _pathArr$slice2[0];
1094
+
1095
+ return update(pathArr.slice(0, -1), function (v) {
1096
+ return Array.isArray(v) ? removeAt(lastKey, v) : unset(lastKey, v);
1097
+ }, value);
1098
+ });
1099
+
1100
+ var sanitizePath = function sanitizePath(path) {
1101
+ return Array.isArray(path) ? path.map(sanitizePath) : typeof path === 'number' ? path.toString() : path === undefined ? [] : path;
1102
+ };
1103
+
1104
+ var toPath = function toPath(path) {
1105
+ return ___default['default'].toPath(sanitizePath(path));
1106
+ };
1107
+
1108
+ var isEmptyPath = function isEmptyPath(path) {
1109
+ return path && !path.length;
1110
+ };
1111
+
1112
+ var update = ___default['default'].curry(function (path, updater, state) {
1113
+ var sanitizedPath = sanitizePath(path);
1114
+
1115
+ if (isEmptyPath(sanitizedPath)) {
1116
+ return updater(state);
1117
+ } else {
1118
+ return ___default['default'].update(sanitizedPath, updater, state);
1119
+ }
1120
+ });
1121
+ var get = ___default['default'].curry(function (path, state) {
1122
+ var sanitizedPath = sanitizePath(path);
1123
+
1124
+ if (isEmptyPath(sanitizedPath)) {
1125
+ return state;
1126
+ } else {
1127
+ return ___default['default'].get(sanitizedPath, state);
1128
+ }
1129
+ });
1130
+ var set = ___default['default'].curry(function (path, value, state) {
1131
+ var sanitizedPath = sanitizePath(path);
1132
+
1133
+ if (isEmptyPath(sanitizedPath)) {
1134
+ return value;
1135
+ } else {
1136
+ return ___default['default'].set(sanitizedPath, value, state);
1137
+ }
1138
+ });
1139
+ var unset = ___default['default'].curry(function (path, state) {
1140
+ var sanitizedPath = sanitizePath(path);
1141
+
1142
+ if (isEmptyPath(sanitizedPath)) {
1143
+ return undefined;
1144
+ } else {
1145
+ return ___default['default'].unset(sanitizedPath, state);
1146
+ }
1147
+ });
1148
+ var removeNAt = ___default['default'].curry(function (pos, n, value) {
1149
+ return _toConsumableArray__default['default'](value.slice(0, Number(pos))).concat(_toConsumableArray__default['default'](value.slice(Number(pos) + n)));
1150
+ });
1151
+ var removeAt = removeNAt(___default['default'].__, 1);
1152
+ var when = ___default['default'].curry(function (cond, fn, value) {
1153
+ return callIfFunction(cond, value) ? fn(value) : value;
1154
+ });
1155
+ var assign = ___default['default'].curry(function (a, b) {
1156
+ return ___default['default'].assign(b, a);
1157
+ });
1158
+ var concat = ___default['default'].curry(function (a, b) {
1159
+ return ___default['default'].concat(b, a);
1160
+ });
1161
+ var each = ___default['default'].each.convert({
1162
+ cap: false
1163
+ });
1164
+ var find = ___default['default'].find.convert({
1165
+ cap: false
1166
+ });
1167
+ var filter = ___default['default'].filter.convert({
1168
+ cap: false
1169
+ });
1170
+ var map = ___default['default'].map.convert({
1171
+ cap: false
1172
+ });
1173
+ var insertAt = ___default['default'].curry(function (pos, newElements, value) {
1174
+ return _toConsumableArray__default['default'](value.slice(0, pos).concat(newElements)).concat(_toConsumableArray__default['default'](value.slice(pos)));
1175
+ });
1176
+
1177
+ function _templateObject() {
1178
+ var data = _taggedTemplateLiteral__default['default'](["\n ", ""]);
1179
+
1180
+ _templateObject = function _templateObject() {
1181
+ return data;
1182
+ };
1183
+
1184
+ return data;
1185
+ }
1186
+ var media = function media() {
1187
+ for (var _len3 = arguments.length, sizePairs = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
1188
+ sizePairs[_key3] = arguments[_key3];
1189
+ }
1190
+
1191
+ return function () {
1192
+ return styled.css(["@media ", "{", "}"], sizePairs.map(function (_ref4) {
1193
+ var _ref5 = _slicedToArray__default['default'](_ref4, 2),
1194
+ size = _ref5[0],
1195
+ type = _ref5[1];
1196
+
1197
+ return "(".concat(type, ": ").concat(size + scrollWidth, "px)");
1198
+ }).join(' and '), styled.css.apply(void 0, arguments));
1199
+ };
1200
+ };
1201
+ media.mobile = media([600, 'max-width']);
1202
+
1203
+ media.between = function (min, max) {
1204
+ return media([min, 'min-width'], [max, 'max-width']);
1205
+ };
1206
+
1207
+ media.max = function (n) {
1208
+ return media([n, 'max-width']);
1209
+ };
1210
+
1211
+ media.min = function (n) {
1212
+ return media([n, 'min-width']);
1213
+ };
1214
+
1215
+ media.desktop = media([601, 'min-width']);
1216
+
1217
+ var getFrameOffset = function getFrameOffset(i, total) {
1218
+ return Math.round(i * 100 / (total - 1));
1219
+ };
1220
+
1221
+ var oneWayAnimation = function oneWayAnimation() {
1222
+ for (var _len4 = arguments.length, frames = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
1223
+ frames[_key4] = arguments[_key4];
1224
+ }
1225
+
1226
+ return emotion.keyframes(_templateObject(), frames.map(function (frame, i) {
1227
+ return !frame ? '' : "".concat(getFrameOffset(i, frames.length), "% {\n ").concat(frame, "\n }");
1228
+ }));
1229
+ };
1230
+ var identityTranslateFrames = oneWayAnimation('transform: translateY(0);', 'transform: translateY(0);');
1231
+ var identityOpacityFrames = oneWayAnimation('opacity: 1;', 'opacity:1;');
1232
+
940
1233
  var addExtraProp = function addExtraProp(element, extra) {
941
1234
  var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
942
1235
  return React__default['default'].cloneElement(element, override ? _objectSpread__default['default']({}, element.props, extra) : _objectSpread__default['default']({}, extra, element.props), element.props.children);
@@ -945,15 +1238,14 @@ var addExtraProp = function addExtraProp(element, extra) {
945
1238
  var WithLazyResource = function WithLazyResource(_ref) {
946
1239
  var value = _ref.value,
947
1240
  wrap = _ref.wrap,
948
- _ref$fallback = _ref.fallback,
949
- fallback = _ref$fallback === void 0 ? null : _ref$fallback,
1241
+ fallback = _ref.fallback,
950
1242
  children = _ref.children,
951
1243
  _ref$forwardProps = _ref.forwardProps,
952
1244
  forwardProps = _ref$forwardProps === void 0 ? false : _ref$forwardProps,
953
1245
  props = _objectWithoutProperties__default['default'](_ref, ["value", "wrap", "fallback", "children", "forwardProps"]);
954
1246
 
955
- return wrap ? React__default['default'].createElement(React__default['default'].Suspense, {
956
- fallback: fallback
1247
+ return wrap || fallback !== undefined ? React__default['default'].createElement(React__default['default'].Suspense, {
1248
+ fallback: ifUndefined(fallback, null)
957
1249
  }, React__default['default'].createElement(Load, {
958
1250
  value: value,
959
1251
  forwardProps: forwardProps && props,
@@ -1119,30 +1411,82 @@ function usePrevious(value, initialValue) {
1119
1411
  });
1120
1412
  return ref.current;
1121
1413
  }
1414
+ function usePreviousUnique(value, initialValue) {
1415
+ var ref = React.useRef(initialValue);
1416
+ React.useEffect(function () {
1417
+ if (value !== ref.current) {
1418
+ ref.current = value;
1419
+ }
1420
+ });
1421
+ return ref.current;
1422
+ }
1122
1423
 
1123
1424
  var useEnsureRef = function useEnsureRef(forwardedRef) {
1124
1425
  var ref = React.useRef();
1125
1426
  return forwardedRef || ref;
1126
1427
  };
1127
1428
 
1128
- var not_defined = {};
1129
- var useConstant = function useConstant(value) {
1130
- var ref = React.useRef(not_defined);
1429
+ var useForceUpdate = function useForceUpdate() {
1430
+ var _useState = React.useState(0),
1431
+ _useState2 = _slicedToArray__default['default'](_useState, 2),
1432
+ value = _useState2[0],
1433
+ setValue = _useState2[1]; // integer state
1131
1434
 
1132
- if (ref.current === not_defined) {
1133
- ref.current = value;
1134
- }
1135
1435
 
1136
- return ref.current;
1436
+ return function () {
1437
+ return setValue(function (value) {
1438
+ return value + 1;
1439
+ });
1440
+ }; // update the state to force render
1137
1441
  };
1138
- var useLazyConstant = function useLazyConstant(value) {
1139
- var ref = React.useRef(not_defined);
1442
+ var willUseForceUpdate = function willUseForceUpdate() {
1443
+ var _willUseSharedState = willUseSharedState(),
1444
+ _willUseSharedState2 = _slicedToArray__default['default'](_willUseSharedState, 3),
1445
+ useValue = _willUseSharedState2[0],
1446
+ set = _willUseSharedState2[2];
1447
+
1448
+ var useForceUpdate = function useForceUpdate() {
1449
+ var _useValue = useValue(0),
1450
+ _useValue2 = _slicedToArray__default['default'](_useValue, 2),
1451
+ v = _useValue2[0],
1452
+ setV = _useValue2[1];
1140
1453
 
1141
- if (ref.current === not_defined) {
1142
- ref.current = utils.callIfFunction(value);
1143
- }
1454
+ return function () {
1455
+ return setV(function (value) {
1456
+ return value + 1;
1457
+ });
1458
+ };
1459
+ };
1144
1460
 
1145
- return ref.current;
1461
+ return [useForceUpdate, function () {
1462
+ return set(function (value) {
1463
+ return value + 1;
1464
+ });
1465
+ }];
1466
+ };
1467
+
1468
+ var useUpdateOnResize = function useUpdateOnResize() {
1469
+ var debounceInterval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 200;
1470
+ var update = useForceUpdate();
1471
+ React.useEffect(function () {
1472
+ var trigger = _debounce__default['default'](debounceInterval, update);
1473
+
1474
+ window.addEventListener('resize', trigger);
1475
+ return function () {
1476
+ window.removeEventListener('resize', trigger);
1477
+ };
1478
+ }, []);
1479
+ };
1480
+
1481
+ var useAsyncEffect = function useAsyncEffect(fn, args) {
1482
+ React.useEffect(function () {
1483
+ var result = fn();
1484
+ return function () {
1485
+ result.then(function (end) {
1486
+ return utils.callIfFunction(end);
1487
+ });
1488
+ };
1489
+ }, args);
1146
1490
  };
1147
1491
 
1148
1492
  var useUpdateEffect = function useUpdateEffect(effect, inputs) {
@@ -1194,9 +1538,11 @@ var parsePathOrSelector = function parsePathOrSelector(pathOrSelector) {
1194
1538
  }
1195
1539
  };
1196
1540
 
1197
- var willUseSpreadState = function willUseSpreadState() {
1198
- var Context = React__default['default'].createContext();
1541
+ var willUseSpreadState = function willUseSpreadState(defaultContextValue) {
1542
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1543
+ var Context = React__default['default'].createContext(defaultContextValue);
1199
1544
  var EMPTY_GLOBAL = {};
1545
+ var prevInitState = EMPTY_GLOBAL;
1200
1546
  var globalState = EMPTY_GLOBAL;
1201
1547
 
1202
1548
  var getGlobalState = function getGlobalState() {
@@ -1213,10 +1559,22 @@ var willUseSpreadState = function willUseSpreadState() {
1213
1559
 
1214
1560
  var state = useRefState(initState, setCallback);
1215
1561
 
1562
+ if (options.initRefCheck) {
1563
+ if (prevInitState !== initState) {
1564
+ globalState = initState;
1565
+ }
1566
+
1567
+ prevInitState = initState;
1568
+ }
1569
+
1216
1570
  if (globalState === EMPTY_GLOBAL) {
1217
1571
  globalState = initState;
1218
1572
  }
1219
1573
 
1574
+ React.useEffect(function () {
1575
+ globalState = state.get();
1576
+ }, []);
1577
+
1220
1578
  var setState = function setState(newState, fastPath, config) {
1221
1579
  // console.log("Fastpath noop:"+fastPath)
1222
1580
  state.set(newState, config);
@@ -1273,9 +1631,16 @@ var willUseSpreadState = function willUseSpreadState() {
1273
1631
  }, pathOrInput);
1274
1632
  useCatalogManager(manager, input);
1275
1633
  var setState = React.useCallback(function (v) {
1276
- return setSpreadState((_isFunction__default['default'](v) ? _update__default['default'] : _set__default['default'])(path, v), path);
1634
+ return setSpreadState((_isFunction__default['default'](v) ? pathOrSelector === undefined ? function () {
1635
+ return v;
1636
+ } : _update__default['default'] : _set__default['default'])(path, v), path);
1277
1637
  }, pathOrInput);
1278
- return [value, setState];
1638
+
1639
+ var getValue = function getValue() {
1640
+ return selector(getGlobalState());
1641
+ };
1642
+
1643
+ return [value, setState, getValue];
1279
1644
  };
1280
1645
 
1281
1646
  return [useProvideSpreadState, useSpreadState, Context, getGlobalState];
@@ -1296,21 +1661,26 @@ exports.WithLazyResource = WithLazyResource;
1296
1661
  exports.WithRef = WithRef;
1297
1662
  exports.clearPopups = clearPopups;
1298
1663
  exports.consumes = consumes;
1664
+ exports.useAsyncEffect = useAsyncEffect;
1299
1665
  exports.useCatalogManager = useCatalogManager;
1300
1666
  exports.useConstant = useConstant;
1301
1667
  exports.useConsumerCatalog = useConsumerCatalog;
1302
1668
  exports.useEnsureRef = useEnsureRef;
1303
1669
  exports.useFill = useFill;
1670
+ exports.useForceUpdate = useForceUpdate;
1304
1671
  exports.useHiddenFill = useHiddenFill;
1305
1672
  exports.useIsUnmounted = useIsUnmounted;
1306
1673
  exports.useLazyConstant = useLazyConstant;
1307
1674
  exports.usePopupToggle = usePopupToggle;
1308
1675
  exports.usePrevious = usePrevious;
1676
+ exports.usePreviousUnique = usePreviousUnique;
1309
1677
  exports.useRefState = useRefState;
1310
1678
  exports.useRefToggle = useRefToggle;
1311
1679
  exports.useTitle = useTitle;
1312
1680
  exports.useToggle = useToggle;
1313
1681
  exports.useUpdateEffect = useUpdateEffect;
1682
+ exports.useUpdateOnResize = useUpdateOnResize;
1683
+ exports.willUseForceUpdate = willUseForceUpdate;
1314
1684
  exports.willUseLayers = willUseLayers;
1315
1685
  exports.willUseSharedCallback = willUseSharedCallback;
1316
1686
  exports.willUseSharedState = willUseSharedState;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@startlibs/core",
3
- "version": "1.0.0-alpha-6o",
3
+ "version": "1.0.0-alpha-6s",
4
4
  "description": "Startlibs Core",
5
5
  "main": "lib/index.js",
6
6
  "sideEffects": false,