@startlibs/core 1.0.0-alpha-6m → 1.0.0-alpha-6q

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 +378 -58
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -9,6 +9,7 @@ var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
9
9
  var _inherits = require('@babel/runtime/helpers/inherits');
10
10
  var React = require('react');
11
11
  var _objectDestructuringEmpty = require('@babel/runtime/helpers/objectDestructuringEmpty');
12
+ var _objectSpread = require('@babel/runtime/helpers/objectSpread');
12
13
  var _extends = require('@babel/runtime/helpers/extends');
13
14
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
14
15
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
@@ -17,19 +18,29 @@ var _uniqueId = require('lodash/fp/uniqueId');
17
18
  var _differenceBy = require('lodash/fp/differenceBy');
18
19
  var _set = require('lodash/fp/set');
19
20
  var _findIndex = require('lodash/fp/findIndex');
20
- var _update = require('lodash/fp/update');
21
+ var _isFinite = require('lodash/fp/isFinite');
22
+ var _max = require('lodash/fp/max');
21
23
  var _flatMap = require('lodash/fp/flatMap');
22
24
  var _without = require('lodash/fp/without');
23
- var _identity = require('lodash/fp/identity');
25
+ var _union = require('lodash/fp/union');
26
+ var _update = require('lodash/fp/update');
27
+ var _flow = require('lodash/fp/flow');
24
28
  var ReactDOM = require('react-dom');
25
29
  var styled = require('styled-components');
26
30
  var utils = require('@startlibs/utils');
27
- var _objectSpread = require('@babel/runtime/helpers/objectSpread');
31
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
28
32
  var _typeof = require('@babel/runtime/helpers/typeof');
29
33
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
30
34
  var mitt = require('mitt');
31
- var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
32
35
  var _isArray = require('lodash/fp/isArray');
36
+ require('@babel/runtime/helpers/asyncToGenerator');
37
+ require('@babel/runtime/regenerator');
38
+ require('@babel/runtime/helpers/awaitAsyncGenerator');
39
+ require('@babel/runtime/helpers/wrapAsyncGenerator');
40
+ var _ = require('lodash/fp');
41
+ var _taggedTemplateLiteral = require('@babel/runtime/helpers/taggedTemplateLiteral');
42
+ require('polished');
43
+ var emotion = require('emotion');
33
44
  var _isFunction = require('lodash/fp/isFunction');
34
45
 
35
46
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -41,6 +52,7 @@ var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeO
41
52
  var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
42
53
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
43
54
  var _objectDestructuringEmpty__default = /*#__PURE__*/_interopDefaultLegacy(_objectDestructuringEmpty);
55
+ var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
44
56
  var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
45
57
  var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
46
58
  var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
@@ -49,18 +61,22 @@ var _uniqueId__default = /*#__PURE__*/_interopDefaultLegacy(_uniqueId);
49
61
  var _differenceBy__default = /*#__PURE__*/_interopDefaultLegacy(_differenceBy);
50
62
  var _set__default = /*#__PURE__*/_interopDefaultLegacy(_set);
51
63
  var _findIndex__default = /*#__PURE__*/_interopDefaultLegacy(_findIndex);
52
- var _update__default = /*#__PURE__*/_interopDefaultLegacy(_update);
64
+ var _isFinite__default = /*#__PURE__*/_interopDefaultLegacy(_isFinite);
65
+ var _max__default = /*#__PURE__*/_interopDefaultLegacy(_max);
53
66
  var _flatMap__default = /*#__PURE__*/_interopDefaultLegacy(_flatMap);
54
67
  var _without__default = /*#__PURE__*/_interopDefaultLegacy(_without);
55
- var _identity__default = /*#__PURE__*/_interopDefaultLegacy(_identity);
68
+ var _union__default = /*#__PURE__*/_interopDefaultLegacy(_union);
69
+ var _update__default = /*#__PURE__*/_interopDefaultLegacy(_update);
70
+ var _flow__default = /*#__PURE__*/_interopDefaultLegacy(_flow);
56
71
  var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
