You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4693 lines
155 KiB
4693 lines
155 KiB
(self["webpackChunk"] = self["webpackChunk"] || []).push([[92668,36579,97544],{
|
|
|
|
/***/ 40031:
|
|
/*!**********************************************************!*\
|
|
!*** ./node_modules/antd/es/_util/getDataOrAriaProps.js ***!
|
|
\**********************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ "Z": function() { return /* binding */ getDataOrAriaProps; }
|
|
/* harmony export */ });
|
|
function getDataOrAriaProps(props) {
|
|
return Object.keys(props).reduce(function (prev, key) {
|
|
if ((key.startsWith('data-') || key.startsWith('aria-') || key === 'role') && !key.startsWith('data-__')) {
|
|
prev[key] = props[key];
|
|
}
|
|
return prev;
|
|
}, {});
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ 13376:
|
|
/*!*********************************************************!*\
|
|
!*** ./node_modules/antd/es/radio/index.js + 4 modules ***!
|
|
\*********************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
// EXPORTS
|
|
__webpack_require__.d(__webpack_exports__, {
|
|
"ZP": function() { return /* binding */ es_radio; }
|
|
});
|
|
|
|
// UNUSED EXPORTS: Button, Group
|
|
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
|
|
var esm_extends = __webpack_require__(58646);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
|
|
var defineProperty = __webpack_require__(60286);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 1 modules
|
|
var slicedToArray = __webpack_require__(55332);
|
|
// EXTERNAL MODULE: ./node_modules/classnames/index.js
|
|
var classnames = __webpack_require__(43655);
|
|
var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/hooks/useMergedState.js
|
|
var useMergedState = __webpack_require__(71722);
|
|
// EXTERNAL MODULE: ./node_modules/react/index.js
|
|
var react = __webpack_require__(978);
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/config-provider/context.js
|
|
var context = __webpack_require__(43016);
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/config-provider/SizeContext.js
|
|
var SizeContext = __webpack_require__(55282);
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/_util/getDataOrAriaProps.js
|
|
var getDataOrAriaProps = __webpack_require__(40031);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/radio/context.js
|
|
|
|
var RadioGroupContext = /*#__PURE__*/react.createContext(null);
|
|
var RadioGroupContextProvider = RadioGroupContext.Provider;
|
|
/* harmony default export */ var radio_context = (RadioGroupContext);
|
|
var RadioOptionTypeContext = /*#__PURE__*/react.createContext(null);
|
|
var RadioOptionTypeContextProvider = RadioOptionTypeContext.Provider;
|
|
// EXTERNAL MODULE: ./node_modules/rc-checkbox/es/index.js
|
|
var es = __webpack_require__(17739);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/ref.js
|
|
var es_ref = __webpack_require__(84444);
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/config-provider/DisabledContext.js
|
|
var DisabledContext = __webpack_require__(54201);
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/form/context.js
|
|
var form_context = __webpack_require__(88621);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/radio/radio.js
|
|
|
|
|
|
var __rest = undefined && undefined.__rest || function (s, e) {
|
|
var t = {};
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
}
|
|
return t;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var InternalRadio = function InternalRadio(props, ref) {
|
|
var _classNames;
|
|
var groupContext = react.useContext(radio_context);
|
|
var radioOptionTypeContext = react.useContext(RadioOptionTypeContext);
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls,
|
|
direction = _React$useContext.direction;
|
|
var innerRef = react.useRef();
|
|
var mergedRef = (0,es_ref/* composeRef */.sQ)(ref, innerRef);
|
|
var _useContext = (0,react.useContext)(form_context/* FormItemInputContext */.aM),
|
|
isFormItemInput = _useContext.isFormItemInput;
|
|
false ? 0 : void 0;
|
|
var onChange = function onChange(e) {
|
|
var _a, _b;
|
|
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
(_b = groupContext === null || groupContext === void 0 ? void 0 : groupContext.onChange) === null || _b === void 0 ? void 0 : _b.call(groupContext, e);
|
|
};
|
|
var customizePrefixCls = props.prefixCls,
|
|
className = props.className,
|
|
children = props.children,
|
|
style = props.style,
|
|
customDisabled = props.disabled,
|
|
restProps = __rest(props, ["prefixCls", "className", "children", "style", "disabled"]);
|
|
var radioPrefixCls = getPrefixCls('radio', customizePrefixCls);
|
|
var prefixCls = ((groupContext === null || groupContext === void 0 ? void 0 : groupContext.optionType) || radioOptionTypeContext) === 'button' ? "".concat(radioPrefixCls, "-button") : radioPrefixCls;
|
|
var radioProps = (0,esm_extends/* default */.Z)({}, restProps);
|
|
// ===================== Disabled =====================
|
|
var disabled = react.useContext(DisabledContext/* default */.Z);
|
|
radioProps.disabled = customDisabled || disabled;
|
|
if (groupContext) {
|
|
radioProps.name = groupContext.name;
|
|
radioProps.onChange = onChange;
|
|
radioProps.checked = props.value === groupContext.value;
|
|
radioProps.disabled = radioProps.disabled || groupContext.disabled;
|
|
}
|
|
var wrapperClassString = classnames_default()("".concat(prefixCls, "-wrapper"), (_classNames = {}, (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-wrapper-checked"), radioProps.checked), (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-wrapper-disabled"), radioProps.disabled), (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-wrapper-rtl"), direction === 'rtl'), (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-wrapper-in-form-item"), isFormItemInput), _classNames), className);
|
|
return /*#__PURE__*/(
|
|
// eslint-disable-next-line jsx-a11y/label-has-associated-control
|
|
react.createElement("label", {
|
|
className: wrapperClassString,
|
|
style: style,
|
|
onMouseEnter: props.onMouseEnter,
|
|
onMouseLeave: props.onMouseLeave
|
|
}, /*#__PURE__*/react.createElement(es/* default */.Z, (0,esm_extends/* default */.Z)({}, radioProps, {
|
|
type: "radio",
|
|
prefixCls: prefixCls,
|
|
ref: mergedRef
|
|
})), children !== undefined ? /*#__PURE__*/react.createElement("span", null, children) : null)
|
|
);
|
|
};
|
|
var Radio = /*#__PURE__*/react.forwardRef(InternalRadio);
|
|
if (false) {}
|
|
/* harmony default export */ var radio_radio = (Radio);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/radio/group.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var RadioGroup = /*#__PURE__*/react.forwardRef(function (props, ref) {
|
|
var _classNames;
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls,
|
|
direction = _React$useContext.direction;
|
|
var size = react.useContext(SizeContext/* default */.Z);
|
|
var _useMergedState = (0,useMergedState/* default */.Z)(props.defaultValue, {
|
|
value: props.value
|
|
}),
|
|
_useMergedState2 = (0,slicedToArray/* default */.Z)(_useMergedState, 2),
|
|
value = _useMergedState2[0],
|
|
setValue = _useMergedState2[1];
|
|
var onRadioChange = function onRadioChange(ev) {
|
|
var lastValue = value;
|
|
var val = ev.target.value;
|
|
if (!('value' in props)) {
|
|
setValue(val);
|
|
}
|
|
var onChange = props.onChange;
|
|
if (onChange && val !== lastValue) {
|
|
onChange(ev);
|
|
}
|
|
};
|
|
var customizePrefixCls = props.prefixCls,
|
|
_props$className = props.className,
|
|
className = _props$className === void 0 ? '' : _props$className,
|
|
options = props.options,
|
|
_props$buttonStyle = props.buttonStyle,
|
|
buttonStyle = _props$buttonStyle === void 0 ? 'outline' : _props$buttonStyle,
|
|
disabled = props.disabled,
|
|
children = props.children,
|
|
customizeSize = props.size,
|
|
style = props.style,
|
|
id = props.id,
|
|
onMouseEnter = props.onMouseEnter,
|
|
onMouseLeave = props.onMouseLeave,
|
|
onFocus = props.onFocus,
|
|
onBlur = props.onBlur;
|
|
var prefixCls = getPrefixCls('radio', customizePrefixCls);
|
|
var groupPrefixCls = "".concat(prefixCls, "-group");
|
|
var childrenToRender = children;
|
|
// 如果存在 options, 优先使用
|
|
if (options && options.length > 0) {
|
|
childrenToRender = options.map(function (option) {
|
|
if (typeof option === 'string' || typeof option === 'number') {
|
|
// 此处类型自动推导为 string
|
|
return /*#__PURE__*/react.createElement(radio_radio, {
|
|
key: option.toString(),
|
|
prefixCls: prefixCls,
|
|
disabled: disabled,
|
|
value: option,
|
|
checked: value === option
|
|
}, option);
|
|
}
|
|
// 此处类型自动推导为 { label: string value: string }
|
|
return /*#__PURE__*/react.createElement(radio_radio, {
|
|
key: "radio-group-value-options-".concat(option.value),
|
|
prefixCls: prefixCls,
|
|
disabled: option.disabled || disabled,
|
|
value: option.value,
|
|
checked: value === option.value,
|
|
style: option.style
|
|
}, option.label);
|
|
});
|
|
}
|
|
var mergedSize = customizeSize || size;
|
|
var classString = classnames_default()(groupPrefixCls, "".concat(groupPrefixCls, "-").concat(buttonStyle), (_classNames = {}, (0,defineProperty/* default */.Z)(_classNames, "".concat(groupPrefixCls, "-").concat(mergedSize), mergedSize), (0,defineProperty/* default */.Z)(_classNames, "".concat(groupPrefixCls, "-rtl"), direction === 'rtl'), _classNames), className);
|
|
return /*#__PURE__*/react.createElement("div", (0,esm_extends/* default */.Z)({}, (0,getDataOrAriaProps/* default */.Z)(props), {
|
|
className: classString,
|
|
style: style,
|
|
onMouseEnter: onMouseEnter,
|
|
onMouseLeave: onMouseLeave,
|
|
onFocus: onFocus,
|
|
onBlur: onBlur,
|
|
id: id,
|
|
ref: ref
|
|
}), /*#__PURE__*/react.createElement(RadioGroupContextProvider, {
|
|
value: {
|
|
onChange: onRadioChange,
|
|
value: value,
|
|
disabled: props.disabled,
|
|
name: props.name,
|
|
optionType: props.optionType
|
|
}
|
|
}, childrenToRender));
|
|
});
|
|
/* harmony default export */ var group = (/*#__PURE__*/react.memo(RadioGroup));
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/radio/radioButton.js
|
|
|
|
var radioButton_rest = undefined && undefined.__rest || function (s, e) {
|
|
var t = {};
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
}
|
|
return t;
|
|
};
|
|
|
|
|
|
|
|
|
|
var RadioButton = function RadioButton(props, ref) {
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls;
|
|
var customizePrefixCls = props.prefixCls,
|
|
radioProps = radioButton_rest(props, ["prefixCls"]);
|
|
var prefixCls = getPrefixCls('radio', customizePrefixCls);
|
|
return /*#__PURE__*/react.createElement(RadioOptionTypeContextProvider, {
|
|
value: "button"
|
|
}, /*#__PURE__*/react.createElement(radio_radio, (0,esm_extends/* default */.Z)({
|
|
prefixCls: prefixCls
|
|
}, radioProps, {
|
|
type: "radio",
|
|
ref: ref
|
|
})));
|
|
};
|
|
/* harmony default export */ var radioButton = (/*#__PURE__*/react.forwardRef(RadioButton));
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/radio/index.js
|
|
|
|
|
|
|
|
|
|
var radio_Radio = radio_radio;
|
|
radio_Radio.Button = radioButton;
|
|
radio_Radio.Group = group;
|
|
radio_Radio.__ANT_RADIO = true;
|
|
/* harmony default export */ var es_radio = (radio_Radio);
|
|
|
|
/***/ }),
|
|
|
|
/***/ 26031:
|
|
/*!***************************************************************!*\
|
|
!*** ./node_modules/antd/es/radio/style/index.js + 1 modules ***!
|
|
\***************************************************************/
|
|
/***/ (function(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/style/default.less
|
|
var style_default = __webpack_require__(43146);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/radio/style/index.less
|
|
// extracted by mini-css-extract-plugin
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/radio/style/index.js
|
|
|
|
|
|
// deps-lint-skip: form
|
|
|
|
/***/ }),
|
|
|
|
/***/ 68390:
|
|
/*!*************************************************************!*\
|
|
!*** ./node_modules/antd/es/skeleton/index.js + 11 modules ***!
|
|
\*************************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
// EXPORTS
|
|
__webpack_require__.d(__webpack_exports__, {
|
|
"Z": function() { return /* binding */ skeleton; }
|
|
});
|
|
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
|
|
var defineProperty = __webpack_require__(60286);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
|
|
var esm_extends = __webpack_require__(58646);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js
|
|
var esm_typeof = __webpack_require__(36046);
|
|
// EXTERNAL MODULE: ./node_modules/classnames/index.js
|
|
var classnames = __webpack_require__(43655);
|
|
var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
|
|
// EXTERNAL MODULE: ./node_modules/react/index.js
|
|
var react = __webpack_require__(978);
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/config-provider/context.js
|
|
var context = __webpack_require__(43016);
|
|
// EXTERNAL MODULE: ./node_modules/rc-util/es/omit.js
|
|
var omit = __webpack_require__(7884);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/Element.js
|
|
|
|
|
|
|
|
|
|
var Element = function Element(props) {
|
|
var _classNames, _classNames2;
|
|
var prefixCls = props.prefixCls,
|
|
className = props.className,
|
|
style = props.style,
|
|
size = props.size,
|
|
shape = props.shape;
|
|
var sizeCls = classnames_default()((_classNames = {}, (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-lg"), size === 'large'), (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-sm"), size === 'small'), _classNames));
|
|
var shapeCls = classnames_default()((_classNames2 = {}, (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-circle"), shape === 'circle'), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-square"), shape === 'square'), (0,defineProperty/* default */.Z)(_classNames2, "".concat(prefixCls, "-round"), shape === 'round'), _classNames2));
|
|
var sizeStyle = react.useMemo(function () {
|
|
return typeof size === 'number' ? {
|
|
width: size,
|
|
height: size,
|
|
lineHeight: "".concat(size, "px")
|
|
} : {};
|
|
}, [size]);
|
|
return /*#__PURE__*/react.createElement("span", {
|
|
className: classnames_default()(prefixCls, sizeCls, shapeCls, className),
|
|
style: (0,esm_extends/* default */.Z)((0,esm_extends/* default */.Z)({}, sizeStyle), style)
|
|
});
|
|
};
|
|
/* harmony default export */ var skeleton_Element = (Element);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/Avatar.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var SkeletonAvatar = function SkeletonAvatar(props) {
|
|
var customizePrefixCls = props.prefixCls,
|
|
className = props.className,
|
|
active = props.active,
|
|
_props$shape = props.shape,
|
|
shape = _props$shape === void 0 ? 'circle' : _props$shape,
|
|
_props$size = props.size,
|
|
size = _props$size === void 0 ? 'default' : _props$size;
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls;
|
|
var prefixCls = getPrefixCls('skeleton', customizePrefixCls);
|
|
var otherProps = (0,omit/* default */.Z)(props, ['prefixCls', 'className']);
|
|
var cls = classnames_default()(prefixCls, "".concat(prefixCls, "-element"), (0,defineProperty/* default */.Z)({}, "".concat(prefixCls, "-active"), active), className);
|
|
return /*#__PURE__*/react.createElement("div", {
|
|
className: cls
|
|
}, /*#__PURE__*/react.createElement(skeleton_Element, (0,esm_extends/* default */.Z)({
|
|
prefixCls: "".concat(prefixCls, "-avatar"),
|
|
shape: shape,
|
|
size: size
|
|
}, otherProps)));
|
|
};
|
|
/* harmony default export */ var Avatar = (SkeletonAvatar);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/Button.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var SkeletonButton = function SkeletonButton(props) {
|
|
var _classNames;
|
|
var customizePrefixCls = props.prefixCls,
|
|
className = props.className,
|
|
active = props.active,
|
|
_props$block = props.block,
|
|
block = _props$block === void 0 ? false : _props$block,
|
|
_props$size = props.size,
|
|
size = _props$size === void 0 ? 'default' : _props$size;
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls;
|
|
var prefixCls = getPrefixCls('skeleton', customizePrefixCls);
|
|
var otherProps = (0,omit/* default */.Z)(props, ['prefixCls']);
|
|
var cls = classnames_default()(prefixCls, "".concat(prefixCls, "-element"), (_classNames = {}, (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-active"), active), (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-block"), block), _classNames), className);
|
|
return /*#__PURE__*/react.createElement("div", {
|
|
className: cls
|
|
}, /*#__PURE__*/react.createElement(skeleton_Element, (0,esm_extends/* default */.Z)({
|
|
prefixCls: "".concat(prefixCls, "-button"),
|
|
size: size
|
|
}, otherProps)));
|
|
};
|
|
/* harmony default export */ var Button = (SkeletonButton);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js
|
|
var objectSpread2 = __webpack_require__(67538);
|
|
;// CONCATENATED MODULE: ./node_modules/@ant-design/icons-svg/es/asn/DotChartOutlined.js
|
|
// This icon file is generated automatically.
|
|
var DotChartOutlined = {
|
|
"icon": {
|
|
"tag": "svg",
|
|
"attrs": {
|
|
"viewBox": "64 64 896 896",
|
|
"focusable": "false"
|
|
},
|
|
"children": [{
|
|
"tag": "path",
|
|
"attrs": {
|
|
"d": "M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM288 604a64 64 0 10128 0 64 64 0 10-128 0zm118-224a48 48 0 1096 0 48 48 0 10-96 0zm158 228a96 96 0 10192 0 96 96 0 10-192 0zm148-314a56 56 0 10112 0 56 56 0 10-112 0z"
|
|
}
|
|
}]
|
|
},
|
|
"name": "dot-chart",
|
|
"theme": "outlined"
|
|
};
|
|
/* harmony default export */ var asn_DotChartOutlined = (DotChartOutlined);
|
|
// EXTERNAL MODULE: ./node_modules/antd/node_modules/@ant-design/icons/es/components/AntdIcon.js + 3 modules
|
|
var AntdIcon = __webpack_require__(7381);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/node_modules/@ant-design/icons/es/icons/DotChartOutlined.js
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
|
|
|
|
|
var DotChartOutlined_DotChartOutlined = function DotChartOutlined(props, ref) {
|
|
return /*#__PURE__*/react.createElement(AntdIcon/* default */.Z, (0,objectSpread2/* default */.Z)((0,objectSpread2/* default */.Z)({}, props), {}, {
|
|
ref: ref,
|
|
icon: asn_DotChartOutlined
|
|
}));
|
|
};
|
|
DotChartOutlined_DotChartOutlined.displayName = 'DotChartOutlined';
|
|
/* harmony default export */ var icons_DotChartOutlined = (/*#__PURE__*/react.forwardRef(DotChartOutlined_DotChartOutlined));
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/Node.js
|
|
|
|
|
|
|
|
|
|
|
|
var SkeletonNode = function SkeletonNode(props) {
|
|
var customizePrefixCls = props.prefixCls,
|
|
className = props.className,
|
|
style = props.style,
|
|
active = props.active,
|
|
children = props.children;
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls;
|
|
var prefixCls = getPrefixCls('skeleton', customizePrefixCls);
|
|
var cls = classnames_default()(prefixCls, "".concat(prefixCls, "-element"), (0,defineProperty/* default */.Z)({}, "".concat(prefixCls, "-active"), active), className);
|
|
var content = children !== null && children !== void 0 ? children : /*#__PURE__*/react.createElement(icons_DotChartOutlined, null);
|
|
return /*#__PURE__*/react.createElement("div", {
|
|
className: cls
|
|
}, /*#__PURE__*/react.createElement("div", {
|
|
className: classnames_default()("".concat(prefixCls, "-image"), className),
|
|
style: style
|
|
}, content));
|
|
};
|
|
/* harmony default export */ var Node = (SkeletonNode);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/Image.js
|
|
|
|
|
|
|
|
|
|
var path = 'M365.714286 329.142857q0 45.714286-32.036571 77.677714t-77.677714 32.036571-77.677714-32.036571-32.036571-77.677714 32.036571-77.677714 77.677714-32.036571 77.677714 32.036571 32.036571 77.677714zM950.857143 548.571429l0 256-804.571429 0 0-109.714286 182.857143-182.857143 91.428571 91.428571 292.571429-292.571429zM1005.714286 146.285714l-914.285714 0q-7.460571 0-12.873143 5.412571t-5.412571 12.873143l0 694.857143q0 7.460571 5.412571 12.873143t12.873143 5.412571l914.285714 0q7.460571 0 12.873143-5.412571t5.412571-12.873143l0-694.857143q0-7.460571-5.412571-12.873143t-12.873143-5.412571zM1097.142857 164.571429l0 694.857143q0 37.741714-26.843429 64.585143t-64.585143 26.843429l-914.285714 0q-37.741714 0-64.585143-26.843429t-26.843429-64.585143l0-694.857143q0-37.741714 26.843429-64.585143t64.585143-26.843429l914.285714 0q37.741714 0 64.585143 26.843429t26.843429 64.585143z';
|
|
var SkeletonImage = function SkeletonImage(props) {
|
|
var customizePrefixCls = props.prefixCls,
|
|
className = props.className,
|
|
style = props.style,
|
|
active = props.active;
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls;
|
|
var prefixCls = getPrefixCls('skeleton', customizePrefixCls);
|
|
var cls = classnames_default()(prefixCls, "".concat(prefixCls, "-element"), (0,defineProperty/* default */.Z)({}, "".concat(prefixCls, "-active"), active), className);
|
|
return /*#__PURE__*/react.createElement("div", {
|
|
className: cls
|
|
}, /*#__PURE__*/react.createElement("div", {
|
|
className: classnames_default()("".concat(prefixCls, "-image"), className),
|
|
style: style
|
|
}, /*#__PURE__*/react.createElement("svg", {
|
|
viewBox: "0 0 1098 1024",
|
|
xmlns: "http://www.w3.org/2000/svg",
|
|
className: "".concat(prefixCls, "-image-svg")
|
|
}, /*#__PURE__*/react.createElement("path", {
|
|
d: path,
|
|
className: "".concat(prefixCls, "-image-path")
|
|
}))));
|
|
};
|
|
/* harmony default export */ var Image = (SkeletonImage);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/Input.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var SkeletonInput = function SkeletonInput(props) {
|
|
var _classNames;
|
|
var customizePrefixCls = props.prefixCls,
|
|
className = props.className,
|
|
active = props.active,
|
|
block = props.block,
|
|
_props$size = props.size,
|
|
size = _props$size === void 0 ? 'default' : _props$size;
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls;
|
|
var prefixCls = getPrefixCls('skeleton', customizePrefixCls);
|
|
var otherProps = (0,omit/* default */.Z)(props, ['prefixCls']);
|
|
var cls = classnames_default()(prefixCls, "".concat(prefixCls, "-element"), (_classNames = {}, (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-active"), active), (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-block"), block), _classNames), className);
|
|
return /*#__PURE__*/react.createElement("div", {
|
|
className: cls
|
|
}, /*#__PURE__*/react.createElement(skeleton_Element, (0,esm_extends/* default */.Z)({
|
|
prefixCls: "".concat(prefixCls, "-input"),
|
|
size: size
|
|
}, otherProps)));
|
|
};
|
|
/* harmony default export */ var Input = (SkeletonInput);
|
|
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 2 modules
|
|
var toConsumableArray = __webpack_require__(96103);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/Paragraph.js
|
|
|
|
|
|
|
|
var Paragraph = function Paragraph(props) {
|
|
var getWidth = function getWidth(index) {
|
|
var width = props.width,
|
|
_props$rows = props.rows,
|
|
rows = _props$rows === void 0 ? 2 : _props$rows;
|
|
if (Array.isArray(width)) {
|
|
return width[index];
|
|
}
|
|
// last paragraph
|
|
if (rows - 1 === index) {
|
|
return width;
|
|
}
|
|
return undefined;
|
|
};
|
|
var prefixCls = props.prefixCls,
|
|
className = props.className,
|
|
style = props.style,
|
|
rows = props.rows;
|
|
var rowList = (0,toConsumableArray/* default */.Z)(Array(rows)).map(function (_, index) {
|
|
return /*#__PURE__*/(
|
|
// eslint-disable-next-line react/no-array-index-key
|
|
react.createElement("li", {
|
|
key: index,
|
|
style: {
|
|
width: getWidth(index)
|
|
}
|
|
})
|
|
);
|
|
});
|
|
return /*#__PURE__*/react.createElement("ul", {
|
|
className: classnames_default()(prefixCls, className),
|
|
style: style
|
|
}, rowList);
|
|
};
|
|
/* harmony default export */ var skeleton_Paragraph = (Paragraph);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/Title.js
|
|
|
|
/* eslint-disable jsx-a11y/heading-has-content */
|
|
|
|
|
|
var Title = function Title(_ref) {
|
|
var prefixCls = _ref.prefixCls,
|
|
className = _ref.className,
|
|
width = _ref.width,
|
|
style = _ref.style;
|
|
return /*#__PURE__*/react.createElement("h3", {
|
|
className: classnames_default()(prefixCls, className),
|
|
style: (0,esm_extends/* default */.Z)({
|
|
width: width
|
|
}, style)
|
|
});
|
|
};
|
|
/* harmony default export */ var skeleton_Title = (Title);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/Skeleton.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getComponentProps(prop) {
|
|
if (prop && (0,esm_typeof/* default */.Z)(prop) === 'object') {
|
|
return prop;
|
|
}
|
|
return {};
|
|
}
|
|
function getAvatarBasicProps(hasTitle, hasParagraph) {
|
|
if (hasTitle && !hasParagraph) {
|
|
// Square avatar
|
|
return {
|
|
size: 'large',
|
|
shape: 'square'
|
|
};
|
|
}
|
|
return {
|
|
size: 'large',
|
|
shape: 'circle'
|
|
};
|
|
}
|
|
function getTitleBasicProps(hasAvatar, hasParagraph) {
|
|
if (!hasAvatar && hasParagraph) {
|
|
return {
|
|
width: '38%'
|
|
};
|
|
}
|
|
if (hasAvatar && hasParagraph) {
|
|
return {
|
|
width: '50%'
|
|
};
|
|
}
|
|
return {};
|
|
}
|
|
function getParagraphBasicProps(hasAvatar, hasTitle) {
|
|
var basicProps = {};
|
|
// Width
|
|
if (!hasAvatar || !hasTitle) {
|
|
basicProps.width = '61%';
|
|
}
|
|
// Rows
|
|
if (!hasAvatar && hasTitle) {
|
|
basicProps.rows = 3;
|
|
} else {
|
|
basicProps.rows = 2;
|
|
}
|
|
return basicProps;
|
|
}
|
|
var Skeleton = function Skeleton(props) {
|
|
var customizePrefixCls = props.prefixCls,
|
|
loading = props.loading,
|
|
className = props.className,
|
|
style = props.style,
|
|
children = props.children,
|
|
_props$avatar = props.avatar,
|
|
avatar = _props$avatar === void 0 ? false : _props$avatar,
|
|
_props$title = props.title,
|
|
title = _props$title === void 0 ? true : _props$title,
|
|
_props$paragraph = props.paragraph,
|
|
paragraph = _props$paragraph === void 0 ? true : _props$paragraph,
|
|
active = props.active,
|
|
round = props.round;
|
|
var _React$useContext = react.useContext(context/* ConfigContext */.E_),
|
|
getPrefixCls = _React$useContext.getPrefixCls,
|
|
direction = _React$useContext.direction;
|
|
var prefixCls = getPrefixCls('skeleton', customizePrefixCls);
|
|
if (loading || !('loading' in props)) {
|
|
var _classNames;
|
|
var hasAvatar = !!avatar;
|
|
var hasTitle = !!title;
|
|
var hasParagraph = !!paragraph;
|
|
// Avatar
|
|
var avatarNode;
|
|
if (hasAvatar) {
|
|
var avatarProps = (0,esm_extends/* default */.Z)((0,esm_extends/* default */.Z)({
|
|
prefixCls: "".concat(prefixCls, "-avatar")
|
|
}, getAvatarBasicProps(hasTitle, hasParagraph)), getComponentProps(avatar));
|
|
// We direct use SkeletonElement as avatar in skeleton internal.
|
|
avatarNode = /*#__PURE__*/react.createElement("div", {
|
|
className: "".concat(prefixCls, "-header")
|
|
}, /*#__PURE__*/react.createElement(skeleton_Element, (0,esm_extends/* default */.Z)({}, avatarProps)));
|
|
}
|
|
var contentNode;
|
|
if (hasTitle || hasParagraph) {
|
|
// Title
|
|
var $title;
|
|
if (hasTitle) {
|
|
var titleProps = (0,esm_extends/* default */.Z)((0,esm_extends/* default */.Z)({
|
|
prefixCls: "".concat(prefixCls, "-title")
|
|
}, getTitleBasicProps(hasAvatar, hasParagraph)), getComponentProps(title));
|
|
$title = /*#__PURE__*/react.createElement(skeleton_Title, (0,esm_extends/* default */.Z)({}, titleProps));
|
|
}
|
|
// Paragraph
|
|
var paragraphNode;
|
|
if (hasParagraph) {
|
|
var paragraphProps = (0,esm_extends/* default */.Z)((0,esm_extends/* default */.Z)({
|
|
prefixCls: "".concat(prefixCls, "-paragraph")
|
|
}, getParagraphBasicProps(hasAvatar, hasTitle)), getComponentProps(paragraph));
|
|
paragraphNode = /*#__PURE__*/react.createElement(skeleton_Paragraph, (0,esm_extends/* default */.Z)({}, paragraphProps));
|
|
}
|
|
contentNode = /*#__PURE__*/react.createElement("div", {
|
|
className: "".concat(prefixCls, "-content")
|
|
}, $title, paragraphNode);
|
|
}
|
|
var cls = classnames_default()(prefixCls, (_classNames = {}, (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-with-avatar"), hasAvatar), (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-active"), active), (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-rtl"), direction === 'rtl'), (0,defineProperty/* default */.Z)(_classNames, "".concat(prefixCls, "-round"), round), _classNames), className);
|
|
return /*#__PURE__*/react.createElement("div", {
|
|
className: cls,
|
|
style: style
|
|
}, avatarNode, contentNode);
|
|
}
|
|
return typeof children !== 'undefined' ? children : null;
|
|
};
|
|
Skeleton.Button = Button;
|
|
Skeleton.Avatar = Avatar;
|
|
Skeleton.Input = Input;
|
|
Skeleton.Image = Image;
|
|
Skeleton.Node = Node;
|
|
/* harmony default export */ var skeleton_Skeleton = (Skeleton);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/index.js
|
|
|
|
/* harmony default export */ var skeleton = (skeleton_Skeleton);
|
|
|
|
/***/ }),
|
|
|
|
/***/ 35346:
|
|
/*!******************************************************************!*\
|
|
!*** ./node_modules/antd/es/skeleton/style/index.js + 1 modules ***!
|
|
\******************************************************************/
|
|
/***/ (function(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/style/default.less
|
|
var style_default = __webpack_require__(43146);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/style/index.less
|
|
// extracted by mini-css-extract-plugin
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/skeleton/style/index.js
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 89052:
|
|
/*!***************************************************!*\
|
|
!*** ./node_modules/antd/es/time-picker/index.js ***!
|
|
\***************************************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ 58646);
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 978);
|
|
/* harmony import */ var _date_picker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../date-picker */ 40698);
|
|
|
|
var __rest = undefined && undefined.__rest || function (s, e) {
|
|
var t = {};
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
}
|
|
return t;
|
|
};
|
|
|
|
|
|
|
|
var InternalTimePicker = _date_picker__WEBPACK_IMPORTED_MODULE_1__/* ["default"].TimePicker */ .Z.TimePicker,
|
|
InternalRangePicker = _date_picker__WEBPACK_IMPORTED_MODULE_1__/* ["default"].RangePicker */ .Z.RangePicker;
|
|
var RangePicker = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
|
|
var dropdownClassName = props.dropdownClassName,
|
|
popupClassName = props.popupClassName;
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(InternalRangePicker, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({}, props, {
|
|
dropdownClassName: dropdownClassName,
|
|
popupClassName: popupClassName,
|
|
picker: "time",
|
|
mode: undefined,
|
|
ref: ref
|
|
}));
|
|
});
|
|
var TimePicker = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (_a, ref) {
|
|
var addon = _a.addon,
|
|
renderExtraFooter = _a.renderExtraFooter,
|
|
popupClassName = _a.popupClassName,
|
|
dropdownClassName = _a.dropdownClassName,
|
|
restProps = __rest(_a, ["addon", "renderExtraFooter", "popupClassName", "dropdownClassName"]);
|
|
var internalRenderExtraFooter = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(function () {
|
|
if (renderExtraFooter) {
|
|
return renderExtraFooter;
|
|
}
|
|
if (addon) {
|
|
false ? 0 : void 0;
|
|
return addon;
|
|
}
|
|
return undefined;
|
|
}, [addon, renderExtraFooter]);
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(InternalTimePicker, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({
|
|
dropdownClassName: dropdownClassName,
|
|
popupClassName: popupClassName
|
|
}, restProps, {
|
|
mode: undefined,
|
|
ref: ref,
|
|
renderExtraFooter: internalRenderExtraFooter
|
|
}));
|
|
});
|
|
if (false) {}
|
|
TimePicker.RangePicker = RangePicker;
|
|
/* harmony default export */ __webpack_exports__["Z"] = (TimePicker);
|
|
|
|
/***/ }),
|
|
|
|
/***/ 27030:
|
|
/*!*********************************************************************!*\
|
|
!*** ./node_modules/antd/es/time-picker/style/index.js + 1 modules ***!
|
|
\*********************************************************************/
|
|
/***/ (function(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/style/default.less
|
|
var style_default = __webpack_require__(43146);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/time-picker/style/index.less
|
|
// extracted by mini-css-extract-plugin
|
|
|
|
// EXTERNAL MODULE: ./node_modules/antd/es/date-picker/style/index.js + 1 modules
|
|
var style = __webpack_require__(49103);
|
|
;// CONCATENATED MODULE: ./node_modules/antd/es/time-picker/style/index.js
|
|
|
|
|
|
// style dependencies
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 87012:
|
|
/*!*************************************************!*\
|
|
!*** ./node_modules/copy-to-clipboard/index.js ***!
|
|
\*************************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var deselectCurrent = __webpack_require__(/*! toggle-selection */ 35333);
|
|
var clipboardToIE11Formatting = {
|
|
"text/plain": "Text",
|
|
"text/html": "Url",
|
|
"default": "Text"
|
|
};
|
|
var defaultMessage = "Copy to clipboard: #{key}, Enter";
|
|
function format(message) {
|
|
var copyKey = (/mac os x/i.test(navigator.userAgent) ? "⌘" : "Ctrl") + "+C";
|
|
return message.replace(/#{\s*key\s*}/g, copyKey);
|
|
}
|
|
function copy(text, options) {
|
|
var debug,
|
|
message,
|
|
reselectPrevious,
|
|
range,
|
|
selection,
|
|
mark,
|
|
success = false;
|
|
if (!options) {
|
|
options = {};
|
|
}
|
|
debug = options.debug || false;
|
|
try {
|
|
reselectPrevious = deselectCurrent();
|
|
range = document.createRange();
|
|
selection = document.getSelection();
|
|
mark = document.createElement("span");
|
|
mark.textContent = text;
|
|
// avoid screen readers from reading out loud the text
|
|
mark.ariaHidden = "true";
|
|
// reset user styles for span element
|
|
mark.style.all = "unset";
|
|
// prevents scrolling to the end of the page
|
|
mark.style.position = "fixed";
|
|
mark.style.top = 0;
|
|
mark.style.clip = "rect(0, 0, 0, 0)";
|
|
// used to preserve spaces and line breaks
|
|
mark.style.whiteSpace = "pre";
|
|
// do not inherit user-select (it may be `none`)
|
|
mark.style.webkitUserSelect = "text";
|
|
mark.style.MozUserSelect = "text";
|
|
mark.style.msUserSelect = "text";
|
|
mark.style.userSelect = "text";
|
|
mark.addEventListener("copy", function (e) {
|
|
e.stopPropagation();
|
|
if (options.format) {
|
|
e.preventDefault();
|
|
if (typeof e.clipboardData === "undefined") {
|
|
// IE 11
|
|
debug && console.warn("unable to use e.clipboardData");
|
|
debug && console.warn("trying IE specific stuff");
|
|
window.clipboardData.clearData();
|
|
var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting["default"];
|
|
window.clipboardData.setData(format, text);
|
|
} else {
|
|
// all other browsers
|
|
e.clipboardData.clearData();
|
|
e.clipboardData.setData(options.format, text);
|
|
}
|
|
}
|
|
if (options.onCopy) {
|
|
e.preventDefault();
|
|
options.onCopy(e.clipboardData);
|
|
}
|
|
});
|
|
document.body.appendChild(mark);
|
|
range.selectNodeContents(mark);
|
|
selection.addRange(range);
|
|
var successful = document.execCommand("copy");
|
|
if (!successful) {
|
|
throw new Error("copy command was unsuccessful");
|
|
}
|
|
success = true;
|
|
} catch (err) {
|
|
debug && console.error("unable to copy using execCommand: ", err);
|
|
debug && console.warn("trying IE specific stuff");
|
|
try {
|
|
window.clipboardData.setData(options.format || "text", text);
|
|
options.onCopy && options.onCopy(window.clipboardData);
|
|
success = true;
|
|
} catch (err) {
|
|
debug && console.error("unable to copy using clipboardData: ", err);
|
|
debug && console.error("falling back to prompt");
|
|
message = format("message" in options ? options.message : defaultMessage);
|
|
window.prompt(message, text);
|
|
}
|
|
} finally {
|
|
if (selection) {
|
|
if (typeof selection.removeRange == "function") {
|
|
selection.removeRange(range);
|
|
} else {
|
|
selection.removeAllRanges();
|
|
}
|
|
}
|
|
if (mark) {
|
|
document.body.removeChild(mark);
|
|
}
|
|
reselectPrevious();
|
|
}
|
|
return success;
|
|
}
|
|
module.exports = copy;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 31596:
|
|
/*!*********************************************!*\
|
|
!*** ./node_modules/dijkstrajs/dijkstra.js ***!
|
|
\*********************************************/
|
|
/***/ (function(module) {
|
|
|
|
"use strict";
|
|
|
|
|
|
/******************************************************************************
|
|
* Created 2008-08-19.
|
|
*
|
|
* Dijkstra path-finding functions. Adapted from the Dijkstar Python project.
|
|
*
|
|
* Copyright (C) 2008
|
|
* Wyatt Baldwin <self@wyattbaldwin.com>
|
|
* All rights reserved
|
|
*
|
|
* Licensed under the MIT license.
|
|
*
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*****************************************************************************/
|
|
var dijkstra = {
|
|
single_source_shortest_paths: function single_source_shortest_paths(graph, s, d) {
|
|
// Predecessor map for each node that has been encountered.
|
|
// node ID => predecessor node ID
|
|
var predecessors = {};
|
|
|
|
// Costs of shortest paths from s to all nodes encountered.
|
|
// node ID => cost
|
|
var costs = {};
|
|
costs[s] = 0;
|
|
|
|
// Costs of shortest paths from s to all nodes encountered; differs from
|
|
// `costs` in that it provides easy access to the node that currently has
|
|
// the known shortest path from s.
|
|
// XXX: Do we actually need both `costs` and `open`?
|
|
var open = dijkstra.PriorityQueue.make();
|
|
open.push(s, 0);
|
|
var closest, u, v, cost_of_s_to_u, adjacent_nodes, cost_of_e, cost_of_s_to_u_plus_cost_of_e, cost_of_s_to_v, first_visit;
|
|
while (!open.empty()) {
|
|
// In the nodes remaining in graph that have a known cost from s,
|
|
// find the node, u, that currently has the shortest path from s.
|
|
closest = open.pop();
|
|
u = closest.value;
|
|
cost_of_s_to_u = closest.cost;
|
|
|
|
// Get nodes adjacent to u...
|
|
adjacent_nodes = graph[u] || {};
|
|
|
|
// ...and explore the edges that connect u to those nodes, updating
|
|
// the cost of the shortest paths to any or all of those nodes as
|
|
// necessary. v is the node across the current edge from u.
|
|
for (v in adjacent_nodes) {
|
|
if (adjacent_nodes.hasOwnProperty(v)) {
|
|
// Get the cost of the edge running from u to v.
|
|
cost_of_e = adjacent_nodes[v];
|
|
|
|
// Cost of s to u plus the cost of u to v across e--this is *a*
|
|
// cost from s to v that may or may not be less than the current
|
|
// known cost to v.
|
|
cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;
|
|
|
|
// If we haven't visited v yet OR if the current known cost from s to
|
|
// v is greater than the new cost we just found (cost of s to u plus
|
|
// cost of u to v across e), update v's cost in the cost list and
|
|
// update v's predecessor in the predecessor list (it's now u).
|
|
cost_of_s_to_v = costs[v];
|
|
first_visit = typeof costs[v] === 'undefined';
|
|
if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {
|
|
costs[v] = cost_of_s_to_u_plus_cost_of_e;
|
|
open.push(v, cost_of_s_to_u_plus_cost_of_e);
|
|
predecessors[v] = u;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {
|
|
var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');
|
|
throw new Error(msg);
|
|
}
|
|
return predecessors;
|
|
},
|
|
extract_shortest_path_from_predecessor_list: function extract_shortest_path_from_predecessor_list(predecessors, d) {
|
|
var nodes = [];
|
|
var u = d;
|
|
var predecessor;
|
|
while (u) {
|
|
nodes.push(u);
|
|
predecessor = predecessors[u];
|
|
u = predecessors[u];
|
|
}
|
|
nodes.reverse();
|
|
return nodes;
|
|
},
|
|
find_path: function find_path(graph, s, d) {
|
|
var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);
|
|
return dijkstra.extract_shortest_path_from_predecessor_list(predecessors, d);
|
|
},
|
|
/**
|
|
* A very naive priority queue implementation.
|
|
*/
|
|
PriorityQueue: {
|
|
make: function make(opts) {
|
|
var T = dijkstra.PriorityQueue,
|
|
t = {},
|
|
key;
|
|
opts = opts || {};
|
|
for (key in T) {
|
|
if (T.hasOwnProperty(key)) {
|
|
t[key] = T[key];
|
|
}
|
|
}
|
|
t.queue = [];
|
|
t.sorter = opts.sorter || T.default_sorter;
|
|
return t;
|
|
},
|
|
default_sorter: function default_sorter(a, b) {
|
|
return a.cost - b.cost;
|
|
},
|
|
/**
|
|
* Add a new item to the queue and ensure the highest priority element
|
|
* is at the front of the queue.
|
|
*/
|
|
push: function push(value, cost) {
|
|
var item = {
|
|
value: value,
|
|
cost: cost
|
|
};
|
|
this.queue.push(item);
|
|
this.queue.sort(this.sorter);
|
|
},
|
|
/**
|
|
* Return the highest priority element in the queue.
|
|
*/
|
|
pop: function pop() {
|
|
return this.queue.shift();
|
|
},
|
|
empty: function empty() {
|
|
return this.queue.length === 0;
|
|
}
|
|
}
|
|
};
|
|
|
|
// node.js module exports
|
|
if (true) {
|
|
module.exports = dijkstra;
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ 95799:
|
|
/*!***************************************!*\
|
|
!*** ./node_modules/isarray/index.js ***!
|
|
\***************************************/
|
|
/***/ (function(module) {
|
|
|
|
var toString = {}.toString;
|
|
module.exports = Array.isArray || function (arr) {
|
|
return toString.call(arr) == '[object Array]';
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 46906:
|
|
/*!********************************************!*\
|
|
!*** ./node_modules/qrcode/lib/browser.js ***!
|
|
\********************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var canPromise = __webpack_require__(/*! ./can-promise */ 16002);
|
|
var QRCode = __webpack_require__(/*! ./core/qrcode */ 96519);
|
|
var CanvasRenderer = __webpack_require__(/*! ./renderer/canvas */ 80182);
|
|
var SvgRenderer = __webpack_require__(/*! ./renderer/svg-tag.js */ 65163);
|
|
function renderCanvas(renderFunc, canvas, text, opts, cb) {
|
|
var args = [].slice.call(arguments, 1);
|
|
var argsNum = args.length;
|
|
var isLastArgCb = typeof args[argsNum - 1] === 'function';
|
|
if (!isLastArgCb && !canPromise()) {
|
|
throw new Error('Callback required as last argument');
|
|
}
|
|
if (isLastArgCb) {
|
|
if (argsNum < 2) {
|
|
throw new Error('Too few arguments provided');
|
|
}
|
|
if (argsNum === 2) {
|
|
cb = text;
|
|
text = canvas;
|
|
canvas = opts = undefined;
|
|
} else if (argsNum === 3) {
|
|
if (canvas.getContext && typeof cb === 'undefined') {
|
|
cb = opts;
|
|
opts = undefined;
|
|
} else {
|
|
cb = opts;
|
|
opts = text;
|
|
text = canvas;
|
|
canvas = undefined;
|
|
}
|
|
}
|
|
} else {
|
|
if (argsNum < 1) {
|
|
throw new Error('Too few arguments provided');
|
|
}
|
|
if (argsNum === 1) {
|
|
text = canvas;
|
|
canvas = opts = undefined;
|
|
} else if (argsNum === 2 && !canvas.getContext) {
|
|
opts = text;
|
|
text = canvas;
|
|
canvas = undefined;
|
|
}
|
|
return new Promise(function (resolve, reject) {
|
|
try {
|
|
var data = QRCode.create(text, opts);
|
|
resolve(renderFunc(data, canvas, opts));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
});
|
|
}
|
|
try {
|
|
var data = QRCode.create(text, opts);
|
|
cb(null, renderFunc(data, canvas, opts));
|
|
} catch (e) {
|
|
cb(e);
|
|
}
|
|
}
|
|
exports.create = QRCode.create;
|
|
exports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render);
|
|
exports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL);
|
|
|
|
// only svg for now.
|
|
exports.toString = renderCanvas.bind(null, function (data, _, opts) {
|
|
return SvgRenderer.render(data, opts);
|
|
});
|
|
|
|
/***/ }),
|
|
|
|
/***/ 16002:
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/can-promise.js ***!
|
|
\************************************************/
|
|
/***/ (function(module) {
|
|
|
|
// can-promise has a crash in some versions of react native that dont have
|
|
// standard global objects
|
|
// https://github.com/soldair/node-qrcode/issues/157
|
|
|
|
module.exports = function () {
|
|
return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 60773:
|
|
/*!***********************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/alignment-pattern.js ***!
|
|
\***********************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
/**
|
|
* Alignment pattern are fixed reference pattern in defined positions
|
|
* in a matrix symbology, which enables the decode software to re-synchronise
|
|
* the coordinate mapping of the image modules in the event of moderate amounts
|
|
* of distortion of the image.
|
|
*
|
|
* Alignment patterns are present only in QR Code symbols of version 2 or larger
|
|
* and their number depends on the symbol version.
|
|
*/
|
|
|
|
var getSymbolSize = (__webpack_require__(/*! ./utils */ 89437).getSymbolSize);
|
|
|
|
/**
|
|
* Calculate the row/column coordinates of the center module of each alignment pattern
|
|
* for the specified QR Code version.
|
|
*
|
|
* The alignment patterns are positioned symmetrically on either side of the diagonal
|
|
* running from the top left corner of the symbol to the bottom right corner.
|
|
*
|
|
* Since positions are simmetrical only half of the coordinates are returned.
|
|
* Each item of the array will represent in turn the x and y coordinate.
|
|
* @see {@link getPositions}
|
|
*
|
|
* @param {Number} version QR Code version
|
|
* @return {Array} Array of coordinate
|
|
*/
|
|
exports.getRowColCoords = function getRowColCoords(version) {
|
|
if (version === 1) return [];
|
|
var posCount = Math.floor(version / 7) + 2;
|
|
var size = getSymbolSize(version);
|
|
var intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2;
|
|
var positions = [size - 7]; // Last coord is always (size - 7)
|
|
|
|
for (var i = 1; i < posCount - 1; i++) {
|
|
positions[i] = positions[i - 1] - intervals;
|
|
}
|
|
positions.push(6); // First coord is always 6
|
|
|
|
return positions.reverse();
|
|
};
|
|
|
|
/**
|
|
* Returns an array containing the positions of each alignment pattern.
|
|
* Each array's element represent the center point of the pattern as (x, y) coordinates
|
|
*
|
|
* Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}
|
|
* and filtering out the items that overlaps with finder pattern
|
|
*
|
|
* @example
|
|
* For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.
|
|
* The alignment patterns, therefore, are to be centered on (row, column)
|
|
* positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).
|
|
* Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns
|
|
* and are not therefore used for alignment patterns.
|
|
*
|
|
* var pos = getPositions(7)
|
|
* // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]
|
|
*
|
|
* @param {Number} version QR Code version
|
|
* @return {Array} Array of coordinates
|
|
*/
|
|
exports.getPositions = function getPositions(version) {
|
|
var coords = [];
|
|
var pos = exports.getRowColCoords(version);
|
|
var posLength = pos.length;
|
|
for (var i = 0; i < posLength; i++) {
|
|
for (var j = 0; j < posLength; j++) {
|
|
// Skip if position is occupied by finder patterns
|
|
if (i === 0 && j === 0 ||
|
|
// top-left
|
|
i === 0 && j === posLength - 1 ||
|
|
// bottom-left
|
|
i === posLength - 1 && j === 0) {
|
|
// top-right
|
|
continue;
|
|
}
|
|
coords.push([pos[i], pos[j]]);
|
|
}
|
|
}
|
|
return coords;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 49577:
|
|
/*!***********************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/alphanumeric-data.js ***!
|
|
\***********************************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
var Mode = __webpack_require__(/*! ./mode */ 62482);
|
|
|
|
/**
|
|
* Array of characters available in alphanumeric mode
|
|
*
|
|
* As per QR Code specification, to each character
|
|
* is assigned a value from 0 to 44 which in this case coincides
|
|
* with the array index
|
|
*
|
|
* @type {Array}
|
|
*/
|
|
var ALPHA_NUM_CHARS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', '$', '%', '*', '+', '-', '.', '/', ':'];
|
|
function AlphanumericData(data) {
|
|
this.mode = Mode.ALPHANUMERIC;
|
|
this.data = data;
|
|
}
|
|
AlphanumericData.getBitsLength = function getBitsLength(length) {
|
|
return 11 * Math.floor(length / 2) + 6 * (length % 2);
|
|
};
|
|
AlphanumericData.prototype.getLength = function getLength() {
|
|
return this.data.length;
|
|
};
|
|
AlphanumericData.prototype.getBitsLength = function getBitsLength() {
|
|
return AlphanumericData.getBitsLength(this.data.length);
|
|
};
|
|
AlphanumericData.prototype.write = function write(bitBuffer) {
|
|
var i;
|
|
|
|
// Input data characters are divided into groups of two characters
|
|
// and encoded as 11-bit binary codes.
|
|
for (i = 0; i + 2 <= this.data.length; i += 2) {
|
|
// The character value of the first character is multiplied by 45
|
|
var value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45;
|
|
|
|
// The character value of the second digit is added to the product
|
|
value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1]);
|
|
|
|
// The sum is then stored as 11-bit binary number
|
|
bitBuffer.put(value, 11);
|
|
}
|
|
|
|
// If the number of input data characters is not a multiple of two,
|
|
// the character value of the final character is encoded as a 6-bit binary number.
|
|
if (this.data.length % 2) {
|
|
bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6);
|
|
}
|
|
};
|
|
module.exports = AlphanumericData;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 41929:
|
|
/*!****************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/bit-buffer.js ***!
|
|
\****************************************************/
|
|
/***/ (function(module) {
|
|
|
|
function BitBuffer() {
|
|
this.buffer = [];
|
|
this.length = 0;
|
|
}
|
|
BitBuffer.prototype = {
|
|
get: function get(index) {
|
|
var bufIndex = Math.floor(index / 8);
|
|
return (this.buffer[bufIndex] >>> 7 - index % 8 & 1) === 1;
|
|
},
|
|
put: function put(num, length) {
|
|
for (var i = 0; i < length; i++) {
|
|
this.putBit((num >>> length - i - 1 & 1) === 1);
|
|
}
|
|
},
|
|
getLengthInBits: function getLengthInBits() {
|
|
return this.length;
|
|
},
|
|
putBit: function putBit(bit) {
|
|
var bufIndex = Math.floor(this.length / 8);
|
|
if (this.buffer.length <= bufIndex) {
|
|
this.buffer.push(0);
|
|
}
|
|
if (bit) {
|
|
this.buffer[bufIndex] |= 0x80 >>> this.length % 8;
|
|
}
|
|
this.length++;
|
|
}
|
|
};
|
|
module.exports = BitBuffer;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5611:
|
|
/*!****************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/bit-matrix.js ***!
|
|
\****************************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
var BufferUtil = __webpack_require__(/*! ../utils/buffer */ 40692);
|
|
|
|
/**
|
|
* Helper class to handle QR Code symbol modules
|
|
*
|
|
* @param {Number} size Symbol size
|
|
*/
|
|
function BitMatrix(size) {
|
|
if (!size || size < 1) {
|
|
throw new Error('BitMatrix size must be defined and greater than 0');
|
|
}
|
|
this.size = size;
|
|
this.data = BufferUtil.alloc(size * size);
|
|
this.reservedBit = BufferUtil.alloc(size * size);
|
|
}
|
|
|
|
/**
|
|
* Set bit value at specified location
|
|
* If reserved flag is set, this bit will be ignored during masking process
|
|
*
|
|
* @param {Number} row
|
|
* @param {Number} col
|
|
* @param {Boolean} value
|
|
* @param {Boolean} reserved
|
|
*/
|
|
BitMatrix.prototype.set = function (row, col, value, reserved) {
|
|
var index = row * this.size + col;
|
|
this.data[index] = value;
|
|
if (reserved) this.reservedBit[index] = true;
|
|
};
|
|
|
|
/**
|
|
* Returns bit value at specified location
|
|
*
|
|
* @param {Number} row
|
|
* @param {Number} col
|
|
* @return {Boolean}
|
|
*/
|
|
BitMatrix.prototype.get = function (row, col) {
|
|
return this.data[row * this.size + col];
|
|
};
|
|
|
|
/**
|
|
* Applies xor operator at specified location
|
|
* (used during masking process)
|
|
*
|
|
* @param {Number} row
|
|
* @param {Number} col
|
|
* @param {Boolean} value
|
|
*/
|
|
BitMatrix.prototype.xor = function (row, col, value) {
|
|
this.data[row * this.size + col] ^= value;
|
|
};
|
|
|
|
/**
|
|
* Check if bit at specified location is reserved
|
|
*
|
|
* @param {Number} row
|
|
* @param {Number} col
|
|
* @return {Boolean}
|
|
*/
|
|
BitMatrix.prototype.isReserved = function (row, col) {
|
|
return this.reservedBit[row * this.size + col];
|
|
};
|
|
module.exports = BitMatrix;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 66122:
|
|
/*!***************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/byte-data.js ***!
|
|
\***************************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
var BufferUtil = __webpack_require__(/*! ../utils/buffer */ 40692);
|
|
var Mode = __webpack_require__(/*! ./mode */ 62482);
|
|
function ByteData(data) {
|
|
this.mode = Mode.BYTE;
|
|
this.data = BufferUtil.from(data);
|
|
}
|
|
ByteData.getBitsLength = function getBitsLength(length) {
|
|
return length * 8;
|
|
};
|
|
ByteData.prototype.getLength = function getLength() {
|
|
return this.data.length;
|
|
};
|
|
ByteData.prototype.getBitsLength = function getBitsLength() {
|
|
return ByteData.getBitsLength(this.data.length);
|
|
};
|
|
ByteData.prototype.write = function (bitBuffer) {
|
|
for (var i = 0, l = this.data.length; i < l; i++) {
|
|
bitBuffer.put(this.data[i], 8);
|
|
}
|
|
};
|
|
module.exports = ByteData;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 87649:
|
|
/*!***************************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/error-correction-code.js ***!
|
|
\***************************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var ECLevel = __webpack_require__(/*! ./error-correction-level */ 90437);
|
|
var EC_BLOCKS_TABLE = [
|
|
// L M Q H
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 4, 1, 2, 4, 4, 2, 4, 4, 4, 2, 4, 6, 5, 2, 4, 6, 6, 2, 5, 8, 8, 4, 5, 8, 8, 4, 5, 8, 11, 4, 8, 10, 11, 4, 9, 12, 16, 4, 9, 16, 16, 6, 10, 12, 18, 6, 10, 17, 16, 6, 11, 16, 19, 6, 13, 18, 21, 7, 14, 21, 25, 8, 16, 20, 25, 8, 17, 23, 25, 9, 17, 23, 34, 9, 18, 25, 30, 10, 20, 27, 32, 12, 21, 29, 35, 12, 23, 34, 37, 12, 25, 34, 40, 13, 26, 35, 42, 14, 28, 38, 45, 15, 29, 40, 48, 16, 31, 43, 51, 17, 33, 45, 54, 18, 35, 48, 57, 19, 37, 51, 60, 19, 38, 53, 63, 20, 40, 56, 66, 21, 43, 59, 70, 22, 45, 62, 74, 24, 47, 65, 77, 25, 49, 68, 81];
|
|
var EC_CODEWORDS_TABLE = [
|
|
// L M Q H
|
|
7, 10, 13, 17, 10, 16, 22, 28, 15, 26, 36, 44, 20, 36, 52, 64, 26, 48, 72, 88, 36, 64, 96, 112, 40, 72, 108, 130, 48, 88, 132, 156, 60, 110, 160, 192, 72, 130, 192, 224, 80, 150, 224, 264, 96, 176, 260, 308, 104, 198, 288, 352, 120, 216, 320, 384, 132, 240, 360, 432, 144, 280, 408, 480, 168, 308, 448, 532, 180, 338, 504, 588, 196, 364, 546, 650, 224, 416, 600, 700, 224, 442, 644, 750, 252, 476, 690, 816, 270, 504, 750, 900, 300, 560, 810, 960, 312, 588, 870, 1050, 336, 644, 952, 1110, 360, 700, 1020, 1200, 390, 728, 1050, 1260, 420, 784, 1140, 1350, 450, 812, 1200, 1440, 480, 868, 1290, 1530, 510, 924, 1350, 1620, 540, 980, 1440, 1710, 570, 1036, 1530, 1800, 570, 1064, 1590, 1890, 600, 1120, 1680, 1980, 630, 1204, 1770, 2100, 660, 1260, 1860, 2220, 720, 1316, 1950, 2310, 750, 1372, 2040, 2430];
|
|
|
|
/**
|
|
* Returns the number of error correction block that the QR Code should contain
|
|
* for the specified version and error correction level.
|
|
*
|
|
* @param {Number} version QR Code version
|
|
* @param {Number} errorCorrectionLevel Error correction level
|
|
* @return {Number} Number of error correction blocks
|
|
*/
|
|
exports.getBlocksCount = function getBlocksCount(version, errorCorrectionLevel) {
|
|
switch (errorCorrectionLevel) {
|
|
case ECLevel.L:
|
|
return EC_BLOCKS_TABLE[(version - 1) * 4 + 0];
|
|
case ECLevel.M:
|
|
return EC_BLOCKS_TABLE[(version - 1) * 4 + 1];
|
|
case ECLevel.Q:
|
|
return EC_BLOCKS_TABLE[(version - 1) * 4 + 2];
|
|
case ECLevel.H:
|
|
return EC_BLOCKS_TABLE[(version - 1) * 4 + 3];
|
|
default:
|
|
return undefined;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the number of error correction codewords to use for the specified
|
|
* version and error correction level.
|
|
*
|
|
* @param {Number} version QR Code version
|
|
* @param {Number} errorCorrectionLevel Error correction level
|
|
* @return {Number} Number of error correction codewords
|
|
*/
|
|
exports.getTotalCodewordsCount = function getTotalCodewordsCount(version, errorCorrectionLevel) {
|
|
switch (errorCorrectionLevel) {
|
|
case ECLevel.L:
|
|
return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0];
|
|
case ECLevel.M:
|
|
return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1];
|
|
case ECLevel.Q:
|
|
return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2];
|
|
case ECLevel.H:
|
|
return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3];
|
|
default:
|
|
return undefined;
|
|
}
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 90437:
|
|
/*!****************************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/error-correction-level.js ***!
|
|
\****************************************************************/
|
|
/***/ (function(__unused_webpack_module, exports) {
|
|
|
|
exports.L = {
|
|
bit: 1
|
|
};
|
|
exports.M = {
|
|
bit: 0
|
|
};
|
|
exports.Q = {
|
|
bit: 3
|
|
};
|
|
exports.H = {
|
|
bit: 2
|
|
};
|
|
function fromString(string) {
|
|
if (typeof string !== 'string') {
|
|
throw new Error('Param is not a string');
|
|
}
|
|
var lcStr = string.toLowerCase();
|
|
switch (lcStr) {
|
|
case 'l':
|
|
case 'low':
|
|
return exports.L;
|
|
case 'm':
|
|
case 'medium':
|
|
return exports.M;
|
|
case 'q':
|
|
case 'quartile':
|
|
return exports.Q;
|
|
case 'h':
|
|
case 'high':
|
|
return exports.H;
|
|
default:
|
|
throw new Error('Unknown EC Level: ' + string);
|
|
}
|
|
}
|
|
exports.isValid = function isValid(level) {
|
|
return level && typeof level.bit !== 'undefined' && level.bit >= 0 && level.bit < 4;
|
|
};
|
|
exports.from = function from(value, defaultValue) {
|
|
if (exports.isValid(value)) {
|
|
return value;
|
|
}
|
|
try {
|
|
return fromString(value);
|
|
} catch (e) {
|
|
return defaultValue;
|
|
}
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 81796:
|
|
/*!********************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/finder-pattern.js ***!
|
|
\********************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var getSymbolSize = (__webpack_require__(/*! ./utils */ 89437).getSymbolSize);
|
|
var FINDER_PATTERN_SIZE = 7;
|
|
|
|
/**
|
|
* Returns an array containing the positions of each finder pattern.
|
|
* Each array's element represent the top-left point of the pattern as (x, y) coordinates
|
|
*
|
|
* @param {Number} version QR Code version
|
|
* @return {Array} Array of coordinates
|
|
*/
|
|
exports.getPositions = function getPositions(version) {
|
|
var size = getSymbolSize(version);
|
|
return [
|
|
// top-left
|
|
[0, 0],
|
|
// top-right
|
|
[size - FINDER_PATTERN_SIZE, 0],
|
|
// bottom-left
|
|
[0, size - FINDER_PATTERN_SIZE]];
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 58891:
|
|
/*!*****************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/format-info.js ***!
|
|
\*****************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var Utils = __webpack_require__(/*! ./utils */ 89437);
|
|
var G15 = 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0;
|
|
var G15_MASK = 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1;
|
|
var G15_BCH = Utils.getBCHDigit(G15);
|
|
|
|
/**
|
|
* Returns format information with relative error correction bits
|
|
*
|
|
* The format information is a 15-bit sequence containing 5 data bits,
|
|
* with 10 error correction bits calculated using the (15, 5) BCH code.
|
|
*
|
|
* @param {Number} errorCorrectionLevel Error correction level
|
|
* @param {Number} mask Mask pattern
|
|
* @return {Number} Encoded format information bits
|
|
*/
|
|
exports.getEncodedBits = function getEncodedBits(errorCorrectionLevel, mask) {
|
|
var data = errorCorrectionLevel.bit << 3 | mask;
|
|
var d = data << 10;
|
|
while (Utils.getBCHDigit(d) - G15_BCH >= 0) {
|
|
d ^= G15 << Utils.getBCHDigit(d) - G15_BCH;
|
|
}
|
|
|
|
// xor final data with mask pattern in order to ensure that
|
|
// no combination of Error Correction Level and data mask pattern
|
|
// will result in an all-zero data string
|
|
return (data << 10 | d) ^ G15_MASK;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 69525:
|
|
/*!******************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/galois-field.js ***!
|
|
\******************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var BufferUtil = __webpack_require__(/*! ../utils/buffer */ 40692);
|
|
var EXP_TABLE = BufferUtil.alloc(512);
|
|
var LOG_TABLE = BufferUtil.alloc(256)
|
|
/**
|
|
* Precompute the log and anti-log tables for faster computation later
|
|
*
|
|
* For each possible value in the galois field 2^8, we will pre-compute
|
|
* the logarithm and anti-logarithm (exponential) of this value
|
|
*
|
|
* ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}
|
|
*/;
|
|
(function initTables() {
|
|
var x = 1;
|
|
for (var i = 0; i < 255; i++) {
|
|
EXP_TABLE[i] = x;
|
|
LOG_TABLE[x] = i;
|
|
x <<= 1; // multiply by 2
|
|
|
|
// The QR code specification says to use byte-wise modulo 100011101 arithmetic.
|
|
// This means that when a number is 256 or larger, it should be XORed with 0x11D.
|
|
if (x & 0x100) {
|
|
// similar to x >= 256, but a lot faster (because 0x100 == 256)
|
|
x ^= 0x11D;
|
|
}
|
|
}
|
|
|
|
// Optimization: double the size of the anti-log table so that we don't need to mod 255 to
|
|
// stay inside the bounds (because we will mainly use this table for the multiplication of
|
|
// two GF numbers, no more).
|
|
// @see {@link mul}
|
|
for (i = 255; i < 512; i++) {
|
|
EXP_TABLE[i] = EXP_TABLE[i - 255];
|
|
}
|
|
})();
|
|
|
|
/**
|
|
* Returns log value of n inside Galois Field
|
|
*
|
|
* @param {Number} n
|
|
* @return {Number}
|
|
*/
|
|
exports.log = function log(n) {
|
|
if (n < 1) throw new Error('log(' + n + ')');
|
|
return LOG_TABLE[n];
|
|
};
|
|
|
|
/**
|
|
* Returns anti-log value of n inside Galois Field
|
|
*
|
|
* @param {Number} n
|
|
* @return {Number}
|
|
*/
|
|
exports.exp = function exp(n) {
|
|
return EXP_TABLE[n];
|
|
};
|
|
|
|
/**
|
|
* Multiplies two number inside Galois Field
|
|
*
|
|
* @param {Number} x
|
|
* @param {Number} y
|
|
* @return {Number}
|
|
*/
|
|
exports.mul = function mul(x, y) {
|
|
if (x === 0 || y === 0) return 0;
|
|
|
|
// should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized
|
|
// @see {@link initTables}
|
|
return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]];
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 13857:
|
|
/*!****************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/kanji-data.js ***!
|
|
\****************************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
var Mode = __webpack_require__(/*! ./mode */ 62482);
|
|
var Utils = __webpack_require__(/*! ./utils */ 89437);
|
|
function KanjiData(data) {
|
|
this.mode = Mode.KANJI;
|
|
this.data = data;
|
|
}
|
|
KanjiData.getBitsLength = function getBitsLength(length) {
|
|
return length * 13;
|
|
};
|
|
KanjiData.prototype.getLength = function getLength() {
|
|
return this.data.length;
|
|
};
|
|
KanjiData.prototype.getBitsLength = function getBitsLength() {
|
|
return KanjiData.getBitsLength(this.data.length);
|
|
};
|
|
KanjiData.prototype.write = function (bitBuffer) {
|
|
var i;
|
|
|
|
// In the Shift JIS system, Kanji characters are represented by a two byte combination.
|
|
// These byte values are shifted from the JIS X 0208 values.
|
|
// JIS X 0208 gives details of the shift coded representation.
|
|
for (i = 0; i < this.data.length; i++) {
|
|
var value = Utils.toSJIS(this.data[i]);
|
|
|
|
// For characters with Shift JIS values from 0x8140 to 0x9FFC:
|
|
if (value >= 0x8140 && value <= 0x9FFC) {
|
|
// Subtract 0x8140 from Shift JIS value
|
|
value -= 0x8140;
|
|
|
|
// For characters with Shift JIS values from 0xE040 to 0xEBBF
|
|
} else if (value >= 0xE040 && value <= 0xEBBF) {
|
|
// Subtract 0xC140 from Shift JIS value
|
|
value -= 0xC140;
|
|
} else {
|
|
throw new Error('Invalid SJIS character: ' + this.data[i] + '\n' + 'Make sure your charset is UTF-8');
|
|
}
|
|
|
|
// Multiply most significant byte of result by 0xC0
|
|
// and add least significant byte to product
|
|
value = (value >>> 8 & 0xff) * 0xC0 + (value & 0xff);
|
|
|
|
// Convert result to a 13-bit binary string
|
|
bitBuffer.put(value, 13);
|
|
}
|
|
};
|
|
module.exports = KanjiData;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 14360:
|
|
/*!******************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/mask-pattern.js ***!
|
|
\******************************************************/
|
|
/***/ (function(__unused_webpack_module, exports) {
|
|
|
|
/**
|
|
* Data mask pattern reference
|
|
* @type {Object}
|
|
*/
|
|
exports.Patterns = {
|
|
PATTERN000: 0,
|
|
PATTERN001: 1,
|
|
PATTERN010: 2,
|
|
PATTERN011: 3,
|
|
PATTERN100: 4,
|
|
PATTERN101: 5,
|
|
PATTERN110: 6,
|
|
PATTERN111: 7
|
|
};
|
|
|
|
/**
|
|
* Weighted penalty scores for the undesirable features
|
|
* @type {Object}
|
|
*/
|
|
var PenaltyScores = {
|
|
N1: 3,
|
|
N2: 3,
|
|
N3: 40,
|
|
N4: 10
|
|
};
|
|
|
|
/**
|
|
* Check if mask pattern value is valid
|
|
*
|
|
* @param {Number} mask Mask pattern
|
|
* @return {Boolean} true if valid, false otherwise
|
|
*/
|
|
exports.isValid = function isValid(mask) {
|
|
return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7;
|
|
};
|
|
|
|
/**
|
|
* Returns mask pattern from a value.
|
|
* If value is not valid, returns undefined
|
|
*
|
|
* @param {Number|String} value Mask pattern value
|
|
* @return {Number} Valid mask pattern or undefined
|
|
*/
|
|
exports.from = function from(value) {
|
|
return exports.isValid(value) ? parseInt(value, 10) : undefined;
|
|
};
|
|
|
|
/**
|
|
* Find adjacent modules in row/column with the same color
|
|
* and assign a penalty value.
|
|
*
|
|
* Points: N1 + i
|
|
* i is the amount by which the number of adjacent modules of the same color exceeds 5
|
|
*/
|
|
exports.getPenaltyN1 = function getPenaltyN1(data) {
|
|
var size = data.size;
|
|
var points = 0;
|
|
var sameCountCol = 0;
|
|
var sameCountRow = 0;
|
|
var lastCol = null;
|
|
var lastRow = null;
|
|
for (var row = 0; row < size; row++) {
|
|
sameCountCol = sameCountRow = 0;
|
|
lastCol = lastRow = null;
|
|
for (var col = 0; col < size; col++) {
|
|
var module = data.get(row, col);
|
|
if (module === lastCol) {
|
|
sameCountCol++;
|
|
} else {
|
|
if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5);
|
|
lastCol = module;
|
|
sameCountCol = 1;
|
|
}
|
|
module = data.get(col, row);
|
|
if (module === lastRow) {
|
|
sameCountRow++;
|
|
} else {
|
|
if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5);
|
|
lastRow = module;
|
|
sameCountRow = 1;
|
|
}
|
|
}
|
|
if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5);
|
|
if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5);
|
|
}
|
|
return points;
|
|
};
|
|
|
|
/**
|
|
* Find 2x2 blocks with the same color and assign a penalty value
|
|
*
|
|
* Points: N2 * (m - 1) * (n - 1)
|
|
*/
|
|
exports.getPenaltyN2 = function getPenaltyN2(data) {
|
|
var size = data.size;
|
|
var points = 0;
|
|
for (var row = 0; row < size - 1; row++) {
|
|
for (var col = 0; col < size - 1; col++) {
|
|
var last = data.get(row, col) + data.get(row, col + 1) + data.get(row + 1, col) + data.get(row + 1, col + 1);
|
|
if (last === 4 || last === 0) points++;
|
|
}
|
|
}
|
|
return points * PenaltyScores.N2;
|
|
};
|
|
|
|
/**
|
|
* Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,
|
|
* preceded or followed by light area 4 modules wide
|
|
*
|
|
* Points: N3 * number of pattern found
|
|
*/
|
|
exports.getPenaltyN3 = function getPenaltyN3(data) {
|
|
var size = data.size;
|
|
var points = 0;
|
|
var bitsCol = 0;
|
|
var bitsRow = 0;
|
|
for (var row = 0; row < size; row++) {
|
|
bitsCol = bitsRow = 0;
|
|
for (var col = 0; col < size; col++) {
|
|
bitsCol = bitsCol << 1 & 0x7FF | data.get(row, col);
|
|
if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++;
|
|
bitsRow = bitsRow << 1 & 0x7FF | data.get(col, row);
|
|
if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++;
|
|
}
|
|
}
|
|
return points * PenaltyScores.N3;
|
|
};
|
|
|
|
/**
|
|
* Calculate proportion of dark modules in entire symbol
|
|
*
|
|
* Points: N4 * k
|
|
*
|
|
* k is the rating of the deviation of the proportion of dark modules
|
|
* in the symbol from 50% in steps of 5%
|
|
*/
|
|
exports.getPenaltyN4 = function getPenaltyN4(data) {
|
|
var darkCount = 0;
|
|
var modulesCount = data.data.length;
|
|
for (var i = 0; i < modulesCount; i++) darkCount += data.data[i];
|
|
var k = Math.abs(Math.ceil(darkCount * 100 / modulesCount / 5) - 10);
|
|
return k * PenaltyScores.N4;
|
|
};
|
|
|
|
/**
|
|
* Return mask value at given position
|
|
*
|
|
* @param {Number} maskPattern Pattern reference value
|
|
* @param {Number} i Row
|
|
* @param {Number} j Column
|
|
* @return {Boolean} Mask value
|
|
*/
|
|
function getMaskAt(maskPattern, i, j) {
|
|
switch (maskPattern) {
|
|
case exports.Patterns.PATTERN000:
|
|
return (i + j) % 2 === 0;
|
|
case exports.Patterns.PATTERN001:
|
|
return i % 2 === 0;
|
|
case exports.Patterns.PATTERN010:
|
|
return j % 3 === 0;
|
|
case exports.Patterns.PATTERN011:
|
|
return (i + j) % 3 === 0;
|
|
case exports.Patterns.PATTERN100:
|
|
return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0;
|
|
case exports.Patterns.PATTERN101:
|
|
return i * j % 2 + i * j % 3 === 0;
|
|
case exports.Patterns.PATTERN110:
|
|
return (i * j % 2 + i * j % 3) % 2 === 0;
|
|
case exports.Patterns.PATTERN111:
|
|
return (i * j % 3 + (i + j) % 2) % 2 === 0;
|
|
default:
|
|
throw new Error('bad maskPattern:' + maskPattern);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Apply a mask pattern to a BitMatrix
|
|
*
|
|
* @param {Number} pattern Pattern reference number
|
|
* @param {BitMatrix} data BitMatrix data
|
|
*/
|
|
exports.applyMask = function applyMask(pattern, data) {
|
|
var size = data.size;
|
|
for (var col = 0; col < size; col++) {
|
|
for (var row = 0; row < size; row++) {
|
|
if (data.isReserved(row, col)) continue;
|
|
data.xor(row, col, getMaskAt(pattern, row, col));
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the best mask pattern for data
|
|
*
|
|
* @param {BitMatrix} data
|
|
* @return {Number} Mask pattern reference number
|
|
*/
|
|
exports.getBestMask = function getBestMask(data, setupFormatFunc) {
|
|
var numPatterns = Object.keys(exports.Patterns).length;
|
|
var bestPattern = 0;
|
|
var lowerPenalty = Infinity;
|
|
for (var p = 0; p < numPatterns; p++) {
|
|
setupFormatFunc(p);
|
|
exports.applyMask(p, data);
|
|
|
|
// Calculate penalty
|
|
var penalty = exports.getPenaltyN1(data) + exports.getPenaltyN2(data) + exports.getPenaltyN3(data) + exports.getPenaltyN4(data);
|
|
|
|
// Undo previously applied mask
|
|
exports.applyMask(p, data);
|
|
if (penalty < lowerPenalty) {
|
|
lowerPenalty = penalty;
|
|
bestPattern = p;
|
|
}
|
|
}
|
|
return bestPattern;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 62482:
|
|
/*!**********************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/mode.js ***!
|
|
\**********************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var VersionCheck = __webpack_require__(/*! ./version-check */ 34964);
|
|
var Regex = __webpack_require__(/*! ./regex */ 21286);
|
|
|
|
/**
|
|
* Numeric mode encodes data from the decimal digit set (0 - 9)
|
|
* (byte values 30HEX to 39HEX).
|
|
* Normally, 3 data characters are represented by 10 bits.
|
|
*
|
|
* @type {Object}
|
|
*/
|
|
exports.NUMERIC = {
|
|
id: 'Numeric',
|
|
bit: 1 << 0,
|
|
ccBits: [10, 12, 14]
|
|
};
|
|
|
|
/**
|
|
* Alphanumeric mode encodes data from a set of 45 characters,
|
|
* i.e. 10 numeric digits (0 - 9),
|
|
* 26 alphabetic characters (A - Z),
|
|
* and 9 symbols (SP, $, %, *, +, -, ., /, :).
|
|
* Normally, two input characters are represented by 11 bits.
|
|
*
|
|
* @type {Object}
|
|
*/
|
|
exports.ALPHANUMERIC = {
|
|
id: 'Alphanumeric',
|
|
bit: 1 << 1,
|
|
ccBits: [9, 11, 13]
|
|
};
|
|
|
|
/**
|
|
* In byte mode, data is encoded at 8 bits per character.
|
|
*
|
|
* @type {Object}
|
|
*/
|
|
exports.BYTE = {
|
|
id: 'Byte',
|
|
bit: 1 << 2,
|
|
ccBits: [8, 16, 16]
|
|
};
|
|
|
|
/**
|
|
* The Kanji mode efficiently encodes Kanji characters in accordance with
|
|
* the Shift JIS system based on JIS X 0208.
|
|
* The Shift JIS values are shifted from the JIS X 0208 values.
|
|
* JIS X 0208 gives details of the shift coded representation.
|
|
* Each two-byte character value is compacted to a 13-bit binary codeword.
|
|
*
|
|
* @type {Object}
|
|
*/
|
|
exports.KANJI = {
|
|
id: 'Kanji',
|
|
bit: 1 << 3,
|
|
ccBits: [8, 10, 12]
|
|
};
|
|
|
|
/**
|
|
* Mixed mode will contain a sequences of data in a combination of any of
|
|
* the modes described above
|
|
*
|
|
* @type {Object}
|
|
*/
|
|
exports.MIXED = {
|
|
bit: -1
|
|
};
|
|
|
|
/**
|
|
* Returns the number of bits needed to store the data length
|
|
* according to QR Code specifications.
|
|
*
|
|
* @param {Mode} mode Data mode
|
|
* @param {Number} version QR Code version
|
|
* @return {Number} Number of bits
|
|
*/
|
|
exports.getCharCountIndicator = function getCharCountIndicator(mode, version) {
|
|
if (!mode.ccBits) throw new Error('Invalid mode: ' + mode);
|
|
if (!VersionCheck.isValid(version)) {
|
|
throw new Error('Invalid version: ' + version);
|
|
}
|
|
if (version >= 1 && version < 10) return mode.ccBits[0];else if (version < 27) return mode.ccBits[1];
|
|
return mode.ccBits[2];
|
|
};
|
|
|
|
/**
|
|
* Returns the most efficient mode to store the specified data
|
|
*
|
|
* @param {String} dataStr Input data string
|
|
* @return {Mode} Best mode
|
|
*/
|
|
exports.getBestModeForData = function getBestModeForData(dataStr) {
|
|
if (Regex.testNumeric(dataStr)) return exports.NUMERIC;else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC;else if (Regex.testKanji(dataStr)) return exports.KANJI;else return exports.BYTE;
|
|
};
|
|
|
|
/**
|
|
* Return mode name as string
|
|
*
|
|
* @param {Mode} mode Mode object
|
|
* @returns {String} Mode name
|
|
*/
|
|
exports.toString = function toString(mode) {
|
|
if (mode && mode.id) return mode.id;
|
|
throw new Error('Invalid mode');
|
|
};
|
|
|
|
/**
|
|
* Check if input param is a valid mode object
|
|
*
|
|
* @param {Mode} mode Mode object
|
|
* @returns {Boolean} True if valid mode, false otherwise
|
|
*/
|
|
exports.isValid = function isValid(mode) {
|
|
return mode && mode.bit && mode.ccBits;
|
|
};
|
|
|
|
/**
|
|
* Get mode object from its name
|
|
*
|
|
* @param {String} string Mode name
|
|
* @returns {Mode} Mode object
|
|
*/
|
|
function fromString(string) {
|
|
if (typeof string !== 'string') {
|
|
throw new Error('Param is not a string');
|
|
}
|
|
var lcStr = string.toLowerCase();
|
|
switch (lcStr) {
|
|
case 'numeric':
|
|
return exports.NUMERIC;
|
|
case 'alphanumeric':
|
|
return exports.ALPHANUMERIC;
|
|
case 'kanji':
|
|
return exports.KANJI;
|
|
case 'byte':
|
|
return exports.BYTE;
|
|
default:
|
|
throw new Error('Unknown mode: ' + string);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns mode from a value.
|
|
* If value is not a valid mode, returns defaultValue
|
|
*
|
|
* @param {Mode|String} value Encoding mode
|
|
* @param {Mode} defaultValue Fallback value
|
|
* @return {Mode} Encoding mode
|
|
*/
|
|
exports.from = function from(value, defaultValue) {
|
|
if (exports.isValid(value)) {
|
|
return value;
|
|
}
|
|
try {
|
|
return fromString(value);
|
|
} catch (e) {
|
|
return defaultValue;
|
|
}
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 33511:
|
|
/*!******************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/numeric-data.js ***!
|
|
\******************************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
var Mode = __webpack_require__(/*! ./mode */ 62482);
|
|
function NumericData(data) {
|
|
this.mode = Mode.NUMERIC;
|
|
this.data = data.toString();
|
|
}
|
|
NumericData.getBitsLength = function getBitsLength(length) {
|
|
return 10 * Math.floor(length / 3) + (length % 3 ? length % 3 * 3 + 1 : 0);
|
|
};
|
|
NumericData.prototype.getLength = function getLength() {
|
|
return this.data.length;
|
|
};
|
|
NumericData.prototype.getBitsLength = function getBitsLength() {
|
|
return NumericData.getBitsLength(this.data.length);
|
|
};
|
|
NumericData.prototype.write = function write(bitBuffer) {
|
|
var i, group, value;
|
|
|
|
// The input data string is divided into groups of three digits,
|
|
// and each group is converted to its 10-bit binary equivalent.
|
|
for (i = 0; i + 3 <= this.data.length; i += 3) {
|
|
group = this.data.substr(i, 3);
|
|
value = parseInt(group, 10);
|
|
bitBuffer.put(value, 10);
|
|
}
|
|
|
|
// If the number of input digits is not an exact multiple of three,
|
|
// the final one or two digits are converted to 4 or 7 bits respectively.
|
|
var remainingNum = this.data.length - i;
|
|
if (remainingNum > 0) {
|
|
group = this.data.substr(i);
|
|
value = parseInt(group, 10);
|
|
bitBuffer.put(value, remainingNum * 3 + 1);
|
|
}
|
|
};
|
|
module.exports = NumericData;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 66347:
|
|
/*!****************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/polynomial.js ***!
|
|
\****************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var BufferUtil = __webpack_require__(/*! ../utils/buffer */ 40692);
|
|
var GF = __webpack_require__(/*! ./galois-field */ 69525);
|
|
|
|
/**
|
|
* Multiplies two polynomials inside Galois Field
|
|
*
|
|
* @param {Buffer} p1 Polynomial
|
|
* @param {Buffer} p2 Polynomial
|
|
* @return {Buffer} Product of p1 and p2
|
|
*/
|
|
exports.mul = function mul(p1, p2) {
|
|
var coeff = BufferUtil.alloc(p1.length + p2.length - 1);
|
|
for (var i = 0; i < p1.length; i++) {
|
|
for (var j = 0; j < p2.length; j++) {
|
|
coeff[i + j] ^= GF.mul(p1[i], p2[j]);
|
|
}
|
|
}
|
|
return coeff;
|
|
};
|
|
|
|
/**
|
|
* Calculate the remainder of polynomials division
|
|
*
|
|
* @param {Buffer} divident Polynomial
|
|
* @param {Buffer} divisor Polynomial
|
|
* @return {Buffer} Remainder
|
|
*/
|
|
exports.mod = function mod(divident, divisor) {
|
|
var result = BufferUtil.from(divident);
|
|
while (result.length - divisor.length >= 0) {
|
|
var coeff = result[0];
|
|
for (var i = 0; i < divisor.length; i++) {
|
|
result[i] ^= GF.mul(divisor[i], coeff);
|
|
}
|
|
|
|
// remove all zeros from buffer head
|
|
var offset = 0;
|
|
while (offset < result.length && result[offset] === 0) offset++;
|
|
result = result.slice(offset);
|
|
}
|
|
return result;
|
|
};
|
|
|
|
/**
|
|
* Generate an irreducible generator polynomial of specified degree
|
|
* (used by Reed-Solomon encoder)
|
|
*
|
|
* @param {Number} degree Degree of the generator polynomial
|
|
* @return {Buffer} Buffer containing polynomial coefficients
|
|
*/
|
|
exports.generateECPolynomial = function generateECPolynomial(degree) {
|
|
var poly = BufferUtil.from([1]);
|
|
for (var i = 0; i < degree; i++) {
|
|
poly = exports.mul(poly, [1, GF.exp(i)]);
|
|
}
|
|
return poly;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 96519:
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/qrcode.js ***!
|
|
\************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var BufferUtil = __webpack_require__(/*! ../utils/buffer */ 40692);
|
|
var Utils = __webpack_require__(/*! ./utils */ 89437);
|
|
var ECLevel = __webpack_require__(/*! ./error-correction-level */ 90437);
|
|
var BitBuffer = __webpack_require__(/*! ./bit-buffer */ 41929);
|
|
var BitMatrix = __webpack_require__(/*! ./bit-matrix */ 5611);
|
|
var AlignmentPattern = __webpack_require__(/*! ./alignment-pattern */ 60773);
|
|
var FinderPattern = __webpack_require__(/*! ./finder-pattern */ 81796);
|
|
var MaskPattern = __webpack_require__(/*! ./mask-pattern */ 14360);
|
|
var ECCode = __webpack_require__(/*! ./error-correction-code */ 87649);
|
|
var ReedSolomonEncoder = __webpack_require__(/*! ./reed-solomon-encoder */ 78062);
|
|
var Version = __webpack_require__(/*! ./version */ 60273);
|
|
var FormatInfo = __webpack_require__(/*! ./format-info */ 58891);
|
|
var Mode = __webpack_require__(/*! ./mode */ 62482);
|
|
var Segments = __webpack_require__(/*! ./segments */ 91647);
|
|
var isArray = __webpack_require__(/*! isarray */ 95799);
|
|
|
|
/**
|
|
* QRCode for JavaScript
|
|
*
|
|
* modified by Ryan Day for nodejs support
|
|
* Copyright (c) 2011 Ryan Day
|
|
*
|
|
* Licensed under the MIT license:
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
*
|
|
//---------------------------------------------------------------------
|
|
// QRCode for JavaScript
|
|
//
|
|
// Copyright (c) 2009 Kazuhiko Arase
|
|
//
|
|
// URL: http://www.d-project.com/
|
|
//
|
|
// Licensed under the MIT license:
|
|
// http://www.opensource.org/licenses/mit-license.php
|
|
//
|
|
// The word "QR Code" is registered trademark of
|
|
// DENSO WAVE INCORPORATED
|
|
// http://www.denso-wave.com/qrcode/faqpatent-e.html
|
|
//
|
|
//---------------------------------------------------------------------
|
|
*/
|
|
|
|
/**
|
|
* Add finder patterns bits to matrix
|
|
*
|
|
* @param {BitMatrix} matrix Modules matrix
|
|
* @param {Number} version QR Code version
|
|
*/
|
|
function setupFinderPattern(matrix, version) {
|
|
var size = matrix.size;
|
|
var pos = FinderPattern.getPositions(version);
|
|
for (var i = 0; i < pos.length; i++) {
|
|
var row = pos[i][0];
|
|
var col = pos[i][1];
|
|
for (var r = -1; r <= 7; r++) {
|
|
if (row + r <= -1 || size <= row + r) continue;
|
|
for (var c = -1; c <= 7; c++) {
|
|
if (col + c <= -1 || size <= col + c) continue;
|
|
if (r >= 0 && r <= 6 && (c === 0 || c === 6) || c >= 0 && c <= 6 && (r === 0 || r === 6) || r >= 2 && r <= 4 && c >= 2 && c <= 4) {
|
|
matrix.set(row + r, col + c, true, true);
|
|
} else {
|
|
matrix.set(row + r, col + c, false, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add timing pattern bits to matrix
|
|
*
|
|
* Note: this function must be called before {@link setupAlignmentPattern}
|
|
*
|
|
* @param {BitMatrix} matrix Modules matrix
|
|
*/
|
|
function setupTimingPattern(matrix) {
|
|
var size = matrix.size;
|
|
for (var r = 8; r < size - 8; r++) {
|
|
var value = r % 2 === 0;
|
|
matrix.set(r, 6, value, true);
|
|
matrix.set(6, r, value, true);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add alignment patterns bits to matrix
|
|
*
|
|
* Note: this function must be called after {@link setupTimingPattern}
|
|
*
|
|
* @param {BitMatrix} matrix Modules matrix
|
|
* @param {Number} version QR Code version
|
|
*/
|
|
function setupAlignmentPattern(matrix, version) {
|
|
var pos = AlignmentPattern.getPositions(version);
|
|
for (var i = 0; i < pos.length; i++) {
|
|
var row = pos[i][0];
|
|
var col = pos[i][1];
|
|
for (var r = -2; r <= 2; r++) {
|
|
for (var c = -2; c <= 2; c++) {
|
|
if (r === -2 || r === 2 || c === -2 || c === 2 || r === 0 && c === 0) {
|
|
matrix.set(row + r, col + c, true, true);
|
|
} else {
|
|
matrix.set(row + r, col + c, false, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add version info bits to matrix
|
|
*
|
|
* @param {BitMatrix} matrix Modules matrix
|
|
* @param {Number} version QR Code version
|
|
*/
|
|
function setupVersionInfo(matrix, version) {
|
|
var size = matrix.size;
|
|
var bits = Version.getEncodedBits(version);
|
|
var row, col, mod;
|
|
for (var i = 0; i < 18; i++) {
|
|
row = Math.floor(i / 3);
|
|
col = i % 3 + size - 8 - 3;
|
|
mod = (bits >> i & 1) === 1;
|
|
matrix.set(row, col, mod, true);
|
|
matrix.set(col, row, mod, true);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add format info bits to matrix
|
|
*
|
|
* @param {BitMatrix} matrix Modules matrix
|
|
* @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level
|
|
* @param {Number} maskPattern Mask pattern reference value
|
|
*/
|
|
function setupFormatInfo(matrix, errorCorrectionLevel, maskPattern) {
|
|
var size = matrix.size;
|
|
var bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern);
|
|
var i, mod;
|
|
for (i = 0; i < 15; i++) {
|
|
mod = (bits >> i & 1) === 1;
|
|
|
|
// vertical
|
|
if (i < 6) {
|
|
matrix.set(i, 8, mod, true);
|
|
} else if (i < 8) {
|
|
matrix.set(i + 1, 8, mod, true);
|
|
} else {
|
|
matrix.set(size - 15 + i, 8, mod, true);
|
|
}
|
|
|
|
// horizontal
|
|
if (i < 8) {
|
|
matrix.set(8, size - i - 1, mod, true);
|
|
} else if (i < 9) {
|
|
matrix.set(8, 15 - i - 1 + 1, mod, true);
|
|
} else {
|
|
matrix.set(8, 15 - i - 1, mod, true);
|
|
}
|
|
}
|
|
|
|
// fixed module
|
|
matrix.set(size - 8, 8, 1, true);
|
|
}
|
|
|
|
/**
|
|
* Add encoded data bits to matrix
|
|
*
|
|
* @param {BitMatrix} matrix Modules matrix
|
|
* @param {Buffer} data Data codewords
|
|
*/
|
|
function setupData(matrix, data) {
|
|
var size = matrix.size;
|
|
var inc = -1;
|
|
var row = size - 1;
|
|
var bitIndex = 7;
|
|
var byteIndex = 0;
|
|
for (var col = size - 1; col > 0; col -= 2) {
|
|
if (col === 6) col--;
|
|
while (true) {
|
|
for (var c = 0; c < 2; c++) {
|
|
if (!matrix.isReserved(row, col - c)) {
|
|
var dark = false;
|
|
if (byteIndex < data.length) {
|
|
dark = (data[byteIndex] >>> bitIndex & 1) === 1;
|
|
}
|
|
matrix.set(row, col - c, dark);
|
|
bitIndex--;
|
|
if (bitIndex === -1) {
|
|
byteIndex++;
|
|
bitIndex = 7;
|
|
}
|
|
}
|
|
}
|
|
row += inc;
|
|
if (row < 0 || size <= row) {
|
|
row -= inc;
|
|
inc = -inc;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create encoded codewords from data input
|
|
*
|
|
* @param {Number} version QR Code version
|
|
* @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level
|
|
* @param {ByteData} data Data input
|
|
* @return {Buffer} Buffer containing encoded codewords
|
|
*/
|
|
function createData(version, errorCorrectionLevel, segments) {
|
|
// Prepare data buffer
|
|
var buffer = new BitBuffer();
|
|
segments.forEach(function (data) {
|
|
// prefix data with mode indicator (4 bits)
|
|
buffer.put(data.mode.bit, 4);
|
|
|
|
// Prefix data with character count indicator.
|
|
// The character count indicator is a string of bits that represents the
|
|
// number of characters that are being encoded.
|
|
// The character count indicator must be placed after the mode indicator
|
|
// and must be a certain number of bits long, depending on the QR version
|
|
// and data mode
|
|
// @see {@link Mode.getCharCountIndicator}.
|
|
buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version));
|
|
|
|
// add binary data sequence to buffer
|
|
data.write(buffer);
|
|
});
|
|
|
|
// Calculate required number of bits
|
|
var totalCodewords = Utils.getSymbolTotalCodewords(version);
|
|
var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel);
|
|
var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8;
|
|
|
|
// Add a terminator.
|
|
// If the bit string is shorter than the total number of required bits,
|
|
// a terminator of up to four 0s must be added to the right side of the string.
|
|
// If the bit string is more than four bits shorter than the required number of bits,
|
|
// add four 0s to the end.
|
|
if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {
|
|
buffer.put(0, 4);
|
|
}
|
|
|
|
// If the bit string is fewer than four bits shorter, add only the number of 0s that
|
|
// are needed to reach the required number of bits.
|
|
|
|
// After adding the terminator, if the number of bits in the string is not a multiple of 8,
|
|
// pad the string on the right with 0s to make the string's length a multiple of 8.
|
|
while (buffer.getLengthInBits() % 8 !== 0) {
|
|
buffer.putBit(0);
|
|
}
|
|
|
|
// Add pad bytes if the string is still shorter than the total number of required bits.
|
|
// Extend the buffer to fill the data capacity of the symbol corresponding to
|
|
// the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)
|
|
// and 00010001 (0x11) alternately.
|
|
var remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8;
|
|
for (var i = 0; i < remainingByte; i++) {
|
|
buffer.put(i % 2 ? 0x11 : 0xEC, 8);
|
|
}
|
|
return createCodewords(buffer, version, errorCorrectionLevel);
|
|
}
|
|
|
|
/**
|
|
* Encode input data with Reed-Solomon and return codewords with
|
|
* relative error correction bits
|
|
*
|
|
* @param {BitBuffer} bitBuffer Data to encode
|
|
* @param {Number} version QR Code version
|
|
* @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level
|
|
* @return {Buffer} Buffer containing encoded codewords
|
|
*/
|
|
function createCodewords(bitBuffer, version, errorCorrectionLevel) {
|
|
// Total codewords for this QR code version (Data + Error correction)
|
|
var totalCodewords = Utils.getSymbolTotalCodewords(version);
|
|
|
|
// Total number of error correction codewords
|
|
var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel);
|
|
|
|
// Total number of data codewords
|
|
var dataTotalCodewords = totalCodewords - ecTotalCodewords;
|
|
|
|
// Total number of blocks
|
|
var ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel);
|
|
|
|
// Calculate how many blocks each group should contain
|
|
var blocksInGroup2 = totalCodewords % ecTotalBlocks;
|
|
var blocksInGroup1 = ecTotalBlocks - blocksInGroup2;
|
|
var totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks);
|
|
var dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks);
|
|
var dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1;
|
|
|
|
// Number of EC codewords is the same for both groups
|
|
var ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1;
|
|
|
|
// Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount
|
|
var rs = new ReedSolomonEncoder(ecCount);
|
|
var offset = 0;
|
|
var dcData = new Array(ecTotalBlocks);
|
|
var ecData = new Array(ecTotalBlocks);
|
|
var maxDataSize = 0;
|
|
var buffer = BufferUtil.from(bitBuffer.buffer);
|
|
|
|
// Divide the buffer into the required number of blocks
|
|
for (var b = 0; b < ecTotalBlocks; b++) {
|
|
var dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2;
|
|
|
|
// extract a block of data from buffer
|
|
dcData[b] = buffer.slice(offset, offset + dataSize);
|
|
|
|
// Calculate EC codewords for this data block
|
|
ecData[b] = rs.encode(dcData[b]);
|
|
offset += dataSize;
|
|
maxDataSize = Math.max(maxDataSize, dataSize);
|
|
}
|
|
|
|
// Create final data
|
|
// Interleave the data and error correction codewords from each block
|
|
var data = BufferUtil.alloc(totalCodewords);
|
|
var index = 0;
|
|
var i, r;
|
|
|
|
// Add data codewords
|
|
for (i = 0; i < maxDataSize; i++) {
|
|
for (r = 0; r < ecTotalBlocks; r++) {
|
|
if (i < dcData[r].length) {
|
|
data[index++] = dcData[r][i];
|
|
}
|
|
}
|
|
}
|
|
|
|
// Apped EC codewords
|
|
for (i = 0; i < ecCount; i++) {
|
|
for (r = 0; r < ecTotalBlocks; r++) {
|
|
data[index++] = ecData[r][i];
|
|
}
|
|
}
|
|
return data;
|
|
}
|
|
|
|
/**
|
|
* Build QR Code symbol
|
|
*
|
|
* @param {String} data Input string
|
|
* @param {Number} version QR Code version
|
|
* @param {ErrorCorretionLevel} errorCorrectionLevel Error level
|
|
* @param {MaskPattern} maskPattern Mask pattern
|
|
* @return {Object} Object containing symbol data
|
|
*/
|
|
function createSymbol(data, version, errorCorrectionLevel, maskPattern) {
|
|
var segments;
|
|
if (isArray(data)) {
|
|
segments = Segments.fromArray(data);
|
|
} else if (typeof data === 'string') {
|
|
var estimatedVersion = version;
|
|
if (!estimatedVersion) {
|
|
var rawSegments = Segments.rawSplit(data);
|
|
|
|
// Estimate best version that can contain raw splitted segments
|
|
estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel);
|
|
}
|
|
|
|
// Build optimized segments
|
|
// If estimated version is undefined, try with the highest version
|
|
segments = Segments.fromString(data, estimatedVersion || 40);
|
|
} else {
|
|
throw new Error('Invalid data');
|
|
}
|
|
|
|
// Get the min version that can contain data
|
|
var bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel);
|
|
|
|
// If no version is found, data cannot be stored
|
|
if (!bestVersion) {
|
|
throw new Error('The amount of data is too big to be stored in a QR Code');
|
|
}
|
|
|
|
// If not specified, use min version as default
|
|
if (!version) {
|
|
version = bestVersion;
|
|
|
|
// Check if the specified version can contain the data
|
|
} else if (version < bestVersion) {
|
|
throw new Error('\n' + 'The chosen QR Code version cannot contain this amount of data.\n' + 'Minimum version required to store current data is: ' + bestVersion + '.\n');
|
|
}
|
|
var dataBits = createData(version, errorCorrectionLevel, segments);
|
|
|
|
// Allocate matrix buffer
|
|
var moduleCount = Utils.getSymbolSize(version);
|
|
var modules = new BitMatrix(moduleCount);
|
|
|
|
// Add function modules
|
|
setupFinderPattern(modules, version);
|
|
setupTimingPattern(modules);
|
|
setupAlignmentPattern(modules, version);
|
|
|
|
// Add temporary dummy bits for format info just to set them as reserved.
|
|
// This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}
|
|
// since the masking operation must be performed only on the encoding region.
|
|
// These blocks will be replaced with correct values later in code.
|
|
setupFormatInfo(modules, errorCorrectionLevel, 0);
|
|
if (version >= 7) {
|
|
setupVersionInfo(modules, version);
|
|
}
|
|
|
|
// Add data codewords
|
|
setupData(modules, dataBits);
|
|
if (isNaN(maskPattern)) {
|
|
// Find best mask pattern
|
|
maskPattern = MaskPattern.getBestMask(modules, setupFormatInfo.bind(null, modules, errorCorrectionLevel));
|
|
}
|
|
|
|
// Apply mask pattern
|
|
MaskPattern.applyMask(maskPattern, modules);
|
|
|
|
// Replace format info bits with correct values
|
|
setupFormatInfo(modules, errorCorrectionLevel, maskPattern);
|
|
return {
|
|
modules: modules,
|
|
version: version,
|
|
errorCorrectionLevel: errorCorrectionLevel,
|
|
maskPattern: maskPattern,
|
|
segments: segments
|
|
};
|
|
}
|
|
|
|
/**
|
|
* QR Code
|
|
*
|
|
* @param {String | Array} data Input data
|
|
* @param {Object} options Optional configurations
|
|
* @param {Number} options.version QR Code version
|
|
* @param {String} options.errorCorrectionLevel Error correction level
|
|
* @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis
|
|
*/
|
|
exports.create = function create(data, options) {
|
|
if (typeof data === 'undefined' || data === '') {
|
|
throw new Error('No input text');
|
|
}
|
|
var errorCorrectionLevel = ECLevel.M;
|
|
var version;
|
|
var mask;
|
|
if (typeof options !== 'undefined') {
|
|
// Use higher error correction level as default
|
|
errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M);
|
|
version = Version.from(options.version);
|
|
mask = MaskPattern.from(options.maskPattern);
|
|
if (options.toSJISFunc) {
|
|
Utils.setToSJISFunction(options.toSJISFunc);
|
|
}
|
|
}
|
|
return createSymbol(data, version, errorCorrectionLevel, mask);
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 78062:
|
|
/*!**************************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/reed-solomon-encoder.js ***!
|
|
\**************************************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
var BufferUtil = __webpack_require__(/*! ../utils/buffer */ 40692);
|
|
var Polynomial = __webpack_require__(/*! ./polynomial */ 66347);
|
|
var Buffer = (__webpack_require__(/*! buffer */ 96207)/* .Buffer */ .lW);
|
|
function ReedSolomonEncoder(degree) {
|
|
this.genPoly = undefined;
|
|
this.degree = degree;
|
|
if (this.degree) this.initialize(this.degree);
|
|
}
|
|
|
|
/**
|
|
* Initialize the encoder.
|
|
* The input param should correspond to the number of error correction codewords.
|
|
*
|
|
* @param {Number} degree
|
|
*/
|
|
ReedSolomonEncoder.prototype.initialize = function initialize(degree) {
|
|
// create an irreducible generator polynomial
|
|
this.degree = degree;
|
|
this.genPoly = Polynomial.generateECPolynomial(this.degree);
|
|
};
|
|
|
|
/**
|
|
* Encodes a chunk of data
|
|
*
|
|
* @param {Buffer} data Buffer containing input data
|
|
* @return {Buffer} Buffer containing encoded data
|
|
*/
|
|
ReedSolomonEncoder.prototype.encode = function encode(data) {
|
|
if (!this.genPoly) {
|
|
throw new Error('Encoder not initialized');
|
|
}
|
|
|
|
// Calculate EC for this data block
|
|
// extends data size to data+genPoly size
|
|
var pad = BufferUtil.alloc(this.degree);
|
|
var paddedData = Buffer.concat([data, pad], data.length + this.degree);
|
|
|
|
// The error correction codewords are the remainder after dividing the data codewords
|
|
// by a generator polynomial
|
|
var remainder = Polynomial.mod(paddedData, this.genPoly);
|
|
|
|
// return EC data blocks (last n byte, where n is the degree of genPoly)
|
|
// If coefficients number in remainder are less than genPoly degree,
|
|
// pad with 0s to the left to reach the needed number of coefficients
|
|
var start = this.degree - remainder.length;
|
|
if (start > 0) {
|
|
var buff = BufferUtil.alloc(this.degree);
|
|
remainder.copy(buff, start);
|
|
return buff;
|
|
}
|
|
return remainder;
|
|
};
|
|
module.exports = ReedSolomonEncoder;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 21286:
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/regex.js ***!
|
|
\***********************************************/
|
|
/***/ (function(__unused_webpack_module, exports) {
|
|
|
|
var numeric = '[0-9]+';
|
|
var alphanumeric = '[A-Z $%*+\\-./:]+';
|
|
var kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' + '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' + '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' + '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+';
|
|
kanji = kanji.replace(/u/g, "\\u");
|
|
var _byte = '(?:(?![A-Z0-9 $%*+\\-./:]|' + kanji + ')(?:.|[\r\n]))+';
|
|
exports.KANJI = new RegExp(kanji, 'g');
|
|
exports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\-./:]+', 'g');
|
|
exports.BYTE = new RegExp(_byte, 'g');
|
|
exports.NUMERIC = new RegExp(numeric, 'g');
|
|
exports.ALPHANUMERIC = new RegExp(alphanumeric, 'g');
|
|
var TEST_KANJI = new RegExp('^' + kanji + '$');
|
|
var TEST_NUMERIC = new RegExp('^' + numeric + '$');
|
|
var TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\-./:]+$');
|
|
exports.testKanji = function testKanji(str) {
|
|
return TEST_KANJI.test(str);
|
|
};
|
|
exports.testNumeric = function testNumeric(str) {
|
|
return TEST_NUMERIC.test(str);
|
|
};
|
|
exports.testAlphanumeric = function testAlphanumeric(str) {
|
|
return TEST_ALPHANUMERIC.test(str);
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 91647:
|
|
/*!**************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/segments.js ***!
|
|
\**************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var Mode = __webpack_require__(/*! ./mode */ 62482);
|
|
var NumericData = __webpack_require__(/*! ./numeric-data */ 33511);
|
|
var AlphanumericData = __webpack_require__(/*! ./alphanumeric-data */ 49577);
|
|
var ByteData = __webpack_require__(/*! ./byte-data */ 66122);
|
|
var KanjiData = __webpack_require__(/*! ./kanji-data */ 13857);
|
|
var Regex = __webpack_require__(/*! ./regex */ 21286);
|
|
var Utils = __webpack_require__(/*! ./utils */ 89437);
|
|
var dijkstra = __webpack_require__(/*! dijkstrajs */ 31596);
|
|
|
|
/**
|
|
* Returns UTF8 byte length
|
|
*
|
|
* @param {String} str Input string
|
|
* @return {Number} Number of byte
|
|
*/
|
|
function getStringByteLength(str) {
|
|
return unescape(encodeURIComponent(str)).length;
|
|
}
|
|
|
|
/**
|
|
* Get a list of segments of the specified mode
|
|
* from a string
|
|
*
|
|
* @param {Mode} mode Segment mode
|
|
* @param {String} str String to process
|
|
* @return {Array} Array of object with segments data
|
|
*/
|
|
function getSegments(regex, mode, str) {
|
|
var segments = [];
|
|
var result;
|
|
while ((result = regex.exec(str)) !== null) {
|
|
segments.push({
|
|
data: result[0],
|
|
index: result.index,
|
|
mode: mode,
|
|
length: result[0].length
|
|
});
|
|
}
|
|
return segments;
|
|
}
|
|
|
|
/**
|
|
* Extracts a series of segments with the appropriate
|
|
* modes from a string
|
|
*
|
|
* @param {String} dataStr Input string
|
|
* @return {Array} Array of object with segments data
|
|
*/
|
|
function getSegmentsFromString(dataStr) {
|
|
var numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr);
|
|
var alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr);
|
|
var byteSegs;
|
|
var kanjiSegs;
|
|
if (Utils.isKanjiModeEnabled()) {
|
|
byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr);
|
|
kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr);
|
|
} else {
|
|
byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr);
|
|
kanjiSegs = [];
|
|
}
|
|
var segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs);
|
|
return segs.sort(function (s1, s2) {
|
|
return s1.index - s2.index;
|
|
}).map(function (obj) {
|
|
return {
|
|
data: obj.data,
|
|
mode: obj.mode,
|
|
length: obj.length
|
|
};
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Returns how many bits are needed to encode a string of
|
|
* specified length with the specified mode
|
|
*
|
|
* @param {Number} length String length
|
|
* @param {Mode} mode Segment mode
|
|
* @return {Number} Bit length
|
|
*/
|
|
function getSegmentBitsLength(length, mode) {
|
|
switch (mode) {
|
|
case Mode.NUMERIC:
|
|
return NumericData.getBitsLength(length);
|
|
case Mode.ALPHANUMERIC:
|
|
return AlphanumericData.getBitsLength(length);
|
|
case Mode.KANJI:
|
|
return KanjiData.getBitsLength(length);
|
|
case Mode.BYTE:
|
|
return ByteData.getBitsLength(length);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Merges adjacent segments which have the same mode
|
|
*
|
|
* @param {Array} segs Array of object with segments data
|
|
* @return {Array} Array of object with segments data
|
|
*/
|
|
function mergeSegments(segs) {
|
|
return segs.reduce(function (acc, curr) {
|
|
var prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null;
|
|
if (prevSeg && prevSeg.mode === curr.mode) {
|
|
acc[acc.length - 1].data += curr.data;
|
|
return acc;
|
|
}
|
|
acc.push(curr);
|
|
return acc;
|
|
}, []);
|
|
}
|
|
|
|
/**
|
|
* Generates a list of all possible nodes combination which
|
|
* will be used to build a segments graph.
|
|
*
|
|
* Nodes are divided by groups. Each group will contain a list of all the modes
|
|
* in which is possible to encode the given text.
|
|
*
|
|
* For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.
|
|
* The group for '12345' will contain then 3 objects, one for each
|
|
* possible encoding mode.
|
|
*
|
|
* Each node represents a possible segment.
|
|
*
|
|
* @param {Array} segs Array of object with segments data
|
|
* @return {Array} Array of object with segments data
|
|
*/
|
|
function buildNodes(segs) {
|
|
var nodes = [];
|
|
for (var i = 0; i < segs.length; i++) {
|
|
var seg = segs[i];
|
|
switch (seg.mode) {
|
|
case Mode.NUMERIC:
|
|
nodes.push([seg, {
|
|
data: seg.data,
|
|
mode: Mode.ALPHANUMERIC,
|
|
length: seg.length
|
|
}, {
|
|
data: seg.data,
|
|
mode: Mode.BYTE,
|
|
length: seg.length
|
|
}]);
|
|
break;
|
|
case Mode.ALPHANUMERIC:
|
|
nodes.push([seg, {
|
|
data: seg.data,
|
|
mode: Mode.BYTE,
|
|
length: seg.length
|
|
}]);
|
|
break;
|
|
case Mode.KANJI:
|
|
nodes.push([seg, {
|
|
data: seg.data,
|
|
mode: Mode.BYTE,
|
|
length: getStringByteLength(seg.data)
|
|
}]);
|
|
break;
|
|
case Mode.BYTE:
|
|
nodes.push([{
|
|
data: seg.data,
|
|
mode: Mode.BYTE,
|
|
length: getStringByteLength(seg.data)
|
|
}]);
|
|
}
|
|
}
|
|
return nodes;
|
|
}
|
|
|
|
/**
|
|
* Builds a graph from a list of nodes.
|
|
* All segments in each node group will be connected with all the segments of
|
|
* the next group and so on.
|
|
*
|
|
* At each connection will be assigned a weight depending on the
|
|
* segment's byte length.
|
|
*
|
|
* @param {Array} nodes Array of object with segments data
|
|
* @param {Number} version QR Code version
|
|
* @return {Object} Graph of all possible segments
|
|
*/
|
|
function buildGraph(nodes, version) {
|
|
var table = {};
|
|
var graph = {
|
|
'start': {}
|
|
};
|
|
var prevNodeIds = ['start'];
|
|
for (var i = 0; i < nodes.length; i++) {
|
|
var nodeGroup = nodes[i];
|
|
var currentNodeIds = [];
|
|
for (var j = 0; j < nodeGroup.length; j++) {
|
|
var node = nodeGroup[j];
|
|
var key = '' + i + j;
|
|
currentNodeIds.push(key);
|
|
table[key] = {
|
|
node: node,
|
|
lastCount: 0
|
|
};
|
|
graph[key] = {};
|
|
for (var n = 0; n < prevNodeIds.length; n++) {
|
|
var prevNodeId = prevNodeIds[n];
|
|
if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {
|
|
graph[prevNodeId][key] = getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) - getSegmentBitsLength(table[prevNodeId].lastCount, node.mode);
|
|
table[prevNodeId].lastCount += node.length;
|
|
} else {
|
|
if (table[prevNodeId]) table[prevNodeId].lastCount = node.length;
|
|
graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) + 4 + Mode.getCharCountIndicator(node.mode, version); // switch cost
|
|
}
|
|
}
|
|
}
|
|
|
|
prevNodeIds = currentNodeIds;
|
|
}
|
|
for (n = 0; n < prevNodeIds.length; n++) {
|
|
graph[prevNodeIds[n]]['end'] = 0;
|
|
}
|
|
return {
|
|
map: graph,
|
|
table: table
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Builds a segment from a specified data and mode.
|
|
* If a mode is not specified, the more suitable will be used.
|
|
*
|
|
* @param {String} data Input data
|
|
* @param {Mode | String} modesHint Data mode
|
|
* @return {Segment} Segment
|
|
*/
|
|
function buildSingleSegment(data, modesHint) {
|
|
var mode;
|
|
var bestMode = Mode.getBestModeForData(data);
|
|
mode = Mode.from(modesHint, bestMode);
|
|
|
|
// Make sure data can be encoded
|
|
if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {
|
|
throw new Error('"' + data + '"' + ' cannot be encoded with mode ' + Mode.toString(mode) + '.\n Suggested mode is: ' + Mode.toString(bestMode));
|
|
}
|
|
|
|
// Use Mode.BYTE if Kanji support is disabled
|
|
if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {
|
|
mode = Mode.BYTE;
|
|
}
|
|
switch (mode) {
|
|
case Mode.NUMERIC:
|
|
return new NumericData(data);
|
|
case Mode.ALPHANUMERIC:
|
|
return new AlphanumericData(data);
|
|
case Mode.KANJI:
|
|
return new KanjiData(data);
|
|
case Mode.BYTE:
|
|
return new ByteData(data);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Builds a list of segments from an array.
|
|
* Array can contain Strings or Objects with segment's info.
|
|
*
|
|
* For each item which is a string, will be generated a segment with the given
|
|
* string and the more appropriate encoding mode.
|
|
*
|
|
* For each item which is an object, will be generated a segment with the given
|
|
* data and mode.
|
|
* Objects must contain at least the property "data".
|
|
* If property "mode" is not present, the more suitable mode will be used.
|
|
*
|
|
* @param {Array} array Array of objects with segments data
|
|
* @return {Array} Array of Segments
|
|
*/
|
|
exports.fromArray = function fromArray(array) {
|
|
return array.reduce(function (acc, seg) {
|
|
if (typeof seg === 'string') {
|
|
acc.push(buildSingleSegment(seg, null));
|
|
} else if (seg.data) {
|
|
acc.push(buildSingleSegment(seg.data, seg.mode));
|
|
}
|
|
return acc;
|
|
}, []);
|
|
};
|
|
|
|
/**
|
|
* Builds an optimized sequence of segments from a string,
|
|
* which will produce the shortest possible bitstream.
|
|
*
|
|
* @param {String} data Input string
|
|
* @param {Number} version QR Code version
|
|
* @return {Array} Array of segments
|
|
*/
|
|
exports.fromString = function fromString(data, version) {
|
|
var segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled());
|
|
var nodes = buildNodes(segs);
|
|
var graph = buildGraph(nodes, version);
|
|
var path = dijkstra.find_path(graph.map, 'start', 'end');
|
|
var optimizedSegs = [];
|
|
for (var i = 1; i < path.length - 1; i++) {
|
|
optimizedSegs.push(graph.table[path[i]].node);
|
|
}
|
|
return exports.fromArray(mergeSegments(optimizedSegs));
|
|
};
|
|
|
|
/**
|
|
* Splits a string in various segments with the modes which
|
|
* best represent their content.
|
|
* The produced segments are far from being optimized.
|
|
* The output of this function is only used to estimate a QR Code version
|
|
* which may contain the data.
|
|
*
|
|
* @param {string} data Input string
|
|
* @return {Array} Array of segments
|
|
*/
|
|
exports.rawSplit = function rawSplit(data) {
|
|
return exports.fromArray(getSegmentsFromString(data, Utils.isKanjiModeEnabled()));
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 89437:
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/utils.js ***!
|
|
\***********************************************/
|
|
/***/ (function(__unused_webpack_module, exports) {
|
|
|
|
var toSJISFunction;
|
|
var CODEWORDS_COUNT = [0,
|
|
// Not used
|
|
26, 44, 70, 100, 134, 172, 196, 242, 292, 346, 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085, 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185, 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706];
|
|
|
|
/**
|
|
* Returns the QR Code size for the specified version
|
|
*
|
|
* @param {Number} version QR Code version
|
|
* @return {Number} size of QR code
|
|
*/
|
|
exports.getSymbolSize = function getSymbolSize(version) {
|
|
if (!version) throw new Error('"version" cannot be null or undefined');
|
|
if (version < 1 || version > 40) throw new Error('"version" should be in range from 1 to 40');
|
|
return version * 4 + 17;
|
|
};
|
|
|
|
/**
|
|
* Returns the total number of codewords used to store data and EC information.
|
|
*
|
|
* @param {Number} version QR Code version
|
|
* @return {Number} Data length in bits
|
|
*/
|
|
exports.getSymbolTotalCodewords = function getSymbolTotalCodewords(version) {
|
|
return CODEWORDS_COUNT[version];
|
|
};
|
|
|
|
/**
|
|
* Encode data with Bose-Chaudhuri-Hocquenghem
|
|
*
|
|
* @param {Number} data Value to encode
|
|
* @return {Number} Encoded value
|
|
*/
|
|
exports.getBCHDigit = function (data) {
|
|
var digit = 0;
|
|
while (data !== 0) {
|
|
digit++;
|
|
data >>>= 1;
|
|
}
|
|
return digit;
|
|
};
|
|
exports.setToSJISFunction = function setToSJISFunction(f) {
|
|
if (typeof f !== 'function') {
|
|
throw new Error('"toSJISFunc" is not a valid function.');
|
|
}
|
|
toSJISFunction = f;
|
|
};
|
|
exports.isKanjiModeEnabled = function () {
|
|
return typeof toSJISFunction !== 'undefined';
|
|
};
|
|
exports.toSJIS = function toSJIS(kanji) {
|
|
return toSJISFunction(kanji);
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 34964:
|
|
/*!*******************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/version-check.js ***!
|
|
\*******************************************************/
|
|
/***/ (function(__unused_webpack_module, exports) {
|
|
|
|
/**
|
|
* Check if QR Code version is valid
|
|
*
|
|
* @param {Number} version QR Code version
|
|
* @return {Boolean} true if valid version, false otherwise
|
|
*/
|
|
exports.isValid = function isValid(version) {
|
|
return !isNaN(version) && version >= 1 && version <= 40;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 60273:
|
|
/*!*************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/core/version.js ***!
|
|
\*************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var Utils = __webpack_require__(/*! ./utils */ 89437);
|
|
var ECCode = __webpack_require__(/*! ./error-correction-code */ 87649);
|
|
var ECLevel = __webpack_require__(/*! ./error-correction-level */ 90437);
|
|
var Mode = __webpack_require__(/*! ./mode */ 62482);
|
|
var VersionCheck = __webpack_require__(/*! ./version-check */ 34964);
|
|
var isArray = __webpack_require__(/*! isarray */ 95799);
|
|
|
|
// Generator polynomial used to encode version information
|
|
var G18 = 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0;
|
|
var G18_BCH = Utils.getBCHDigit(G18);
|
|
function getBestVersionForDataLength(mode, length, errorCorrectionLevel) {
|
|
for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
|
|
if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {
|
|
return currentVersion;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getReservedBitsCount(mode, version) {
|
|
// Character count indicator + mode indicator bits
|
|
return Mode.getCharCountIndicator(mode, version) + 4;
|
|
}
|
|
function getTotalBitsFromDataArray(segments, version) {
|
|
var totalBits = 0;
|
|
segments.forEach(function (data) {
|
|
var reservedBits = getReservedBitsCount(data.mode, version);
|
|
totalBits += reservedBits + data.getBitsLength();
|
|
});
|
|
return totalBits;
|
|
}
|
|
function getBestVersionForMixedData(segments, errorCorrectionLevel) {
|
|
for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
|
|
var length = getTotalBitsFromDataArray(segments, currentVersion);
|
|
if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {
|
|
return currentVersion;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
/**
|
|
* Returns version number from a value.
|
|
* If value is not a valid version, returns defaultValue
|
|
*
|
|
* @param {Number|String} value QR Code version
|
|
* @param {Number} defaultValue Fallback value
|
|
* @return {Number} QR Code version number
|
|
*/
|
|
exports.from = function from(value, defaultValue) {
|
|
if (VersionCheck.isValid(value)) {
|
|
return parseInt(value, 10);
|
|
}
|
|
return defaultValue;
|
|
};
|
|
|
|
/**
|
|
* Returns how much data can be stored with the specified QR code version
|
|
* and error correction level
|
|
*
|
|
* @param {Number} version QR Code version (1-40)
|
|
* @param {Number} errorCorrectionLevel Error correction level
|
|
* @param {Mode} mode Data mode
|
|
* @return {Number} Quantity of storable data
|
|
*/
|
|
exports.getCapacity = function getCapacity(version, errorCorrectionLevel, mode) {
|
|
if (!VersionCheck.isValid(version)) {
|
|
throw new Error('Invalid QR Code version');
|
|
}
|
|
|
|
// Use Byte mode as default
|
|
if (typeof mode === 'undefined') mode = Mode.BYTE;
|
|
|
|
// Total codewords for this QR code version (Data + Error correction)
|
|
var totalCodewords = Utils.getSymbolTotalCodewords(version);
|
|
|
|
// Total number of error correction codewords
|
|
var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel);
|
|
|
|
// Total number of data codewords
|
|
var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8;
|
|
if (mode === Mode.MIXED) return dataTotalCodewordsBits;
|
|
var usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version);
|
|
|
|
// Return max number of storable codewords
|
|
switch (mode) {
|
|
case Mode.NUMERIC:
|
|
return Math.floor(usableBits / 10 * 3);
|
|
case Mode.ALPHANUMERIC:
|
|
return Math.floor(usableBits / 11 * 2);
|
|
case Mode.KANJI:
|
|
return Math.floor(usableBits / 13);
|
|
case Mode.BYTE:
|
|
default:
|
|
return Math.floor(usableBits / 8);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the minimum version needed to contain the amount of data
|
|
*
|
|
* @param {Segment} data Segment of data
|
|
* @param {Number} [errorCorrectionLevel=H] Error correction level
|
|
* @param {Mode} mode Data mode
|
|
* @return {Number} QR Code version
|
|
*/
|
|
exports.getBestVersionForData = function getBestVersionForData(data, errorCorrectionLevel) {
|
|
var seg;
|
|
var ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M);
|
|
if (isArray(data)) {
|
|
if (data.length > 1) {
|
|
return getBestVersionForMixedData(data, ecl);
|
|
}
|
|
if (data.length === 0) {
|
|
return 1;
|
|
}
|
|
seg = data[0];
|
|
} else {
|
|
seg = data;
|
|
}
|
|
return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl);
|
|
};
|
|
|
|
/**
|
|
* Returns version information with relative error correction bits
|
|
*
|
|
* The version information is included in QR Code symbols of version 7 or larger.
|
|
* It consists of an 18-bit sequence containing 6 data bits,
|
|
* with 12 error correction bits calculated using the (18, 6) Golay code.
|
|
*
|
|
* @param {Number} version QR Code version
|
|
* @return {Number} Encoded version info bits
|
|
*/
|
|
exports.getEncodedBits = function getEncodedBits(version) {
|
|
if (!VersionCheck.isValid(version) || version < 7) {
|
|
throw new Error('Invalid QR Code version');
|
|
}
|
|
var d = version << 12;
|
|
while (Utils.getBCHDigit(d) - G18_BCH >= 0) {
|
|
d ^= G18 << Utils.getBCHDigit(d) - G18_BCH;
|
|
}
|
|
return version << 12 | d;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 80182:
|
|
/*!****************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/renderer/canvas.js ***!
|
|
\****************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var Utils = __webpack_require__(/*! ./utils */ 68721);
|
|
function clearCanvas(ctx, canvas, size) {
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
if (!canvas.style) canvas.style = {};
|
|
canvas.height = size;
|
|
canvas.width = size;
|
|
canvas.style.height = size + 'px';
|
|
canvas.style.width = size + 'px';
|
|
}
|
|
function getCanvasElement() {
|
|
try {
|
|
return document.createElement('canvas');
|
|
} catch (e) {
|
|
throw new Error('You need to specify a canvas element');
|
|
}
|
|
}
|
|
exports.render = function render(qrData, canvas, options) {
|
|
var opts = options;
|
|
var canvasEl = canvas;
|
|
if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
|
|
opts = canvas;
|
|
canvas = undefined;
|
|
}
|
|
if (!canvas) {
|
|
canvasEl = getCanvasElement();
|
|
}
|
|
opts = Utils.getOptions(opts);
|
|
var size = Utils.getImageWidth(qrData.modules.size, opts);
|
|
var ctx = canvasEl.getContext('2d');
|
|
var image = ctx.createImageData(size, size);
|
|
Utils.qrToImageData(image.data, qrData, opts);
|
|
clearCanvas(ctx, canvasEl, size);
|
|
ctx.putImageData(image, 0, 0);
|
|
return canvasEl;
|
|
};
|
|
exports.renderToDataURL = function renderToDataURL(qrData, canvas, options) {
|
|
var opts = options;
|
|
if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
|
|
opts = canvas;
|
|
canvas = undefined;
|
|
}
|
|
if (!opts) opts = {};
|
|
var canvasEl = exports.render(qrData, canvas, opts);
|
|
var type = opts.type || 'image/png';
|
|
var rendererOpts = opts.rendererOpts || {};
|
|
return canvasEl.toDataURL(type, rendererOpts.quality);
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 65163:
|
|
/*!*****************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/renderer/svg-tag.js ***!
|
|
\*****************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
var Utils = __webpack_require__(/*! ./utils */ 68721);
|
|
function getColorAttrib(color, attrib) {
|
|
var alpha = color.a / 255;
|
|
var str = attrib + '="' + color.hex + '"';
|
|
return alpha < 1 ? str + ' ' + attrib + '-opacity="' + alpha.toFixed(2).slice(1) + '"' : str;
|
|
}
|
|
function svgCmd(cmd, x, y) {
|
|
var str = cmd + x;
|
|
if (typeof y !== 'undefined') str += ' ' + y;
|
|
return str;
|
|
}
|
|
function qrToPath(data, size, margin) {
|
|
var path = '';
|
|
var moveBy = 0;
|
|
var newRow = false;
|
|
var lineLength = 0;
|
|
for (var i = 0; i < data.length; i++) {
|
|
var col = Math.floor(i % size);
|
|
var row = Math.floor(i / size);
|
|
if (!col && !newRow) newRow = true;
|
|
if (data[i]) {
|
|
lineLength++;
|
|
if (!(i > 0 && col > 0 && data[i - 1])) {
|
|
path += newRow ? svgCmd('M', col + margin, 0.5 + row + margin) : svgCmd('m', moveBy, 0);
|
|
moveBy = 0;
|
|
newRow = false;
|
|
}
|
|
if (!(col + 1 < size && data[i + 1])) {
|
|
path += svgCmd('h', lineLength);
|
|
lineLength = 0;
|
|
}
|
|
} else {
|
|
moveBy++;
|
|
}
|
|
}
|
|
return path;
|
|
}
|
|
exports.render = function render(qrData, options, cb) {
|
|
var opts = Utils.getOptions(options);
|
|
var size = qrData.modules.size;
|
|
var data = qrData.modules.data;
|
|
var qrcodesize = size + opts.margin * 2;
|
|
var bg = !opts.color.light.a ? '' : '<path ' + getColorAttrib(opts.color.light, 'fill') + ' d="M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z"/>';
|
|
var path = '<path ' + getColorAttrib(opts.color.dark, 'stroke') + ' d="' + qrToPath(data, size, opts.margin) + '"/>';
|
|
var viewBox = 'viewBox="' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '"';
|
|
var width = !opts.width ? '' : 'width="' + opts.width + '" height="' + opts.width + '" ';
|
|
var svgTag = '<svg xmlns="http://www.w3.org/2000/svg" ' + width + viewBox + ' shape-rendering="crispEdges">' + bg + path + '</svg>\n';
|
|
if (typeof cb === 'function') {
|
|
cb(null, svgTag);
|
|
}
|
|
return svgTag;
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 68721:
|
|
/*!***************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/renderer/utils.js ***!
|
|
\***************************************************/
|
|
/***/ (function(__unused_webpack_module, exports) {
|
|
|
|
function hex2rgba(hex) {
|
|
if (typeof hex === 'number') {
|
|
hex = hex.toString();
|
|
}
|
|
if (typeof hex !== 'string') {
|
|
throw new Error('Color should be defined as hex string');
|
|
}
|
|
var hexCode = hex.slice().replace('#', '').split('');
|
|
if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {
|
|
throw new Error('Invalid hex color: ' + hex);
|
|
}
|
|
|
|
// Convert from short to long form (fff -> ffffff)
|
|
if (hexCode.length === 3 || hexCode.length === 4) {
|
|
hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {
|
|
return [c, c];
|
|
}));
|
|
}
|
|
|
|
// Add default alpha value
|
|
if (hexCode.length === 6) hexCode.push('F', 'F');
|
|
var hexValue = parseInt(hexCode.join(''), 16);
|
|
return {
|
|
r: hexValue >> 24 & 255,
|
|
g: hexValue >> 16 & 255,
|
|
b: hexValue >> 8 & 255,
|
|
a: hexValue & 255,
|
|
hex: '#' + hexCode.slice(0, 6).join('')
|
|
};
|
|
}
|
|
exports.getOptions = function getOptions(options) {
|
|
if (!options) options = {};
|
|
if (!options.color) options.color = {};
|
|
var margin = typeof options.margin === 'undefined' || options.margin === null || options.margin < 0 ? 4 : options.margin;
|
|
var width = options.width && options.width >= 21 ? options.width : undefined;
|
|
var scale = options.scale || 4;
|
|
return {
|
|
width: width,
|
|
scale: width ? 4 : scale,
|
|
margin: margin,
|
|
color: {
|
|
dark: hex2rgba(options.color.dark || '#000000ff'),
|
|
light: hex2rgba(options.color.light || '#ffffffff')
|
|
},
|
|
type: options.type,
|
|
rendererOpts: options.rendererOpts || {}
|
|
};
|
|
};
|
|
exports.getScale = function getScale(qrSize, opts) {
|
|
return opts.width && opts.width >= qrSize + opts.margin * 2 ? opts.width / (qrSize + opts.margin * 2) : opts.scale;
|
|
};
|
|
exports.getImageWidth = function getImageWidth(qrSize, opts) {
|
|
var scale = exports.getScale(qrSize, opts);
|
|
return Math.floor((qrSize + opts.margin * 2) * scale);
|
|
};
|
|
exports.qrToImageData = function qrToImageData(imgData, qr, opts) {
|
|
var size = qr.modules.size;
|
|
var data = qr.modules.data;
|
|
var scale = exports.getScale(size, opts);
|
|
var symbolSize = Math.floor((size + opts.margin * 2) * scale);
|
|
var scaledMargin = opts.margin * scale;
|
|
var palette = [opts.color.light, opts.color.dark];
|
|
for (var i = 0; i < symbolSize; i++) {
|
|
for (var j = 0; j < symbolSize; j++) {
|
|
var posDst = (i * symbolSize + j) * 4;
|
|
var pxColor = opts.color.light;
|
|
if (i >= scaledMargin && j >= scaledMargin && i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {
|
|
var iSrc = Math.floor((i - scaledMargin) / scale);
|
|
var jSrc = Math.floor((j - scaledMargin) / scale);
|
|
pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0];
|
|
}
|
|
imgData[posDst++] = pxColor.r;
|
|
imgData[posDst++] = pxColor.g;
|
|
imgData[posDst++] = pxColor.b;
|
|
imgData[posDst] = pxColor.a;
|
|
}
|
|
}
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 40692:
|
|
/*!************************************************************!*\
|
|
!*** ./node_modules/qrcode/lib/utils/typedarray-buffer.js ***!
|
|
\************************************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/**
|
|
* Implementation of a subset of node.js Buffer methods for the browser.
|
|
* Based on https://github.com/feross/buffer
|
|
*/
|
|
|
|
/* eslint-disable no-proto */
|
|
|
|
|
|
|
|
var isArray = __webpack_require__(/*! isarray */ 95799);
|
|
function typedArraySupport() {
|
|
// Can typed array instances be augmented?
|
|
try {
|
|
var arr = new Uint8Array(1);
|
|
arr.__proto__ = {
|
|
__proto__: Uint8Array.prototype,
|
|
foo: function foo() {
|
|
return 42;
|
|
}
|
|
};
|
|
return arr.foo() === 42;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport();
|
|
var K_MAX_LENGTH = Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;
|
|
function Buffer(arg, offset, length) {
|
|
if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
|
|
return new Buffer(arg, offset, length);
|
|
}
|
|
if (typeof arg === 'number') {
|
|
return allocUnsafe(this, arg);
|
|
}
|
|
return from(this, arg, offset, length);
|
|
}
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
Buffer.prototype.__proto__ = Uint8Array.prototype;
|
|
Buffer.__proto__ = Uint8Array;
|
|
|
|
// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
|
|
if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) {
|
|
Object.defineProperty(Buffer, Symbol.species, {
|
|
value: null,
|
|
configurable: true,
|
|
enumerable: false,
|
|
writable: false
|
|
});
|
|
}
|
|
}
|
|
function checked(length) {
|
|
// Note: cannot use `length < K_MAX_LENGTH` here because that fails when
|
|
// length is NaN (which is otherwise coerced to zero.)
|
|
if (length >= K_MAX_LENGTH) {
|
|
throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes');
|
|
}
|
|
return length | 0;
|
|
}
|
|
function isnan(val) {
|
|
return val !== val; // eslint-disable-line no-self-compare
|
|
}
|
|
|
|
function createBuffer(that, length) {
|
|
var buf;
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
buf = new Uint8Array(length);
|
|
buf.__proto__ = Buffer.prototype;
|
|
} else {
|
|
// Fallback: Return an object instance of the Buffer class
|
|
buf = that;
|
|
if (buf === null) {
|
|
buf = new Buffer(length);
|
|
}
|
|
buf.length = length;
|
|
}
|
|
return buf;
|
|
}
|
|
function allocUnsafe(that, size) {
|
|
var buf = createBuffer(that, size < 0 ? 0 : checked(size) | 0);
|
|
if (!Buffer.TYPED_ARRAY_SUPPORT) {
|
|
for (var i = 0; i < size; ++i) {
|
|
buf[i] = 0;
|
|
}
|
|
}
|
|
return buf;
|
|
}
|
|
function fromString(that, string) {
|
|
var length = byteLength(string) | 0;
|
|
var buf = createBuffer(that, length);
|
|
var actual = buf.write(string);
|
|
if (actual !== length) {
|
|
// Writing a hex string, for example, that contains invalid characters will
|
|
// cause everything after the first invalid character to be ignored. (e.g.
|
|
// 'abxxcd' will be treated as 'ab')
|
|
buf = buf.slice(0, actual);
|
|
}
|
|
return buf;
|
|
}
|
|
function fromArrayLike(that, array) {
|
|
var length = array.length < 0 ? 0 : checked(array.length) | 0;
|
|
var buf = createBuffer(that, length);
|
|
for (var i = 0; i < length; i += 1) {
|
|
buf[i] = array[i] & 255;
|
|
}
|
|
return buf;
|
|
}
|
|
function fromArrayBuffer(that, array, byteOffset, length) {
|
|
if (byteOffset < 0 || array.byteLength < byteOffset) {
|
|
throw new RangeError('\'offset\' is out of bounds');
|
|
}
|
|
if (array.byteLength < byteOffset + (length || 0)) {
|
|
throw new RangeError('\'length\' is out of bounds');
|
|
}
|
|
var buf;
|
|
if (byteOffset === undefined && length === undefined) {
|
|
buf = new Uint8Array(array);
|
|
} else if (length === undefined) {
|
|
buf = new Uint8Array(array, byteOffset);
|
|
} else {
|
|
buf = new Uint8Array(array, byteOffset, length);
|
|
}
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
// Return an augmented `Uint8Array` instance, for best performance
|
|
buf.__proto__ = Buffer.prototype;
|
|
} else {
|
|
// Fallback: Return an object instance of the Buffer class
|
|
buf = fromArrayLike(that, buf);
|
|
}
|
|
return buf;
|
|
}
|
|
function fromObject(that, obj) {
|
|
if (Buffer.isBuffer(obj)) {
|
|
var len = checked(obj.length) | 0;
|
|
var buf = createBuffer(that, len);
|
|
if (buf.length === 0) {
|
|
return buf;
|
|
}
|
|
obj.copy(buf, 0, 0, len);
|
|
return buf;
|
|
}
|
|
if (obj) {
|
|
if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {
|
|
if (typeof obj.length !== 'number' || isnan(obj.length)) {
|
|
return createBuffer(that, 0);
|
|
}
|
|
return fromArrayLike(that, obj);
|
|
}
|
|
if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
|
|
return fromArrayLike(that, obj.data);
|
|
}
|
|
}
|
|
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');
|
|
}
|
|
function utf8ToBytes(string, units) {
|
|
units = units || Infinity;
|
|
var codePoint;
|
|
var length = string.length;
|
|
var leadSurrogate = null;
|
|
var bytes = [];
|
|
for (var i = 0; i < length; ++i) {
|
|
codePoint = string.charCodeAt(i);
|
|
|
|
// is surrogate component
|
|
if (codePoint > 0xD7FF && codePoint < 0xE000) {
|
|
// last char was a lead
|
|
if (!leadSurrogate) {
|
|
// no lead yet
|
|
if (codePoint > 0xDBFF) {
|
|
// unexpected trail
|
|
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
|
|
continue;
|
|
} else if (i + 1 === length) {
|
|
// unpaired lead
|
|
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
|
|
continue;
|
|
}
|
|
|
|
// valid lead
|
|
leadSurrogate = codePoint;
|
|
continue;
|
|
}
|
|
|
|
// 2 leads in a row
|
|
if (codePoint < 0xDC00) {
|
|
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
|
|
leadSurrogate = codePoint;
|
|
continue;
|
|
}
|
|
|
|
// valid surrogate pair
|
|
codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;
|
|
} else if (leadSurrogate) {
|
|
// valid bmp char, but last char was a lead
|
|
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
|
|
}
|
|
leadSurrogate = null;
|
|
|
|
// encode utf8
|
|
if (codePoint < 0x80) {
|
|
if ((units -= 1) < 0) break;
|
|
bytes.push(codePoint);
|
|
} else if (codePoint < 0x800) {
|
|
if ((units -= 2) < 0) break;
|
|
bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);
|
|
} else if (codePoint < 0x10000) {
|
|
if ((units -= 3) < 0) break;
|
|
bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
|
|
} else if (codePoint < 0x110000) {
|
|
if ((units -= 4) < 0) break;
|
|
bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
|
|
} else {
|
|
throw new Error('Invalid code point');
|
|
}
|
|
}
|
|
return bytes;
|
|
}
|
|
function byteLength(string) {
|
|
if (Buffer.isBuffer(string)) {
|
|
return string.length;
|
|
}
|
|
if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
|
|
return string.byteLength;
|
|
}
|
|
if (typeof string !== 'string') {
|
|
string = '' + string;
|
|
}
|
|
var len = string.length;
|
|
if (len === 0) return 0;
|
|
return utf8ToBytes(string).length;
|
|
}
|
|
function blitBuffer(src, dst, offset, length) {
|
|
for (var i = 0; i < length; ++i) {
|
|
if (i + offset >= dst.length || i >= src.length) break;
|
|
dst[i + offset] = src[i];
|
|
}
|
|
return i;
|
|
}
|
|
function utf8Write(buf, string, offset, length) {
|
|
return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);
|
|
}
|
|
function from(that, value, offset, length) {
|
|
if (typeof value === 'number') {
|
|
throw new TypeError('"value" argument must not be a number');
|
|
}
|
|
if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
|
|
return fromArrayBuffer(that, value, offset, length);
|
|
}
|
|
if (typeof value === 'string') {
|
|
return fromString(that, value, offset);
|
|
}
|
|
return fromObject(that, value);
|
|
}
|
|
Buffer.prototype.write = function write(string, offset, length) {
|
|
// Buffer#write(string)
|
|
if (offset === undefined) {
|
|
length = this.length;
|
|
offset = 0;
|
|
// Buffer#write(string, encoding)
|
|
} else if (length === undefined && typeof offset === 'string') {
|
|
length = this.length;
|
|
offset = 0;
|
|
// Buffer#write(string, offset[, length])
|
|
} else if (isFinite(offset)) {
|
|
offset = offset | 0;
|
|
if (isFinite(length)) {
|
|
length = length | 0;
|
|
} else {
|
|
length = undefined;
|
|
}
|
|
}
|
|
var remaining = this.length - offset;
|
|
if (length === undefined || length > remaining) length = remaining;
|
|
if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
|
|
throw new RangeError('Attempt to write outside buffer bounds');
|
|
}
|
|
return utf8Write(this, string, offset, length);
|
|
};
|
|
Buffer.prototype.slice = function slice(start, end) {
|
|
var len = this.length;
|
|
start = ~~start;
|
|
end = end === undefined ? len : ~~end;
|
|
if (start < 0) {
|
|
start += len;
|
|
if (start < 0) start = 0;
|
|
} else if (start > len) {
|
|
start = len;
|
|
}
|
|
if (end < 0) {
|
|
end += len;
|
|
if (end < 0) end = 0;
|
|
} else if (end > len) {
|
|
end = len;
|
|
}
|
|
if (end < start) end = start;
|
|
var newBuf;
|
|
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
|
newBuf = this.subarray(start, end);
|
|
// Return an augmented `Uint8Array` instance
|
|
newBuf.__proto__ = Buffer.prototype;
|
|
} else {
|
|
var sliceLen = end - start;
|
|
newBuf = new Buffer(sliceLen, undefined);
|
|
for (var i = 0; i < sliceLen; ++i) {
|
|
newBuf[i] = this[i + start];
|
|
}
|
|
}
|
|
return newBuf;
|
|
};
|
|
Buffer.prototype.copy = function copy(target, targetStart, start, end) {
|
|
if (!start) start = 0;
|
|
if (!end && end !== 0) end = this.length;
|
|
if (targetStart >= target.length) targetStart = target.length;
|
|
if (!targetStart) targetStart = 0;
|
|
if (end > 0 && end < start) end = start;
|
|
|
|
// Copy 0 bytes; we're done
|
|
if (end === start) return 0;
|
|
if (target.length === 0 || this.length === 0) return 0;
|
|
|
|
// Fatal error conditions
|
|
if (targetStart < 0) {
|
|
throw new RangeError('targetStart out of bounds');
|
|
}
|
|
if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds');
|
|
if (end < 0) throw new RangeError('sourceEnd out of bounds');
|
|
|
|
// Are we oob?
|
|
if (end > this.length) end = this.length;
|
|
if (target.length - targetStart < end - start) {
|
|
end = target.length - targetStart + start;
|
|
}
|
|
var len = end - start;
|
|
var i;
|
|
if (this === target && start < targetStart && targetStart < end) {
|
|
// descending copy from end
|
|
for (i = len - 1; i >= 0; --i) {
|
|
target[i + targetStart] = this[i + start];
|
|
}
|
|
} else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
|
|
// ascending copy from start
|
|
for (i = 0; i < len; ++i) {
|
|
target[i + targetStart] = this[i + start];
|
|
}
|
|
} else {
|
|
Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart);
|
|
}
|
|
return len;
|
|
};
|
|
Buffer.prototype.fill = function fill(val, start, end) {
|
|
// Handle string cases:
|
|
if (typeof val === 'string') {
|
|
if (typeof start === 'string') {
|
|
start = 0;
|
|
end = this.length;
|
|
} else if (typeof end === 'string') {
|
|
end = this.length;
|
|
}
|
|
if (val.length === 1) {
|
|
var code = val.charCodeAt(0);
|
|
if (code < 256) {
|
|
val = code;
|
|
}
|
|
}
|
|
} else if (typeof val === 'number') {
|
|
val = val & 255;
|
|
}
|
|
|
|
// Invalid ranges are not set to a default, so can range check early.
|
|
if (start < 0 || this.length < start || this.length < end) {
|
|
throw new RangeError('Out of range index');
|
|
}
|
|
if (end <= start) {
|
|
return this;
|
|
}
|
|
start = start >>> 0;
|
|
end = end === undefined ? this.length : end >>> 0;
|
|
if (!val) val = 0;
|
|
var i;
|
|
if (typeof val === 'number') {
|
|
for (i = start; i < end; ++i) {
|
|
this[i] = val;
|
|
}
|
|
} else {
|
|
var bytes = Buffer.isBuffer(val) ? val : new Buffer(val);
|
|
var len = bytes.length;
|
|
for (i = 0; i < end - start; ++i) {
|
|
this[i + start] = bytes[i % len];
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
Buffer.concat = function concat(list, length) {
|
|
if (!isArray(list)) {
|
|
throw new TypeError('"list" argument must be an Array of Buffers');
|
|
}
|
|
if (list.length === 0) {
|
|
return createBuffer(null, 0);
|
|
}
|
|
var i;
|
|
if (length === undefined) {
|
|
length = 0;
|
|
for (i = 0; i < list.length; ++i) {
|
|
length += list[i].length;
|
|
}
|
|
}
|
|
var buffer = allocUnsafe(null, length);
|
|
var pos = 0;
|
|
for (i = 0; i < list.length; ++i) {
|
|
var buf = list[i];
|
|
if (!Buffer.isBuffer(buf)) {
|
|
throw new TypeError('"list" argument must be an Array of Buffers');
|
|
}
|
|
buf.copy(buffer, pos);
|
|
pos += buf.length;
|
|
}
|
|
return buffer;
|
|
};
|
|
Buffer.byteLength = byteLength;
|
|
Buffer.prototype._isBuffer = true;
|
|
Buffer.isBuffer = function isBuffer(b) {
|
|
return !!(b != null && b._isBuffer);
|
|
};
|
|
module.exports.alloc = function (size) {
|
|
var buffer = new Buffer(size);
|
|
buffer.fill(0);
|
|
return buffer;
|
|
};
|
|
module.exports.from = function (data) {
|
|
return new Buffer(data);
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 31677:
|
|
/*!***************************************************************!*\
|
|
!*** ./node_modules/react-copy-to-clipboard/lib/Component.js ***!
|
|
\***************************************************************/
|
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var _typeof2 = (__webpack_require__(/*! ./node_modules/@babel/runtime/helpers/typeof.js */ 22191)["default"]);
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports.CopyToClipboard = void 0;
|
|
var _react = _interopRequireDefault(__webpack_require__(/*! react */ 978));
|
|
var _copyToClipboard = _interopRequireDefault(__webpack_require__(/*! copy-to-clipboard */ 87012));
|
|
function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
"default": obj
|
|
};
|
|
}
|
|
function _typeof(obj) {
|
|
if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") {
|
|
_typeof = function _typeof(obj) {
|
|
return _typeof2(obj);
|
|
};
|
|
} else {
|
|
_typeof = function _typeof(obj) {
|
|
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj);
|
|
};
|
|
}
|
|
return _typeof(obj);
|
|
}
|
|
function ownKeys(object, enumerableOnly) {
|
|
var keys = Object.keys(object);
|
|
if (Object.getOwnPropertySymbols) {
|
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
if (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 = arguments[i] != null ? arguments[i] : {};
|
|
if (i % 2) {
|
|
ownKeys(source, true).forEach(function (key) {
|
|
_defineProperty(target, key, source[key]);
|
|
});
|
|
} else if (Object.getOwnPropertyDescriptors) {
|
|
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
} else {
|
|
ownKeys(source).forEach(function (key) {
|
|
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
});
|
|
}
|
|
}
|
|
return target;
|
|
}
|
|
function _objectWithoutProperties(source, excluded) {
|
|
if (source == null) return {};
|
|
var target = _objectWithoutPropertiesLoose(source, excluded);
|
|
var key, i;
|
|
if (Object.getOwnPropertySymbols) {
|
|
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
|
key = sourceSymbolKeys[i];
|
|
if (excluded.indexOf(key) >= 0) continue;
|
|
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
return target;
|
|
}
|
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
if (source == null) return {};
|
|
var target = {};
|
|
var sourceKeys = Object.keys(source);
|
|
var key, i;
|
|
for (i = 0; i < sourceKeys.length; i++) {
|
|
key = sourceKeys[i];
|
|
if (excluded.indexOf(key) >= 0) continue;
|
|
target[key] = source[key];
|
|
}
|
|
return target;
|
|
}
|
|
function _classCallCheck(instance, Constructor) {
|
|
if (!(instance instanceof Constructor)) {
|
|
throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
}
|
|
function _defineProperties(target, props) {
|
|
for (var i = 0; i < props.length; i++) {
|
|
var descriptor = props[i];
|
|
descriptor.enumerable = descriptor.enumerable || false;
|
|
descriptor.configurable = true;
|
|
if ("value" in descriptor) descriptor.writable = true;
|
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
}
|
|
}
|
|
function _createClass(Constructor, protoProps, staticProps) {
|
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
return Constructor;
|
|
}
|
|
function _possibleConstructorReturn(self, call) {
|
|
if (call && (_typeof(call) === "object" || typeof call === "function")) {
|
|
return call;
|
|
}
|
|
return _assertThisInitialized(self);
|
|
}
|
|
function _getPrototypeOf(o) {
|
|
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
|
|
return o.__proto__ || Object.getPrototypeOf(o);
|
|
};
|
|
return _getPrototypeOf(o);
|
|
}
|
|
function _assertThisInitialized(self) {
|
|
if (self === void 0) {
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
}
|
|
return self;
|
|
}
|
|
function _inherits(subClass, superClass) {
|
|
if (typeof superClass !== "function" && superClass !== null) {
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
}
|
|
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
constructor: {
|
|
value: subClass,
|
|
writable: true,
|
|
configurable: true
|
|
}
|
|
});
|
|
if (superClass) _setPrototypeOf(subClass, superClass);
|
|
}
|
|
function _setPrototypeOf(o, p) {
|
|
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
|
o.__proto__ = p;
|
|
return o;
|
|
};
|
|
return _setPrototypeOf(o, p);
|
|
}
|
|
function _defineProperty(obj, key, value) {
|
|
if (key in obj) {
|
|
Object.defineProperty(obj, key, {
|
|
value: value,
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true
|
|
});
|
|
} else {
|
|
obj[key] = value;
|
|
}
|
|
return obj;
|
|
}
|
|
var CopyToClipboard = /*#__PURE__*/
|
|
function (_React$PureComponent) {
|
|
_inherits(CopyToClipboard, _React$PureComponent);
|
|
function CopyToClipboard() {
|
|
var _getPrototypeOf2;
|
|
var _this;
|
|
_classCallCheck(this, CopyToClipboard);
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
args[_key] = arguments[_key];
|
|
}
|
|
_this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(CopyToClipboard)).call.apply(_getPrototypeOf2, [this].concat(args)));
|
|
_defineProperty(_assertThisInitialized(_this), "onClick", function (event) {
|
|
var _this$props = _this.props,
|
|
text = _this$props.text,
|
|
onCopy = _this$props.onCopy,
|
|
children = _this$props.children,
|
|
options = _this$props.options;
|
|
var elem = _react["default"].Children.only(children);
|
|
var result = (0, _copyToClipboard["default"])(text, options);
|
|
if (onCopy) {
|
|
onCopy(text, result);
|
|
} // Bypass onClick if it was present
|
|
|
|
if (elem && elem.props && typeof elem.props.onClick === 'function') {
|
|
elem.props.onClick(event);
|
|
}
|
|
});
|
|
return _this;
|
|
}
|
|
_createClass(CopyToClipboard, [{
|
|
key: "render",
|
|
value: function render() {
|
|
var _this$props2 = this.props,
|
|
_text = _this$props2.text,
|
|
_onCopy = _this$props2.onCopy,
|
|
_options = _this$props2.options,
|
|
children = _this$props2.children,
|
|
props = _objectWithoutProperties(_this$props2, ["text", "onCopy", "options", "children"]);
|
|
var elem = _react["default"].Children.only(children);
|
|
return _react["default"].cloneElement(elem, _objectSpread({}, props, {
|
|
onClick: this.onClick
|
|
}));
|
|
}
|
|
}]);
|
|
return CopyToClipboard;
|
|
}(_react["default"].PureComponent);
|
|
exports.CopyToClipboard = CopyToClipboard;
|
|
_defineProperty(CopyToClipboard, "defaultProps", {
|
|
onCopy: undefined,
|
|
options: undefined
|
|
});
|
|
|
|
/***/ }),
|
|
|
|
/***/ 31724:
|
|
/*!***********************************************************!*\
|
|
!*** ./node_modules/react-copy-to-clipboard/lib/index.js ***!
|
|
\***********************************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var _require = __webpack_require__(/*! ./Component */ 31677),
|
|
CopyToClipboard = _require.CopyToClipboard;
|
|
CopyToClipboard.CopyToClipboard = CopyToClipboard;
|
|
module.exports = CopyToClipboard;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 52893:
|
|
/*!*********************************************************************!*\
|
|
!*** ./node_modules/react-infinite-scroller/dist/InfiniteScroll.js ***!
|
|
\*********************************************************************/
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var _typeof = (__webpack_require__(/*! ./node_modules/@babel/runtime/helpers/typeof.js */ 22191)["default"]);
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
var _createClass = function () {
|
|
function defineProperties(target, props) {
|
|
for (var i = 0; i < props.length; i++) {
|
|
var descriptor = props[i];
|
|
descriptor.enumerable = descriptor.enumerable || false;
|
|
descriptor.configurable = true;
|
|
if ("value" in descriptor) descriptor.writable = true;
|
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
}
|
|
}
|
|
return function (Constructor, protoProps, staticProps) {
|
|
if (protoProps) defineProperties(Constructor.prototype, protoProps);
|
|
if (staticProps) defineProperties(Constructor, staticProps);
|
|
return Constructor;
|
|
};
|
|
}();
|
|
var _react = __webpack_require__(/*! react */ 978);
|
|
var _react2 = _interopRequireDefault(_react);
|
|
var _propTypes = __webpack_require__(/*! prop-types */ 97713);
|
|
var _propTypes2 = _interopRequireDefault(_propTypes);
|
|
function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
"default": obj
|
|
};
|
|
}
|
|
function _objectWithoutProperties(obj, keys) {
|
|
var target = {};
|
|
for (var i in obj) {
|
|
if (keys.indexOf(i) >= 0) continue;
|
|
if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;
|
|
target[i] = obj[i];
|
|
}
|
|
return target;
|
|
}
|
|
function _classCallCheck(instance, Constructor) {
|
|
if (!(instance instanceof Constructor)) {
|
|
throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
}
|
|
function _possibleConstructorReturn(self, call) {
|
|
if (!self) {
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
}
|
|
return call && (_typeof(call) === "object" || typeof call === "function") ? call : self;
|
|
}
|
|
function _inherits(subClass, superClass) {
|
|
if (typeof superClass !== "function" && superClass !== null) {
|
|
throw new TypeError("Super expression must either be null or a function, not " + _typeof(superClass));
|
|
}
|
|
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
constructor: {
|
|
value: subClass,
|
|
enumerable: false,
|
|
writable: true,
|
|
configurable: true
|
|
}
|
|
});
|
|
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
|
|
}
|
|
var InfiniteScroll = function (_Component) {
|
|
_inherits(InfiniteScroll, _Component);
|
|
function InfiniteScroll(props) {
|
|
_classCallCheck(this, InfiniteScroll);
|
|
var _this = _possibleConstructorReturn(this, (InfiniteScroll.__proto__ || Object.getPrototypeOf(InfiniteScroll)).call(this, props));
|
|
_this.scrollListener = _this.scrollListener.bind(_this);
|
|
_this.eventListenerOptions = _this.eventListenerOptions.bind(_this);
|
|
_this.mousewheelListener = _this.mousewheelListener.bind(_this);
|
|
return _this;
|
|
}
|
|
_createClass(InfiniteScroll, [{
|
|
key: 'componentDidMount',
|
|
value: function componentDidMount() {
|
|
this.pageLoaded = this.props.pageStart;
|
|
this.options = this.eventListenerOptions();
|
|
this.attachScrollListener();
|
|
}
|
|
}, {
|
|
key: 'componentDidUpdate',
|
|
value: function componentDidUpdate() {
|
|
if (this.props.isReverse && this.loadMore) {
|
|
var parentElement = this.getParentElement(this.scrollComponent);
|
|
parentElement.scrollTop = parentElement.scrollHeight - this.beforeScrollHeight + this.beforeScrollTop;
|
|
this.loadMore = false;
|
|
}
|
|
this.attachScrollListener();
|
|
}
|
|
}, {
|
|
key: 'componentWillUnmount',
|
|
value: function componentWillUnmount() {
|
|
this.detachScrollListener();
|
|
this.detachMousewheelListener();
|
|
}
|
|
}, {
|
|
key: 'isPassiveSupported',
|
|
value: function isPassiveSupported() {
|
|
var passive = false;
|
|
var testOptions = {
|
|
get passive() {
|
|
passive = true;
|
|
}
|
|
};
|
|
try {
|
|
document.addEventListener('test', null, testOptions);
|
|
document.removeEventListener('test', null, testOptions);
|
|
} catch (e) {
|
|
// ignore
|
|
}
|
|
return passive;
|
|
}
|
|
}, {
|
|
key: 'eventListenerOptions',
|
|
value: function eventListenerOptions() {
|
|
var options = this.props.useCapture;
|
|
if (this.isPassiveSupported()) {
|
|
options = {
|
|
useCapture: this.props.useCapture,
|
|
passive: true
|
|
};
|
|
}
|
|
return options;
|
|
}
|
|
|
|
// Set a defaut loader for all your `InfiniteScroll` components
|
|
}, {
|
|
key: 'setDefaultLoader',
|
|
value: function setDefaultLoader(loader) {
|
|
this.defaultLoader = loader;
|
|
}
|
|
}, {
|
|
key: 'detachMousewheelListener',
|
|
value: function detachMousewheelListener() {
|
|
var scrollEl = window;
|
|
if (this.props.useWindow === false) {
|
|
scrollEl = this.scrollComponent.parentNode;
|
|
}
|
|
scrollEl.removeEventListener('mousewheel', this.mousewheelListener, this.options ? this.options : this.props.useCapture);
|
|
}
|
|
}, {
|
|
key: 'detachScrollListener',
|
|
value: function detachScrollListener() {
|
|
var scrollEl = window;
|
|
if (this.props.useWindow === false) {
|
|
scrollEl = this.getParentElement(this.scrollComponent);
|
|
}
|
|
scrollEl.removeEventListener('scroll', this.scrollListener, this.options ? this.options : this.props.useCapture);
|
|
scrollEl.removeEventListener('resize', this.scrollListener, this.options ? this.options : this.props.useCapture);
|
|
}
|
|
}, {
|
|
key: 'getParentElement',
|
|
value: function getParentElement(el) {
|
|
var scrollParent = this.props.getScrollParent && this.props.getScrollParent();
|
|
if (scrollParent != null) {
|
|
return scrollParent;
|
|
}
|
|
return el && el.parentNode;
|
|
}
|
|
}, {
|
|
key: 'filterProps',
|
|
value: function filterProps(props) {
|
|
return props;
|
|
}
|
|
}, {
|
|
key: 'attachScrollListener',
|
|
value: function attachScrollListener() {
|
|
var parentElement = this.getParentElement(this.scrollComponent);
|
|
if (!this.props.hasMore || !parentElement) {
|
|
return;
|
|
}
|
|
var scrollEl = window;
|
|
if (this.props.useWindow === false) {
|
|
scrollEl = parentElement;
|
|
}
|
|
scrollEl.addEventListener('mousewheel', this.mousewheelListener, this.options ? this.options : this.props.useCapture);
|
|
scrollEl.addEventListener('scroll', this.scrollListener, this.options ? this.options : this.props.useCapture);
|
|
scrollEl.addEventListener('resize', this.scrollListener, this.options ? this.options : this.props.useCapture);
|
|
if (this.props.initialLoad) {
|
|
this.scrollListener();
|
|
}
|
|
}
|
|
}, {
|
|
key: 'mousewheelListener',
|
|
value: function mousewheelListener(e) {
|
|
// Prevents Chrome hangups
|
|
// See: https://stackoverflow.com/questions/47524205/random-high-content-download-time-in-chrome/47684257#47684257
|
|
if (e.deltaY === 1 && !this.isPassiveSupported()) {
|
|
e.preventDefault();
|
|
}
|
|
}
|
|
}, {
|
|
key: 'scrollListener',
|
|
value: function scrollListener() {
|
|
var el = this.scrollComponent;
|
|
var scrollEl = window;
|
|
var parentNode = this.getParentElement(el);
|
|
var offset = void 0;
|
|
if (this.props.useWindow) {
|
|
var doc = document.documentElement || document.body.parentNode || document.body;
|
|
var scrollTop = scrollEl.pageYOffset !== undefined ? scrollEl.pageYOffset : doc.scrollTop;
|
|
if (this.props.isReverse) {
|
|
offset = scrollTop;
|
|
} else {
|
|
offset = this.calculateOffset(el, scrollTop);
|
|
}
|
|
} else if (this.props.isReverse) {
|
|
offset = parentNode.scrollTop;
|
|
} else {
|
|
offset = el.scrollHeight - parentNode.scrollTop - parentNode.clientHeight;
|
|
}
|
|
|
|
// Here we make sure the element is visible as well as checking the offset
|
|
if (offset < Number(this.props.threshold) && el && el.offsetParent !== null) {
|
|
this.detachScrollListener();
|
|
this.beforeScrollHeight = parentNode.scrollHeight;
|
|
this.beforeScrollTop = parentNode.scrollTop;
|
|
// Call loadMore after detachScrollListener to allow for non-async loadMore functions
|
|
if (typeof this.props.loadMore === 'function') {
|
|
this.props.loadMore(this.pageLoaded += 1);
|
|
this.loadMore = true;
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: 'calculateOffset',
|
|
value: function calculateOffset(el, scrollTop) {
|
|
if (!el) {
|
|
return 0;
|
|
}
|
|
return this.calculateTopPosition(el) + (el.offsetHeight - scrollTop - window.innerHeight);
|
|
}
|
|
}, {
|
|
key: 'calculateTopPosition',
|
|
value: function calculateTopPosition(el) {
|
|
if (!el) {
|
|
return 0;
|
|
}
|
|
return el.offsetTop + this.calculateTopPosition(el.offsetParent);
|
|
}
|
|
}, {
|
|
key: 'render',
|
|
value: function render() {
|
|
var _this2 = this;
|
|
var renderProps = this.filterProps(this.props);
|
|
var children = renderProps.children,
|
|
element = renderProps.element,
|
|
hasMore = renderProps.hasMore,
|
|
initialLoad = renderProps.initialLoad,
|
|
isReverse = renderProps.isReverse,
|
|
loader = renderProps.loader,
|
|
loadMore = renderProps.loadMore,
|
|
pageStart = renderProps.pageStart,
|
|
ref = renderProps.ref,
|
|
threshold = renderProps.threshold,
|
|
useCapture = renderProps.useCapture,
|
|
useWindow = renderProps.useWindow,
|
|
getScrollParent = renderProps.getScrollParent,
|
|
props = _objectWithoutProperties(renderProps, ['children', 'element', 'hasMore', 'initialLoad', 'isReverse', 'loader', 'loadMore', 'pageStart', 'ref', 'threshold', 'useCapture', 'useWindow', 'getScrollParent']);
|
|
props.ref = function (node) {
|
|
_this2.scrollComponent = node;
|
|
if (ref) {
|
|
ref(node);
|
|
}
|
|
};
|
|
var childrenArray = [children];
|
|
if (hasMore) {
|
|
if (loader) {
|
|
isReverse ? childrenArray.unshift(loader) : childrenArray.push(loader);
|
|
} else if (this.defaultLoader) {
|
|
isReverse ? childrenArray.unshift(this.defaultLoader) : childrenArray.push(this.defaultLoader);
|
|
}
|
|
}
|
|
return _react2["default"].createElement(element, props, childrenArray);
|
|
}
|
|
}]);
|
|
return InfiniteScroll;
|
|
}(_react.Component);
|
|
InfiniteScroll.propTypes = {
|
|
children: _propTypes2["default"].node.isRequired,
|
|
element: _propTypes2["default"].node,
|
|
hasMore: _propTypes2["default"].bool,
|
|
initialLoad: _propTypes2["default"].bool,
|
|
isReverse: _propTypes2["default"].bool,
|
|
loader: _propTypes2["default"].node,
|
|
loadMore: _propTypes2["default"].func.isRequired,
|
|
pageStart: _propTypes2["default"].number,
|
|
ref: _propTypes2["default"].func,
|
|
getScrollParent: _propTypes2["default"].func,
|
|
threshold: _propTypes2["default"].number,
|
|
useCapture: _propTypes2["default"].bool,
|
|
useWindow: _propTypes2["default"].bool
|
|
};
|
|
InfiniteScroll.defaultProps = {
|
|
element: 'div',
|
|
hasMore: false,
|
|
initialLoad: true,
|
|
pageStart: 0,
|
|
ref: null,
|
|
threshold: 250,
|
|
useWindow: true,
|
|
isReverse: false,
|
|
useCapture: false,
|
|
loader: null,
|
|
getScrollParent: null
|
|
};
|
|
exports["default"] = InfiniteScroll;
|
|
module.exports = exports['default'];
|
|
|
|
/***/ }),
|
|
|
|
/***/ 22487:
|
|
/*!*******************************************************!*\
|
|
!*** ./node_modules/react-infinite-scroller/index.js ***!
|
|
\*******************************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
module.exports = __webpack_require__(/*! ./dist/InfiniteScroll */ 52893);
|
|
|
|
/***/ }),
|
|
|
|
/***/ 35333:
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/toggle-selection/index.js ***!
|
|
\************************************************/
|
|
/***/ (function(module) {
|
|
|
|
module.exports = function () {
|
|
var selection = document.getSelection();
|
|
if (!selection.rangeCount) {
|
|
return function () {};
|
|
}
|
|
var active = document.activeElement;
|
|
var ranges = [];
|
|
for (var i = 0; i < selection.rangeCount; i++) {
|
|
ranges.push(selection.getRangeAt(i));
|
|
}
|
|
switch (active.tagName.toUpperCase()) {
|
|
// .toUpperCase handles XHTML
|
|
case 'INPUT':
|
|
case 'TEXTAREA':
|
|
active.blur();
|
|
break;
|
|
default:
|
|
active = null;
|
|
break;
|
|
}
|
|
selection.removeAllRanges();
|
|
return function () {
|
|
selection.type === 'Caret' && selection.removeAllRanges();
|
|
if (!selection.rangeCount) {
|
|
ranges.forEach(function (range) {
|
|
selection.addRange(range);
|
|
});
|
|
}
|
|
active && active.focus();
|
|
};
|
|
};
|
|
|
|
/***/ })
|
|
|
|
}]); |