docs: function TabHostView(options) {
                  var _this = _super.call(this, options) || this;
                  _this._tabs = []; // ITabView を格納
                  _this._activeTabIndex = 0; // active tab
                  _this._flipsnap = null; // flipsnap オブジェクト
                  _this._flipEndEventHandler = null; // "fstouchend"
                  _this._flipMoveEventHandler = null; // "fstouchmove"
                  _this._flipDeltaCache = 0; // "flip 距離のキャッシュ"
                  _this._scrollEndEventHandler = null; // tabview "scrollstop"
                  _this._scrollMoveEventHandler = null; // tabview "scroll"
                  _this._refreshTimerId = null; // refresh() 反映確認用
                  // check runtime condition
                  if (null == UI.global.Flipsnap) {
                      console.error(TAG + "flipsnap module doesn't load.");
                      return _this;
                  }
                  _this._settings = $.extend({
                      tabContexts: [],
                      tabMoveHandler: function (delta) { },
                      tabStopHandler: function (newIndex, moved) { }
                  }, options);
                  // setup event handlers
                  _this._flipEndEventHandler = function (event) {
                      var fsEvent = event.originalEvent;
                      _this._flipDeltaCache = 0;
                      _this.onTabChanged(fsEvent.newPoint, fsEvent.moved);
                  };
                  _this._flipMoveEventHandler = function (event) {
                      var fsEvent = event.originalEvent;
                      _this._flipDeltaCache += fsEvent.delta;
                      // bounce のガード
                      if (!_this._settings.enableBounce && ((-1 === fsEvent.direction && 0 === _this._activeTabIndex && 0 < _this._flipDeltaCache) ||
                          (1 === fsEvent.direction && _this._activeTabIndex === _this._tabs.length - 1 && _this._flipDeltaCache < 0))) {
                          event.preventDefault();
                          _this._flipsnap.moveToPoint(fsEvent.newPoint);
                      }
                      else {
                          _this.onTabMoving(fsEvent.delta);
                          _this._tabs.forEach(function (tabview) {
                              tabview.onTabScrolling(_this._activeTabIndex, fsEvent.delta);
                          });
                          _this.preprocess(_this._activeTabIndex);
                      }
                  };
                  _this._scrollEndEventHandler = function (event) {
                      _this.onScrollStop();
                  };
                  _this._scrollMoveEventHandler = function (event) {
                      _this.onScroll();
                  };
                  // setup tabs
                  if (_this._settings.initialWidth) {
                      _this.$el.width(_this._settings.initialWidth);
                  }
                  if (_this._settings.initialHeight) {
                      _this.$el.height(_this._settings.initialHeight);
                  }
                  var initialWidth = _this._settings.initialWidth;
                  var initialHeight = _this.$el.height();
                  var tabContexts = _this._settings.tabContexts.slice();
                  if (0 < tabContexts.length) {
                      tabContexts.forEach(function (context) {
                          /* tslint:disable:no-unused-expression */
                          new context.ctor($.extend({
                              initialHeight: initialHeight,
                          }, context.options, { host: _this, delayRegister: false }));
                          /* tslint:enable:no-unused-expression */
                      });
                  }
                  else {
                      // ITabView インスタンス化要求
                      _this.onTabViewSetupRequest(initialHeight);
                  }
                  if (_this._settings.initImmediate) {
                      _this.initializeTabViews();
                  }
                  // Flipsnap
                  _this.setFlipsnapCondition($.extend({}, {
                      distance: initialWidth,
                  }, _this._settings));
                  _this.setActiveTab(_this._activeTabIndex, 0, true);
                  return _this;
              }