57
72
  var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
58
- var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
73
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
59
74
  var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
60
75
  var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
61
76
  var mitt__default = /*#__PURE__*/_interopDefaultLegacy(mitt);
62
- var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
63
77
  var _isArray__default = /*#__PURE__*/_interopDefaultLegacy(_isArray);
78
+ var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
79
+ var _taggedTemplateLiteral__default = /*#__PURE__*/_interopDefaultLegacy(_taggedTemplateLiteral);
64
80
  var _isFunction__default = /*#__PURE__*/_interopDefaultLegacy(_isFunction);
65
81
 
66
82
  var callList = function callList(list, firstArg) {
@@ -107,6 +123,11 @@ var willUseSharedCallback = function willUseSharedCallback() {
107
123
  return listenerCallbacks;
108
124
  };
109
125
 
126
+ var lastCall = {
127
+ current: null,
128
+ index: 0
129
+ };
130
+
110
131
  var call = function call() {
111
132
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
112
133
  args[_key2] = arguments[_key2];
@@ -114,6 +135,8 @@ var willUseSharedCallback = function willUseSharedCallback() {
114
135
 
115
136
  var resp = callList.apply(void 0, [get()].concat(args));
116
137
  callList.apply(void 0, [getListeners()].concat(args));
138
+ lastCall.current = args;
139
+ lastCall.index++;
117
140
  return resp;
118
141
  };
119
142
 
@@ -129,6 +152,7 @@ var willUseSharedCallback = function willUseSharedCallback() {
129
152
  ref.current = callback;
130
153
  }
131
154
 
155
+ var lastCallIndex = lastCall.index;
132
156
  useEffect(function () {
133
157
  if (!ref.current) {
134
158
  return;
@@ -138,6 +162,10 @@ var willUseSharedCallback = function willUseSharedCallback() {
138
162
  addListener(ref);
139
163
  } else {
140
164
  add(ref);
165
+
166
+ if (lastCallIndex !== lastCall.index && lastCall.current) {
167
+ callList.apply(void 0, [[ref]].concat(_toConsumableArray__default['default'](lastCall.current)));
168
+ }
141
169
  }
142
170
 
143
171
  return function () {
@@ -203,6 +231,26 @@ var willUseSharedState = function willUseSharedState(initialValue) {
203
231
  }, clear];
204
232
  };
205
233
 
234
+ var not_defined = {};
235
+ var useConstant = function useConstant(value) {
236
+ var ref = React.useRef(not_defined);
237
+
238
+ if (ref.current === not_defined) {
239
+ ref.current = value;
240
+ }
241
+
242
+ return ref.current;
243
+ };
244
+ var useLazyConstant = function useLazyConstant(value) {
245
+ var ref = React.useRef(not_defined);
246
+
247
+ if (ref.current === not_defined) {
248
+ ref.current = utils.callIfFunction(value);
249
+ }
250
+
251
+ return ref.current;
252
+ };
253
+
206
254
  var SlotContext = React__default['default'].createContext(new Map());
207
255
 
208
256
  var _willUseSharedState = willUseSharedState(),
@@ -226,30 +274,45 @@ var SlotProvider = function SlotProvider(_ref) {
226
274
  };
227
275
  var Slot = function Slot(_ref2) {
228
276
  var name = _ref2.name,
229
- rest = _objectWithoutProperties__default['default'](_ref2, ["name"]);
277
+ children = _ref2.children,
278
+ rest = _objectWithoutProperties__default['default'](_ref2, ["name", "children"]);
230
279
 
231
280
  var ref = React.useRef();
281
+ var slotInfo = useConstant({
282
+ ref: ref
283
+ });
232
284
  var slots = React.useContext(SlotContext);
233
285
  React.useLayoutEffect(function () {
234
286
  var previous = slots.get(name);
235
- var update = (previous === null || previous === void 0 ? void 0 : previous.update) || _identity__default['default'];
287
+ var updates = (previous === null || previous === void 0 ? void 0 : previous.updates) || [];
236
288
 
237
289
  if (previous === null || previous === void 0 ? void 0 : previous.children) ;
238
290
 
239
- slots.set(name, {
240
- refs: ((previous === null || previous === void 0 ? void 0 : previous.refs) || []).concat([ref])
291
+ slots.set(name, _flow__default['default'](_update__default['default']('infos', _union__default['default']([slotInfo])))(previous));
292
+ updates.forEach(function (v) {
293
+ return v({});
241
294
  });
242
- update();
243
295
  return function () {
296
+ var _previous$infos, _previous$updates;
297
+
244
298
  var previous = slots.get(name);
245
- previous.refs = _without__default['default']([ref], previous.refs);
299
+ previous.infos = _without__default['default']([slotInfo], previous.infos);
246
300
 
247
- if (!previous.refs.length) {
301
+ 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
302
  slots.delete(name);
249
303
  }
250
304
  };
251
305
  }, [name]);
252
- return React__default['default'].createElement("div", _extends__default['default']({
306
+ return children ? React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement("div", _extends__default['default']({
307
+ "data-id": name
308
+ }, rest, {
309
+ ref: ref
310
+ })), React__default['default'].Children.map(children, function (c) {
311
+ return React__default['default'].cloneElement(c, _objectSpread__default['default']({}, c.props, {
312
+ name: name,
313
+ stack: Number.MIN_SAFE_INTEGER
314
+ }));
315
+ })) : React__default['default'].createElement("div", _extends__default['default']({
253
316
  "data-id": name
254
317
  }, rest, {
255
318
  ref: ref
@@ -269,12 +332,12 @@ var FillBeforeFlip = function FillBeforeFlip(_ref3) {
269
332
  React.useLayoutEffect(function () {
270
333
  var _slots$get;
271
334
 
272
- var slotRefs = ((_slots$get = slots.get(name)) === null || _slots$get === void 0 ? void 0 : _slots$get.refs) || [];
335
+ var infos = ((_slots$get = slots.get(name)) === null || _slots$get === void 0 ? void 0 : _slots$get.infos) || [];
273
336
 
274
337
  var mounted = _flatMap__default['default'](function (_ref4) {
275
- var current = _ref4.current;
276
- return current;
277
- }, slotRefs);
338
+ var ref = _ref4.ref;
339
+ return ref === null || ref === void 0 ? void 0 : ref.current;
340
+ }, infos);
278
341
 
279
342
  var clones = [];
280
343
 
@@ -299,30 +362,62 @@ var FillBeforeFlip = function FillBeforeFlip(_ref3) {
299
362
  }, children);
300
363
  };
301
364
 
365
+ var useFillState = function useFillState(name, stack) {
366
+ var forceUpdate = React__default['default'].useState(false)[1];
367
+ var slots = React.useContext(SlotContext);
368
+ var renderSlot = slots.get(name);
369
+
370
+ var maxStack = _max__default['default'](renderSlot === null || renderSlot === void 0 ? void 0 : renderSlot.stacks);
371
+
372
+ var onStack = !_isFinite__default['default'](maxStack) || maxStack === stack;
373
+ React.useLayoutEffect(function () {
374
+ var slot = slots.get(name);
375
+
376
+ var updatedSlot = _flow__default['default'](_update__default['default']('updates', _union__default['default']([forceUpdate])), _update__default['default']('stacks', _union__default['default']([stack])))(slot);
377
+
378
+ slots.set(name, updatedSlot);
379
+ updatedSlot.updates.forEach(function (v) {
380
+ return v({});
381
+ });
382
+ return function () {
383
+ var previous = slots.get(name);
384
+ var index = previous.updates.indexOf(forceUpdate);
385
+
386
+ var next = _flow__default['default'](_update__default['default']('updates', utils._s.removeAt(index)), _update__default['default']('stacks', utils._s.removeAt(index)))(previous);
387
+
388
+ slots.set(name, next);
389
+ next.updates.forEach(function (v) {
390
+ return v({});
391
+ });
392
+ };
393
+ }, []);
394
+ return [renderSlot, onStack];
395
+ };
396
+
302
397
  var Fill = function Fill(_ref5) {
303
398
  var name = _ref5.name,
304
399
  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);
400
+ _ref5$stack = _ref5.stack,
401
+ stack = _ref5$stack === void 0 ? 0 : _ref5$stack,
402
+ mountBeforeFlip = _ref5.mountBeforeFlip;
403
+
404
+ var _useFillState = useFillState(name, stack),
405
+ _useFillState2 = _slicedToArray__default['default'](_useFillState, 2),
406
+ slot = _useFillState2[0],
407
+ onStack = _useFillState2[1];
309
408
 
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);
409
+ if ((slot === null || slot === void 0 ? void 0 : slot.infos) && onStack) {
410
+ return slot === null || slot === void 0 ? void 0 : slot.infos.map(function (info) {
411
+ var _info$ref;
412
+
413
+ 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
414
  });
314
- } else if (withFlip) {
415
+ } else if (mountBeforeFlip) {
315
416
  return React__default['default'].createElement(FillBeforeFlip, {
316
417
  name: name,
317
418
  slot: slot
318
419
  }, children);
319
420
  } else {
320
- slots.set(name, {
321
- children: children,
322
- update: function update() {
323
- return forceUpdate({});
324
- }
325
- });
326
421
  return null;
327
422
  }
328
423
  };
@@ -519,7 +614,7 @@ var useToggleInternal = function useToggleInternal() {
519
614
  var newValue = refIsOpen.get() === calledValue ? !calledValue : calledValue;
520
615
 
521
616
  if (!isUnmounted() && refIsOpen.get() !== newValue) {
522
- var result = utils.callIfFunction(callback, newValue, prevValue);
617
+ var result = utils.callIfFunction(callback, newValue, refIsOpen.get());
523
618
 
524
619
  if (result === false) {
525
620
  return;
@@ -536,8 +631,12 @@ var useToggleInternal = function useToggleInternal() {
536
631
  console.log(key, refIsOpen.get() !== value ? "toggle" : "clear", refIsOpen.get(), value);
537
632
  }
538
633
 
539
- if (refIsOpen.get() !== value) {
540
- toggleWith(value);
634
+ var nextValue = utils.callIfFunction(value, refIsOpen.get());
635
+
636
+ if (refIsOpen.get() !== nextValue) {
637
+ toggleWith(function () {
638
+ return nextValue;
639
+ });
541
640
  } else {
542
641
  clearClosing();
543
642
  }
@@ -688,7 +787,7 @@ var usePopupToggle = function usePopupToggle(startWith, callback) {
688
787
  var result = utils.callIfFunction(callback, v, prev);
689
788
 
690
789
  if (result === false) {
691
- return;
790
+ return false;
692
791
  }
693
792
 
694
793
  if (v !== false && prevOpenToggleClose !== toggle.close) {
@@ -699,6 +798,10 @@ var usePopupToggle = function usePopupToggle(startWith, callback) {
699
798
  return sameTick = false;
700
799
  }, 1);
701
800
  }
801
+
802
+ if (v === false) {
803
+ prevOpenToggleClose = function prevOpenToggleClose() {};
804
+ }
702
805
  });
703
806
  return toggle;
704
807
  };
@@ -937,6 +1040,184 @@ function (_React$Component) {
937
1040
  return WithRef;
938
1041
  }(React__default['default'].Component);
939
1042
 
1043
+ var scrollWidth = function () {
1044
+ if (!window.document) return 0;
1045
+ var html = document.documentElement;
1046
+ var oldOverflow = html.style.overflowY;
1047
+ html.style.overflowY = 'scroll';
1048
+ var width = window.innerWidth - html.clientWidth;
1049
+ html.style.overflowY = oldOverflow;
1050
+ return width;
1051
+ }();
1052
+
1053
+ var callIfFunction = function callIfFunction(prop) {
1054
+ for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {
1055
+ args[_key6 - 1] = arguments[_key6];
1056
+ }
1057
+
1058
+ return typeof prop === "function" ? prop.apply(void 0, args) : prop;
1059
+ };
1060
+ var ifUndefined = function ifUndefined(v) {
1061
+ for (var _len10 = arguments.length, or = new Array(_len10 > 1 ? _len10 - 1 : 0), _key10 = 1; _key10 < _len10; _key10++) {
1062
+ or[_key10 - 1] = arguments[_key10];
1063
+ }
1064
+
1065
+ return v !== undefined ? v : or.length === 1 ? or[0] : ifUndefined.apply(void 0, [or[0]].concat(_toConsumableArray__default['default'](or.slice(1))));
1066
+ };
1067
+
1068
+ var moveElement = ___default['default'].curry(function (from, to, list) {
1069
+ var el = list[from];
1070
+
1071
+ var without = ___default['default'].pullAt(from, list);
1072
+
1073
+ without.splice(to, 0, el);
1074
+ return without;
1075
+ });
1076
+ var unsetOrRemoveAt = ___default['default'].curry(function (path, value) {
1077
+ var pathArr = toPath(path);
1078
+
1079
+ var _pathArr$slice = pathArr.slice(-1),
1080
+ _pathArr$slice2 = _slicedToArray__default['default'](_pathArr$slice, 1),
1081
+ lastKey = _pathArr$slice2[0];
1082
+
1083
+ return update(pathArr.slice(0, -1), function (v) {
1084
+ return Array.isArray(v) ? removeAt(lastKey, v) : unset(lastKey, v);
1085
+ }, value);
1086
+ });
1087
+
1088
+ var sanitizePath = function sanitizePath(path) {
1089
+ return Array.isArray(path) ? path.map(sanitizePath) : typeof path === 'number' ? path.toString() : path === undefined ? [] : path;
1090
+ };
1091
+
1092
+ var toPath = function toPath(path) {
1093
+ return ___default['default'].toPath(sanitizePath(path));
1094
+ };
1095
+
1096
+ var isEmptyPath = function isEmptyPath(path) {
1097
+ return path && !path.length;
1098
+ };
1099
+
1100
+ var update = ___default['default'].curry(function (path, updater, state) {
1101
+ var sanitizedPath = sanitizePath(path);
1102
+
1103
+ if (isEmptyPath(sanitizedPath)) {
1104
+ return updater(state);
1105
+ } else {
1106
+ return ___default['default'].update(sanitizedPath, updater, state);
1107
+ }
1108
+ });
1109
+ var get = ___default['default'].curry(function (path, state) {
1110
+ var sanitizedPath = sanitizePath(path);
1111
+
1112
+ if (isEmptyPath(sanitizedPath)) {
1113
+ return state;
1114
+ } else {
1115
+ return ___default['default'].get(sanitizedPath, state);
1116
+ }
1117
+ });
1118
+ var set = ___default['default'].curry(function (path, value, state) {
1119
+ var sanitizedPath = sanitizePath(path);
1120
+
1121
+ if (isEmptyPath(sanitizedPath)) {
1122
+ return value;
1123
+ } else {
1124
+ return ___default['default'].set(sanitizedPath, value, state);
1125
+ }
1126
+ });
1127
+ var unset = ___default['default'].curry(function (path, state) {
1128
+ var sanitizedPath = sanitizePath(path);
1129
+
1130
+ if (isEmptyPath(sanitizedPath)) {
1131
+ return undefined;
1132
+ } else {
1133
+ return ___default['default'].unset(sanitizedPath, state);
1134
+ }
1135
+ });
1136
+ var removeNAt = ___default['default'].curry(function (pos, n, value) {
1137
+ return _toConsumableArray__default['default'](value.slice(0, Number(pos))).concat(_toConsumableArray__default['default'](value.slice(Number(pos) + n)));
1138
+ });
1139
+ var removeAt = removeNAt(___default['default'].__, 1);
1140
+ var when = ___default['default'].curry(function (cond, fn, value) {
1141
+ return callIfFunction(cond, value) ? fn(value) : value;
1142
+ });
1143
+ var assign = ___default['default'].curry(function (a, b) {
1144
+ return ___default['default'].assign(b, a);
1145
+ });
1146
+ var concat = ___default['default'].curry(function (a, b) {
1147
+ return ___default['default'].concat(b, a);
1148
+ });
1149
+ var each = ___default['default'].each.convert({
1150
+ cap: false
1151
+ });
1152
+ var find = ___default['default'].find.convert({
1153
+ cap: false
1154
+ });
1155
+ var filter = ___default['default'].filter.convert({
1156
+ cap: false
1157
+ });
1158
+ var map = ___default['default'].map.convert({
1159
+ cap: false
1160
+ });
1161
+ var insertAt = ___default['default'].curry(function (pos, newElements, value) {
1162
+ return _toConsumableArray__default['default'](value.slice(0, pos).concat(newElements)).concat(_toConsumableArray__default['default'](value.slice(pos)));
1163
+ });
1164
+
1165
+ function _templateObject() {
1166
+ var data = _taggedTemplateLiteral__default['default'](["\n ", ""]);
1167
+
1168
+ _templateObject = function _templateObject() {
1169
+ return data;
1170
+ };
1171
+
1172
+ return data;
1173
+ }
1174
+ var media = function media() {
1175
+ for (var _len = arguments.length, sizePairs = new Array(_len), _key = 0; _key < _len; _key++) {
1176
+ sizePairs[_key] = arguments[_key];
1177
+ }
1178
+
1179
+ return function () {
1180
+ return styled.css(["@media ", "{", "}"], sizePairs.map(function (_ref4) {
1181
+ var _ref5 = _slicedToArray__default['default'](_ref4, 2),
1182
+ size = _ref5[0],
1183
+ type = _ref5[1];
1184
+
1185
+ return "(".concat(type, ": ").concat(size + scrollWidth, "px)");
1186
+ }).join(' and '), styled.css.apply(void 0, arguments));
1187
+ };
1188
+ };
1189
+ media.mobile = media([600, 'max-width']);
1190
+
1191
+ media.between = function (min, max) {
1192
+ return media([min, 'min-width'], [max, 'max-width']);
1193
+ };
1194
+
1195
+ media.max = function (n) {
1196
+ return media([n, 'max-width']);
1197
+ };
1198
+
1199
+ media.min = function (n) {
1200
+ return media([n, 'min-width']);
1201
+ };
1202
+
1203
+ media.desktop = media([601, 'min-width']);
1204
+
1205
+ var getFrameOffset = function getFrameOffset(i, total) {
1206
+ return Math.round(i * 100 / (total - 1));
1207
+ };
1208
+
1209
+ var oneWayAnimation = function oneWayAnimation() {
1210
+ for (var _len2 = arguments.length, frames = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1211
+ frames[_key2] = arguments[_key2];
1212
+ }
1213
+
1214
+ return emotion.keyframes(_templateObject(), frames.map(function (frame, i) {
1215
+ return !frame ? '' : "".concat(getFrameOffset(i, frames.length), "% {\n ").concat(frame, "\n }");
1216
+ }));
1217
+ };
1218
+ var identityTranslateFrames = oneWayAnimation('transform: translateY(0);', 'transform: translateY(0);');
1219
+ var identityOpacityFrames = oneWayAnimation('opacity: 1;', 'opacity:1;');
1220
+
940
1221
  var addExtraProp = function addExtraProp(element, extra) {
941
1222
  var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
942
1223
  return React__default['default'].cloneElement(element, override ? _objectSpread__default['default']({}, element.props, extra) : _objectSpread__default['default']({}, extra, element.props), element.props.children);
@@ -945,15 +1226,14 @@ var addExtraProp = function addExtraProp(element, extra) {
945
1226
  var WithLazyResource = function WithLazyResource(_ref) {
946
1227
  var value = _ref.value,
947
1228
  wrap = _ref.wrap,
948
- _ref$fallback = _ref.fallback,
949
- fallback = _ref$fallback === void 0 ? null : _ref$fallback,
1229
+ fallback = _ref.fallback,
950
1230
  children = _ref.children,
951
1231
  _ref$forwardProps = _ref.forwardProps,
952
1232
  forwardProps = _ref$forwardProps === void 0 ? false : _ref$forwardProps,
953
1233
  props = _objectWithoutProperties__default['default'](_ref, ["value", "wrap", "fallback", "children", "forwardProps"]);
954
1234
 
955
- return wrap ? React__default['default'].createElement(React__default['default'].Suspense, {
956
- fallback: fallback
1235
+ return wrap || fallback !== undefined ? React__default['default'].createElement(React__default['default'].Suspense, {
1236
+ fallback: ifUndefined(fallback, null)
957
1237
  }, React__default['default'].createElement(Load, {
958
1238
  value: value,
959
1239
  forwardProps: forwardProps && props,
@@ -1119,30 +1399,58 @@ function usePrevious(value, initialValue) {
1119
1399
  });
1120
1400
  return ref.current;
1121
1401
  }
1402
+ function usePreviousUnique(value, initialValue) {
1403
+ var ref = React.useRef(initialValue);
1404
+ React.useEffect(function () {
1405
+ if (value !== ref.current) {
1406
+ ref.current = value;
1407
+ }
1408
+ });
1409
+ return ref.current;
1410
+ }
1122
1411
 
1123
1412
  var useEnsureRef = function useEnsureRef(forwardedRef) {
1124
1413
  var ref = React.useRef();
1125
1414
  return forwardedRef || ref;
1126
1415
  };
1127
1416
 
1128
- var not_defined = {};
1129
- var useConstant = function useConstant(value) {
1130
- var ref = React.useRef(not_defined);
1417
+ var useForceUpdate = function useForceUpdate() {
1418
+ var _useState = React.useState(0),
1419
+ _useState2 = _slicedToArray__default['default'](_useState, 2),
1420
+ value = _useState2[0],
1421
+ setValue = _useState2[1]; // integer state
1131
1422
 
1132
- if (ref.current === not_defined) {
1133
- ref.current = value;
1134
- }
1135
1423
 
1136
- return ref.current;
1424
+ return function () {
1425
+ return setValue(function (value) {
1426
+ return value + 1;
1427
+ });
1428
+ }; // update the state to force render
1137
1429
  };
1138
- var useLazyConstant = function useLazyConstant(value) {
1139
- var ref = React.useRef(not_defined);
1430
+ var willUseForceUpdate = function willUseForceUpdate() {
1431
+ var _willUseSharedState = willUseSharedState(),
1432
+ _willUseSharedState2 = _slicedToArray__default['default'](_willUseSharedState, 3),
1433
+ useValue = _willUseSharedState2[0],
1434
+ set = _willUseSharedState2[2];
1435
+
1436
+ var useForceUpdate = function useForceUpdate() {
1437
+ var _useValue = useValue(0),
1438
+ _useValue2 = _slicedToArray__default['default'](_useValue, 2),
1439
+ v = _useValue2[0],
1440
+ setV = _useValue2[1];
1140
1441
 
1141
- if (ref.current === not_defined) {
1142
- ref.current = utils.callIfFunction(value);
1143
- }
1442
+ return function () {
1443
+ return setV(function (value) {
1444
+ return value + 1;
1445
+ });
1446
+ };
1447
+ };
1144
1448
 
1145
- return ref.current;
1449
+ return [useForceUpdate, function () {
1450
+ return set(function (value) {
1451
+ return value + 1;
1452
+ });
1453
+ }];
1146
1454
  };
1147
1455
 
1148
1456
  var useUpdateEffect = function useUpdateEffect(effect, inputs) {
@@ -1194,8 +1502,8 @@ var parsePathOrSelector = function parsePathOrSelector(pathOrSelector) {
1194
1502
  }
1195
1503
  };
1196
1504
 
1197
- var willUseSpreadState = function willUseSpreadState() {
1198
- var Context = React__default['default'].createContext();
1505
+ var willUseSpreadState = function willUseSpreadState(defaultContextValue) {
1506
+ var Context = React__default['default'].createContext(defaultContextValue);
1199
1507
  var EMPTY_GLOBAL = {};
1200
1508
  var globalState = EMPTY_GLOBAL;
1201
1509
 
@@ -1217,6 +1525,10 @@ var willUseSpreadState = function willUseSpreadState() {
1217
1525
  globalState = initState;
1218
1526
  }
1219
1527
 
1528
+ React.useEffect(function () {
1529
+ globalState = state.get();
1530
+ }, []);
1531
+
1220
1532
  var setState = function setState(newState, fastPath, config) {
1221
1533
  // console.log("Fastpath noop:"+fastPath)
1222
1534
  state.set(newState, config);
@@ -1275,7 +1587,12 @@ var willUseSpreadState = function willUseSpreadState() {
1275
1587
  var setState = React.useCallback(function (v) {
1276
1588
  return setSpreadState((_isFunction__default['default'](v) ? _update__default['default'] : _set__default['default'])(path, v), path);
1277
1589
  }, pathOrInput);
1278
- return [value, setState];
1590
+
1591
+ var getValue = function getValue() {
1592
+ return selector(getGlobalState());
1593
+ };
1594
+
1595
+ return [value, setState, getValue];
1279
1596
  };
1280
1597
 
1281
1598
  return [useProvideSpreadState, useSpreadState, Context, getGlobalState];
@@ -1301,16 +1618,19 @@ exports.useConstant = useConstant;
1301
1618
  exports.useConsumerCatalog = useConsumerCatalog;
1302
1619
  exports.useEnsureRef = useEnsureRef;
1303
1620
  exports.useFill = useFill;
1621
+ exports.useForceUpdate = useForceUpdate;
1304
1622
  exports.useHiddenFill = useHiddenFill;
1305
1623
  exports.useIsUnmounted = useIsUnmounted;
1306
1624
  exports.useLazyConstant = useLazyConstant;
1307
1625
  exports.usePopupToggle = usePopupToggle;
1308
1626
  exports.usePrevious = usePrevious;
1627
+ exports.usePreviousUnique = usePreviousUnique;
1309
1628
  exports.useRefState = useRefState;
1310
1629
  exports.useRefToggle = useRefToggle;
1311
1630
  exports.useTitle = useTitle;
1312
1631
  exports.useToggle = useToggle;
1313
1632
  exports.useUpdateEffect = useUpdateEffect;
1633
+ exports.willUseForceUpdate = willUseForceUpdate;
1314
1634
  exports.willUseLayers = willUseLayers;
1315
1635
  exports.willUseSharedCallback = willUseSharedCallback;
1316
1636
  exports.willUseSharedState = willUseSharedState;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@startlibs/core",
3
- "version": "1.0.0-alpha-6m",
3
+ "version": "1.0.0-alpha-6q",
4
4
  "description": "Startlibs Core",
5
5
  "main": "lib/index.js",
6
6
  "sideEffects": false,