'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var React = require('react');
var _extends = require('@babel/runtime/helpers/extends');
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
var SnackBar = require('@prom-ui/core/SnackBar');
var zustand = require('zustand');
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var vanilla = require('zustand/vanilla');
var ttag = require('ttag');
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');

function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }

function _interopNamespaceCompat(e) {
    if (e && typeof e === 'object' && 'default' in e) return e;
    var n = Object.create(null);
    if (e) {
        Object.keys(e).forEach(function (k) {
            if (k !== 'default') {
                var d = Object.getOwnPropertyDescriptor(e, k);
                Object.defineProperty(n, k, d.get ? d : {
                    enumerable: true,
                    get: function () { return e[k]; }
                });
            }
        });
    }
    n.default = e;
    return Object.freeze(n);
}

var React__namespace = /*#__PURE__*/_interopNamespaceCompat(React);
var _extends__default = /*#__PURE__*/_interopDefaultCompat(_extends);
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultCompat(_objectWithoutProperties);
var _defineProperty__default = /*#__PURE__*/_interopDefaultCompat(_defineProperty);
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultCompat(_toConsumableArray);

var charset$2 = "utf-8";
var headers$2 = {
	"Content-Type": "text/plain; charset=utf-8",
	"Plural-Forms": "nplurals = 3; plural = (n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);",
	Language: "uk",
	"MIME-Version": "1.0",
	"Content-Transfer-Encoding": "8bit"
};
var translations$2 = {
	"": {
		"": {
			msgid: "",
			msgstr: [
				"Content-Type: text/plain; charset=utf-8\nPlural-Forms: nplurals = 3; plural = (n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\nLanguage: uk\nMIME-Version: 1.0\nContent-Transfer-Encoding: 8bit\n"
			]
		},
		"Показать предыдущий баннер": {
			msgid: "Показать предыдущий баннер",
			msgstr: [
				"Показати попередній банер"
			]
		},
		"Показать следующий баннер": {
			msgid: "Показать следующий баннер",
			msgstr: [
				"Показати наступний банер"
			]
		},
		"Показать баннер номер ${ viewIndex }": {
			msgid: "Показать баннер номер ${ viewIndex }",
			msgstr: [
				"Показати банер номер ${ viewIndex }"
			]
		},
		"Закрыть": {
			msgid: "Закрыть",
			msgstr: [
				"Закрити"
			]
		},
		"Назад": {
			msgid: "Назад",
			msgstr: [
				"Назад"
			]
		},
		"Далее": {
			msgid: "Далее",
			msgstr: [
				"Далі"
			]
		},
		"Обновить": {
			msgid: "Обновить",
			msgstr: [
				"Оновити"
			]
		},
		"Скрыть": {
			msgid: "Скрыть",
			msgstr: [
				"Приховати"
			]
		},
		"Очистить": {
			msgid: "Очистить",
			msgstr: [
				"Очистити"
			]
		},
		"Скрыть пароль": {
			msgid: "Скрыть пароль",
			msgstr: [
				"Приховати пароль"
			]
		},
		"Показать пароль": {
			msgid: "Показать пароль",
			msgstr: [
				"Показати пароль"
			]
		},
		"Наверх": {
			msgid: "Наверх",
			msgstr: [
				"Вгору"
			]
		},
		"Ой, кажется что-то пошло не так": {
			msgid: "Ой, кажется что-то пошло не так",
			msgstr: [
				"Ой, здається щось пішло не так"
			]
		},
		"Мы уже разбираемся с этим": {
			msgid: "Мы уже разбираемся с этим",
			msgstr: [
				"Ми вже розбираємося з цим"
			]
		},
		"Нет соединения": {
			msgid: "Нет соединения",
			msgstr: [
				"Немає з'єднання"
			]
		},
		"Проверьте подключение к Интернету": {
			msgid: "Проверьте подключение к Интернету",
			msgstr: [
				"Перевірте підключення до Інтернету"
			]
		},
		"Попробовать еще раз": {
			msgid: "Попробовать еще раз",
			msgstr: [
				"Спробувати ще раз"
			]
		},
		"Фото ${ visibleSelectedIndex } из ${ itemsLength }": {
			msgid: "Фото ${ visibleSelectedIndex } из ${ itemsLength }",
			msgstr: [
				"Фото ${ visibleSelectedIndex } з ${ itemsLength }"
			]
		},
		"Ошибка:": {
			msgid: "Ошибка:",
			msgstr: [
				"Помилка:"
			]
		}
	}
};
var localeUk = {
	charset: charset$2,
	headers: headers$2,
	translations: translations$2
};

