brew-js-react 0.2.0 → 0.2.3

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.
@@ -225,6 +225,7 @@ var external_commonjs_zeta_dom_commonjs2_zeta_dom_amd_zeta_dom_root_zeta_ = __we
225
225
 
226
226
  var _lib$util = external_commonjs_zeta_dom_commonjs2_zeta_dom_amd_zeta_dom_root_zeta_.util,
227
227
  noop = _lib$util.noop,
228
+ pipe = _lib$util.pipe,
228
229
  either = _lib$util.either,
229
230
  is = _lib$util.is,
230
231
  isUndefinedOrNull = _lib$util.isUndefinedOrNull,
@@ -260,7 +261,7 @@ var _lib$util = external_commonjs_zeta_dom_commonjs2_zeta_dom_amd_zeta_dom_root_
260
261
  setImmediateOnce = _lib$util.setImmediateOnce,
261
262
  throwNotFunction = _lib$util.throwNotFunction,
262
263
  errorWithCode = _lib$util.errorWithCode,
263
- keys = _lib$util.keys,
264
+ util_keys = _lib$util.keys,
264
265
  values = _lib$util.values,
265
266
  util_hasOwnProperty = _lib$util.hasOwnProperty,
266
267
  getOwnPropertyDescriptors = _lib$util.getOwnPropertyDescriptors,
@@ -275,6 +276,7 @@ var _lib$util = external_commonjs_zeta_dom_commonjs2_zeta_dom_amd_zeta_dom_root_
275
276
  watchOnce = _lib$util.watchOnce,
276
277
  watchable = _lib$util.watchable,
277
278
  inherit = _lib$util.inherit,
279
+ freeze = _lib$util.freeze,
278
280
  deepFreeze = _lib$util.deepFreeze,
279
281
  iequal = _lib$util.iequal,
280
282
  randomId = _lib$util.randomId,
@@ -362,6 +364,17 @@ var _lib$dom = external_commonjs_zeta_dom_commonjs2_zeta_dom_amd_zeta_dom_root_z
362
364
 
363
365
 
364
366
  /* harmony default export */ const zeta_dom_dom = (dom);
367
+ ;// CONCATENATED MODULE: ./tmp/zeta-dom/domLock.js
368
+
369
+ var domLock_lib$dom = external_commonjs_zeta_dom_commonjs2_zeta_dom_amd_zeta_dom_root_zeta_.dom,
370
+ lock = domLock_lib$dom.lock,
371
+ locked = domLock_lib$dom.locked,
372
+ cancelLock = domLock_lib$dom.cancelLock,
373
+ notifyAsync = domLock_lib$dom.notifyAsync,
374
+ preventLeave = domLock_lib$dom.preventLeave;
375
+
376
+ ;// CONCATENATED MODULE: ./src/include/zeta-dom/domLock.js
377
+
365
378
  ;// CONCATENATED MODULE: ./tmp/brew-js/domAction.js
366
379
 
367
380
  var addAsyncAction = external_commonjs_brew_js_commonjs2_brew_js_amd_brew_js_root_brew_.addAsyncAction,
@@ -377,6 +390,7 @@ var addAsyncAction = external_commonjs_brew_js_commonjs2_brew_js_amd_brew_js_roo
377
390
 
378
391
 
379
392
 
393
+
380
394
  /**
381
395
  * @param {Partial<import("./dialog").DialogOptions<any>>} props
382
396
  */
