@bigbinary/neetoui
Version:
neetoUI drives the experience at all neeto products
452 lines (441 loc) • 19.6 kB
JavaScript
;
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
var _createClass = require('@babel/runtime/helpers/createClass');
var neetoCist = require('@bigbinary/neeto-cist');
var qs = require('qs');
var ramda = require('ramda');
var en = require('./en-K2ZIAV2F.js');
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
var pureDayjs = require('dayjs');
var localeData = require('dayjs/plugin/localeData');
var utc = require('dayjs/plugin/utc');
var weekday = require('dayjs/plugin/weekday');
var weekOfYear = require('dayjs/plugin/weekOfYear');
function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var typeToPos = {
year: 0,
month: 1,
day: 2,
hour: 3,
minute: 4,
second: 5
};
var dateTimeFormatDefaults = {
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit"
};
// Cache time-zone lookups from Intl.DateTimeFormat,
// as it is a *very* slow method.
var dtfCache = {};
var getDateTimeFormat = function getDateTimeFormat(timezone) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var timeZoneName = options.timeZoneName || "short";
var key = "".concat(timezone, "|").concat(timeZoneName);
var dtf = dtfCache[key];
if (!dtf) {
dtf = new Intl.DateTimeFormat("en-US", _objectSpread$1(_objectSpread$1({}, dateTimeFormatDefaults), {}, {
hour12: false,
timeZone: timezone,
timeZoneName: timeZoneName
}));
dtfCache[key] = dtf;
}
return dtf;
};
var localeStringifierCache = {};
var getLocaleStringifier = function getLocaleStringifier(timezone) {
var localeStringifier = localeStringifierCache[timezone];
if (!localeStringifier) {
localeStringifier = new Intl.DateTimeFormat("en-US", _objectSpread$1(_objectSpread$1({}, dateTimeFormatDefaults), {}, {
timeZone: timezone
}));
localeStringifierCache[timezone] = localeStringifier;
}
return localeStringifier;
};
// eslint-disable-next-line no-unused-vars
var timezone = (function (o, c, d) {
var defaultTimezone;
var makeFormatParts = function makeFormatParts(timestamp, timezone) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var date = new Date(timestamp);
var dtf = getDateTimeFormat(timezone, options);
return dtf.formatToParts(date);
};
var tzOffset = function tzOffset(timestamp, timezone) {
var formatResult = makeFormatParts(timestamp, timezone);
var filled = [];
for (var i = 0; i < formatResult.length; i += 1) {
var _formatResult$i = formatResult[i],
type = _formatResult$i.type,
value = _formatResult$i.value;
var pos = typeToPos[type];
if (pos >= 0) {
filled[pos] = parseInt(value, 10);
}
}
var hour = filled[3];
// Workaround for the same behavior in different node version
// https://github.com/nodejs/node/issues/33027
/* istanbul ignore next */
var fixedHour = hour === 24 ? 0 : hour;
var utcString = "".concat(filled[0], "-").concat(filled[1], "-").concat(filled[2], " ").concat(fixedHour, ":").concat(filled[4], ":").concat(filled[5], ":000");
var utcTs = d.utc(utcString).valueOf();
var asTS = Number(timestamp);
var over = asTS % 1000;
asTS -= over;
return (utcTs - asTS) / (60 * 1000);
};
// find the right offset a given local time. The o input is our guess, which determines which
// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)
// https://github.com/moment/luxon/blob/master/src/datetime.js#L76
var fixOffset = function fixOffset(localTS, o0, tz) {
// Our UTC time is just a guess because our offset is just a guess
var utcGuess = localTS - o0 * 60 * 1000;
// Test whether the zone matches the offset for this ts
var o2 = tzOffset(utcGuess, tz);
// If so, offset didn't change and we're done
if (o0 === o2) {
return [utcGuess, o0];
}
// If not, change the ts by the difference in the offset
utcGuess -= (o2 - o0) * 60 * 1000;
// If that gives us the local time we want, we're done
var o3 = tzOffset(utcGuess, tz);
if (o2 === o3) {
return [utcGuess, o2];
}
// If it's different, we're in a hole time.
// The offset has changed, but the we don't adjust the time
return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];
};
var proto = c.prototype;
// eslint-disable-next-line default-param-last
proto.tz = function () {
var timezone = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultTimezone;
var keepLocalTime = arguments.length > 1 ? arguments[1] : undefined;
var oldOffset = this.utcOffset();
var date = this.toDate();
var target = getLocaleStringifier(timezone).format(date);
var diff = Math.round((date - new Date(target)) / 1000 / 60);
var ins = d(target).$set("millisecond", this.$ms).utcOffset(-Math.round(date.getTimezoneOffset() / 15) * 15 - diff, true);
if (keepLocalTime) {
var newOffset = ins.utcOffset();
ins = ins.add(oldOffset - newOffset, "minute");
}
ins.$x.$timezone = timezone;
return ins;
};
proto.offsetName = function (type) {
// type: short(default) / long
var zone = this.$x.$timezone || d.tz.guess();
var result = makeFormatParts(this.valueOf(), zone, {
timeZoneName: type
}).find(function (m) {
return m.type.toLowerCase() === "timezonename";
});
return result && result.value;
};
var oldStartOf = proto.startOf;
proto.startOf = function (units, startOf) {
if (!this.$x || !this.$x.$timezone) {
return oldStartOf.call(this, units, startOf);
}
var withoutTz = d(this.format("YYYY-MM-DD HH:mm:ss:SSS"));
var startOfWithoutTz = oldStartOf.call(withoutTz, units, startOf);
return startOfWithoutTz.tz(this.$x.$timezone, true);
};
d.tz = function (input, arg1, arg2) {
var parseFormat = arg2 && arg1;
var timezone = arg2 || arg1 || defaultTimezone;
var previousOffset = tzOffset(Number(d()), timezone);
if (typeof input !== "string") {
// timestamp number || js Date || Day.js
return d(input).tz(timezone);
}
var localTs = d.utc(input, parseFormat).valueOf();
var _fixOffset = fixOffset(localTs, previousOffset, timezone),
_fixOffset2 = _slicedToArray(_fixOffset, 2),
targetTs = _fixOffset2[0],
targetOffset = _fixOffset2[1];
var ins = d(targetTs).utcOffset(targetOffset);
ins.$x.$timezone = timezone;
return ins;
};
d.tz.guess = function () {
return Intl.DateTimeFormat().resolvedOptions().timeZone;
};
d.tz.setDefault = function (timezone) {
defaultTimezone = timezone;
};
});
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
pureDayjs.extend(weekOfYear);
pureDayjs.extend(weekday);
pureDayjs.extend(localeData);
pureDayjs.extend(utc);
pureDayjs.extend(timezone);
var LRUCache = /*#__PURE__*/function () {
function LRUCache(limit) {
_classCallCheck(this, LRUCache);
this.limit = limit;
this.cache = new Map();
}
_createClass(LRUCache, [{
key: "get",
value: function get(key) {
var value = this.cache.get(key);
this.cache["delete"](key);
this.cache.set(key, value);
return value;
}
}, {
key: "set",
value: function set(key, value) {
if (this.cache.size >= this.limit) {
var oldestKey = this.cache.keys().next().value;
this.cache["delete"](oldestKey);
}
this.cache.set(key, value);
}
}, {
key: "has",
value: function has(key) {
return this.cache.has(key);
}
}]);
return LRUCache;
}();
var hasTimezone = function hasTimezone(dateString) {
var timezoneRegex = /Z|[+-]\d{2}:\d{2}$|[+-]\d{4}$|GMT([+-]\d{4})?$/;
return timezoneRegex.test(dateString);
};
var cache = new LRUCache(1000);
var dayjs = function dayjs() {
var _args$;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var cacheKey = JSON.stringify(args);
if (cache.has(cacheKey) && args[0] !== undefined) return cache.get(cacheKey);
var userTimezone = pureDayjs.tz().$x.$timezone;
var browserTimezone = pureDayjs.tz.guess();
var timezone = userTimezone || browserTimezone;
if (userTimezone === browserTimezone || userTimezone === undefined) {
var _result = pureDayjs.apply(void 0, args);
if (args[0] !== undefined) cache.set(cacheKey, _result);
return _result;
}
if (args.length > 0 && (typeof args[0] === "string" || args[0] === null)) {
var pureDayjsArgs = args.slice(0, Math.min(args.length, 2));
if (hasTimezone(args[0])) {
args[0] = pureDayjs.apply(void 0, _toConsumableArray(pureDayjsArgs));
} else {
args[0] = pureDayjs.apply(void 0, _toConsumableArray(pureDayjsArgs)).format("YYYY-MM-DD HH:mm:ss");
args[1] = "YYYY-MM-DD HH:mm:ss";
}
}
if (((_args$ = args[0]) === null || _args$ === void 0 ? void 0 : _args$.toString()) === "Invalid Date") {
var _result2 = pureDayjs.apply(void 0, args);
if (args[0] !== undefined) cache.set(cacheKey, _result2);
return _result2;
}
var result = args.length === 2 ? pureDayjs.tz.apply(pureDayjs, args.concat([timezone])) : pureDayjs.tz.apply(pureDayjs, args);
if (args[0] !== undefined) cache.set(cacheKey, result);
return result;
};
Object.assign(dayjs, _objectSpread({}, pureDayjs));
var getEnTranslationValue = function getEnTranslationValue(translationKey) {
return translationKey.split(".").reduce(function (acc, key) {
return acc[key];
}, en.enTranslations);
};
var getScrollbarWidth = function getScrollbarWidth() {
var _parentDiv$parentNode;
var parentDiv = document.createElement("div");
parentDiv.style.visibility = "hidden";
parentDiv.style.overflow = "scroll";
document.body.appendChild(parentDiv);
var childDiv = document.createElement("div");
parentDiv.appendChild(childDiv);
var scrollbarWidth = parentDiv.offsetWidth - childDiv.offsetWidth;
parentDiv === null || parentDiv === void 0 || (_parentDiv$parentNode = parentDiv.parentNode) === null || _parentDiv$parentNode === void 0 || _parentDiv$parentNode.removeChild(parentDiv);
return scrollbarWidth;
};
var getTimezoneAppliedDateTime = function getTimezoneAppliedDateTime(inputDateTime) {
if (!inputDateTime) return null;
var timezoneAppliedDateTime = function timezoneAppliedDateTime(date) {
return dayjs(date.format("YYYY-MM-DD HH:mm:ss"));
};
return Array.isArray(inputDateTime) ? inputDateTime.map(timezoneAppliedDateTime) : timezoneAppliedDateTime(inputDateTime);
};
var noop = function noop() {};
var hyphenize = function hyphenize(input) {
var fallbackString = "nui";
if (typeof input === "number") return String(input);
if (input && typeof input === "string" && input.replace) {
return input.replace(/[\s_]/g, "-").replace(/([a-z])([A-Z])/g, "$1-$2").replace(/-+/g, "-").toLowerCase();
}
return fallbackString;
};
var convertToDayjsObjects = function convertToDayjsObjects(value) {
return value instanceof Array ? value.map(function (date) {
return date ? dayjs(date) : date;
}) : value && dayjs(value);
};
var UniqueArray = /*#__PURE__*/function () {
function UniqueArray() {
_classCallCheck(this, UniqueArray);
this.array = [];
}
_createClass(UniqueArray, [{
key: "add",
value: function add(item) {
if (this.array.some(ramda.equals(item))) return false;
this.array.push(item);
return true;
}
}, {
key: "remove",
value: function remove(item) {
this.array = this.array.filter(ramda.complement(ramda.equals(item)));
}
}]);
return UniqueArray;
}();
var trapFocusOnFocusableElements = function trapFocusOnFocusableElements(ref) {
var _ref$current, _ref$current2;
var focusableElements = 'button,[href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
var firstFocusableElement = ref === null || ref === void 0 || (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelectorAll(focusableElements)[0];
var focusableContent = ref === null || ref === void 0 || (_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.querySelectorAll(focusableElements);
var lastFocusableElement = focusableContent[(focusableContent === null || focusableContent === void 0 ? void 0 : focusableContent.length) - 1];
var onKeyDown = function onKeyDown(e) {
var isTabPressed = e.key === "Tab" || e.keyCode === 9;
if (!isTabPressed) {
return;
}
if (e.shiftKey) {
if (document.activeElement === firstFocusableElement) {
lastFocusableElement.focus();
e.preventDefault();
}
} else {
if (document.activeElement === lastFocusableElement) {
firstFocusableElement.focus();
e.preventDefault();
}
}
};
document.addEventListener("keydown", onKeyDown);
return function () {
return document.removeEventListener("keydown", onKeyDown);
};
};
var focusFirstFocusableElement = function focusFirstFocusableElement(ref) {
var _ref$current3;
var focusableElements = 'button,[href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
var firstFocusableElement = ref === null || ref === void 0 || (_ref$current3 = ref.current) === null || _ref$current3 === void 0 ? void 0 : _ref$current3.querySelectorAll(focusableElements)[0];
firstFocusableElement === null || firstFocusableElement === void 0 || firstFocusableElement.focus();
};
var hideScrollAndAddMargin = function hideScrollAndAddMargin() {
if (!document.body) return;
var scrollbarWidth = getScrollbarWidth();
document.body.style.overflow = "hidden";
document.body.style.marginRight = "".concat(scrollbarWidth, "px");
};
var showScrollAndRemoveMargin = function showScrollAndRemoveMargin() {
if (!document.body) return;
document.body.style.overflow = "auto";
document.body.style.marginRight = "0px";
};
var ANT_DESIGN_GLOBAL_TOKEN_OVERRIDES = {
colorBgContainer: "rgb(var(--neeto-ui-white))",
colorBorder: "rgb(var(--neeto-ui-gray-300))",
colorBorderSecondary: "rgb(var(--neeto-ui-gray-200))",
colorFillAlter: "rgb(var(--neeto-ui-gray-100))",
colorFillContent: "rgb(var(--neeto-ui-gray-100))",
colorFillSecondary: "rgb(var(--neeto-ui-gray-100))",
colorIcon: "rgb(var(--neeto-ui-gray-700))",
colorIconHover: "rgb(var(--neeto-ui-gray-800))",
colorLink: "rgb(var(--neeto-ui-primary-500))",
colorLinkActive: "rgb(var(--neeto-ui-primary-800))",
colorLinkHover: "rgb(var(--neeto-ui-primary-600))",
colorPrimary: "rgb(var(--neeto-ui-primary-500))",
colorSplit: "rgb(var(--neeto-ui-gray-100))",
colorText: "rgb(var(--neeto-ui-gray-800))",
colorTextDescription: "rgb(var(--neeto-ui-gray-700))",
colorTextDisabled: "rgb(var(--neeto-ui-gray-600))",
colorTextHeading: "rgb(var(--neeto-ui-black))",
colorTextPlaceholder: "rgb(var(--neeto-ui-gray-500))",
controlItemBgActive: "rgb(var(--neeto-ui-primary-100))",
controlItemBgActiveHover: "rgb(var(--neeto-ui-pastel-purple))",
controlItemBgHover: "rgb(var(--neeto-ui-gray-100))"
};
var buildUrl = function buildUrl(route, params) {
var placeHolders = [];
ramda.toPairs(params).forEach(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2),
key = _ref2[0],
value = _ref2[1];
if (!route.includes(":".concat(key))) return;
placeHolders.push(key);
route = route.replace(":".concat(key), encodeURIComponent(value));
});
var queryParams = ramda.pipe(ramda.omit(placeHolders), neetoCist.preprocessForSerialization, qs.stringify)(params);
return ramda.isEmpty(queryParams) ? route : "".concat(route, "?").concat(queryParams);
};
var getLocale = function getLocale(i18n, t, translationKey) {
if (ramda.isEmpty(i18n)) return getEnTranslationValue(translationKey);
return i18n.exists(translationKey) ? t(translationKey) : getEnTranslationValue(translationKey);
};
var setToLocalStorage = function setToLocalStorage(key, value) {
try {
// eslint-disable-next-line @bigbinary/neeto/no-local-storage
localStorage.setItem(key, JSON.stringify(value));
} catch (_unused) {
// localStorage access can fail due to private browsing mode or storage restrictions
}
};
var removeFromLocalStorage = function removeFromLocalStorage(key) {
try {
// eslint-disable-next-line @bigbinary/neeto/no-local-storage
localStorage.removeItem(key);
} catch (_unused2) {
// localStorage access can fail due to private browsing mode or storage restrictions
}
};
var getFromLocalStorage = function getFromLocalStorage(key, defaultValue) {
try {
// eslint-disable-next-line @bigbinary/neeto/no-local-storage
var storedValue = localStorage.getItem(key);
return storedValue ? JSON.parse(storedValue) : defaultValue;
} catch (_unused3) {
// localStorage access can fail due to private browsing mode or storage restrictions
return defaultValue;
}
};
exports.ANT_DESIGN_GLOBAL_TOKEN_OVERRIDES = ANT_DESIGN_GLOBAL_TOKEN_OVERRIDES;
exports.UniqueArray = UniqueArray;
exports.buildUrl = buildUrl;
exports.convertToDayjsObjects = convertToDayjsObjects;
exports.dayjs = dayjs;
exports.focusFirstFocusableElement = focusFirstFocusableElement;
exports.getFromLocalStorage = getFromLocalStorage;
exports.getLocale = getLocale;
exports.getTimezoneAppliedDateTime = getTimezoneAppliedDateTime;
exports.hideScrollAndAddMargin = hideScrollAndAddMargin;
exports.hyphenize = hyphenize;
exports.noop = noop;
exports.removeFromLocalStorage = removeFromLocalStorage;
exports.setToLocalStorage = setToLocalStorage;
exports.showScrollAndRemoveMargin = showScrollAndRemoveMargin;
exports.trapFocusOnFocusableElements = trapFocusOnFocusableElements;
//# sourceMappingURL=index--BeRLo6L.js.map