var charset$1 = "utf-8";
var headers$1 = {
	"Content-Type": "text/plain; charset=utf-8",
	"Plural-Forms": "nplurals = 3; plural = (n == 1 ? 0 : (n == 0 || (n % 100 > 0 && n % 100 < 20)) ? 1 : 2);",
	Language: "ro",
	"MIME-Version": "1.0",
	"Content-Transfer-Encoding": "8bit"
};
var translations$1 = {
	"": {
		"": {
			msgid: "",
			msgstr: [
				"Content-Type: text/plain; charset=utf-8\nPlural-Forms: nplurals = 3; plural = (n == 1 ? 0 : (n == 0 || (n % 100 > 0 && n % 100 < 20)) ? 1 : 2);\nLanguage: ro\nMIME-Version: 1.0\nContent-Transfer-Encoding: 8bit\n"
			]
		},
		"Показать предыдущий баннер": {
			msgid: "Показать предыдущий баннер",
			msgstr: [
				"Afișați bannerul anterior"
			]
		},
		"Показать следующий баннер": {
			msgid: "Показать следующий баннер",
			msgstr: [
				"Afișează următorul banner"
			]
		},
		"Показать баннер номер ${ viewIndex }": {
			msgid: "Показать баннер номер ${ viewIndex }",
			msgstr: [
				"Afișați numărul bannerului ${ viewIndex }"
			]
		},
		"Закрыть": {
			msgid: "Закрыть",
			msgstr: [
				"Închide"
			]
		},
		"Назад": {
			msgid: "Назад",
			msgstr: [
				"Înapoi"
			]
		},
		"Далее": {
			msgid: "Далее",
			msgstr: [
				"Mai departe"
			]
		},
		"Обновить": {
			msgid: "Обновить",
			msgstr: [
				"Reîmprospăta"
			]
		},
		"Скрыть": {
			msgid: "Скрыть",
			msgstr: [
				"Ascunde"
			]
		},
		"Очистить": {
			msgid: "Очистить",
			msgstr: [
				"Clar"
			]
		},
		"Скрыть пароль": {
			msgid: "Скрыть пароль",
			msgstr: [
				"Ascunde parola"
			]
		},
		"Показать пароль": {
			msgid: "Показать пароль",
			msgstr: [
				"Arata parola"
			]
		},
		"Наверх": {
			msgid: "Наверх",
			msgstr: [
				"Top"
			]
		},
		"Ой, кажется что-то пошло не так": {
			msgid: "Ой, кажется что-то пошло не так",
			msgstr: [
				"Oops, se pare că ceva nu a mers bine"
			]
		},
		"Мы уже разбираемся с этим": {
			msgid: "Мы уже разбираемся с этим",
			msgstr: [
				"Deja ne ocupăm de acest lucru"
			]
		},
		"Нет соединения": {
			msgid: "Нет соединения",
			msgstr: [
				"Nu există conexiune"
			]
		},
		"Проверьте подключение к Интернету": {
			msgid: "Проверьте подключение к Интернету",
			msgstr: [
				"Verificați conexiunea la Internet"
			]
		},
		"Попробовать еще раз": {
			msgid: "Попробовать еще раз",
			msgstr: [
				"Încearcă din nou"
			]
		},
		"Фото ${ visibleSelectedIndex } из ${ itemsLength }": {
			msgid: "Фото ${ visibleSelectedIndex } из ${ itemsLength }",
			msgstr: [
				"Fotografie ${ visibleSelectedIndex } de ${ itemsLength }"
			]
		},
		"Ошибка:": {
			msgid: "Ошибка:",
			msgstr: [
				"Eroare:"
			]
		}
	}
};
var localeRo = {
	charset: charset$1,
	headers: headers$1,
	translations: translations$1
};