@@ -386,7 +400,7 @@ function createDialog(props) {
386
400
  var closing = false;
387
401
  var promise;
388
402
 
389
- function closeDialog(value) {
403
+ function _closeDialog(value) {
390
404
  if (!closing) {
391
405
  closing = true;
392
406
  closeFlyout(root, value).then(function () {
@@ -403,7 +417,7 @@ function createDialog(props) {
403
417
 
404
418
  return {
405
419
  root: root,
406
- close: closeDialog,
420
+ close: _closeDialog,
407
421
  open: function open() {
408
422
  if (promise) {
409
423
  return promise;
@@ -419,16 +433,20 @@ function createDialog(props) {
419
433
  }
420
434
 
421
435
  if (props.onRender) {
422
- external_commonjs_react_dom_commonjs2_react_dom_amd_react_dom_root_ReactDOM_.render( /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(props.onRender, extend({
423
- closeDialog: closeDialog
424
- }, props)), root);
436
+ var dialogProps = extend({}, props, {
437
+ closeDialog: function closeDialog(value) {
438
+ var promise = resolve((props.onCommit || pipe)(value));
439
+ catchAsync(lock(zeta_dom_dom.activeElement, promise));
440
+ promise.then(_closeDialog);
441
+ }
442
+ });
443
+ external_commonjs_react_dom_commonjs2_react_dom_amd_react_dom_root_ReactDOM_.render( /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(props.onRender, dialogProps), root);
425
444
  }
426
445
 
427
446
  promise = openFlyout(root);
428
447
  always(promise, function () {
429
448
  promise = null;
430
449
  });
431
- promise.then(props.onCommit);
432
450
  (props.onOpen || noop)(root);
433
451
  return promise;
434
452
  }
@@ -462,6 +480,12 @@ function Dialog(props) {
462
480
  }
463
481
  // EXTERNAL MODULE: external "zeta-dom-react"
464
482
  var external_zeta_dom_react_ = __webpack_require__(103);
483
+ ;// CONCATENATED MODULE: ./tmp/zeta-dom/events.js
484
+
485
+ var ZetaEventContainer = external_commonjs_zeta_dom_commonjs2_zeta_dom_amd_zeta_dom_root_zeta_.EventContainer;
486
+
487
+ ;// CONCATENATED MODULE: ./src/include/zeta-dom/events.js
488
+
465
489
  ;// CONCATENATED MODULE: ./tmp/brew-js/defaults.js
466
490
 
467
491
  var defaults_defaultExport = external_commonjs_brew_js_commonjs2_brew_js_amd_brew_js_root_brew_.defaults;
@@ -497,6 +521,8 @@ var animateIn = external_commonjs_brew_js_commonjs2_brew_js_amd_brew_js_root_bre
497
521
 
498
522
 
499
523
 
524
+
525
+ var view_root = zeta_dom_dom.root;
500
526
  var routeMap = new Map();
501
527
  var usedParams = {};
502
528
  var StateContext = /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createContext(Object.freeze({
@@ -519,6 +545,7 @@ function ViewContainer() {
519
545
 
520
546
  self.componentWillUnmount = app_app.on('navigate', function () {
521
547
  if (self.mounted && self.getViewComponent()) {
548
+ self.isForceUpdate = true;
522
549
  self.forceUpdate();
523
550
  }
524
551
  });
@@ -529,24 +556,31 @@ definePrototype(ViewContainer, external_commonjs_react_commonjs2_react_amd_react
529
556
  this.mounted = true;
530
557
  },
531
558
  componentDidCatch: function componentDidCatch(error) {
532
- zeta_dom_dom.emit('error', this.parentElement || zeta_dom_dom.root, {
559
+ zeta_dom_dom.emit('error', this.parentElement || view_root, {
533
560
  error: error
534
561
  }, true);
535
562
  },
536
563
  render: function render() {
537
564
  /** @type {any} */
538
565
  var self = this;
566
+ var resolve;
567
+ var promise = new Promise(function (_resolve) {
568
+ resolve = _resolve;
569
+ });
539
570
  var V = self.getViewComponent();
540
571
 
541
572
  if (V && V !== self.currentViewComponent) {
542
573
  self.currentViewComponent = V;
543
574
 
544
575
  if (self.currentView && self.currentElement) {
576
+ var prevPath = self.currentPath;
577
+ var prevElement = self.currentElement;
545
578
  self.prevView = self.currentView;
546
- self.prevElement = self.currentElement;
547
579
  self.currentElement = undefined;
548
- animateOut(self.prevElement, 'show').then(function () {
549
- self.prevElement = undefined;
580
+ app_app.emit('pageleave', prevElement, {
581
+ pathname: prevPath
582
+ }, true);
583
+ animateOut(prevElement, 'show').then(function () {
550
584
  self.prevView = undefined;
551
585
  self.forceUpdate();
552
586
  });
@@ -562,23 +596,87 @@ definePrototype(ViewContainer, external_commonjs_react_commonjs2_react_amd_react
562
596
  self.currentElement = element;
563
597
  self.parentElement = element.parentElement;
564
598
  util_setImmediate(function () {
565
- return animateIn(element, 'show');
599
+ resolve();
600
+ animateIn(element, 'show');
601
+ app_app.emit('pageenter', element, {
602
+ pathname: app_app.path
603
+ }, true);
566
604
  });
567
605
  }
568
606
  })));
569
607
  defineGetterProperty(providerProps.value, 'active', function () {
570
608
  return self.currentView === view;
571
609
  });
610
+ self.currentPath = app_app.path;
572
611
  self.currentView = view;
612
+ } else {
613
+ if (self.isForceUpdate) {
614
+ self.isForceUpdate = false;
615
+ app_app.emit('pageenter', self.currentElement, {
616
+ pathname: app_app.path
617
+ }, true);
618
+ }
619
+
620
+ resolve();
573
621
  }
574
622
 
623
+ notifyAsync(self.parentElement || view_root, promise);
575
624
  return /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(external_commonjs_react_commonjs2_react_amd_react_root_React_.Fragment, null, self.prevView, self.currentView);
576
625
  },
577
626
  getViewComponent: function getViewComponent() {
578
627
  var props = this.props;
579
- return any(props.views, isViewMatched) || history.state === stateId && void redirectTo(props.defaultView);
628
+ var matched = any(props.views, isViewMatched) || props.defaultView;
629
+
630
+ if (history.state === stateId) {
631
+ // ensure the current path actually corresponds to the matched view
632
+ // when some views are not included in the list of allowed views
633
+ var targetPath = linkTo(matched, getCurrentParams(matched, true));
634
+
635
+ if (targetPath !== app_app.path) {
636
+ app_app.navigate(targetPath, true);
637
+ return;
638
+ }
639
+ }
640
+
641
+ return matched;
580
642
  }
581
643
  });
644
+
645
+ function getCurrentParams(view, includeAll) {
646
+ var state = routeMap.get(view);
647
+
648
+ if (!state.maxParams) {
649
+ var matched = map(app_app.routes, function (v) {
650
+ var route = app_app.parseRoute(v);
651
+ var matched = route.length && !any(state.matchers, function (v, i) {
652
+ var pos = route.params[i];
653
+ return (v ? !(pos >= 0) : pos < route.minLength) || !isFunction(v) && !route.match(i, v);
654
+ });
655
+ return matched ? route : null;
656
+ });
657
+
658
+ if (matched[1]) {
659
+ matched = grep(matched, function (v) {
660
+ return !any(v.params, function (v, i) {
661
+ return usedParams[i] && !state.matchers[i];
662
+ });
663
+ });
664
+ }
665
+
666
+ if (matched[0]) {
667
+ var last = matched.slice(-1)[0];
668
+ state.maxParams = util_keys(extend.apply(0, [{}].concat(matched.map(function (v) {
669
+ return v.params;
670
+ }))));
671
+ state.minParams = map(last.params, function (v, i) {
672
+ return state.params[i] || v >= last.minLength ? null : i;
673
+ });
674
+ }
675
+ }
676
+
677
+ return pick(app_app.route, includeAll ? state.maxParams : state.minParams);
678
+ }
679
+
582
680
  function useViewContainerState() {
583
681
  return external_commonjs_react_commonjs2_react_amd_react_root_React_.useContext(StateContext);
584
682
  }
@@ -591,14 +689,16 @@ function isViewMatched(view) {
591
689
  }
592
690
  function registerView(factory, routeParams) {
593
691
  var Component = function Component(props) {
594
- var Component = (0,external_zeta_dom_react_.useAsync)(factory)[0];
692
+ var state = (0,external_zeta_dom_react_.useAsync)(factory);
693
+ var ref = (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useRef)();
694
+
695
+ if (state[0] || state[1].error) {
696
+ (props.onComponentLoaded || noop)(ref.current);
697
+ }
698
+
595
699
  return /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement('div', extend({}, props.rootProps, {
596
- ref: function ref(element) {
597
- if (element && Component) {
598
- (props.onComponentLoaded || noop)(element);
599
- }
600
- },
601
- children: Component && /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(Component["default"])
700
+ ref: ref,
701
+ children: state[0] && /*#__PURE__*/external_commonjs_react_commonjs2_react_amd_react_root_React_.createElement(state[0]["default"])
602
702
  }));
603
703
  };
604
704
 
@@ -612,7 +712,7 @@ function registerView(factory, routeParams) {
612
712
  });
613
713
  routeMap.set(Component, {
614
714
  id: randomId(),
615
- matchCount: keys(routeParams).length,
715
+ matchCount: util_keys(routeParams).length,
616
716
  matchers: routeParams,
617
717
  params: pick(routeParams, function (v) {
618
718
  return typeof v === 'string';
@@ -634,19 +734,13 @@ function renderView() {
634
734
  });
635
735
  }
636
736
  function linkTo(view, params) {
637
- var viewParams = (routeMap.get(view) || {}).params;
638
- var newParams = {};
639
-
640
- for (var i in app_app.route) {
641
- if (viewParams && i in viewParams) {
642
- newParams[i] = viewParams[i];
643
- } else if (params && i in params) {
644
- newParams[i] = params[i];
645
- } else if (!usedParams[i]) {
646
- newParams[i] = app_app.route[i];
647
- }
737
+ var state = routeMap.get(view);
738
+
739
+ if (!state) {
740
+ return '/';
648
741
  }
649
742
 
743
+ var newParams = extend(getCurrentParams(view), params, state.params);
650
744
  return app_app.route.getPath(newParams);
651
745
  }
652
746
  function navigateTo(view, params) {
@@ -661,12 +755,32 @@ function redirectTo(view, params) {
661
755
 
662
756
 
663
757
 
758
+
759
+ var emitter = new ZetaEventContainer();
664
760
  var states = {};
665
761
 
666
762
  function getCurrentStates() {
667
763
  return states[history.state] || (states[history.state] = {});
668
764
  }
669
765
 
766
+ function ViewState(value) {
767
+ this.value = value;
768
+ }
769
+
770
+ definePrototype(ViewState, {
771
+ get: function get() {
772
+ return this.value;
773
+ },
774
+ set: function set(value) {
775
+ this.value = value;
776
+ },
777
+ onPopState: function onPopState(callback) {
778
+ throwNotFunction(callback);
779
+ return emitter.add(this, 'popstate', function (e) {
780
+ callback.call(this, e.newValue);
781
+ });
782
+ }
783
+ });
670
784
  function useAppReady() {
671
785
  var sReady = (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useState)(false);
672
786
  var ready = sReady[0],
@@ -681,32 +795,37 @@ function useAppReady() {
681
795
  function useRouteParam(name, defaultValue) {
682
796
  var container = useViewContainerState();
683
797
  var route = app_app.route;
684
- var sValue = (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useState)(route[name]);
685
- var value = sValue[0],
686
- setValue = sValue[1];
798
+ var value = route[name] || '';
799
+ var ref = (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useRef)(value);
800
+ var forceUpdate = (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useState)()[1];
687
801
  (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useEffect)(function () {
688
- var current = route[name]; // route parameter might be changed after state initialization and before useEffect hook is called
802
+ var setValue = function setValue() {
803
+ var current = route[name] || '';
804
+
805
+ if (container.active && current !== ref.current) {
806
+ ref.current = current;
807
+ forceUpdate({});
808
+ }
809
+ }; // route parameter might be changed after state initialization and before useEffect hook is called
689
810
 
690
- setValue(current);
811
+
812
+ setValue();
691
813
 
692
814
  if (name in route) {
693
- return route.watch(name, function (value) {
694
- util_setImmediate(function () {
695
- if (container.active) {
696
- setValue(value);
697
- }
698
- });
815
+ return route.watch(name, function () {
816
+ setImmediateOnce(setValue);
699
817
  });
700
818
  }
701
819
 
702
820
  console.error('Route parameter ' + name + ' does not exist');
703
821
  }, [name, defaultValue]);
822
+ ref.current = value;
704
823
 
705
824
  if (!value && defaultValue !== undefined) {
706
825
  app_app.navigate(route.getPath(extend({}, route, kv(name, defaultValue))), true);
707
826
  }
708
827
 
709
- return value || '';
828
+ return value;
710
829
  }
711
830
  function useRouteState(key, defaultValue) {
712
831
  var container = useViewContainerState();
@@ -726,17 +845,23 @@ function ViewStateContainer(props) {
726
845
  return {
727
846
  getState: function getState(uniqueId, key) {
728
847
  var cur = getCurrentStates();
729
- var state = cache[uniqueId] || (cache[uniqueId] = {
730
- value: cur[key] && cur[key].value,
731
- get: function get() {
732
- return state.value;
733
- },
734
- set: function set(value) {
735
- state.value = value;
736
- }
737
- });
848
+ var state = cache[uniqueId] || (cache[uniqueId] = new ViewState(cur[key] && cur[key].value));
738
849
 
739
850
  if (container.active) {
851
+ var stateId = state.stateId;
852
+
853
+ if (stateId && stateId !== history.state) {
854
+ var newValue = cur[key] && cur[key].value;
855
+ emitter.emit('popstate', state, {
856
+ newValue: newValue
857
+ }); // detach value in previous history state from current one
858
+
859
+ var previous = new ViewState(state.value);
860
+ states[stateId][key] = previous;
861
+ state.value = newValue;
862
+ }
863
+
864
+ state.stateId = history.state;
740
865
  cur[key] = state;
741
866
  }
742
867
 
@@ -770,7 +895,8 @@ if (toPrimitive) {
770
895
 
771
896
  function createCallback(translate) {
772
897
  var callback = function callback(key, data) {
773
- return translate(key, data, true);
898
+ var result = translate(key, data, true);
899
+ return result !== undefined ? result : key;
774
900
  };
775
901
 
776
902
  return extend(callback, {
@@ -792,31 +918,38 @@ function makeTranslation(resources, defaultLang) {
792
918
  var re = new RegExp('^(' + Object.keys(resources[defaultLang]).join('|') + ')\\.');
793
919
  var cache = {};
794
920
 
795
- function getTranslation(prefix, name, data, noEncode) {
796
- var str = ((resources[app_app.language] || empty)[prefix] || empty)[name] || ((resources[defaultLang] || empty)[prefix] || empty)[name] || '';
921
+ function getTranslation(prefix, name, data, noEncode, lang) {
922
+ var str = ((resources[lang] || empty)[prefix] || empty)[name];
797
923
 
798
- if (str && (!noEncode || data !== undefined)) {
799
- return waterpipe(str, data, {
800
- noEncode: noEncode
801
- });
924
+ if (typeof str === 'string') {
925
+ if (str && (!noEncode || data !== undefined)) {
926
+ return waterpipe(str, data, {
927
+ noEncode: noEncode
928
+ });
929
+ }
930
+
931
+ return str;
802
932
  }
803
933
 
804
- return str;
934
+ if (lang !== defaultLang) {
935
+ return getTranslation(prefix, name, data, noEncode, defaultLang);
936
+ }
805
937
  }
806
938
 
807
939
  function translate(key, data, noEncode) {
808
940
  var prefix = re.test(key) ? RegExp.$1 : '';
809
941
  var name = prefix ? key.slice(RegExp.lastMatch.length) : key;
810
- return getTranslation(prefix, name, data, noEncode) || key;
942
+ return getTranslation(prefix, name, data, noEncode, app_app.language);
811
943
  }
812
944
 
813
945
  function getTranslationCallback() {
814
946
  var prefix = makeArray(arguments);
815
947
  var key = prefix.join(' ');
816
948
  return cache[key] || (cache[key] = createCallback(function (key, data, noEncode) {
949
+ var lang = app_app.language;
817
950
  return single(prefix, function (v) {
818
- return getTranslation(v, key, data, noEncode);
819
- }) || key;
951
+ return getTranslation(v, key, data, noEncode, lang);
952
+ });
820
953
  }));
821
954
  }
822
955
 
@@ -833,7 +966,10 @@ function makeTranslation(resources, defaultLang) {
833
966
  return {
834
967
  translate: cache[''],
835
968
  getTranslation: getTranslationCallback,
836
- useTranslation: useTranslation
969
+ useTranslation: useTranslation,
970
+ keys: function keys(prefix) {
971
+ return util_keys(resources[defaultLang][prefix] || empty);
972
+ }
837
973
  };
838
974
  }
839
975
  ;// CONCATENATED MODULE: ./src/mixins/StaticAttributeMixin.js
@@ -863,7 +999,8 @@ definePrototype(Mixin, {
863
999
  },
864
1000
  getCustomAttributes: function getCustomAttributes() {
865
1001
  return {};
866
- }
1002
+ },
1003
+ dispose: function dispose() {}
867
1004
  });
868
1005
  watchable(Mixin.prototype);
869
1006
  util_define(Mixin, {
@@ -982,15 +1119,23 @@ definePrototype(StatefulMixin, Mixin, {
982
1119
  },
983
1120
  initElement: function initElement(element, state) {},
984
1121
  clone: function clone() {
985
- var clone = inherit(Object.getPrototypeOf(this));
1122
+ var self = this;
1123
+ var clone = inherit(Object.getPrototypeOf(self), self);
986
1124
 
987
1125
  _(clone, {
988
- states: _(this).states,
1126
+ states: _(self).states,
989
1127
  prefix: randomId() + '.',
990
1128
  counter: 0
991
1129
  });
992
1130
 
993
1131
  return clone;
1132
+ },
1133
+ dispose: function dispose() {
1134
+ var states = _(this).states;
1135
+
1136
+ each(states, function (i, v) {
1137
+ delete states[i];
1138
+ });
994
1139
  }
995
1140
  });
996
1141
  ;// CONCATENATED MODULE: ./src/mixins/ClassNameMixin.js
@@ -1050,11 +1195,6 @@ definePrototype(ClassNameMixin, StatefulMixin, {
1050
1195
  }
1051
1196
  });
1052
1197
  },
1053
- clone: function clone() {
1054
- return extend(ClassNameMixinSuper.clone.call(this), {
1055
- classNames: this.classNames
1056
- });
1057
- },
1058
1198
  onClassNameUpdated: function onClassNameUpdated(element, prevState, state) {}
1059
1199
  });
1060
1200
  ;// CONCATENATED MODULE: ./src/mixins/AnimateMixin.js
@@ -1130,19 +1270,13 @@ definePrototype(AnimateSequenceMixin, AnimateMixin, {
1130
1270
  });
1131
1271
  }
1132
1272
  });
1133
- ;// CONCATENATED MODULE: ./tmp/zeta-dom/events.js
1134
-
1135
- var ZetaEventContainer = external_commonjs_zeta_dom_commonjs2_zeta_dom_amd_zeta_dom_root_zeta_.EventContainer;
1136
-
1137
- ;// CONCATENATED MODULE: ./src/include/zeta-dom/events.js
1138
-
1139
1273
  ;// CONCATENATED MODULE: ./src/mixins/ErrorHandlerMixin.js
1140
1274
 
1141
1275
 
1142
1276
 
1143
1277
 
1144
1278
  var ErrorHandlerMixinSuper = StatefulMixin.prototype;
1145
- var emitter = new ZetaEventContainer();
1279
+ var ErrorHandlerMixin_emitter = new ZetaEventContainer();
1146
1280
 
1147
1281
  function isErrorMatched(filter, error) {
1148
1282
  if (isFunction(filter)) {
@@ -1162,7 +1296,7 @@ definePrototype(ErrorHandlerMixin, StatefulMixin, {
1162
1296
  filter = null;
1163
1297
  }
1164
1298
 
1165
- return emitter.add(this, filter ? 'error' : 'default', function (e) {
1299
+ return ErrorHandlerMixin_emitter.add(this, filter ? 'error' : 'default', function (e) {
1166
1300
  if (!filter || isErrorMatched(filter, e.error)) {
1167
1301
  return callback(e.error);
1168
1302
  }
@@ -1175,10 +1309,22 @@ definePrototype(ErrorHandlerMixin, StatefulMixin, {
1175
1309
  var data = {
1176
1310
  error: e.error
1177
1311
  };
1178
- return emitter.emit('error', self, data) || emitter.emit('default', self, data);
1312
+ return ErrorHandlerMixin_emitter.emit('error', self, data) || ErrorHandlerMixin_emitter.emit('default', self, data);
1179
1313
  });
1180
1314
  }
1181
1315
  });
1316
+ ;// CONCATENATED MODULE: ./tmp/brew-js/var.js
1317
+
1318
+ var getVarScope = undefined.getVarScope,
1319
+ setVar = undefined.setVar,
1320
+ declareVar = undefined.declareVar,
1321
+ resetVar = undefined.resetVar,
1322
+ getVar = undefined.getVar,
1323
+ evaluate = undefined.evaluate,
1324
+ evalAttr = undefined.evalAttr;
1325
+
1326
+ ;// CONCATENATED MODULE: ./src/include/brew-js/var.js
1327
+
1182
1328
  ;// CONCATENATED MODULE: ./src/mixins/FlyoutToggleMixin.js
1183
1329
 
1184
1330
 
@@ -1188,16 +1334,17 @@ function FlyoutToggleMixin(mixin) {
1188
1334
  this.flyoutMixin = mixin;
1189
1335
  }
1190
1336
  definePrototype(FlyoutToggleMixin, ClassNameMixin, {
1337
+ open: function open(value) {
1338
+ return this.flyoutMixin.open(value);
1339
+ },
1340
+ close: function close(value) {
1341
+ return this.flyoutMixin.close(value);
1342
+ },
1191
1343
  getCustomAttributes: function getCustomAttributes() {
1192
1344
  var element = this.flyoutMixin.elements()[0];
1193
1345
  return extend({}, FlyoutToggleMixinSuper.getCustomAttributes.call(this), {
1194
1346
  'toggle': element && '#' + element.id
1195
1347
  });
1196
- },
1197
- clone: function clone() {
1198
- return extend(FlyoutToggleMixinSuper.clone.call(this), {
1199
- flyoutMixin: this.flyoutMixin
1200
- });
1201
1348
  }
1202
1349
  });
1203
1350
  ;// CONCATENATED MODULE: ./src/mixins/FlyoutMixin.js
@@ -1205,12 +1352,16 @@ definePrototype(FlyoutToggleMixin, ClassNameMixin, {
1205
1352
 
1206
1353
 
1207
1354
 
1355
+
1356
+
1208
1357
  var FlyoutMixinSuper = ClassNameMixin.prototype;
1358
+ var varname = '__flyout' + randomId();
1209
1359
  var flyoutMixinCounter = 0;
1210
1360
  function FlyoutMixin() {
1211
1361
  var self = this;
1212
- ClassNameMixin.call(self, ['open', 'closing', 'tweening-in', 'tweening-out']);
1362
+ ClassNameMixin.call(self, ['open', 'closing', 'visible', 'tweening-in', 'tweening-out']);
1213
1363
  self.modal = false;
1364
+ self.tabThrough = false;
1214
1365
  self.isFlyoutOpened = false;
1215
1366
  self.animating = false;
1216
1367
  self.visible = false;
@@ -1236,16 +1387,25 @@ definePrototype(FlyoutMixin, ClassNameMixin, {
1236
1387
  'swipe-dismiss': self.swipeToDismiss
1237
1388
  }, self.modal && {
1238
1389
  'is-modal': ''
1390
+ }, self.tabThrough && {
1391
+ 'tab-through': ''
1239
1392
  }, self.effects && {
1240
1393
  'animate-on': 'open',
1241
1394
  'animate-in': self.effects.join(' '),
1242
1395
  'animate-out': ''
1243
1396
  });
1244
1397
  },
1398
+ open: function open(value) {
1399
+ return openFlyout(this.elements()[0], kv(varname, value));
1400
+ },
1401
+ close: function close(value) {
1402
+ return closeFlyout(this.elements()[0], value);
1403
+ },
1245
1404
  onOpen: function onOpen(callback) {
1405
+ var element = this.elements()[0];
1246
1406
  return this.onToggleState(function (opened) {
1247
1407
  if (opened) {
1248
- return callback();
1408
+ return callback(getVar(element, varname));
1249
1409
  }
1250
1410
  });
1251
1411
  },
@@ -1261,6 +1421,7 @@ definePrototype(FlyoutMixin, ClassNameMixin, {
1261
1421
 
1262
1422
  if (!element.id) {
1263
1423
  element.id = 'flyout-' + ++flyoutMixinCounter;
1424
+ declareVar(element, varname, undefined);
1264
1425
  }
1265
1426
 
1266
1427
  app_app.on(element, {
@@ -1305,9 +1466,9 @@ definePrototype(FocusStateMixin, StatefulMixin, {
1305
1466
  initElement: function initElement(element, state) {
1306
1467
  FocusStateMixinSuper.initElement.call(this, element, state);
1307
1468
  zeta_dom_dom.on(element, {
1308
- focusin: function focusin() {
1469
+ focusin: function focusin(e) {
1309
1470
  state.focused = true;
1310
- setClass(element, 'focused', true);
1471
+ setClass(element, 'focused', e.source);
1311
1472
  },
1312
1473
  focusout: function focusout() {
1313
1474
  state.focused = false;
@@ -1455,9 +1616,13 @@ var useFocusStateMixin = createUseFunction(FocusStateMixin);
1455
1616
  var useLoadingStateMixin = createUseFunction(LoadingStateMixin);
1456
1617
  var useScrollableMixin = createUseFunction(ScrollableMixin);
1457
1618
  function useMixin(ctor) {
1458
- return (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useState)(function () {
1619
+ var mixin = (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useState)(function () {
1459
1620
  return new ctor();
1460
1621
  })[0].reset();
1622
+ (0,external_commonjs_react_commonjs2_react_amd_react_root_React_.useEffect)(function () {
1623
+ return mixin.dispose.bind(mixin);
1624
+ }, []);
1625
+ return mixin;
1461
1626
  }
1462
1627
  function useMixinRef(mixin) {
1463
1628
  return mixin && mixin.getMixin().reset();