var charset = "utf-8";
var headers = {
	"Content-Type": "text/plain; charset=utf-8",
	"Plural-Forms": "nplurals = 1; plural = 0;",
	Language: "kk",
	"MIME-Version": "1.0",
	"Content-Transfer-Encoding": "8bit"
};
var translations = {
	"": {
		"": {
			msgid: "",
			msgstr: [
				"Content-Type: text/plain; charset=utf-8\nPlural-Forms: nplurals = 1; plural = 0;\nLanguage: kk\nMIME-Version: 1.0\nContent-Transfer-Encoding: 8bit\n"
			]
		},
		"Показать предыдущий баннер": {
			msgid: "Показать предыдущий баннер",
			msgstr: [
				"Алдыңғы баннерді көрсету"
			]
		},
		"Показать следующий баннер": {
			msgid: "Показать следующий баннер",
			msgstr: [
				"Келесі баннерді көрсету"
			]
		},
		"Показать баннер номер ${ viewIndex }": {
			msgid: "Показать баннер номер ${ viewIndex }",
			msgstr: [
				"${ viewIndex } баннер нөмірін көрсету"
			]
		},
		"Назад": {
			msgid: "Назад",
			msgstr: [
				"Артқа"
			]
		},
		"Далее": {
			msgid: "Далее",
			msgstr: [
				"Әрі қарай"
			]
		},
		"Обновить": {
			msgid: "Обновить",
			msgstr: [
				"Жаңарту"
			]
		},
		"Скрыть": {
			msgid: "Скрыть",
			msgstr: [
				"Жасыру"
			]
		},
		"Закрыть": {
			msgid: "Закрыть",
			msgstr: [
				"Жабық"
			]
		},
		"Очистить": {
			msgid: "Очистить",
			msgstr: [
				"Таза"
			]
		},
		"Скрыть пароль": {
			msgid: "Скрыть пароль",
			msgstr: [
				"Құпия сөзді жасыру"
			]
		},
		"Показать пароль": {
			msgid: "Показать пароль",
			msgstr: [
				"Құпия сөзді көрсету"
			]
		},
		"Наверх": {
			msgid: "Наверх",
			msgstr: [
				"Жоғарғы"
			]
		},
		"Ой, кажется что-то пошло не так": {
			msgid: "Ой, кажется что-то пошло не так",
			msgstr: [
				"Ой, бірдеңе дұрыс емес сияқты"
			]
		},
		"Мы уже разбираемся с этим": {
			msgid: "Мы уже разбираемся с этим",
			msgstr: [
				"Біз қазірдің өзінде онымен айналысып жатырмыз"
			]
		},
		"Нет соединения": {
			msgid: "Нет соединения",
			msgstr: [
				"Байланыс жоқ"
			]
		},
		"Проверьте подключение к Интернету": {
			msgid: "Проверьте подключение к Интернету",
			msgstr: [
				"Интернет байланысын тексеріңіз"
			]
		},
		"Попробовать еще раз": {
			msgid: "Попробовать еще раз",
			msgstr: [
				"Қайталап көріңіз"
			]
		},
		"Фото ${ visibleSelectedIndex } из ${ itemsLength }": {
			msgid: "Фото ${ visibleSelectedIndex } из ${ itemsLength }",
			msgstr: [
				"${ itemsLength } суреттің ${ visibleSelectedIndex }-суреті"
			]
		},
		"Ошибка:": {
			msgid: "Ошибка:",
			msgstr: [
				"Қате:"
			]
		}
	}
};
var localeKk = {
	charset: charset,
	headers: headers,
	translations: translations
};

var createSliceTTag = function createSliceTTag(locale) {
  var newTTag = new ttag.TTag();

  // add locales from json file
  newTTag.addLocale('uk', localeUk);
  newTTag.addLocale('ro', localeRo);
  newTTag.addLocale('kk', localeKk);
  newTTag.useLocale(locale);
  return function (set, get) {
    return {
      globalTTag: newTTag,
      locale: locale,
      setLocale: function setLocale(newLocale) {
        get().globalTTag.useLocale(newLocale);
        return set({
          locale: newLocale
        });
      }
    };
  };
};

function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var createSliceSnackBar = function createSliceSnackBar() {
  return function (set, get) {
    return {
      snackBarQueueCount: 0,
      snackBarQueue: [],
      snackBarAddToQueue: function snackBarAddToQueue(newSnackBar) {
        var nextCount = get().snackBarQueueCount + 1;
        var filteredQueue = get().snackBarQueue.filter(function (_ref) {
          var isOpen = _ref.isOpen;
          return isOpen;
        });
        set({
          snackBarQueueCount: nextCount,
          snackBarQueue: [].concat(_toConsumableArray__default.default(filteredQueue), [_objectSpread$1(_objectSpread$1({}, newSnackBar), {}, {
            key: nextCount
          })])
        });
      },
      snackBarOpen: function snackBarOpen() {
        var lastIndex = get().snackBarQueue.length - 1;
        if (lastIndex >= 0) {
          set({
            snackBarQueue: get().snackBarQueue.map(function (item, index) {
              return _objectSpread$1(_objectSpread$1({}, item), {}, {
                isOpen: Boolean(index === lastIndex)
              });
            })
          });
        }
      },
      snackBarClose: function snackBarClose() {
        set({
          snackBarQueue: get().snackBarQueue.map(function (item) {
            return _objectSpread$1(_objectSpread$1({}, item), {}, {
              isOpen: false
            });
          })
        });
      }
    };
  };
};

function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default.default(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var createBodyStore = function createBodyStore() {
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
    _ref$locale = _ref.locale,
    locale = _ref$locale === void 0 ? 'ru' : _ref$locale;
  return vanilla.createStore()(function () {
    return _objectSpread(_objectSpread({}, createSliceTTag(locale).apply(void 0, arguments)), createSliceSnackBar().apply(void 0, arguments));
  });
};
var BodyStoreContext = /*#__PURE__*/React.createContext(typeof window !== 'undefined' ? createBodyStore() : null);

var useBodyStore = function useBodyStore(selector) {
  var storeContext = React.useContext(BodyStoreContext);
  if (!storeContext) throw new Error('useBodyStore must be used inside <BodyProvider>');
  return zustand.useStore(storeContext, selector);
};

var _excluded = ["key"];
var SnackBarManager = function SnackBarManager() {
  var snackBarQueue = useBodyStore(function (store) {
    return store.snackBarQueue;
  });
  var snackBarQueueCount = useBodyStore(function (store) {
    return store.snackBarQueueCount;
  });
  var snackBarOpen = useBodyStore(function (store) {
    return store.snackBarOpen;
  });
  React__namespace.useEffect(function () {
    snackBarOpen();
  }, [snackBarQueueCount]);
  return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, snackBarQueue.map(function (_ref) {
    var key = _ref.key,
      SnackBarProps = _objectWithoutProperties__default.default(_ref, _excluded);
    return /*#__PURE__*/React__namespace.createElement(SnackBar.SnackBar, _extends__default.default({
      key: key
    }, SnackBarProps));
  }));
};
SnackBarManager.displayName = 'SnackBarManager';

var useBodyStoreTTag = function useBodyStoreTTag() {
  var globalTTag = useBodyStore(function (state) {
    return state.globalTTag;
  });
  return globalTTag;
};

var BodyProvider = function BodyProvider(_ref) {
  var children = _ref.children,
    _ref$locale = _ref.locale,
    locale = _ref$locale === void 0 ? 'ru' : _ref$locale;
  var storeRef = React.useRef(null);
  if (!storeRef.current) {
    storeRef.current = createBodyStore({
      locale: locale
    });
  }
  var store = storeRef.current;
  React.useEffect(function () {
    if (locale !== undefined && store.getState().locale !== locale) {
      store.getState().setLocale(locale);
    }
  }, [locale, store]);
  return /*#__PURE__*/React__namespace.default.createElement(BodyStoreContext.Provider, {
    value: store
  }, children, /*#__PURE__*/React__namespace.default.createElement(SnackBarManager, null));
};
BodyProvider.displayName = 'BodyProvider';

exports.BodyProvider = BodyProvider;
exports.useBodyStore = useBodyStore;
exports.useBodyStoreTTag = useBodyStoreTTag;
