yh-report 2.4.112 → 2.4.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{StatementDesign-Dg1kn5-n.mjs → StatementDesign-CifyKUGu.mjs} +14651 -11956
- package/StatementDesign-CifyKUGu.mjs.map +1 -0
- package/{StatementDetail-DIM6a0IL.mjs → StatementDetail-C3ewsmAA.mjs} +2 -2
- package/{StatementDetail-DIM6a0IL.mjs.map → StatementDetail-C3ewsmAA.mjs.map} +1 -1
- package/{StatementList-B7ttZtck.mjs → StatementList-D5yfC4Bs.mjs} +2 -2
- package/StatementList-D5yfC4Bs.mjs.map +1 -0
- package/{index-DJvl2uh5.mjs → index-B3P0BC8Z.mjs} +1951 -1827
- package/index-B3P0BC8Z.mjs.map +1 -0
- package/index.es.js +1 -1
- package/package.json +2 -5
- package/style.css +1 -1
- package/StatementDesign-Dg1kn5-n.mjs.map +0 -1
- package/StatementList-B7ttZtck.mjs.map +0 -1
- package/index-DJvl2uh5.mjs.map +0 -1
package/index-DJvl2uh5.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DJvl2uh5.mjs","sources":["../types.ts","../libs/validateAndCompleteOptions.ts","../libs/chartReportDefaultOption.ts","../api/form.ts","../libs/util.ts","../libs/colors.ts","../utils/borderStyle.ts","../libs/export/exportExcel.ts","../../yh-hooks/useBroadcastChannel.ts","../libs/export/index.ts","../../../node_modules/dayjs/dayjs.min.js","../libs/printParams.ts","../api/dataSource.ts","../libs/collectCellQueryConditions.ts","../libs/fetchReportData.ts","../../../node_modules/dayjs/locale/zh-cn.js","../libs/index.ts","../../../node_modules/jsep/dist/jsep.js","../../../node_modules/decimal.js/decimal.mjs","../../../node_modules/jsbarcode/bin/barcodes/Barcode.js","../../../node_modules/jsbarcode/bin/barcodes/CODE39/index.js","../../../node_modules/jsbarcode/bin/barcodes/CODE128/constants.js","../../../node_modules/jsbarcode/bin/barcodes/CODE128/CODE128.js","../../../node_modules/jsbarcode/bin/barcodes/CODE128/auto.js","../../../node_modules/jsbarcode/bin/barcodes/CODE128/CODE128_AUTO.js","../../../node_modules/jsbarcode/bin/barcodes/CODE128/CODE128A.js","../../../node_modules/jsbarcode/bin/barcodes/CODE128/CODE128B.js","../../../node_modules/jsbarcode/bin/barcodes/CODE128/CODE128C.js","../../../node_modules/jsbarcode/bin/barcodes/CODE128/index.js","../../../node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js","../../../node_modules/jsbarcode/bin/barcodes/EAN_UPC/encoder.js","../../../node_modules/jsbarcode/bin/barcodes/EAN_UPC/EAN.js","../../../node_modules/jsbarcode/bin/barcodes/EAN_UPC/EAN13.js","../../../node_modules/jsbarcode/bin/barcodes/EAN_UPC/EAN8.js","../../../node_modules/jsbarcode/bin/barcodes/EAN_UPC/EAN5.js","../../../node_modules/jsbarcode/bin/barcodes/EAN_UPC/EAN2.js","../../../node_modules/jsbarcode/bin/barcodes/EAN_UPC/UPC.js","../../../node_modules/jsbarcode/bin/barcodes/EAN_UPC/UPCE.js","../../../node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js","../../../node_modules/jsbarcode/bin/barcodes/ITF/constants.js","../../../node_modules/jsbarcode/bin/barcodes/ITF/ITF.js","../../../node_modules/jsbarcode/bin/barcodes/ITF/ITF14.js","../../../node_modules/jsbarcode/bin/barcodes/ITF/index.js","../../../node_modules/jsbarcode/bin/barcodes/MSI/MSI.js","../../../node_modules/jsbarcode/bin/barcodes/MSI/checksums.js","../../../node_modules/jsbarcode/bin/barcodes/MSI/MSI10.js","../../../node_modules/jsbarcode/bin/barcodes/MSI/MSI11.js","../../../node_modules/jsbarcode/bin/barcodes/MSI/MSI1010.js","../../../node_modules/jsbarcode/bin/barcodes/MSI/MSI1110.js","../../../node_modules/jsbarcode/bin/barcodes/MSI/index.js","../../../node_modules/jsbarcode/bin/barcodes/pharmacode/index.js","../../../node_modules/jsbarcode/bin/barcodes/codabar/index.js","../../../node_modules/jsbarcode/bin/barcodes/CODE93/constants.js","../../../node_modules/jsbarcode/bin/barcodes/CODE93/CODE93.js","../../../node_modules/jsbarcode/bin/barcodes/CODE93/CODE93FullASCII.js","../../../node_modules/jsbarcode/bin/barcodes/CODE93/index.js","../../../node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js","../../../node_modules/jsbarcode/bin/barcodes/index.js","../../../node_modules/jsbarcode/bin/help/merge.js","../../../node_modules/jsbarcode/bin/help/linearizeEncodings.js","../../../node_modules/jsbarcode/bin/help/fixOptions.js","../../../node_modules/jsbarcode/bin/help/optionsFromStrings.js","../../../node_modules/jsbarcode/bin/options/defaults.js","../../../node_modules/jsbarcode/bin/help/getOptionsFromElement.js","../../../node_modules/jsbarcode/bin/renderers/shared.js","../../../node_modules/jsbarcode/bin/renderers/canvas.js","../../../node_modules/jsbarcode/bin/renderers/svg.js","../../../node_modules/jsbarcode/bin/renderers/object.js","../../../node_modules/jsbarcode/bin/renderers/index.js","../../../node_modules/jsbarcode/bin/exceptions/exceptions.js","../../../node_modules/jsbarcode/bin/help/getRenderProperties.js","../../../node_modules/jsbarcode/bin/exceptions/ErrorHandler.js","../../../node_modules/jsbarcode/bin/JsBarcode.js","../../../node_modules/qrcode/lib/can-promise.js","../../../node_modules/qrcode/lib/core/utils.js","../../../node_modules/qrcode/lib/core/error-correction-level.js","../../../node_modules/qrcode/lib/core/bit-buffer.js","../../../node_modules/qrcode/lib/core/bit-matrix.js","../../../node_modules/qrcode/lib/core/alignment-pattern.js","../../../node_modules/qrcode/lib/core/finder-pattern.js","../../../node_modules/qrcode/lib/core/mask-pattern.js","../../../node_modules/qrcode/lib/core/error-correction-code.js","../../../node_modules/qrcode/lib/core/galois-field.js","../../../node_modules/qrcode/lib/core/polynomial.js","../../../node_modules/qrcode/lib/core/reed-solomon-encoder.js","../../../node_modules/qrcode/lib/core/version-check.js","../../../node_modules/qrcode/lib/core/regex.js","../../../node_modules/qrcode/lib/core/mode.js","../../../node_modules/qrcode/lib/core/version.js","../../../node_modules/qrcode/lib/core/format-info.js","../../../node_modules/qrcode/lib/core/numeric-data.js","../../../node_modules/qrcode/lib/core/alphanumeric-data.js","../../../node_modules/qrcode/lib/core/byte-data.js","../../../node_modules/qrcode/lib/core/kanji-data.js","../../../node_modules/dijkstrajs/dijkstra.js","../../../node_modules/qrcode/lib/core/segments.js","../../../node_modules/qrcode/lib/core/qrcode.js","../../../node_modules/qrcode/lib/renderer/utils.js","../../../node_modules/qrcode/lib/renderer/canvas.js","../../../node_modules/qrcode/lib/renderer/svg-tag.js","../../../node_modules/qrcode/lib/browser.js","../libs/canvasPool.ts","../libs/renderByDom/index.ts","../libs/customEvent.ts","../libs/jsep.ts","../libs/generateReportRenderCfg/loopGroupCols.ts","../libs/generateReportRenderCfg/loopGroupRows.ts","../libs/generateReportRenderCfg/getLoopItem.ts","../libs/generateReportRenderCfg/index.ts","../libs/generateReportRenderCfg/transformArrayToObject.ts","../libs/renderReportToConfigs.ts","../libs/constants.ts","../libs/printRenderer.ts","../libs/printByBrowser.ts","../../../node_modules/dayjs/plugin/quarterOfYear.js","../libs/conditions.ts","../component/view-item/reportConditions.vue","../libs/clickSort.ts","../component/view-item/reportViewItem.vue","../api/chartsOption.ts","../component/view-item/chartItem.vue","../component/view-item/chartViewItem.vue","../component/view-item/labelItem.vue","../component/PrintPreviewDialog.vue","../component/reportRun.vue","../libs/printerClient.ts","../libs/fetchReportForPrint.ts","../libs/usePrinterClient.ts","../component/PrinterHeaderButton.vue","../index.ts"],"sourcesContent":["import colors from 'yh-report/libs/colors';\n\nexport enum DataParamDateTypes {\n YEAR = 'year',\n MONTH = 'month',\n WEEK = 'week',\n QUARTER = 'quarter',\n DATE = 'date',\n DATETIME = 'datetime',\n DATERANGE = 'daterange',\n DATETIMERANGE = 'datetimerange',\n MONTHRANGE = 'monthrange',\n YEARRANGE = 'yearrange',\n}\n\nexport interface ReportConfig {\n config: Cell[][];\n rowConfig: Head[];\n colConfig: Head[];\n}\n\n/** 数据源筛选 */\nexport interface DataParam {\n /** 数据源Key值,筛选时匹配数据源用(多数据源场景) */\n key: string;\n columnName: string;\n name: string;\n defaultValue: any;\n dataType: DataSourceColumnDataType;\n elWidth?: number;\n dateType?: DataParamDateTypes;\n startTime?: string;\n endTime?: string;\n /** 班次配置(仅日视图):'名称|HH:mm-HH:mm' 逗号分隔,止点≤起点为跨天班次(查询归属班次结束日);空=不分班次 */\n shifts?: string;\n /** 范围选择器单视图(默认双视图,双视图左右面板不关联) */\n singlePanel?: boolean;\n selectorId?: string;\n /** 开启后下拉不预拉全量,使用时按关键字经 sysSelector/list 远程搜索 */\n remoteSearch?: boolean;\n /** 列表数据来源:custom 自定义项 / cell 报表单元格 / selector 数据选项(编辑面板状态,运行时按字段非空判定) */\n optionSource?: 'custom' | 'cell' | 'selector';\n /** 指定报表单元格,获取其中数据作为下拉选项 */\n cellIndex?: string;\n /** 自定义下拉选项,英文逗号分割;非空时优先于后端选择器与单元格 */\n customOptions?: string;\n /** 是否对单元格数据排序 */\n cellIndexSort?: boolean;\n /** 排序方向:asc 正序 / desc 倒序 */\n cellIndexSortOrder?: 'asc' | 'desc';\n /** 是否用数字排序(勾选用数字排序,不勾选用字符串排序) */\n cellIndexSortNumeric?: boolean;\n type: string; // 'LIKE' | 'IN' | 'GT' | 'GT_EQ' | 'EQ' | 'LT' | 'LT_EQ' | 'LT_GT_EQ';\n isNull: boolean;\n isShow: boolean;\n}\n\n/** 数据源字段 */\nexport interface DataColumns {\n columnName: string;\n name: string;\n dataType: string;\n selectorId: string;\n description: string;\n isCustom?: boolean;\n}\n\nexport interface ObjectSetting {\n /** 元素键名 */\n field: string;\n /** 格式化 */\n format?: FormatType;\n /** 格式化配置参数 */\n formatType?: any;\n /** 是否作为查询条件:收集单元格插值中引用的本字段值,随请求传给后端 */\n asQueryCondition?: boolean;\n /** 查询参数名,缺省用 field */\n queryParamName?: string;\n}\n\nexport interface StatementDataSource {\n /** 数据键,数据源的id从sourceData 取数据用 */\n key?: string;\n /** 数据请求地址,获取筛选后的数据 */\n url?: string;\n /** 数据源名称 */\n name?: string;\n /** 数据源字段 */\n columns: DataColumns[];\n /** 是否转为对象 */\n toObject?: boolean;\n /** 对象转换设置 */\n toObjectSetting?: ObjectSetting[];\n /** 是否作为循环表格数据源:开启后该数据源每条数据渲染一份完整报表,份间强制分页 */\n loopTable?: boolean;\n}\n\nexport interface StatementData {\n source: StatementDataSource[];\n /** 是否对数据源进行分页 */\n pagination?: boolean;\n /** 分页条数 */\n pageSize?: number;\n /** 分页下拉数据 */\n pageSizes?: string;\n /** 是否在输入框失去焦点时触发搜索 */\n searchOnBlur?: boolean;\n /** 数据使用前的处理函数的函数体 */\n processData?: '';\n /** 静态数据 */\n staticData?: any[];\n /** 自动查询 */\n autoQuery?: boolean;\n}\n\nexport enum CellType {\n /** 行 */\n ROW = 'row',\n /** 列 */\n COL = 'col',\n /** 单元格 */\n CELL = 'cell',\n /** 表头 */\n HEAD = 'head',\n /** 文本 */\n TEXT = 'text',\n /** 图标 */\n ICON = 'icon',\n /** 函数 */\n FUN = 'fun',\n /** 图片 */\n IMAGE = 'img',\n /** 字段 */\n FIELD = 'field',\n /** 富文本(cell.text 存 HTML 字符串) */\n RICH = 'rich',\n}\n\nexport enum FormatType {\n /** 文本 */\n TEXT = 'text',\n /** 数值 */\n NUMBER = 'number',\n /** 货币 */\n CURRENCY = 'currency',\n /** 百分比 */\n PERCENT = 'percent',\n /** 千分比 */\n PROMILLE = 'promille',\n /** 科学计数 */\n SCIENTIFIC = 'scientific',\n /** 日期 */\n DATETIME = 'datetime',\n /** 字符串模板 */\n STRING = 'string',\n /** 条形码 - 附加渲染:将文本/数据/函数结果渲染为条形码 */\n BARCODE = 'barcode',\n /** 二维码 - 附加渲染:将文本/数据/函数结果渲染为二维码 */\n QRCODE = 'qrcode',\n}\n\n/** 边框样式类型 */\nexport type BorderStyle =\n | 'none' // 无边框\n | 'thin' // 细边框\n | 'medium' // 中等边框\n | 'thick' // 粗边框\n | 'dotted' // 点状\n | 'dashed' // 虚线\n | 'double' // 双线\n | 'hair' // 极细\n | 'dashDot' // 点划线\n | 'dashDotDot' // 双点划线\n | 'slantDashDot' // 斜点划线\n | 'mediumDashed' // 中等虚线\n | 'mediumDashDot' // 中等点划线\n | 'mediumDashDotDot'; // 中等双点划线\n\n/** 单边边框配置 */\nexport interface BorderEdge {\n /** 边框样式 */\n style?: BorderStyle;\n /** 边框颜色(hex格式,如 #333333) */\n color?: string;\n}\n\n/** 完整边框配置 */\nexport interface BorderConfig {\n /** 上边框 */\n top?: BorderEdge;\n /** 右边框 */\n right?: BorderEdge;\n /** 下边框 */\n bottom?: BorderEdge;\n /** 左边框 */\n left?: BorderEdge;\n}\n\n/** 边框应用模式(区域级操作) */\nexport type BorderMode =\n | 'none' // 无边框\n | 'all' // 所有边框\n | 'outside' // 外边框(选区最外圈)\n | 'inside' // 内边框(选区内部网格线)\n | 'top' // 选区顶部\n | 'bottom' // 选区底部\n | 'left' // 选区左侧\n | 'right'; // 选区右侧\n\n/** 一次边框操作(区域级) */\nexport interface BorderOperation {\n /** 应用模式 */\n mode: BorderMode;\n /** 边框样式 */\n style: BorderStyle;\n /** 边框颜色(缺省使用主题色) */\n color?: string;\n}\n\nexport interface CellStyle {\n /** 边框配置(支持 boolean 向后兼容) */\n border?: BorderConfig | boolean;\n /** 背景色 */\n backgroundColor?: string;\n /** 字体颜色 */\n color?: string;\n /** 文本对齐方式 */\n textAlign?: string;\n /** 文本垂直对齐方式 */\n verticalAlign?: string;\n /** 字体粗细 */\n fontWeight?: 'normal' | 'bold';\n /** 字体大小 */\n fontSize?: number;\n /** 字体 */\n fontFamily?: string;\n /** 内边距(px);缺省时各处按全局默认值 2px 处理 */\n paddingTop?: number;\n paddingRight?: number;\n paddingBottom?: number;\n paddingLeft?: number;\n /** 是否允许内容撑开行高(默认 false 固定高度+隐藏溢出,true 时内容可撑高行) */\n allowContentOverflow?: boolean;\n}\n\nexport enum ComputedType {\n /** 计算循环中当前行 */\n loopRow = 'loopRow',\n /** 非循环计算 */\n static = 'static',\n /** 计算循环中当前分组 */\n loopGroup = 'loopGroup',\n}\n\nexport interface Cell {\n /** 单元格类型 */\n type: CellType;\n /** 格式化方式 */\n format?: FormatType;\n /** 格式化格式 */\n formatType?: any;\n /** 列跨度 */\n colSpan: number;\n /** 行跨度 */\n rowSpan: number;\n /** 合并目标 */\n mergeTarget?: [number, number];\n /** 列索引 */\n col: number;\n /** 行索引 */\n row: number;\n /** 数据源或者函数返回的原始数据,区别text(格式化后的数据) */\n rawData?: any;\n /** 当前循环索引 */\n index?: number;\n /** 分组横向索引 第一个月分组单元格索引为 0 */\n groupLevel?: number;\n /** 当前分组索引 */\n groupIndices?: number | number[];\n /** 当前分组子索引 */\n groupChildIndex?: number;\n /** 计算类型 */\n computedType?: 'loopRow' | 'static' | 'loopGroup';\n /** 是否为循环分组关联计算单元格 */\n isLoopGroupComputedCell?: boolean;\n /** 循环分组中计算公式所在行索引 */\n loopGroupRowIndex?: number | string;\n /** 单元格内容 */\n text?: string;\n /** 自定义字符串渲染 */\n fun?: string;\n /** 自定义渲染函数 */\n customRender?: string;\n /** 单元格数据 */\n data?: any;\n /** 渲染时:列数据 */\n colData?: any;\n /** 渲染时:行数据 */\n rowData?: any;\n /** 是否分组 */\n isGroup?: boolean;\n /** 分组排序 - 是否对该分组列的分组值排序(关闭时保持数据源首次出现顺序) */\n isGroupSort?: boolean;\n /** 分组排序方向:asc 正序(默认)/ desc 倒序 */\n groupSortOrder?: 'asc' | 'desc';\n /** 分组排序是否按数字大小(true=parseFloat 数值比较,false=localeCompare 字符串比较) */\n groupSortNumeric?: boolean;\n /** 点击排序 - 开启后运行态该单元格可点击,点击按 clickSortField 对内存数据升/降排序 */\n clickSortEnabled?: boolean;\n /** 点击排序字段,格式 'KEY.FIELD'(数据源键.字段名),排序作用于内存数据,不重新请求 */\n clickSortField?: string;\n /** 点击排序是否按数字大小(true=parseFloat 数值比较,false=unicode 字符串比较) */\n clickSortNumeric?: boolean;\n /** 数据渲染 */\n isStaticData?: boolean;\n /** 行列组合数据 */\n isRowColCombine?: boolean;\n /** 列合并 - 是否合并同列相同值的单元格 */\n isMergeSameCells?: boolean;\n /** 是否关联 列合并 单元格 */\n linkedMergeCell?: boolean;\n /** 列合并单元格 列索引 */\n linkedColIndex?: number;\n /** 行列组合交叉单元格设计列渲染键名 */\n combineKeys?: string[];\n /** 行列组合交叉单元格设计列渲染值 */\n combineValues?: any[];\n /** 合并单元格值聚合方式 */\n mergedValueAggregation?: 'first' | 'firstValid' | 'firstNumber' | 'min' | 'max' | 'avg' | 'sum';\n /** 交叉表裂变列序号(列循环展开时按列组写入,用于按列分组聚合) */\n colGroupIndex?: number;\n /** 交叉行聚合 - 循环行上函数格按当前行组聚合所有裂变列实例 */\n isCrossAggregate?: boolean;\n /** 单元格样式 */\n style?: CellStyle;\n /** 条形码配置选项 */\n barcodeOptions?: {\n format?: string; // 条码格式:CODE128, CODE39, EAN13 等\n width?: number; // 条码宽度\n height?: number; // 条码高度\n displayValue?: boolean; // 是否显示文本\n margin?: number; // 边距\n };\n /** 条形码预生成数据(Data URL) */\n barcodeUrl?: string;\n /** 二维码预生成数据(Data URL) */\n qrcodeData?: string;\n /** 二维码配置选项 */\n qrcodeOptions?: {\n width?: number; // 二维码尺寸\n margin?: number; // 边距\n errorCorrectionLevel?: 'L' | 'M' | 'Q' | 'H'; // 容错级别\n };\n /** 图片配置选项(仅 type=IMAGE 生效) */\n imageOptions?: {\n width?: number; // 宽度(px)\n height?: number; // 高度(px)\n fit?: 'contain' | 'cover' | 'fill'; // 缩放模式\n };\n /** 分组列循环 - 是否开启分组列循环 */\n isGroupColumnLoop?: boolean;\n /** 分组列循环 - 关联的表头行索引 */\n groupColumnLoopHeaderRow?: number;\n /** 原始列索引(用于列循环后的填充对齐) */\n originalColIndex?: number;\n /** 循环时是否合并单元格(仅对非 FIELD/FUN 类型的 TEXT 单元格生效,默认 true 合并) */\n isMergeInLoop?: boolean;\n}\n\nexport interface ActiveCell {\n type: CellType;\n index: number;\n table: string | number;\n col: number;\n row: number;\n}\n\nexport interface GroupHeap extends Cell {\n children?: GroupHeap[];\n}\n\nexport interface Head {\n /** 行高度/列宽度 */\n size: number;\n /** 是否悬浮 */\n isFixed?: boolean | 'left' | 'right';\n /** 是否隐藏列 */\n isHidden?: boolean;\n /** 数据源键值 (StatementData.srouce.key 字段) */\n data?: string;\n /** 数据下标 */\n dataIndex?: number;\n /** 是否循环数据源 */\n loop?: boolean;\n /** 排序标志 */\n index?: number;\n /** 是否循环分组关联行 */\n isLoopGroupComputed?: boolean;\n}\n\n/** 图表数据配置接口 */\nexport interface ChartOption {\n data: StatementData;\n /** 弹出框处理函数 */\n toolTipData: string;\n /** X 轴数据处理函数 */\n xAisData: string;\n /** Y 轴数据处理函数 */\n yAisData: string;\n /** 数据处理函数 */\n seriesData: string;\n /** 图表名 */\n name: string;\n /** 图表图标 */\n icon: string;\n /** 图表类型 */\n type: 'line' | 'rowBar' | 'bar' | 'pie' | 'scatter' | 'radar' | 'treemap' | 'label';\n /** id */\n id: string;\n /** fixed固定定位后,距离视口左侧的距离 */\n left: number;\n /** fixed固定定位后,距离视口顶部的距离 */\n top: number;\n /** 平滑 */\n smooth: boolean;\n /** 显示点 */\n symbol: string;\n /** 显示标签 */\n showLabel: boolean;\n /** 面积图 */\n areaStyle: string;\n /** 标签颜色 */\n labelColor: string;\n /** 标签位置 */\n labelPosition: string;\n /** 环形图 */\n radius: boolean;\n /** 宽度单位 */\n widthUnit: 'px' | '%';\n /** 宽 */\n width: number;\n /** 高度单位 */\n heightUnit: 'px' | '%';\n /** 高 */\n height: number;\n /** 悬浮 */\n isSuspend: boolean;\n /** 数据是否分组 */\n groupBy: boolean;\n /** 数据是否排序 */\n orderBy: 'ASC' | 'DESC' | 'NONE';\n /** 数据处理中截取数据长度 */\n cutLength: number;\n /** 垂直轴 层级 */\n zIndex: number;\n /** 图表配置 */\n option: any;\n}\n\nexport interface LabelOption {\n type: 'label';\n data: StatementData;\n width: number;\n widthUnit: 'px' | '%';\n height: number;\n heightUnit: 'px' | '%';\n notSingle: boolean;\n keyIds: string[];\n dataIds: string[];\n groupBy: boolean;\n orderBy: 'ASC' | 'DESC' | 'NONE';\n cutLength: number;\n singleComputed: 'SUM' | 'AVG' | 'MAX' | 'MIN' | 'COUNT';\n singleColor: string;\n singleKey: string;\n singleData: string[];\n}\n\nexport interface statementTableConfig {\n /** 单元格配置 */\n config: Cell[][];\n /** 行配置 */\n rowConfig: Head[];\n /** 列配置 */\n colConfig: Head[];\n}\n\nexport type ThemeType = 'gray' | 'green' | 'blue' | 'dark' | 'red';\n\nexport type ExportMethod = 'download' | 'send';\n/** 数据表配置 */\nexport interface StatementOption {\n id: string;\n /** 报表类型 */\n type: 'report';\n /** 多表格 */\n tableConfig: statementTableConfig[];\n subReprotIndex?: number;\n /** 宽度类型 */\n widthType: 'px' | '%';\n /** 报表宽度 */\n width: number;\n /** 是否占据内容高度,单报表适用 */\n fullHeight: boolean;\n /** 报表高度 */\n height: number;\n /** 是否展示数据 */\n seriesEnable: boolean;\n /** 数据列头 */\n seriesHeadText: string;\n exportMethod?: ExportMethod;\n /** 报表筛选条件 */\n params: DataParam[];\n /** 报表主题设置 */\n theme: ThemeType;\n /** 报表数据设置 */\n data: StatementData;\n}\n\n/** 报表/图表配置 */\nexport type Options = StatementOption | ChartOption | LabelOption;\n\n/** 数据表类型 */\nexport enum StatementType {\n /** 数据报表 */\n DATA = 1,\n}\n\n/** 打印区域配置(页眉/页脚通用) */\nexport interface PrintAreaConfig {\n /** 是否启用 */\n enabled: boolean;\n /** 区域高度(mm) */\n height: number;\n /**\n * 内容,支持占位符:\n * {page} 当前页码、{total} 总页数、{date} 当前日期、{title} 报表名称\n */\n content: string;\n /** 是否显示页码(启用后会自动追加\"第 X 页 / 共 Y 页\") */\n showPageNumber: boolean;\n}\n\n/** 水印配置 */\nexport interface WatermarkConfig {\n /** 是否启用 */\n enabled: boolean;\n /** 水印文字 */\n text: string;\n /** 字号(px) */\n fontSize: number;\n /** 旋转角度(deg) */\n rotate: number;\n /** 透明度 0-1 */\n opacity: number;\n}\n\n/** 打印配置 */\nexport interface PrintConfig {\n /** 打印模式开关 */\n enabled: boolean;\n /** 打印宽度(mm) */\n width: number;\n /** 打印高度(mm),可选,有值则分页 */\n height?: number;\n /** 上边距(mm) */\n marginTop: number;\n /** 下边距(mm) */\n marginBottom: number;\n /** 左边距(mm) */\n marginLeft: number;\n /** 右边距(mm) */\n marginRight: number;\n /** 页眉配置(可选) */\n header?: PrintAreaConfig;\n /** 页脚配置(可选) */\n footer?: PrintAreaConfig;\n /** 水印配置(可选) */\n watermark?: WatermarkConfig;\n}\n\n/** 数据表存储数据对象 */\nexport interface Statement {\n id?: string;\n name: string;\n code: string;\n description: string;\n options: Options[];\n /** 打印配置 */\n printConfig?: PrintConfig;\n}\n\n/** 数据源访问级别 */\nexport enum DataSourceAccessLevel {\n /** 组织机构 */\n ORG,\n /** 用户 */\n USER,\n /** 用户或部门领导 */\n USER_OR_LEADER,\n /** 租户 */\n CLIENT,\n /** 所有 */\n ALL,\n /** 仅系统 */\n SYSTEM,\n}\n\n/** 布尔值字符串字面量 */\nexport enum BooleanStr {\n /** false 不是 */\n N,\n /** true 是 */\n Y,\n}\n\n/** 数据源接口 */\nexport interface DataSource {\n /** 所属模块 */\n SYS_MODULE_ID: string;\n /** 所属模块名称 */\n _SYS_MODULE_ID_NAME: string;\n /** 数据源ID */\n SYS_DATASOURCE_ID: string;\n /** 数据源名称 */\n NAME: string;\n /** 数据源描述 */\n DESCRIPTION: string;\n /** 数据源关联表名 */\n TABLE_NAME: string;\n /** 访问地址 */\n URL: string;\n /** 是否树型结构 */\n IS_TREE: BooleanStr;\n /** 访问级别 */\n ACCESS_LEVEL: DataSourceAccessLevel;\n}\n\n/** 数据源字段数据类型 */\nexport enum DataSourceColumnDataType {\n /** 字符 */\n STRING = 'STRING',\n /** 正整数 */\n PLONG = 'PLONG',\n /** 整数 */\n LONG = 'LONG',\n /** 浮点 */\n DOUBLE = 'DOUBLE',\n /** 文本 */\n TEXT = 'TEXT',\n /** 是否 */\n BOOL = 'BOOL',\n /** 日期 */\n DATE = 'DATE',\n /** 时间 */\n TIME = 'TIME',\n /** 日期时间 */\n DATETIME = 'DATETIME',\n /** 密码 */\n PASSWORD = 'PASSWORD',\n /** ID */\n ID = 'ID',\n /** 列表 */\n LIST = 'LIST',\n /** 表 */\n TABLE = 'TABLE',\n /** 下拉树 */\n TREE = 'TREE',\n /** 图片 */\n IMG = 'IMG',\n /** 弹窗 */\n OPEN = 'OPEN',\n /** 子查询 */\n SQL = 'SQL',\n /** 颜色 */\n COLOR = 'COLOR',\n /** 代码编辑器 */\n EDITOR = 'EDITOR',\n}\n\n/** 数据源字段 */\nexport interface DataSourceColumn {\n /** 字段键 */\n COLUMN_NAME: string;\n /** 字段名 */\n NAME: string;\n /** 数据类型 */\n DATA_TYPE: DataSourceColumnDataType;\n /** 小数位数 */\n C_FIXED: 0;\n /** 数据长度 */\n C_LENGTH: 32;\n /** 描述 */\n DESCRIPTION: null;\n /** 数据源列ID */\n SYS_DATASOURCE_COLUMN_ID: '7FF63853240B4A349C05F0856E9C5458';\n /** 数据源ID */\n SYS_DATASOURCE_ID: '096551D3229341418188B46918297A8B';\n /** 下拉数据ID */\n SYS_SELECTOR_ID: null;\n}\n\n/** 图表数据 */\nexport interface TypeItem {\n /** 图表名 */\n name: string;\n /** 图表图标 */\n icon: string;\n /** 图表类型 */\n type: string;\n}\n","import {defaultReport} from './chartReportDefaultOption';\nimport {Statement, StatementOption, CellType, FormatType, Cell, Head} from 'yh-report/types';\n\nexport const defaultCell: Cell = {\n type: CellType.TEXT,\n format: FormatType.TEXT,\n formatType: {\n date: '',\n numberDecimal: '',\n numberUseGrouping: '',\n currencySymbol: '',\n scientificNotation: '',\n },\n style: {},\n colSpan: 1,\n rowSpan: 1,\n col: 1,\n row: 1,\n text: '',\n data: undefined,\n};\n\nexport const defaultRow: Head = {\n size: 25,\n data: undefined,\n loop: false,\n index: 0,\n};\n\nexport const defaultCol: Head = {\n size: 80,\n data: undefined,\n loop: false,\n index: 0,\n};\n\nlet isComplete = false;\nfunction validateAndCompleteOptions(statement: Partial<Statement>): {isComplete: boolean; data: Statement} {\n /** 是否有补全 */\n isComplete = false;\n const completedStatement: Statement = {\n ...statement,\n // @ts-ignore\n options:\n statement.options?.map((option) => {\n if (option.type === 'report') {\n return validateAndCompleteStatementOption(option as Partial<StatementOption>);\n } else {\n return option;\n }\n }) || [],\n };\n\n return {\n isComplete,\n data: completedStatement,\n };\n}\n\nexport function validateAndCompleteStatementOption(option: Partial<StatementOption>): StatementOption {\n if (Object.keys(defaultReport).length !== Object.keys(option).length) {\n isComplete = true;\n }\n const completedOption: StatementOption = {\n ...defaultReport,\n ...option,\n id: `report-${Date.now()}`,\n };\n completedOption.tableConfig.forEach((tableConfig) => {\n validateAndCompleteTableConfig(tableConfig);\n });\n\n // 旧数据迁移:batchRender.dataKey → 对应数据源 loopTable=true\n migrateBatchRender(completedOption);\n\n return completedOption;\n}\n\n/**\n * 旧数据迁移:将废弃的 batchRender 配置迁移到数据源的 loopTable 字段\n * batchRender:{enabled, dataKey} → source[find by dataKey].loopTable = true\n */\nfunction migrateBatchRender(option: StatementOption) {\n // @ts-ignore 兼容旧数据:batchRender 已废弃但旧模板可能仍存在\n const batchRender = option.batchRender;\n if (batchRender && batchRender.enabled && batchRender.dataKey) {\n const sources = option.data?.source;\n if (Array.isArray(sources)) {\n sources.forEach((s) => {\n s.loopTable = s.key === batchRender.dataKey;\n });\n }\n isComplete = true;\n }\n // @ts-ignore 移除废弃字段\n delete option.batchRender;\n}\n\n/**\n * 补全报表配置的基础属性(不包含 tableConfig 的校验)\n */\nexport function completeBasicReportProperties(option: StatementOption): StatementOption {\n const {id, type, tableConfig, data, ...otherOptionProps} = option;\n const {id:dId, type:dType, tableConfig:dTableConfig, data:dData, ...dOtherOptionProps} = defaultReport;\n const completeOption = {...option};\n for (const key in dOtherOptionProps) {\n if (!Object.hasOwn(dOtherOptionProps, key)) continue;\n \n const value = otherOptionProps[key];\n if(value === undefined) {\n completeOption[key] = dOtherOptionProps[key]\n }\n \n }\n\n for (const key in dData) {\n if (!Object.hasOwn(dData, key)) continue;\n const value = data[key];\n if(value === undefined) {\n completeOption.data[key] = dData[key]\n }\n }\n\n return completeOption;\n}\n\nexport function validateAndCompleteTableConfig(tableConfig: any): any {\n // 处理 rowConfig 和 colConfig 的默认值\n if (tableConfig.rowConfig.length === 0) {\n isComplete = true;\n tableConfig.rowConfig = Array.from({length: 5}, (_, index) => ({\n size: 25,\n data: undefined,\n loop: false,\n index,\n }));\n }\n\n if (tableConfig.colConfig.length === 0) {\n isComplete = true;\n tableConfig.colConfig = Array.from({length: 10}, (_, index) => ({\n ...defaultCol,\n }));\n }\n\n // 确保 config 的长度与 rowConfig 和 colConfig 匹配\n const rowLength = tableConfig.rowConfig.length;\n const colLength = tableConfig.colConfig.length;\n isComplete = tableConfig.config.length !== rowLength;\n tableConfig.config = tableConfig.config\n .map((row, rowIndex) => {\n isComplete = row.length !== colLength;\n return row\n .slice(0, colLength)\n .map((item, colIndex) => {\n isComplete = Object.keys(item).length !== Object.keys(defaultCell).length;\n return {\n ...defaultCell,\n ...item,\n row: rowIndex,\n col: colIndex,\n };\n })\n .concat(\n Array.from({length: colLength - row.length}, (_, index) => ({\n ...defaultCell,\n row: rowIndex,\n col: row.length + index, // 填充列时,列索引从当前行已有列数开始\n }))\n );\n })\n .concat(\n Array.from({length: rowLength - tableConfig.config.length}, (_, rowIndexOffset) => {\n const newRow = tableConfig.config.length + rowIndexOffset; // 新增行的行索引\n return Array(colLength)\n .fill(0)\n .map((_, colIndex) => ({\n ...defaultCell,\n row: newRow,\n col: colIndex,\n }));\n })\n );\n\n tableConfig.rowConfig = tableConfig.rowConfig.map((row) => {\n isComplete = Object.keys(row).length !== Object.keys(defaultRow).length;\n return {\n ...defaultRow,\n ...row,\n };\n });\n\n tableConfig.colConfig = tableConfig.colConfig.map((col) => {\n isComplete = Object.keys(col).length !== Object.keys(defaultCol).length;\n return {\n ...defaultCol,\n ...col,\n };\n });\n}\n\nexport default validateAndCompleteOptions;\n","import {ref, computed} from 'vue';\nimport {ElMessageBox} from 'element-plus';\nimport type {ChartOption, StatementOption, TypeItem} from 'yh-report/types';\nimport {cloneDeep, groupBy} from 'lodash-es';\nimport {validateAndCompleteStatementOption} from './validateAndCompleteOptions';\n\n/** 设计器左侧可拖拽列表 */\nexport const TypeItems = ref<TypeItem[]>([\n {\n name: '报表',\n icon: 'icon-table',\n type: 'report',\n },\n {\n name: '折线图',\n icon: 'icon-linechart',\n type: 'line',\n },\n {\n name: '条形图',\n icon: 'icon-align-left',\n type: 'rowBar',\n },\n {\n name: '柱状图',\n icon: 'icon-barchart',\n type: 'bar',\n },\n {\n name: '饼状图',\n icon: 'icon-piechart',\n type: 'pie',\n },\n {\n name: '散点图',\n icon: 'icon-chart-bubble',\n type: 'scatter',\n },\n {\n name: '雷达图',\n icon: 'icon-radarchart',\n type: 'radar',\n },\n {\n name: '矩形树图',\n icon: 'icon-s-grid',\n type: 'treemap',\n },\n {\n name: '色块',\n icon: 'icon-books',\n type: 'label',\n },\n]);\n\nexport const ItemTypes = computed(() => {\n return TypeItems.value.map((item) => item.type);\n});\n\nconst colors = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272'];\n\nexport const renderItem = (params, api) => {\n const dataIndex = params.dataIndex;\n const value = api.value();\n let name = api.value(1);\n if (Array.isArray(name)) {\n name = name.map((str) => String.fromCharCode(str)).join('');\n }\n const containerWidth = api.getWidth(); // 获取容器宽度\n const containerHeight = api.getHeight();\n // 从调色盘获取颜色(自动循环)\n const color = colors[dataIndex % 6];\n\n // 动态计算宽度(考虑间距)\n const itemCount = params.dataInsideLength; // 获取数据总数\n let spacing = containerWidth * 0.01;\n if (spacing < 10) {\n spacing = 10;\n }\n if (spacing > 15) {\n spacing = 15;\n }\n let rectHeight = containerHeight * 0.5;\n if (rectHeight < 60) {\n rectHeight = 60;\n }\n const rectWidth = (containerWidth - spacing * 2 - spacing * (itemCount - 1)) / itemCount;\n\n // 调整其他参数\n const borderRadius = 8;\n\n // 位置计算\n const xPos = spacing + dataIndex * (rectWidth + spacing);\n const yPos = (api.getHeight() - rectHeight) / 2;\n\n return {\n type: 'group',\n children: [\n {\n type: 'rect',\n shape: {\n x: xPos,\n y: yPos,\n width: rectWidth,\n height: rectHeight,\n r: borderRadius,\n },\n style: {\n fill: color,\n stroke: '#fff',\n lineWidth: 1,\n shadowBlur: 4,\n shadowColor: 'rgba(0,0,0,0.1)',\n },\n },\n {\n type: 'text',\n style: {\n text: `${name}\\n\\n${value}`,\n fill: '#fff', // 自动反色可改为:echarts.color.lift(color, 0.8)\n fontSize: 14,\n fontWeight: 'bold',\n align: 'center',\n verticalAlign: 'middle',\n },\n position: [xPos + rectWidth / 2, yPos + rectHeight / 2],\n },\n ],\n };\n};\n\nexport const chartsOption = {\n line: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Line',\n },\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n name: '天',\n type: 'category',\n boundaryGap: false,\n data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],\n },\n yAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Email',\n type: 'line',\n stack: 'Total',\n data: [120, 132, 101, 134, 90, 230, 210],\n },\n {\n name: 'Union',\n type: 'line',\n stack: 'Total',\n data: [220, 182, 191, 234, 290, 330, 310],\n },\n {\n name: 'Video',\n type: 'line',\n stack: 'Total',\n data: [150, 232, 201, 154, 190, 330, 410],\n },\n ],\n },\n rowBar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Bar',\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow',\n },\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n yAxis: {\n name: '天',\n type: 'category',\n axisTick: {\n alignWithLabel: true,\n },\n data: ['2012', '2013', '2014', '2015', '2016'],\n },\n xAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Forest',\n type: 'bar',\n barGap: 0,\n emphasis: {\n focus: 'series',\n },\n data: [320, 332, 301, 334, 390],\n },\n {\n name: 'Steppe',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [220, 182, 191, 234, 290],\n },\n {\n name: 'Desert',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [150, 232, 201, 154, 190],\n },\n ],\n },\n bar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Bar',\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow',\n },\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n name: '天',\n type: 'category',\n axisTick: {\n alignWithLabel: true,\n },\n data: ['2012', '2013', '2014', '2015', '2016'],\n },\n yAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Forest',\n type: 'bar',\n barGap: 0,\n emphasis: {\n focus: 'series',\n },\n data: [320, 332, 301, 334, 390],\n },\n {\n name: 'Steppe',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [220, 182, 191, 234, 290],\n },\n {\n name: 'Desert',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [150, 232, 201, 154, 190],\n },\n ],\n },\n pie: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Pie',\n },\n tooltip: {\n trigger: 'item',\n },\n legend: {\n top: '8%',\n },\n xAxis: {\n show: false,\n },\n yAxis: {\n show: false,\n },\n series: [\n {\n name: 'Access From',\n type: 'pie',\n radius: '50%',\n top: '10%',\n data: [\n {value: 1048, name: 'Search'},\n {value: 735, name: 'Direct'},\n {value: 580, name: 'Email'},\n {value: 484, name: 'Union'},\n {value: 300, name: 'Video'},\n ],\n labelLine: {\n show: true,\n },\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)',\n },\n },\n },\n ],\n },\n scatter: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Scatter',\n },\n tooltip: {},\n legend: {\n top: '8%',\n data: ['1990', '2015'],\n },\n grid: {\n left: '5%',\n right: '5%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n splitLine: {\n lineStyle: {\n type: 'dashed',\n },\n },\n },\n yAxis: {\n splitLine: {\n lineStyle: {\n type: 'dashed',\n },\n },\n scale: true,\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: '1990',\n data: [\n [1516, 68],\n [13670, 74.7],\n [28599, 75],\n [29476, 77.1],\n [31476, 75.4],\n [28666, 78.1],\n [1777, 57.7],\n [29550, 79.1],\n [2076, 67.9],\n [12087, 72],\n [24021, 75.4],\n [43296, 76.8],\n [10088, 70.8],\n [19349, 69.6],\n [10670, 67.3],\n [26424, 75.7],\n [37062, 75.4],\n ],\n type: 'scatter',\n symbolSize: 20,\n emphasis: {\n focus: 'series',\n label: {\n show: true,\n position: 'top',\n },\n },\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.2)',\n shadowOffsetY: 5,\n },\n },\n {\n name: '2015',\n data: [\n [13334, 76.9],\n [21291, 78.5],\n [38923, 80.8],\n [37599, 81.9],\n [44053, 81.1],\n [42182, 82.8],\n [5903, 66.8],\n [36162, 83.5],\n [1390, 71.4],\n [34644, 80.7],\n [34186, 80.6],\n [64304, 81.6],\n [24787, 77.3],\n [23038, 73.13],\n [19360, 76.5],\n [38225, 81.4],\n [53354, 79.1],\n ],\n type: 'scatter',\n symbolSize: 20,\n emphasis: {\n focus: 'series',\n label: {\n show: true,\n position: 'top',\n },\n },\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.2)',\n shadowOffsetY: 5,\n },\n },\n ],\n },\n radar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Radar',\n },\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n top: '8%',\n data: ['Budget', 'Spending'],\n },\n radar: {\n indicator: [{name: 'Sales'}, {name: 'Administration'}, {name: 'Technology'}, {name: 'Customer'}, {name: 'Development'}, {name: 'Marketing'}],\n radius: 80,\n },\n series: [\n {\n name: 'Radar',\n type: 'radar',\n tooltip: {\n trigger: 'item',\n },\n areaStyle: {},\n data: [\n {\n value: [4200, 3000, 20000, 35000, 50000, 18000],\n name: 'Budget',\n },\n {\n value: [5000, 14000, 28000, 26000, 42000, 21000],\n name: 'Spending',\n },\n ],\n },\n ],\n },\n treemap: {\n backgroundColor: '#fff',\n title: {\n show: false,\n },\n legend: {\n show: false,\n },\n grid: {\n left: '0px',\n right: '0px',\n top: '0px',\n bottom: '0px',\n },\n series: [\n {\n type: 'treemap',\n label: {\n fontSize: 50,\n },\n width: '100%',\n height: '100%',\n breadcrumb: {\n show: false,\n },\n data: [\n {\n name: '标签',\n value: 20,\n },\n ],\n symbol: 'none',\n areaStyle: null,\n },\n ],\n },\n label: {\n data: {\n source: [],\n },\n width: 600,\n widthUnit: 'px',\n height: 400,\n heightUnit: 'px',\n notSingle: true,\n keyIds: [],\n dataIds: [],\n groupBy: false,\n ourderBy: 'NONE',\n cutLength: 3,\n singleComputed: 'SUM',\n singleCOlor: '',\n singleKey: '',\n singleData: [],\n },\n};\n\nexport const defaultChart: ChartOption = {\n type: 'line',\n data: {\n source: [],\n },\n toolTipData: '',\n xAisData: '',\n yAisData: '',\n name: '',\n icon: '',\n id: '',\n left: 0,\n top: 0,\n smooth: false,\n symbol: '',\n showLabel: false,\n areaStyle: '',\n labelColor: '',\n labelPosition: '',\n radius: false,\n widthUnit: 'px',\n width: 600,\n heightUnit: 'px',\n height: 400,\n isSuspend: false,\n zIndex: 0,\n option: undefined,\n seriesData: '',\n groupBy: false,\n orderBy: 'NONE',\n cutLength: 5,\n};\n\nexport const defaultReport: StatementOption = {\n id: '',\n type: 'report',\n tableConfig: [\n {\n config: [],\n rowConfig: [],\n colConfig: [],\n },\n ],\n widthType: 'px',\n width: 600,\n fullHeight: false,\n height: 400,\n seriesEnable: true,\n seriesHeadText: '#',\n exportMethod: 'download',\n params: [],\n theme: 'blue',\n data: {\n source: [],\n pagination: true,\n pageSize: 10,\n pageSizes: '10,20,50,100',\n searchOnBlur: false,\n autoQuery: true,\n processData: '',\n staticData: undefined,\n },\n};\n\nexport const setXAxisData = (selectedChart, sourceData) => {\n let {option: chartConfigForm} = selectedChart;\n let {xDataId: value} = chartConfigForm;\n let localData, xKey;\n if (value === undefined) {\n console.error('请设置 X 轴数据');\n return false;\n }\n if (value.length === 3) {\n if (sourceData && sourceData[value[0]]) {\n localData = sourceData[value[0]][value[1]];\n }\n xKey = value[2];\n } else {\n localData = sourceData[value[0]];\n xKey = value[1];\n }\n if (!localData) {\n return chartConfigForm;\n }\n let data: any[] = [];\n if (selectedChart.groupBy) {\n let dataSet = new Set();\n localData.forEach((item) => {\n dataSet.add(item[xKey]);\n });\n data = [...dataSet];\n } else {\n data = localData.map((item) => item[xKey]);\n }\n if (selectedChart.type == 'rowBar') {\n chartConfigForm.yAxis.data = data;\n } else if (['line', 'bar'].includes(selectedChart.type)) {\n chartConfigForm.xAxis.data = data;\n } else if (selectedChart.type == 'radar') {\n chartConfigForm.radar.indicator = data;\n }\n return chartConfigForm;\n};\n\nexport const setYAxisData = (selectedChart, sourceData) => {\n let {option: chartConfigForm} = selectedChart;\n let {yDataId: value} = chartConfigForm;\n if (value === undefined) {\n console.error('请设置 Y 轴数据');\n return false;\n }\n let xData: any[] = [],\n xKey = '';\n if (chartConfigForm.xDataId) {\n if (chartConfigForm.xDataId.length === 3) {\n if (sourceData && sourceData[chartConfigForm.xDataId[0]]) {\n xData = sourceData[chartConfigForm.xDataId[0]][chartConfigForm.xDataId[1]];\n }\n xKey = chartConfigForm.xDataId[2];\n } else {\n xData = sourceData[chartConfigForm.xDataId[0]];\n xKey = chartConfigForm.xDataId[1];\n }\n }\n if (xData) {\n if (selectedChart.groupBy) {\n let dataSet = new Set();\n xData.forEach((item) => {\n dataSet.add(item[xKey]);\n });\n xData = [...dataSet];\n } else {\n xData = xData.map((item) => item[xKey]);\n }\n }\n\n if (selectedChart.type == 'radar') {\n chartConfigForm.series[0].data = [];\n for (let item of value) {\n let yData, yKey;\n if (item.length === 3) {\n if (sourceData[item[0]]) {\n yData = sourceData[item[0]][item[1]];\n }\n yKey = item[2];\n } else {\n yData = sourceData[item[0]];\n yKey = item[1];\n }\n let data: any[] = [];\n if (selectedChart.groupBy && xData) {\n let dataObj: any = {};\n yData.forEach((el) => {\n let xVal = el[xKey];\n let yVal = el[yKey];\n yVal = parseFloat(yVal);\n yVal = isNaN(yVal) ? 0 : yVal;\n if (xVal && !isNaN(yVal)) {\n if (!dataObj[xVal]) {\n dataObj[xVal] = 0;\n }\n dataObj[xVal] += yVal;\n }\n });\n data = xData.map((xVal) => {\n return dataObj[xVal];\n });\n } else {\n data = yData.map((el) => el[yKey]);\n }\n if (selectedChart.orderBy && selectedChart.orderBy !== 'NONE') {\n data = data.sort((a, b) => {\n if (selectedChart.orderBy === 'ASC') {\n return a - b;\n } else {\n return b - a;\n }\n });\n\n if (!isNaN(selectedChart.cutLength) && selectedChart.cutLength > 0) {\n data = data.slice(0, selectedChart.cutLength);\n }\n }\n chartConfigForm.series[0].data.push({\n value: data,\n });\n }\n } else if (selectedChart.type == 'treemap') {\n if (value && value.length) {\n let [id, key] = value[0];\n if (sourceData[id][0]) {\n let val = sourceData[id][0][key];\n if (val) {\n let name = chartConfigForm.series[0].data[0]['name'].split(':')[0];\n chartConfigForm.series[0].data[0]['name'] = `${name}:${val}`;\n }\n }\n }\n } else {\n let serieCopy = cloneDeep(chartConfigForm.series);\n if (value.length) {\n chartConfigForm.series = [];\n }\n for (let i = 0; i < value.length; i++) {\n let item = value[i];\n let yData, yKey;\n if (item.length === 3) {\n if (sourceData[item[0]]) {\n yData = sourceData[item[0]][item[1]];\n }\n yKey = item[2];\n } else {\n yData = sourceData[item[0]];\n yKey = item[1];\n }\n let serie = cloneDeep(serieCopy[i]);\n if (!serie) {\n // 指标数超出已有系列时循环复用最靠近的系列模板(与设计态勾选行为一致)\n serie = cloneDeep(serieCopy[i % serieCopy.length]);\n }\n serie.data = [];\n let data: any[] = [];\n if (yData && xKey && xData) {\n switch (selectedChart.type) {\n case 'line':\n case 'rowBar':\n case 'bar':\n if (selectedChart.groupBy) {\n let dataObj: any = {};\n yData.forEach((el) => {\n let xVal = el[xKey];\n let yVal = el[yKey];\n yVal = parseFloat(yVal);\n yVal = isNaN(yVal) ? 0 : yVal;\n if (xVal && !isNaN(yVal)) {\n if (!dataObj[xVal]) {\n dataObj[xVal] = 0;\n }\n dataObj[xVal] += yVal;\n }\n });\n data = xData.map((xVal) => {\n return dataObj[xVal];\n });\n } else {\n data = yData.map((el) => el[yKey]);\n }\n if (selectedChart.orderBy && selectedChart.orderBy !== 'NONE') {\n data = data.sort((a, b) => {\n if (selectedChart.orderBy === 'ASC') {\n return a - b;\n } else {\n return b - a;\n }\n });\n\n if (!isNaN(selectedChart.cutLength) && selectedChart.cutLength > 0) {\n data = data.slice(0, selectedChart.cutLength);\n }\n }\n break;\n case 'pie':\n if (selectedChart.groupBy) {\n let dataObj: any = {};\n yData.forEach((el) => {\n let xVal = el[xKey];\n let yVal = el[yKey];\n yVal = parseFloat(yVal);\n yVal = isNaN(yVal) ? 0 : yVal;\n if (xVal && !isNaN(yVal)) {\n if (!dataObj[xVal]) {\n dataObj[xVal] = 0;\n }\n dataObj[xVal] += yVal;\n }\n });\n data = xData.map((xVal) => {\n return {value: dataObj[xVal], name: xVal};\n });\n } else {\n data = yData.map((el) => {\n return {value: el[yKey], name: el[xKey]};\n });\n }\n if (selectedChart.orderBy && selectedChart.orderBy !== 'NONE') {\n data = data.sort((a, b) => {\n if (selectedChart.orderBy === 'ASC') {\n return a - b;\n } else {\n return b - a;\n }\n });\n\n if (!isNaN(selectedChart.cutLength) && selectedChart.cutLength > 0) {\n data = data.slice(0, selectedChart.cutLength);\n }\n }\n break;\n case 'scatter':\n if (selectedChart.groupBy) {\n let dataObj: any = {};\n yData.forEach((el) => {\n let xVal = el[xKey];\n let yVal = el[yKey];\n yVal = parseFloat(yVal);\n yVal = isNaN(yVal) ? 0 : yVal;\n if (xVal && !isNaN(yVal)) {\n if (!dataObj[xVal]) {\n dataObj[xVal] = 0;\n }\n dataObj[xVal] += yVal;\n }\n });\n data = xData.map((xVal) => {\n return [xVal, dataObj[xVal]];\n });\n } else {\n data = yData.map((el) => {\n return [el[xKey], el[yKey]];\n });\n }\n if (selectedChart.orderBy && selectedChart.orderBy !== 'NONE') {\n data = data.sort((a, b) => {\n if (selectedChart.orderBy === 'ASC') {\n return a - b;\n } else {\n return b - a;\n }\n });\n\n if (!isNaN(selectedChart.cutLength) && selectedChart.cutLength > 0) {\n data = data.slice(0, selectedChart.cutLength);\n }\n }\n break;\n case 'label':\n if (selectedChart.groupBy) {\n let dataObj: any = {};\n yData.forEach((el) => {\n let xVal = el[xKey];\n let yVal = el[yKey];\n yVal = parseFloat(yVal);\n yVal = isNaN(yVal) ? 0 : yVal;\n if (xVal && !isNaN(yVal)) {\n if (!dataObj[xVal]) {\n dataObj[xVal] = 0;\n }\n dataObj[xVal] += yVal;\n }\n });\n data = xData.map((xVal) => {\n const codes = xVal ? xVal.split('').map((str) => str.charCodeAt()) : [];\n return [dataObj[xVal], codes];\n });\n } else {\n data = yData.map((el) => {\n const codes = el[xKey] ? el[xKey].split('').map((str) => str.charCodeAt()) : [];\n\n return [el[yKey], codes];\n });\n }\n if (selectedChart.orderBy && selectedChart.orderBy !== 'NONE') {\n data = data.sort((a, b) => {\n if (selectedChart.orderBy === 'ASC') {\n return a - b;\n } else {\n return b - a;\n }\n });\n\n if (!isNaN(selectedChart.cutLength) && selectedChart.cutLength > 0) {\n data = data.slice(0, selectedChart.cutLength);\n }\n }\n serie.renderItem = renderItem;\n break;\n }\n serie.data = data;\n }\n chartConfigForm.series.push(serie);\n }\n }\n return chartConfigForm;\n};\n\nexport function getReportDefaultOption(type) {\n if (type === 'report') {\n return validateAndCompleteStatementOption(defaultReport);\n } else {\n let option = cloneDeep(defaultChart);\n option.id = `${type}-${Date.now()}`;\n option.type = type;\n option.option = chartsOption[type];\n return option;\n }\n}\nexport default TypeItems;\n","// @ts-ignore\nimport http from '@/libs/api.request';\nimport {Options, Statement} from 'yh-report/types';\nimport {ItemTypes} from 'yh-report/libs/chartReportDefaultOption';\nimport {ElMessage} from 'element-plus';\nimport {useRouter} from 'vue-router';\n\n/** 获取报表列表数据 */\nexport function getList(listForm): Promise<any> {\n // @ts-ignore\n return http.request({\n url: 'sysReport/list',\n method: 'POST',\n type: 'form',\n data: {\n active: 'Y',\n ...listForm,\n },\n });\n}\n\nexport interface ConfigStatement extends Statement {\n remoteOptions: Options[];\n printConfig?: any;\n}\n\n/** 获取报表数据 */\nexport function getConfig(id): Promise<ConfigStatement> {\n // @ts-ignore\n return http\n .request({\n url: 'sysReport/config',\n method: 'POST',\n params: {\n id,\n },\n })\n .then((res) => {\n if (res.data) {\n let info = JSON.parse(res.data.info);\n let {id, name, code, description, config, chartConfig} = info;\n let remoteOptions: any[] = [];\n let remotePrintConfig: any = undefined;\n if (config) {\n config = JSON.parse(config);\n if (Array.isArray(config)) {\n if (config.length && config[0].type === 'tableSheet') {\n ElMessage.error('当前报表版本不支持老版本数据,如须使用老数据请不要升级本版');\n const router = useRouter();\n router.back();\n throw new Error('当前报表版本不支持老版本数据,如须使用老数据请不要升级本版');\n } else {\n config = config.map((item) => {\n if (!ItemTypes.value.includes(item.type)) {\n item.type = 'report';\n }\n return item;\n });\n remoteOptions = remoteOptions.concat(config);\n }\n } else if (config && typeof config === 'object' && Array.isArray(config.options)) {\n let optionsArr = config.options;\n if (optionsArr.length && optionsArr[0].type === 'tableSheet') {\n ElMessage.error('当前报表版本不支持老版本数据,如须使用老数据请不要升级本版');\n const router = useRouter();\n router.back();\n throw new Error('当前报表版本不支持老版本数据,如须使用老数据请不要升级本版');\n } else {\n optionsArr = optionsArr.map((item) => {\n if (!ItemTypes.value.includes(item.type)) {\n item.type = 'report';\n }\n return item;\n });\n remoteOptions = remoteOptions.concat(optionsArr);\n }\n remotePrintConfig = config.printConfig;\n }\n }\n if (chartConfig) {\n chartConfig = JSON.parse(chartConfig);\n if (Array.isArray(chartConfig)) {\n // 旧用法:chartConfig 存图表配置数组\n chartConfig.forEach((config) => {\n if (!config.data) {\n config.data = {source: []};\n }\n });\n remoteOptions = remoteOptions.concat(chartConfig);\n } else if (chartConfig && typeof chartConfig === 'object') {\n // 新用法:chartConfig 存打印配置 printConfig\n remotePrintConfig = chartConfig;\n }\n }\n\n return Promise.resolve({\n id,\n name,\n code,\n description,\n remoteOptions,\n printConfig: remotePrintConfig,\n });\n } else {\n return Promise.reject('获取报表数据异常');\n }\n });\n}\n\n/** 保存报表数据 */\nexport function save(form) {\n return http.request({\n url: 'sysReport/save',\n method: 'POST',\n type: 'json',\n data: form,\n });\n}\n\n/** 保存报表数据 */\nexport function del(id) {\n return http.request({\n url: 'sysReport/delete',\n method: 'POST',\n type: 'form',\n data: {id},\n });\n}","import {Cell, DataColumns, Head, StatementDataSource} from 'yh-report/types';\n\n/**\n * 复制文本\n * @param {string} str 要复制的文本\n * @returns {Promise<void>}\n */\nexport function copyString(str) {\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard.writeText(str);\n return Promise.resolve();\n } else {\n let textArea = document.createElement('textarea');\n textArea.value = str;\n textArea.style.position = 'absolute';\n textArea.style.opacity = '0';\n textArea.style.left = '-200%';\n textArea.style.top = '-200%';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n let flag = document.execCommand('copy');\n textArea.remove();\n if (flag) {\n return Promise.resolve();\n } else {\n return Promise.reject(new Error('copy error'));\n }\n }\n}\n\nexport function isColorLight(color) {\n let rgb;\n if (color.startsWith('#')) {\n color = color.slice(1).toUpperCase();\n\n if (color.length === 3) {\n color = color\n .split('')\n .map((char) => char + char)\n .join('');\n }\n rgb = color.match(/.{2}/g).map((hex) => parseInt(hex, 16));\n } else if (color.startsWith('rgb(')) {\n const rgbMatch = color.match(/\\d+/g);\n rgb = rgbMatch.map((num) => parseInt(num, 10));\n } else {\n console.error('Invalid color format');\n return false;\n }\n const luminance = (0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]) / 255;\n return luminance > 0.5;\n}\n\nexport function getEnumOptions<T extends Record<string, any>>(enumObj: T, filters: string[] = []) {\n return Object.keys(enumObj)\n .filter((key) => !filters.includes(enumObj[key as keyof T]))\n .map((key) => ({\n value: enumObj[key as keyof T],\n label: key,\n }));\n}\n\nexport interface GroupSortOptions {\n order?: 'asc' | 'desc'; // 默认 asc\n numeric?: boolean; // 默认 false(localeCompare 字符串比较);true 用 parseFloat 数值比较\n locale?: string; // 默认 'zh-CN'\n}\n\n/**\n * 从接口异常中提取可读的错误信息\n * 兼容多种错误形态:字符串、Error 实例、http/axios 风格响应对象\n */\nexport function getErrorMessage(error: any): string {\n if (!error) return '未知错误';\n if (typeof error === 'string') return error;\n const msg =\n error.msg ||\n error.data?.msg ||\n error.data?.message ||\n error.response?.data?.msg ||\n error.response?.data?.message ||\n error.response?.data?.error;\n if (typeof msg === 'string' && msg) return msg;\n if (error instanceof Error) return error.message || '未知错误';\n if (typeof error.message === 'string' && error.message) return error.message;\n try {\n return JSON.stringify(error);\n } catch {\n return '未知错误';\n }\n}\n\n/**\n * 创建分组值排序比较器(Unicode / 数字 + asc/desc)\n * @param options.order 排序方向,默认 asc\n * @param options.numeric 是否按数字大小排序,默认 false(localeCompare 字符串比较);true 用 parseFloat 数值比较\n * @param options.locale 字符串比较所用 locale,默认 'zh-CN'\n * @returns 比较函数\n */\nexport function createGroupSortComparator(options: GroupSortOptions = {}) {\n const {order = 'asc', numeric = false, locale = 'zh-CN'} = options;\n return (a: any, b: any): number => {\n let compare: number;\n if (numeric) {\n const na = parseFloat(a);\n const nb = parseFloat(b);\n // NaN 视为 +Infinity 排到末尾,保证排序稳定\n const va = isNaN(na) ? Number.POSITIVE_INFINITY : na;\n const vb = isNaN(nb) ? Number.POSITIVE_INFINITY : nb;\n compare = va - vb;\n } else {\n compare = String(a).localeCompare(String(b), locale);\n }\n return order === 'desc' ? -compare : compare;\n };\n}\n\n/**\n * 循环场景字段列表:当前格所在行/列头绑定了循环数据源(loop + data),或存在循环表格数据源(loopTable)。\n * 渲染时当前条数据已铺平(行循环裂变 rowData / 循环表格 oneData 顶层),${} 直接写字段名即可,\n * 无需 数据源地址.下标 前缀。返回 null 表示非循环场景(走对象化路径提示)。\n */\nexport function getLoopSourceColumns(\n table: {rowConfig?: Head[]; colConfig?: Head[]} | undefined | null,\n cell: Pick<Cell, 'row' | 'col'> | null | undefined,\n sources: StatementDataSource[]\n): DataColumns[] | null {\n if (table && cell) {\n const rowHead = table.rowConfig?.[cell.row];\n if (rowHead?.loop && rowHead.data) {\n const source = sources.find(s => s.key === rowHead.data);\n if (source?.columns?.length) return source.columns;\n }\n const colHead = table.colConfig?.[cell.col];\n if (colHead?.loop && colHead.data) {\n const source = sources.find(s => s.key === colHead.data);\n if (source?.columns?.length) return source.columns;\n }\n }\n const loopTableSource = sources.find(s => s.loopTable);\n return loopTableSource?.columns?.length ? loopTableSource.columns : null;\n}\n","export default ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];\n\nexport const themeColors = {\n none: '#333333', // 边框色\n none0: '#ffffff', // 偶数行背景\n none1: '#ffffff', // 奇数行背景\n\n gray: '#cccccc', // 边框色\n gray0: '#F1F1F1', // 偶数行背景\n gray1: '#F9F9F9', // 奇数行背景\n\n green: '#47e96cff', // 主色调(翠绿)\n green0: '#f2f9f5', // 浅绿背景\n green1: '#e6f5ec', // 柔和绿背景\n\n blue: '#5ea6f3ff', // 宝蓝\n blue0: '#f1f9ff', // 浅蓝背景\n blue1: '#e3f2fd', // 冰蓝背景\n\n dark: '#696a6bff', // 玄色\n dark0: '#f8f9fa', // 浅灰背景\n dark1: '#e9ecef', // 中性灰背景\n\n red: '#fc5061ff', // 朱红\n red0: '#fcf0f1', // 浅粉背景\n red1: '#f8d7da', // 桃红背景\n};\n\nexport function isLightColor(hexColor) {\n // 去除 # 并解析 RGB\n const hex = hexColor.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16) / 255;\n const g = parseInt(hex.substring(2, 4), 16) / 255;\n const b = parseInt(hex.substring(4, 6), 16) / 255;\n\n // 计算相对亮度(W3C 标准)\n const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;\n return luminance > 0.179 ? 'light' : 'dark'; // 阈值 0.179\n}\n\nexport function darkenColor(hexColor, amount) {\n let hex = hexColor.replace('#', '');\n if (hex.length === 3) hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; // 处理缩写如 #FFF\n\n let r: number | string = Math.max(0, parseInt(hex.substring(0, 2), 16) - amount);\n let g: number | string = Math.max(0, parseInt(hex.substring(2, 4), 16) - amount);\n let b: number | string = Math.max(0, parseInt(hex.substring(4, 6), 16) - amount);\n\n r = r.toString(16).padStart(2, '0');\n g = g.toString(16).padStart(2, '0');\n b = b.toString(16).padStart(2, '0');\n\n return `#${r}${g}${b}`;\n}\n\nexport function lightenColor(hexColor, amount) {\n let hex = hexColor.replace('#', '');\n if (hex.length === 3) hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n\n let r: number | string = Math.min(255, parseInt(hex.substring(0, 2), 16) + amount);\n let g: number | string = Math.min(255, parseInt(hex.substring(2, 4), 16) + amount);\n let b: number | string = Math.min(255, parseInt(hex.substring(4, 6), 16) + amount);\n\n r = r.toString(16).padStart(2, '0');\n g = g.toString(16).padStart(2, '0');\n b = b.toString(16).padStart(2, '0');\n\n return `#${r}${g}${b}`;\n}\n\nexport function changeColor(hexColor, amount) {\n if (isLightColor(hexColor) === 'light') {\n return darkenColor(hexColor, amount);\n } else {\n return lightenColor(hexColor, amount);\n }\n}\n\n/**\n *{\n border: '#cccccc',\n background: '#F1F1F1',\n evenBackground: '#F9F9F9',\n fixedBackground: '#C8C8C8',\n fixedEvenBackground: '#EAEAEA',\n hoverBackground: '#D1D1D1',\n }\n */\nexport function getThemeColors(theme = 'none') {\n return {\n border: themeColors[theme],\n background: themeColors[`${theme}0`],\n evenBackground: themeColors[`${theme}1`],\n fixedBackground: changeColor(themeColors[`${theme}0`], 20),\n fixedEvenBackground: changeColor(themeColors[`${theme}1`], 20),\n hoverBackground: changeColor(themeColors[`${theme}1`], 20),\n activeColor: changeColor(themeColors[`${theme}1`], 50),\n };\n}\n","import type { BorderStyle, BorderEdge, BorderConfig, BorderMode, BorderOperation, Cell } from 'yh-report/types';\n\n/**\n * 边框样式到 CSS 的映射\n */\nexport const borderStyleToCss: Record<BorderStyle, string> = {\n none: 'none',\n thin: '1px solid',\n medium: '2px solid',\n thick: '3px solid',\n dotted: '1px dotted',\n dashed: '1px dashed',\n double: '3px double',\n hair: '0.5px solid',\n dashDot: '1px dashed', // CSS不支持,使用虚线近似\n dashDotDot: '1px dashed',\n slantDashDot: '1px dashed',\n mediumDashed: '2px dashed',\n mediumDashDot: '2px dashed',\n mediumDashDotDot: '2px dashed',\n};\n\n/**\n * 获取边框 CSS 样式\n * @param borderEdge 边框配置\n * @param defaultColor 默认颜色(缺省时使用,如主题色)\n * @returns CSS 样式字符串\n */\nexport function getBorderCss(borderEdge?: BorderEdge, defaultColor?: string): string {\n if (!borderEdge || !borderEdge.style || borderEdge.style === 'none') {\n return 'none';\n }\n const style = borderStyleToCss[borderEdge.style];\n // 边框颜色可为空,缺省时使用默认颜色(如主题色)\n const color = borderEdge.color || defaultColor || '#333333';\n return `${style} ${color}`;\n}\n\n/**\n * 兼容处理:将 boolean 转换为 BorderConfig\n * @param border 边框配置(可能是 boolean 或 BorderConfig)\n * @returns 标准化后的 BorderConfig\n */\nexport function normalizeBorder(border: BorderConfig | boolean | undefined): BorderConfig | undefined {\n if (typeof border === 'boolean') {\n return border\n ? {\n top: { style: 'thin' },\n right: { style: 'thin' },\n bottom: { style: 'thin' },\n left: { style: 'thin' }\n }\n : {\n top: { style: 'none' },\n right: { style: 'none' },\n bottom: { style: 'none' },\n left: { style: 'none' }\n };\n }\n return border;\n}\n\n/**\n * 获取边框样式的中文标签\n * @param style 边框样式\n * @returns 中文标签\n */\nexport function getBorderStyleLabel(style: BorderStyle): string {\n const labels: Record<BorderStyle, string> = {\n none: '无边框',\n thin: '细边框',\n medium: '中等边框',\n thick: '粗边框',\n dotted: '点状',\n dashed: '虚线',\n double: '双线',\n hair: '极细边框',\n dashDot: '点划线',\n dashDotDot: '双点划线',\n slantDashDot: '斜点划线',\n mediumDashed: '中等虚线',\n mediumDashDot: '中等点划线',\n mediumDashDotDot: '中等双点划线',\n };\n return labels[style] || style;\n}\n\n/**\n * 常用边框样式列表(用于快速选择)\n */\nexport const quickBorderStyles: Array<{ value: BorderStyle; label: string }> = [\n { value: 'none', label: '无边框' },\n { value: 'thin', label: '细边框' },\n { value: 'medium', label: '中等边框' },\n { value: 'thick', label: '粗边框' },\n { value: 'dashed', label: '虚线' },\n { value: 'dotted', label: '点线' },\n { value: 'double', label: '双线' },\n];\n\n/**\n * 所有边框样式列表(用于详细设置)\n */\nexport const allBorderStyles: Array<{ value: BorderStyle; label: string }> = [\n { value: 'none', label: '无边框' },\n { value: 'hair', label: '极细边框' },\n { value: 'thin', label: '细边框' },\n { value: 'medium', label: '中等边框' },\n { value: 'thick', label: '粗边框' },\n { value: 'dotted', label: '点状' },\n { value: 'dashed', label: '虚线' },\n { value: 'double', label: '双线' },\n { value: 'dashDot', label: '点划线' },\n { value: 'dashDotDot', label: '双点划线' },\n { value: 'slantDashDot', label: '斜点划线' },\n { value: 'mediumDashed', label: '中等虚线' },\n { value: 'mediumDashDot', label: '中等点划线' },\n { value: 'mediumDashDotDot', label: '中等双点划线' },\n];\n\n/** 带行列坐标的对象(选区单元格) */\ninterface CellCoord {\n row: number;\n col: number;\n}\n\n/** 边的方位 */\ntype BorderSide = 'top' | 'right' | 'bottom' | 'left';\n\n/**\n * 根据单元格在选区中的位置和模式,计算应设置的边\n */\nfunction getSidesForMode(\n cell: CellCoord,\n minRow: number, maxRow: number,\n minCol: number, maxCol: number,\n mode: BorderMode\n): BorderSide[] {\n const isTopEdge = cell.row === minRow;\n const isBottomEdge = cell.row === maxRow;\n const isLeftEdge = cell.col === minCol;\n const isRightEdge = cell.col === maxCol;\n\n switch (mode) {\n case 'none':\n return [];\n case 'all':\n return ['top', 'right', 'bottom', 'left'];\n case 'outside':\n return [\n ...(isTopEdge ? ['top'] : []),\n ...(isRightEdge ? ['right'] : []),\n ...(isBottomEdge ? ['bottom'] : []),\n ...(isLeftEdge ? ['left'] : []),\n ];\n case 'inside':\n return [\n ...(!isTopEdge ? ['top'] : []),\n ...(!isRightEdge ? ['right'] : []),\n ...(!isBottomEdge ? ['bottom'] : []),\n ...(!isLeftEdge ? ['left'] : []),\n ];\n case 'top':\n return isTopEdge ? ['top'] : [];\n case 'bottom':\n return isBottomEdge ? ['bottom'] : [];\n case 'left':\n return isLeftEdge ? ['left'] : [];\n case 'right':\n return isRightEdge ? ['right'] : [];\n default:\n return [];\n }\n}\n\n/**\n * 克隆边框配置:boolean 归一化后浅克隆四边,未设置的边保持 undefined\n * 用于「只改一条边、其余边原样保留」的安全写入(避免误把邻居其它边压成 none)\n */\nfunction cloneBorder(border: BorderConfig | boolean | undefined): BorderConfig {\n const b = normalizeBorder(border) || {};\n return {\n top: b.top ? { ...b.top } : undefined,\n right: b.right ? { ...b.right } : undefined,\n bottom: b.bottom ? { ...b.bottom } : undefined,\n left: b.left ? { ...b.left } : undefined,\n };\n}\n\n/**\n * 给定单元格的某条边,返回其紧邻单元格的坐标与对应「共享边」\n * 如 (cell, 'top') → 上一行同列格的 'bottom'\n * 表格 border-collapse:collapse 下,相邻两格的共享边视觉重叠为一条线,\n * 必须两侧一致才能让该线稳定显示/彻底消失\n */\nfunction getNeighborSide(\n cell: CellCoord,\n side: BorderSide\n): { row: number; col: number; side: BorderSide } | null {\n switch (side) {\n case 'top': return { row: cell.row - 1, col: cell.col, side: 'bottom' };\n case 'bottom': return { row: cell.row + 1, col: cell.col, side: 'top' };\n case 'left': return { row: cell.row, col: cell.col - 1, side: 'right' };\n case 'right': return { row: cell.row, col: cell.col + 1, side: 'left' };\n default: return null;\n }\n}\n\n/**\n * 应用边框操作到选区(两阶段:先计算后批量写回)\n * - 阶段一:只读计算,累积每个单元格的目标 border,不触碰响应式对象\n * - 阶段二:计算完成后批量赋值,Vue 在同一 tick 合并为一次渲染更新\n *\n * 邻居联动:表格相邻格共享边视觉重叠,设置/清除选区边界边时,\n * 同步设置/清除选区外紧邻格的对应边,避免「清除后仍显示」「设置后不稳」\n * - 设置模式:选区格被设的边,其选区外邻居的对应边设为同一 edge\n * - 清除模式:选区贴边界边,其选区外邻居的对应边清成 none\n * - 选区内部网格线由相邻选区格各自的边拼出,邻居在选区内,不联动\n *\n * @param activeCells 选中的单元格坐标集合\n * @param config 表格 config 二维数组\n * @param operation 边框操作\n */\nexport function applyBorderOperation(\n activeCells: CellCoord[],\n config: Cell[][],\n operation: BorderOperation\n): void {\n if (!activeCells || activeCells.length === 0 || !config) return;\n\n // 计算选区边界\n let minRow = Infinity, maxRow = -Infinity, minCol = Infinity, maxCol = -Infinity;\n activeCells.forEach((c) => {\n if (c.row < minRow) minRow = c.row;\n if (c.row > maxRow) maxRow = c.row;\n if (c.col < minCol) minCol = c.col;\n if (c.col > maxCol) maxCol = c.col;\n });\n\n // 选区坐标集合:邻居落在选区内时不联动(其边由自身 getSidesForMode 覆盖)\n const selectedSet = new Set(activeCells.map((c) => `${c.row},${c.col}`));\n\n // 阶段一:纯计算,以 \"row,col\" 为键累积变更(不碰响应式对象)\n const changeMap = new Map<string, { row: number; col: number; border: BorderConfig }>();\n // 未选颜色时不写入 color 键,渲染时由主题色兜底\n const edge: BorderEdge = operation.color\n ? { style: operation.style, color: operation.color }\n : { style: operation.style };\n\n /** 写入/合并一条邻居变更:克隆目标格已有 border,仅覆盖指定边,保留其余三边 */\n const upsertNeighbor = (row: number, col: number, side: BorderSide, newEdge: BorderEdge) => {\n const key = `${row},${col}`;\n let entry = changeMap.get(key);\n if (!entry) {\n entry = { row, col, border: cloneBorder(config[row]?.[col]?.style?.border) };\n changeMap.set(key, entry);\n }\n entry.border[side] = { ...newEdge };\n };\n\n const isNone = operation.mode === 'none';\n\n activeCells.forEach((c) => {\n const cell = config[c.row]?.[c.col];\n if (!cell) return;\n // 跳过合并子格(不单独存边框)\n if (cell.rowSpan === 0 || cell.colSpan === 0) return;\n\n const newBorder = cloneBorder(cell.style?.border);\n\n if (isNone) {\n // 清除选区格四边\n newBorder.top = { style: 'none' };\n newBorder.right = { style: 'none' };\n newBorder.bottom = { style: 'none' };\n newBorder.left = { style: 'none' };\n } else {\n const sides = getSidesForMode(c, minRow, maxRow, minCol, maxCol, operation.mode);\n sides.forEach((side) => {\n newBorder[side] = { ...edge };\n });\n }\n\n changeMap.set(`${c.row},${c.col}`, { row: c.row, col: c.col, border: newBorder });\n\n // 邻居联动:取该格「跨入选区外的边」\n // - 设置模式:operation.mode 算出的边(inside 的边邻居在选区内会被过滤)\n // - 清除模式:用 'outside' 取该格贴选区边界的边\n const sidesForNeighbor = isNone\n ? getSidesForMode(c, minRow, maxRow, minCol, maxCol, 'outside')\n : getSidesForMode(c, minRow, maxRow, minCol, maxCol, operation.mode);\n\n sidesForNeighbor.forEach((side) => {\n const nb = getNeighborSide(c, side);\n if (!nb) return;\n // 越界 / 邻居在选区内 / 合并子格 → 跳过\n const nbCell = config[nb.row]?.[nb.col];\n if (!nbCell) return;\n if (selectedSet.has(`${nb.row},${nb.col}`)) return;\n if (nbCell.rowSpan === 0 || nbCell.colSpan === 0) return;\n upsertNeighbor(nb.row, nb.col, nb.side, isNone ? { style: 'none' } : { ...edge });\n });\n });\n\n // 阶段二:批量写回(直接赋值,同一 tick 合并渲染)\n changeMap.forEach(({ row, col, border }) => {\n const cell = config[row]?.[col];\n if (!cell) return;\n if (!cell.style) cell.style = {};\n cell.style.border = border;\n });\n}\n","import {Cell, ExportMethod, ReportConfig, ThemeType} from 'yh-report/types';\nimport {ElLoading, ElMessage, ElMessageBox} from 'element-plus';\nimport ExcelJS from 'exceljs';\nimport {themeColors} from 'yh-report/libs/colors';\nimport {cloneDeep} from 'lodash-es';\nimport {normalizeBorder} from 'yh-report/utils/borderStyle';\n\nfunction generateNumFmt(useThousandsSeparator, decimalPlaces) {\n if (typeof decimalPlaces !== 'number' || decimalPlaces < 0 || !Number.isInteger(decimalPlaces)) {\n return '0';\n }\n\n let integerPart = useThousandsSeparator ? '#,##0' : '0';\n let decimalPart = '';\n\n if (decimalPlaces > 0) {\n decimalPart = '.' + '0'.repeat(decimalPlaces);\n }\n\n return integerPart + decimalPart;\n}\n\nfunction findMaxColTableIndex(reportConfig: ReportConfig[]) {\n let maxLenTableIndex = 0;\n let maxColLen = 0;\n reportConfig.forEach((item, index) => {\n if (index > 0) {\n if (item.colConfig.length > maxColLen) {\n maxColLen = item.colConfig.length;\n maxLenTableIndex = index;\n }\n } else {\n maxColLen = item.colConfig.length;\n }\n });\n return maxLenTableIndex;\n}\n\nfunction generateColumns(reportConfig: ReportConfig[], subReportIndex: number) {\n const maxLenTableIndex = findMaxColTableIndex(reportConfig);\n let columns, cells;\n if (maxLenTableIndex === subReportIndex) {\n const {config: sc, colConfig: scc, rowConfig: src} = cloneDeep(reportConfig[subReportIndex]);\n columns = scc;\n cells = sc[0];\n } else {\n const {config: subCells, colConfig: subColumns} = cloneDeep(reportConfig[subReportIndex]);\n const {config: maxCells, colConfig: maxColumns} = cloneDeep(reportConfig[maxLenTableIndex]);\n const subColLen = subColumns.length;\n maxColumns.splice(0, subColLen, ...subColumns);\n columns = maxColumns;\n maxCells[0].splice(0, subColLen, ...subCells[0]);\n cells = maxCells[0];\n }\n const tableColumns = columns\n .filter((item) => !item.isHidden)\n .map((col, index) => {\n const cell = cells[index];\n return {\n header: '',\n key: cell.text,\n width: col.size / 5 || 30,\n };\n });\n\n return tableColumns;\n}\n\nexport const exportExcel = async (reportConfig: ReportConfig[], name: string, theme: ThemeType = 'gray', subReportIndex: number = 0) => {\n if (subReportIndex >= reportConfig.length) {\n subReportIndex = reportConfig.length - 1;\n }\n const loading = ElLoading.service({\n lock: true,\n text: '导出报表:正在获取数据',\n background: 'rgba(255, 255, 255, 0.8)',\n });\n try {\n const workbook = new ExcelJS.Workbook();\n workbook.creator = name;\n workbook.lastModifiedBy = name;\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n const sheet = workbook.addWorksheet(name);\n\n sheet.columns = generateColumns(reportConfig, subReportIndex);\n\n writeReportConfigsToSheet(sheet, reportConfig, theme, 0);\n let excelBuffer = workbook.xlsx.writeBuffer();\n loading.close();\n return excelBuffer;\n } catch (error) {\n console.error(error);\n ElMessageBox.alert(error.message);\n loading.close();\n return null;\n }\n};\n\n/** 合并导出项:报表渲染配置块 / 图片块(chart、label 截图) */\nexport interface MergeExportImage {\n base64: string;\n width: number;\n height: number;\n}\n\nexport interface MergeExportItem {\n type: 'report' | 'image';\n reportConfig?: ReportConfig[];\n subReportIndex?: number;\n image?: MergeExportImage;\n}\n\n/**\n * 报表级合并导出:所有报表表格 + 图片(chart、label 截图)按画布顺序写入同一个 sheet,\n * 图片插在表格占位行上;返回 xlsx buffer,不触发下载。\n */\nexport const exportReportMerged = async (items: MergeExportItem[], name: string, theme: ThemeType = 'gray') => {\n const loading = ElLoading.service({\n lock: true,\n text: '导出报表:正在生成文件',\n background: 'rgba(255, 255, 255, 0.8)',\n });\n try {\n const workbook = new ExcelJS.Workbook();\n workbook.creator = name;\n workbook.lastModifiedBy = name;\n workbook.created = new Date();\n workbook.modified = new Date();\n const sheet = workbook.addWorksheet(name);\n\n // 列宽取第一个含表格的导出项\n const firstReport = items.find((item) => item.type === 'report' && item.reportConfig?.length);\n if (firstReport?.reportConfig) {\n sheet.columns = generateColumns(firstReport.reportConfig, firstReport.subReportIndex || 0);\n }\n\n let currentRow = 0;\n items.forEach((item, idx) => {\n if (idx > 0) {\n sheet.addRow([]);\n currentRow += 1;\n }\n if (item.type === 'report' && item.reportConfig?.length) {\n currentRow = writeReportConfigsToSheet(sheet, item.reportConfig, theme, currentRow);\n } else if (item.type === 'image' && item.image) {\n const {base64, width, height} = item.image;\n const imageId = workbook.addImage({\n base64: base64.replace(/^data:image\\/\\w+;base64,/, ''),\n extension: 'png',\n });\n // 按图片高度占位空行(默认行高约 20px),图片锚定到起始行\n const placeholderRows = Math.ceil(height / 20) + 1;\n for (let i = 0; i < placeholderRows; i++) {\n sheet.addRow([]);\n }\n sheet.addImage(imageId, {tl: {col: 0, row: currentRow}, ext: {width, height}});\n currentRow += placeholderRows;\n }\n });\n\n loading.close();\n return workbook.xlsx.writeBuffer();\n } catch (error) {\n console.error(error);\n ElMessageBox.alert(error.message);\n loading.close();\n return null;\n }\n};\n\n/** 把渲染后的报表配置逐行写入 sheet(含样式/合并),返回写入后的行游标(累计行数,相对 startRow 偏移) */\nfunction writeReportConfigsToSheet(sheet: ExcelJS.Worksheet, reportConfig: ReportConfig[], theme: ThemeType, startRow: number): number {\n const mergeConfs: number[][] = [];\n let rowCount = startRow;\n reportConfig.forEach((rc, ri) => {\n let {config, colConfig, rowConfig} = rc;\n // 单个报表的所有行列\n for (let rowIndex = 0; rowIndex < config.length; rowIndex++) {\n const rowConf = rowConfig[rowIndex];\n if (rowConf && rowConf.isHidden) {\n continue;\n }\n const hiddenColIndexes = colConfig.filter((col) => col.isHidden).map((col) => col.index);\n const rowCells = config[rowIndex].filter((cell) => !hiddenColIndexes.includes(cell.col));\n let rowData = rowCells.map((cell) => cell.text);\n if (rowIndex > 0) {\n sheet.addRow(rowData);\n } else {\n if (rowCount === startRow) {\n sheet.getRow(startRow + 1).values = rowData;\n } else {\n sheet.addRow(rowData);\n }\n }\n\n const currentRow = sheet.getRow(rowCount + rowIndex + 1);\n if (rowConf && rowConf.size && !isNaN(rowConf.size)) {\n if (rowConf.size > 0) {\n currentRow.height = rowConf.size < 25 ? 25 : rowConf.size;\n } else {\n currentRow.hidden = true;\n }\n } else {\n currentRow.height = 25;\n }\n // 循环行\n for (let colIndex = 0; colIndex < rowCells.length; colIndex++) {\n const cell = rowCells[colIndex];\n const currentCell = currentRow.getCell(colIndex + 1);\n let {style, col, row, colSpan, rowSpan, format, formatType} = cell;\n // #region 字体颜色等样式\n const fontStyle: any = {};\n if (style && style.color) {\n fontStyle.color = {\n argb: 'FF' + style.color?.replace('#', ''),\n };\n }\n if (style && style.fontSize) {\n fontStyle.size = style.fontSize;\n }\n if (style && style.fontFamily) {\n fontStyle.name = style.fontFamily;\n }\n if (style && style.fontWeight && style.fontWeight === 'bold') {\n fontStyle.bold = true;\n }\n currentCell.font = fontStyle;\n if (style && style.border) {\n const border = normalizeBorder(style.border);\n if (border) {\n const themeColor = themeColors[theme] || '#333333';\n\n const buildBorder = (edge) => {\n if (!edge || !edge.style || edge.style === 'none') return undefined;\n return {\n style: edge.style,\n color: { argb: 'FF' + (edge.color || themeColor).replace('#', '') }\n };\n };\n\n currentCell.border = {\n top: buildBorder(border.top),\n left: buildBorder(border.left),\n bottom: buildBorder(border.bottom),\n right: buildBorder(border.right),\n };\n }\n } else if (!style || style.border !== false) {\n // 向后兼容:如果没有边框配置或边框为 true,使用默认细边框\n currentCell.border = {\n top: {style: 'thin', color: {argb: 'FF' + themeColors[theme].replace('#', '')}},\n left: {style: 'thin', color: {argb: 'FF' + themeColors[theme].replace('#', '')}},\n bottom: {style: 'thin', color: {argb: 'FF' + themeColors[theme].replace('#', '')}},\n right: {style: 'thin', color: {argb: 'FF' + themeColors[theme].replace('#', '')}},\n };\n }\n if (style && style.backgroundColor) {\n currentCell.fill = {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: 'FF' + style.backgroundColor?.replace('#', ''),\n },\n };\n } else {\n const fillColorStr = `${theme}${rowIndex % 2}`;\n currentCell.fill = {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: 'FF' + themeColors[fillColorStr].replace('#', ''),\n },\n };\n }\n const align = {\n vertical: 'middle',\n horizontal: 'center',\n wrapText: true,\n };\n if (style && style.textAlign) {\n align.horizontal = style.textAlign;\n }\n if (style && style.verticalAlign) {\n align.vertical = style.verticalAlign === 'center' ? 'middle' : style.verticalAlign;\n }\n // @ts-ignore\n currentCell.alignment = align;\n const mergeRow = rowSpan && !isNaN(rowSpan) && rowSpan > 1;\n const mergeCol = colSpan && !isNaN(colSpan) && colSpan > 1;\n if (mergeRow || mergeCol) {\n const mergeRow = rowCount + rowIndex + 1;\n const mergeCol = colIndex + 1;\n let mergeRowEnd = mergeRow;\n let mergeColEnd = mergeCol;\n if (mergeRow) {\n // @ts-ignore\n mergeRowEnd += rowSpan - 1;\n }\n if (mergeCol) {\n // @ts-ignore\n mergeColEnd += colSpan - 1;\n }\n mergeConfs.push([mergeRow, mergeCol, mergeRowEnd, mergeColEnd]);\n }\n // #endregion\n // #region 数据格式化\n if (format) {\n if (format === 'number') {\n let numberUseGrouping = '';\n let numberDecimal = '';\n if (formatType) {\n if (formatType.numberUseGrouping) numberUseGrouping = formatType.numberUseGrouping;\n if (formatType.numberDecimal) numberDecimal = formatType.numberDecimal;\n }\n currentCell.numFmt = generateNumFmt(numberUseGrouping, numberDecimal);\n currentCell.value = Number(cell.text);\n }\n }\n // #endregion\n }\n }\n rowCount += rowConfig.length;\n });\n mergeConfs.forEach((conf) => {\n sheet.mergeCells(conf[0], conf[1], conf[2], conf[3]);\n });\n return rowCount;\n}\n","import {onUnmounted} from 'vue';\n\nexport const useBroadcastChannel = (channelName, handler?) => {\n const channel = new BroadcastChannel(channelName);\n\n channel.addEventListener('message', (event) => {\n if (handler) handler(event.data);\n });\n const sendData = (type, data) => {\n channel.postMessage({type, data});\n };\n\n onUnmounted(() => {\n channel.close();\n });\n\n return {channel, sendData};\n};\n","import {Cell, ReportConfig, ThemeType} from 'yh-report/types';\nimport {exportExcel} from './exportExcel';\nimport {ElMessageBox} from 'element-plus';\nimport {useBroadcastChannel} from 'yh-hooks/useBroadcastChannel';\n\nexport type ExportFileType = 'excel' | 'pdf';\n\nexport const fileBlobTypes: Record<ExportFileType, string> = {\n excel: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8',\n pdf: 'application/pdf',\n};\n\nexport const fileExts: Record<ExportFileType, string> = {\n excel: 'xlsx',\n pdf: 'pdf',\n};\n\nexport const exportReport = async (reportConfig: ReportConfig[], name: string, type: ExportFileType = 'excel', theme: ThemeType, subReportIndex: number = 0) => {\n let data: ArrayBuffer | null = null;\n if (type === 'excel') {\n data = await exportExcel(reportConfig, name, theme, subReportIndex);\n }\n return data;\n};\n\nexport const downloadReport = (data: ArrayBuffer | null, name: string, type: ExportFileType) => {\n if (!data) {\n ElMessageBox.alert('数据为空,下载失败,请检查数据!');\n return;\n }\n const blob = new Blob([data], {\n type: fileBlobTypes[type],\n });\n let downloadA = document.createElement('a');\n downloadA.download = `${name}.${fileExts[type]}`;\n downloadA.href = window.URL.createObjectURL(blob);\n downloadA.click();\n};\n\nexport const sendReport = (data: ArrayBuffer) => {\n const {channel, sendData} = useBroadcastChannel('postMessageReport');\n sendData('sendReportExportFile', data);\n channel.close();\n window.close();\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import dayjs from 'dayjs';\nimport {StatementOption, DataParam, DataSourceColumnDataType} from 'yh-report/types';\nimport {dataParam} from 'yh-report/api/dataSource';\n\n/**\n * 从报表配置 + route.query 构建打印用的查询参数列表。\n *\n * 策略(与 reportConditions.getDefaultValue 保持一致):\n * - 优先取 route.query[columnName]\n * - 否则取 param.defaultValue(日期类型做范围/单值处理)\n * - 范围查询(LT_GT_EQ 非日期)补 end_ 参数\n * - query 中未声明的参数直接透传给数据源(打印场景无参数配置界面)\n *\n * 用于 PrintPreviewDialog 静默渲染场景,设计器点打印 / Electron 无头打印无需交互即可拿到参数。\n */\nexport function buildPrintParamsFromConfig(\n option: StatementOption,\n query: Record<string, any> = {}\n): dataParam[] {\n const params: DataParam[] = option.params || [];\n const result: dataParam[] = [];\n\n for (const config of params) {\n const {columnName, defaultValue, dataType, dateType, type, isNull} = config;\n const isDate = [DataSourceColumnDataType.DATE, DataSourceColumnDataType.DATETIME].includes(dataType);\n\n let value: any;\n\n // LIST/TABLE 类型支持数组\n if ([DataSourceColumnDataType.LIST, DataSourceColumnDataType.TABLE].includes(dataType)) {\n if (query[columnName] !== undefined) {\n const q = query[columnName];\n value = Array.isArray(q) ? q : String(q).split(',');\n } else if (Array.isArray(defaultValue)) {\n value = defaultValue;\n } else if (typeof defaultValue === 'string' && defaultValue) {\n value = defaultValue.split(',');\n } else {\n value = [];\n }\n } else if (isDate && defaultValue) {\n // 日期类型默认值处理\n value = resolveDateDefaultValue(defaultValue, dateType, config.startTime, config.endTime);\n } else {\n // 普通类型:query 优先,否则 defaultValue\n value = query[columnName] !== undefined ? query[columnName] : (defaultValue ?? '');\n }\n\n result.push({name: columnName, value, type, isNull});\n\n // 范围查询非日期:补 end_ 参数\n if (type === 'LT_GT_EQ' && !isDate) {\n result.push({\n name: `end_${columnName}`,\n value: defaultValue ?? '',\n type,\n isNull,\n });\n }\n }\n\n // query 中未声明的参数不生成查询条件,直接透传给数据源\n appendExtraParams(result, query);\n\n return result;\n}\n\n/** 追加 query 中未在查询参数配置中声明的透传参数:仅随请求发给数据源 */\nfunction appendExtraParams(result: dataParam[], query: Record<string, any>) {\n Object.entries(query).forEach(([name, value]) => {\n if (!name || value === null || value === undefined || value === '') return;\n const valueStr = Array.isArray(value) ? value.join(',') : value;\n const existIndex = result.findIndex((item) => item.name === name);\n if (existIndex > -1) {\n // 范围查询自动生成的 end_ 参数默认取 defaultValue,query 有值时优先\n if (name.startsWith('end_')) {\n result[existIndex].value = valueStr;\n }\n return;\n }\n result.push({name, value: valueStr, type: 'EQ', isNull: false});\n });\n}\n\n/** 日期默认值解析:范围日期返回 [start, end],单值日期返回格式化字符串 */\nfunction resolveDateDefaultValue(defaultValue: string, dateType: string | undefined, startTime?: string, endTime?: string): any {\n const fmt = 'YYYY-MM-DD HH:mm:ss';\n const today = dayjs();\n const isRange = dateType && ['daterange', 'datetimerange'].includes(dateType);\n\n if (isRange) {\n const ranges: Record<string, [string, string]> = {\n thisDay: [today.startOf('day').format(fmt), today.endOf('day').format(fmt)],\n thisWeek: [today.startOf('week').format(fmt), today.endOf('week').format(fmt)],\n thisMonth: [today.startOf('month').format(fmt), today.endOf('month').format(fmt)],\n thisYear: [today.startOf('year').format(fmt), today.endOf('year').format(fmt)],\n now: [today.startOf('day').format(fmt), today.format(fmt)],\n sevenDay: [today.subtract(7, 'day').format(fmt), today.format(fmt)],\n thirtyDay: [today.subtract(30, 'day').format(fmt), today.format(fmt)],\n oneYear: [today.subtract(1, 'year').startOf('year').format(fmt), today.format(fmt)],\n };\n let range = ranges[defaultValue] || [today.startOf('day').format(fmt), today.endOf('day').format(fmt)];\n if (startTime) range[0] = applyTimeShift(range[0], startTime, fmt);\n if (endTime) range[1] = applyTimeShift(range[1], endTime, fmt);\n return range;\n }\n\n // 单值日期\n const singles: Record<string, string> = {\n now: today.format(fmt),\n thisDay: today.startOf('day').format(fmt),\n thisMonth: today.startOf('month').format(fmt),\n thisYear: today.startOf('year').format(fmt),\n };\n let val = singles[defaultValue];\n if (!val) {\n const start = today.startOf((dateType as any) || 'day');\n val = start.isValid() ? start.format(fmt) : today.format(fmt);\n }\n if (startTime) val = applyTimeShift(val, startTime, fmt);\n return val;\n}\n\n/** 应用时间偏移(如 \"+1,d\" 表示加1天),与 reportConditions.dateTimeChange 一致 */\nfunction applyTimeShift(val: string, time: string, fmt: string): string {\n if (!time || !val) return val;\n const items = time.split(',').map((item) => {\n const idx = item.match(/[-+]/)?.index ?? -1;\n if (idx < 0) return null;\n return {count: Number(item.substring(idx)), type: item.substring(0, idx)};\n }).filter(Boolean) as {count: number; type: string}[];\n\n let $val = dayjs(val);\n if (!$val.isValid()) return val;\n items.forEach(({count, type}) => {\n $val = $val.add(count, type as any);\n });\n return $val.format(fmt);\n}\n","import http from '@/libs/api.request';\n\nexport function getDateSourceList() {\n return http.request({\n url: '/windowDesign/getDatasourceList',\n method: 'POST',\n });\n}\n\nexport const columnTypeName = {\n STRING: '字符',\n PLONG: '正整数',\n LONG: '整数',\n DOUBLE: '浮点',\n TEXT: '文本',\n BOOL: '是否',\n DATE: '日期',\n TIME: '时间',\n DATETIME: '日期时间',\n PASSWORD: '密码',\n ID: 'ID',\n LIST: '列表',\n TABLE: '表',\n TREE: '下拉树',\n IMG: '图片',\n OPEN: '弹窗',\n SQL: '子查询',\n COLOR: '颜色',\n EDITOR: '代码编辑器',\n};\n\nexport function getDateSourceColumns(datasourceId) {\n return http\n .request({\n url: '/windowDesign/getColumns',\n method: 'POST',\n data: {\n datasourceId,\n },\n })\n .then((res) => {\n if (res.data && res.data.data) {\n return Promise.resolve(res.data.data);\n } else {\n return Promise.resolve([]);\n }\n });\n}\n\nexport interface dataParam {\n name?: string;\n value?: any;\n type?: string;\n isNull?: boolean;\n}\n\nexport interface SourceDataParam {\n id: string;\n pageSize?: number;\n pageNumber?: number;\n params?: dataParam[];\n}\n\nexport function getDateSourceData(\n url: string,\n data: SourceDataParam = {\n id: '',\n pageNumber: 1,\n pageSize: 100,\n }\n) {\n return http\n .request({\n url: `/report/data/${url}`,\n type: 'json',\n method: 'POST',\n data,\n })\n .then((res) => {\n // 兼容双层 {data: {data: [], count: n}} 与单层 {data: []} 两种返回结构\n if (res?.data && res.data?.data) {\n return Promise.resolve(res.data);\n }\n if (Array.isArray(res?.data)) {\n return Promise.resolve({data: res.data, count: res.data.length});\n }\n // 兜底保持 {data, count} 形状,避免调用方访问 res.data.length 报错\n return Promise.resolve({data: [], count: 0});\n });\n}\n\nexport function getSelectorList() {\n return http.request({\n url: `windowDesign/getSelectorList`,\n method: 'POST',\n });\n}\n\nexport function getListData() {}\n","import {StatementDataSource, statementTableConfig} from 'yh-report/types';\nimport {dataParam} from 'yh-report/api/dataSource';\n\n/** 单元格插值:${...},内部为 url.中间路径值.字段名 */\nconst INTERPOLATION_RE = /\\$\\{([^}]+)\\}/g;\n\ninterface QueryCond {\n /** 该字段在 toObjectSetting 中的下标,决定取插值第几段中间路径 */\n index: number;\n /** 参数名,缺省用字段名(原始值,不转大写) */\n paramName: string;\n}\n\n/**\n * 遍历报表 tableConfig 所有单元格的 text/fun 插值,收集标记为「作为查询条件」的\n * toObjectSetting 字段在插值中间路径中被引用的值,并按数据源(url)分组返回。\n *\n * 插值结构 ${url.k1.k2...kN.字段名}:k1..kN 对应 toObjectSetting[0..N-1].field 的值\n * (transformArrayToObject 按数组顺序构建嵌套层级)。值来自 cell 配置,配置态即确定。\n *\n * 按数据源分组:插值里哪个 url 收集的参数,只随该 url 对应的数据源请求传递,\n * 避免未引用该字段的数据源被筛选、跨数据源重名字段串扰。\n *\n * @returns key 为 url(大写),value 为该数据源专属的 dataParam[]\n */\nexport function collectCellQueryConditions(\n tableConfig: statementTableConfig[] | undefined,\n sources: StatementDataSource[] | undefined\n): Map<string, dataParam[]> {\n const result = new Map<string, dataParam[]>();\n if (!tableConfig || !sources) return result;\n\n // 建立 url -> 查询条件下标信息(仅 toObject source)\n const urlMap = new Map<string, QueryCond[]>();\n for (const source of sources) {\n if (!source.toObject || !source.url || !Array.isArray(source.toObjectSetting)) continue;\n const conds: QueryCond[] = [];\n source.toObjectSetting.forEach((setting, i) => {\n if (setting.asQueryCondition && setting.field) {\n conds.push({index: i, paramName: (setting.queryParamName || setting.field)});\n }\n });\n if (conds.length) urlMap.set(source.url.toUpperCase(), conds);\n }\n if (!urlMap.size) return result;\n\n // url -> paramName -> 值集合(去重)\n const collected = new Map<string, Map<string, Set<string>>>();\n\n // 处理单条插值内部路径,按归属 url 归组\n const process = (inner: string) => {\n const parts = inner.split('.');\n if (parts.length < 2) return;\n const url = parts[0].toUpperCase();\n const conds = urlMap.get(url);\n if (!conds) return;\n if (!collected.has(url)) collected.set(url, new Map());\n const urlCollected = collected.get(url)!;\n for (const c of conds) {\n // parts[0]=url,parts[1+i] 对应 toObjectSetting[i] 的值\n const val = parts[1 + c.index];\n if (val === undefined || val === '') continue;\n if (!urlCollected.has(c.paramName)) urlCollected.set(c.paramName, new Set());\n urlCollected.get(c.paramName)!.add(val);\n }\n };\n\n // 提取字符串中所有 ${...} 并处理\n const visit = (str: any) => {\n if (!str || typeof str !== 'string') return;\n INTERPOLATION_RE.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = INTERPOLATION_RE.exec(str)) !== null) {\n process(m[1]);\n }\n };\n\n for (const table of tableConfig) {\n const rows = table?.config;\n if (!Array.isArray(rows)) continue;\n for (const row of rows) {\n if (!Array.isArray(row)) continue;\n for (const cell of row) {\n if (!cell) continue;\n // FIELD 模式的 cell.data 是动态数据字段引用,不收集;仅取 text/fun\n visit(cell.text);\n visit(cell.fun);\n }\n }\n }\n\n collected.forEach((paramMap, url) => {\n const params: dataParam[] = [];\n paramMap.forEach((set, paramName) => {\n if (set.size) {\n // 多值用逗号字符串,与 reportConditions 多选一致,后端在 IN 位置展开\n params.push({name: paramName, value: Array.from(set).join(','), type: 'IN'});\n }\n });\n if (params.length) result.set(url, params);\n });\n return result;\n}\n","import {StatementData, statementTableConfig} from 'yh-report/types';\nimport {dataParam, SourceDataParam, getDateSourceData} from 'yh-report/api/dataSource';\nimport {cloneDeep} from 'lodash-es';\nimport {collectCellQueryConditions} from 'yh-report/libs/collectCellQueryConditions';\n\nexport interface FetchReportDataPagination {\n pageSize: number;\n pageIndex: number;\n total: number;\n isPagination: boolean;\n}\n\nexport interface RemoteDataItem {\n key: string;\n data: any;\n}\n\n/**\n * 拉取报表数据(从 reportViewItem.getRemoteData 抽出,去除组件 ref 副作用)。\n *\n * @param option.id 报表 id(请求体用)\n * @param option.data 报表数据设置(含 source / pagination 等)\n * @param option.tableConfig 报表表格配置(收集 cell 插值查询条件用)\n * @param params 查询参数\n * @param pagination 分页状态\n * @param isAll 是否拉全量数据(打印场景传 true,不分页)\n * @returns {key, data}[],key 为 source.key 或 'PARAM';total 透传回写\n */\nexport async function fetchReportData(\n option: {id: string; data: StatementData; tableConfig: statementTableConfig[]},\n params: dataParam[],\n pagination: FetchReportDataPagination,\n isAll = false\n): Promise<{resData: RemoteDataItem[]; total: number}> {\n if (!option.data.source) {\n return {resData: [], total: pagination.total};\n }\n\n const hasParams = Array.isArray(params) && params.length > 0;\n let reqData: SourceDataParam = {id: option.id};\n if (hasParams) {\n reqData.params = cloneDeep(params);\n }\n\n // 按 source 分组收集 cell 插值查询条件(值来自 cell 配置,配置态即确定)\n const cellConditionsBySource = collectCellQueryConditions(option.tableConfig, option.data.source);\n\n if (pagination.isPagination) {\n if (!isAll) {\n reqData.pageSize = pagination.pageSize;\n reqData.pageNumber = pagination.pageIndex;\n } else {\n reqData.pageSize = pagination.total;\n reqData.pageNumber = 1;\n }\n } else {\n reqData.pageSize = pagination.pageSize;\n reqData.pageNumber = 1;\n }\n\n let resData: RemoteDataItem[] = [];\n // PARAM 桶:把 params 拍平为大写键对象,供单元格 ${PARAM.xxx} 之类引用\n let paramData: any = {};\n params.forEach(({name, value}) => {\n if (name) {\n paramData[name.toUpperCase()] = value;\n }\n });\n resData.push({key: 'PARAM', data: paramData});\n\n let total = pagination.total;\n for (let i = 0; i < option.data.source.length; i++) {\n const {key, url} = option.data.source[i];\n if (url) {\n // 仅追加该 source 的 cell 插值条件,避免跨数据源串扰\n const sourceCellConds = cellConditionsBySource.get(url.toUpperCase());\n const sourceReqData = sourceCellConds?.length\n ? {...reqData, params: [...(reqData.params || []), ...sourceCellConds]}\n : reqData;\n const res = await getDateSourceData(url, sourceReqData);\n resData.push({key, data: res.data});\n if (pagination.isPagination) {\n total = res.count || res.data.length;\n }\n }\n }\n\n return {resData, total};\n}\n\n/**\n * 将拉取的数据归集为 {key: data} 对象(从 reportViewItem.toUpdateData 抽出,去除 emit)。\n * - key==='PARAM' 保留原值\n * - 其余 key 过滤掉空项\n */\nexport function toUpdateData(remoteData: RemoteDataItem[] | RemoteDataItem): Record<string, any> {\n let rData: Record<string, any> = {};\n if (!Array.isArray(remoteData)) {\n remoteData = [remoteData];\n }\n remoteData.forEach(({key, data}) => {\n if (key !== 'PARAM') {\n let d = Array.isArray(data) ? data.filter((item: any) => item) : data;\n rData[key] = d;\n } else {\n rData[key] = data;\n }\n });\n return rData;\n}\n","!function(e,_){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=_(require(\"dayjs\")):\"function\"==typeof define&&define.amd?define([\"dayjs\"],_):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_locale_zh_cn=_(e.dayjs)}(this,(function(e){\"use strict\";function _(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var t=_(e),d={name:\"zh-cn\",weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"周日_周一_周二_周三_周四_周五_周六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),ordinal:function(e,_){return\"W\"===_?e+\"周\":e+\"日\"},weekStart:1,yearStart:4,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日Ah点mm分\",LLLL:\"YYYY年M月D日ddddAh点mm分\",l:\"YYYY/M/D\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日dddd HH:mm\"},relativeTime:{future:\"%s内\",past:\"%s前\",s:\"几秒\",m:\"1 分钟\",mm:\"%d 分钟\",h:\"1 小时\",hh:\"%d 小时\",d:\"1 天\",dd:\"%d 天\",M:\"1 个月\",MM:\"%d 个月\",y:\"1 年\",yy:\"%d 年\"},meridiem:function(e,_){var t=100*e+_;return t<600?\"凌晨\":t<900?\"早上\":t<1100?\"上午\":t<1300?\"中午\":t<1800?\"下午\":\"晚上\"}};return t.default.locale(d,null,!0),d}));","import dayjs from 'dayjs';\nimport zhCn from 'dayjs/locale/zh-cn';\ndayjs.locale(zhCn);\nimport http from '@/libs/api.request';\n\nexport function listDataStr2Arr(str) {\n return str.split(',').map((data) => {\n let [id, name, url] = data.split(':');\n return {\n id,\n name,\n url,\n };\n });\n}\n\nexport async function getProcessData(processData, data, params, pagination) {\n try {\n const fun = (function (axios, dayjs) {\n return eval(\n `async (allData, params,pagination) => {\n ${processData}\n }`\n );\n })(http, dayjs);\n return await fun.call(this, data, params, pagination);\n } catch (error) {\n console.error(error);\n return data;\n }\n}\n","/**\n * @implements {IHooks}\n */\nclass Hooks {\n\t/**\n\t * @callback HookCallback\n\t * @this {*|Jsep} this\n\t * @param {Jsep} env\n\t * @returns: void\n\t */\n\t/**\n\t * Adds the given callback to the list of callbacks for the given hook.\n\t *\n\t * The callback will be invoked when the hook it is registered for is run.\n\t *\n\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t *\n\t * @param {string|object} name The name of the hook, or an object of callbacks keyed by name\n\t * @param {HookCallback|boolean} callback The callback function which is given environment variables.\n\t * @param {?boolean} [first=false] Will add the hook to the top of the list (defaults to the bottom)\n\t * @public\n\t */\n\tadd(name, callback, first) {\n\t\tif (typeof arguments[0] != 'string') {\n\t\t\t// Multiple hook callbacks, keyed by name\n\t\t\tfor (let name in arguments[0]) {\n\t\t\t\tthis.add(name, arguments[0][name], arguments[1]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t(Array.isArray(name) ? name : [name]).forEach(function (name) {\n\t\t\t\tthis[name] = this[name] || [];\n\n\t\t\t\tif (callback) {\n\t\t\t\t\tthis[name][first ? 'unshift' : 'push'](callback);\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t}\n\n\t/**\n\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t *\n\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t *\n\t * @param {string} name The name of the hook.\n\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t * @public\n\t */\n\trun(name, env) {\n\t\tthis[name] = this[name] || [];\n\t\tthis[name].forEach(function (callback) {\n\t\t\tcallback.call(env && env.context ? env.context : env, env);\n\t\t});\n\t}\n}\n\n/**\n * @implements {IPlugins}\n */\nclass Plugins {\n\tconstructor(jsep) {\n\t\tthis.jsep = jsep;\n\t\tthis.registered = {};\n\t}\n\n\t/**\n\t * @callback PluginSetup\n\t * @this {Jsep} jsep\n\t * @returns: void\n\t */\n\t/**\n\t * Adds the given plugin(s) to the registry\n\t *\n\t * @param {object} plugins\n\t * @param {string} plugins.name The name of the plugin\n\t * @param {PluginSetup} plugins.init The init function\n\t * @public\n\t */\n\tregister(...plugins) {\n\t\tplugins.forEach((plugin) => {\n\t\t\tif (typeof plugin !== 'object' || !plugin.name || !plugin.init) {\n\t\t\t\tthrow new Error('Invalid JSEP plugin format');\n\t\t\t}\n\t\t\tif (this.registered[plugin.name]) {\n\t\t\t\t// already registered. Ignore.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tplugin.init(this.jsep);\n\t\t\tthis.registered[plugin.name] = plugin;\n\t\t});\n\t}\n}\n\n// JavaScript Expression Parser (JSEP) 1.4.0\n\nclass Jsep {\n\t/**\n\t * @returns {string}\n\t */\n\tstatic get version() {\n\t\t// To be filled in by the template\n\t\treturn '1.4.0';\n\t}\n\n\t/**\n\t * @returns {string}\n\t */\n\tstatic toString() {\n\t\treturn 'JavaScript Expression Parser (JSEP) v' + Jsep.version;\n\t};\n\n\t// ==================== CONFIG ================================\n\t/**\n\t * @method addUnaryOp\n\t * @param {string} op_name The name of the unary op to add\n\t * @returns {Jsep}\n\t */\n\tstatic addUnaryOp(op_name) {\n\t\tJsep.max_unop_len = Math.max(op_name.length, Jsep.max_unop_len);\n\t\tJsep.unary_ops[op_name] = 1;\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method jsep.addBinaryOp\n\t * @param {string} op_name The name of the binary op to add\n\t * @param {number} precedence The precedence of the binary op (can be a float). Higher number = higher precedence\n\t * @param {boolean} [isRightAssociative=false] whether operator is right-associative\n\t * @returns {Jsep}\n\t */\n\tstatic addBinaryOp(op_name, precedence, isRightAssociative) {\n\t\tJsep.max_binop_len = Math.max(op_name.length, Jsep.max_binop_len);\n\t\tJsep.binary_ops[op_name] = precedence;\n\t\tif (isRightAssociative) {\n\t\t\tJsep.right_associative.add(op_name);\n\t\t}\n\t\telse {\n\t\t\tJsep.right_associative.delete(op_name);\n\t\t}\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method addIdentifierChar\n\t * @param {string} char The additional character to treat as a valid part of an identifier\n\t * @returns {Jsep}\n\t */\n\tstatic addIdentifierChar(char) {\n\t\tJsep.additional_identifier_chars.add(char);\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method addLiteral\n\t * @param {string} literal_name The name of the literal to add\n\t * @param {*} literal_value The value of the literal\n\t * @returns {Jsep}\n\t */\n\tstatic addLiteral(literal_name, literal_value) {\n\t\tJsep.literals[literal_name] = literal_value;\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeUnaryOp\n\t * @param {string} op_name The name of the unary op to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeUnaryOp(op_name) {\n\t\tdelete Jsep.unary_ops[op_name];\n\t\tif (op_name.length === Jsep.max_unop_len) {\n\t\t\tJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\n\t\t}\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllUnaryOps\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllUnaryOps() {\n\t\tJsep.unary_ops = {};\n\t\tJsep.max_unop_len = 0;\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeIdentifierChar\n\t * @param {string} char The additional character to stop treating as a valid part of an identifier\n\t * @returns {Jsep}\n\t */\n\tstatic removeIdentifierChar(char) {\n\t\tJsep.additional_identifier_chars.delete(char);\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeBinaryOp\n\t * @param {string} op_name The name of the binary op to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeBinaryOp(op_name) {\n\t\tdelete Jsep.binary_ops[op_name];\n\n\t\tif (op_name.length === Jsep.max_binop_len) {\n\t\t\tJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\t\t}\n\t\tJsep.right_associative.delete(op_name);\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllBinaryOps\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllBinaryOps() {\n\t\tJsep.binary_ops = {};\n\t\tJsep.max_binop_len = 0;\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeLiteral\n\t * @param {string} literal_name The name of the literal to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeLiteral(literal_name) {\n\t\tdelete Jsep.literals[literal_name];\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllLiterals\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllLiterals() {\n\t\tJsep.literals = {};\n\n\t\treturn Jsep;\n\t}\n\t// ==================== END CONFIG ============================\n\n\n\t/**\n\t * @returns {string}\n\t */\n\tget char() {\n\t\treturn this.expr.charAt(this.index);\n\t}\n\n\t/**\n\t * @returns {number}\n\t */\n\tget code() {\n\t\treturn this.expr.charCodeAt(this.index);\n\t};\n\n\n\t/**\n\t * @param {string} expr a string with the passed in express\n\t * @returns Jsep\n\t */\n\tconstructor(expr) {\n\t\t// `index` stores the character number we are currently at\n\t\t// All of the gobbles below will modify `index` as we move along\n\t\tthis.expr = expr;\n\t\tthis.index = 0;\n\t}\n\n\t/**\n\t * static top-level parser\n\t * @returns {jsep.Expression}\n\t */\n\tstatic parse(expr) {\n\t\treturn (new Jsep(expr)).parse();\n\t}\n\n\t/**\n\t * Get the longest key length of any object\n\t * @param {object} obj\n\t * @returns {number}\n\t */\n\tstatic getMaxKeyLen(obj) {\n\t\treturn Math.max(0, ...Object.keys(obj).map(k => k.length));\n\t}\n\n\t/**\n\t * `ch` is a character code in the next three functions\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isDecimalDigit(ch) {\n\t\treturn (ch >= 48 && ch <= 57); // 0...9\n\t}\n\n\t/**\n\t * Returns the precedence of a binary operator or `0` if it isn't a binary operator. Can be float.\n\t * @param {string} op_val\n\t * @returns {number}\n\t */\n\tstatic binaryPrecedence(op_val) {\n\t\treturn Jsep.binary_ops[op_val] || 0;\n\t}\n\n\t/**\n\t * Looks for start of identifier\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isIdentifierStart(ch) {\n\t\treturn (ch >= 65 && ch <= 90) || // A...Z\n\t\t\t(ch >= 97 && ch <= 122) || // a...z\n\t\t\t(ch >= 128 && !Jsep.binary_ops[String.fromCharCode(ch)]) || // any non-ASCII that is not an operator\n\t\t\t(Jsep.additional_identifier_chars.has(String.fromCharCode(ch))); // additional characters\n\t}\n\n\t/**\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isIdentifierPart(ch) {\n\t\treturn Jsep.isIdentifierStart(ch) || Jsep.isDecimalDigit(ch);\n\t}\n\n\t/**\n\t * throw error at index of the expression\n\t * @param {string} message\n\t * @throws\n\t */\n\tthrowError(message) {\n\t\tconst error = new Error(message + ' at character ' + this.index);\n\t\terror.index = this.index;\n\t\terror.description = message;\n\t\tthrow error;\n\t}\n\n\t/**\n\t * Run a given hook\n\t * @param {string} name\n\t * @param {jsep.Expression|false} [node]\n\t * @returns {?jsep.Expression}\n\t */\n\trunHook(name, node) {\n\t\tif (Jsep.hooks[name]) {\n\t\t\tconst env = { context: this, node };\n\t\t\tJsep.hooks.run(name, env);\n\t\t\treturn env.node;\n\t\t}\n\t\treturn node;\n\t}\n\n\t/**\n\t * Runs a given hook until one returns a node\n\t * @param {string} name\n\t * @returns {?jsep.Expression}\n\t */\n\tsearchHook(name) {\n\t\tif (Jsep.hooks[name]) {\n\t\t\tconst env = { context: this };\n\t\t\tJsep.hooks[name].find(function (callback) {\n\t\t\t\tcallback.call(env.context, env);\n\t\t\t\treturn env.node;\n\t\t\t});\n\t\t\treturn env.node;\n\t\t}\n\t}\n\n\t/**\n\t * Push `index` up to the next non-space character\n\t */\n\tgobbleSpaces() {\n\t\tlet ch = this.code;\n\t\t// Whitespace\n\t\twhile (ch === Jsep.SPACE_CODE\n\t\t|| ch === Jsep.TAB_CODE\n\t\t|| ch === Jsep.LF_CODE\n\t\t|| ch === Jsep.CR_CODE) {\n\t\t\tch = this.expr.charCodeAt(++this.index);\n\t\t}\n\t\tthis.runHook('gobble-spaces');\n\t}\n\n\t/**\n\t * Top-level method to parse all expressions and returns compound or single node\n\t * @returns {jsep.Expression}\n\t */\n\tparse() {\n\t\tthis.runHook('before-all');\n\t\tconst nodes = this.gobbleExpressions();\n\n\t\t// If there's only one expression just try returning the expression\n\t\tconst node = nodes.length === 1\n\t\t ? nodes[0]\n\t\t\t: {\n\t\t\t\ttype: Jsep.COMPOUND,\n\t\t\t\tbody: nodes\n\t\t\t};\n\t\treturn this.runHook('after-all', node);\n\t}\n\n\t/**\n\t * top-level parser (but can be reused within as well)\n\t * @param {number} [untilICode]\n\t * @returns {jsep.Expression[]}\n\t */\n\tgobbleExpressions(untilICode) {\n\t\tlet nodes = [], ch_i, node;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tch_i = this.code;\n\n\t\t\t// Expressions can be separated by semicolons, commas, or just inferred without any\n\t\t\t// separators\n\t\t\tif (ch_i === Jsep.SEMCOL_CODE || ch_i === Jsep.COMMA_CODE) {\n\t\t\t\tthis.index++; // ignore separators\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Try to gobble each expression individually\n\t\t\t\tif (node = this.gobbleExpression()) {\n\t\t\t\t\tnodes.push(node);\n\t\t\t\t\t// If we weren't able to find a binary expression and are out of room, then\n\t\t\t\t\t// the expression passed in probably has too much\n\t\t\t\t}\n\t\t\t\telse if (this.index < this.expr.length) {\n\t\t\t\t\tif (ch_i === untilICode) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tthis.throwError('Unexpected \"' + this.char + '\"');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn nodes;\n\t}\n\n\t/**\n\t * The main parsing function.\n\t * @returns {?jsep.Expression}\n\t */\n\tgobbleExpression() {\n\t\tconst node = this.searchHook('gobble-expression') || this.gobbleBinaryExpression();\n\t\tthis.gobbleSpaces();\n\n\t\treturn this.runHook('after-expression', node);\n\t}\n\n\t/**\n\t * Search for the operation portion of the string (e.g. `+`, `===`)\n\t * Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)\n\t * and move down from 3 to 2 to 1 character until a matching binary operation is found\n\t * then, return that binary operation\n\t * @returns {string|boolean}\n\t */\n\tgobbleBinaryOp() {\n\t\tthis.gobbleSpaces();\n\t\tlet to_check = this.expr.substr(this.index, Jsep.max_binop_len);\n\t\tlet tc_len = to_check.length;\n\n\t\twhile (tc_len > 0) {\n\t\t\t// Don't accept a binary op when it is an identifier.\n\t\t\t// Binary ops that start with a identifier-valid character must be followed\n\t\t\t// by a non identifier-part valid character\n\t\t\tif (Jsep.binary_ops.hasOwnProperty(to_check) && (\n\t\t\t\t!Jsep.isIdentifierStart(this.code) ||\n\t\t\t\t(this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))\n\t\t\t)) {\n\t\t\t\tthis.index += tc_len;\n\t\t\t\treturn to_check;\n\t\t\t}\n\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * This function is responsible for gobbling an individual expression,\n\t * e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`\n\t * @returns {?jsep.BinaryExpression}\n\t */\n\tgobbleBinaryExpression() {\n\t\tlet node, biop, prec, stack, biop_info, left, right, i, cur_biop;\n\n\t\t// First, try to get the leftmost thing\n\t\t// Then, check to see if there's a binary operator operating on that leftmost thing\n\t\t// Don't gobbleBinaryOp without a left-hand-side\n\t\tleft = this.gobbleToken();\n\t\tif (!left) {\n\t\t\treturn left;\n\t\t}\n\t\tbiop = this.gobbleBinaryOp();\n\n\t\t// If there wasn't a binary operator, just return the leftmost node\n\t\tif (!biop) {\n\t\t\treturn left;\n\t\t}\n\n\t\t// Otherwise, we need to start a stack to properly place the binary operations in their\n\t\t// precedence structure\n\t\tbiop_info = { value: biop, prec: Jsep.binaryPrecedence(biop), right_a: Jsep.right_associative.has(biop) };\n\n\t\tright = this.gobbleToken();\n\n\t\tif (!right) {\n\t\t\tthis.throwError(\"Expected expression after \" + biop);\n\t\t}\n\n\t\tstack = [left, biop_info, right];\n\n\t\t// Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)\n\t\twhile ((biop = this.gobbleBinaryOp())) {\n\t\t\tprec = Jsep.binaryPrecedence(biop);\n\n\t\t\tif (prec === 0) {\n\t\t\t\tthis.index -= biop.length;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbiop_info = { value: biop, prec, right_a: Jsep.right_associative.has(biop) };\n\n\t\t\tcur_biop = biop;\n\n\t\t\t// Reduce: make a binary expression from the three topmost entries.\n\t\t\tconst comparePrev = prev => biop_info.right_a && prev.right_a\n\t\t\t\t? prec > prev.prec\n\t\t\t\t: prec <= prev.prec;\n\t\t\twhile ((stack.length > 2) && comparePrev(stack[stack.length - 2])) {\n\t\t\t\tright = stack.pop();\n\t\t\t\tbiop = stack.pop().value;\n\t\t\t\tleft = stack.pop();\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.BINARY_EXP,\n\t\t\t\t\toperator: biop,\n\t\t\t\t\tleft,\n\t\t\t\t\tright\n\t\t\t\t};\n\t\t\t\tstack.push(node);\n\t\t\t}\n\n\t\t\tnode = this.gobbleToken();\n\n\t\t\tif (!node) {\n\t\t\t\tthis.throwError(\"Expected expression after \" + cur_biop);\n\t\t\t}\n\n\t\t\tstack.push(biop_info, node);\n\t\t}\n\n\t\ti = stack.length - 1;\n\t\tnode = stack[i];\n\n\t\twhile (i > 1) {\n\t\t\tnode = {\n\t\t\t\ttype: Jsep.BINARY_EXP,\n\t\t\t\toperator: stack[i - 1].value,\n\t\t\t\tleft: stack[i - 2],\n\t\t\t\tright: node\n\t\t\t};\n\t\t\ti -= 2;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * An individual part of a binary expression:\n\t * e.g. `foo.bar(baz)`, `1`, `\"abc\"`, `(a % 2)` (because it's in parenthesis)\n\t * @returns {boolean|jsep.Expression}\n\t */\n\tgobbleToken() {\n\t\tlet ch, to_check, tc_len, node;\n\n\t\tthis.gobbleSpaces();\n\t\tnode = this.searchHook('gobble-token');\n\t\tif (node) {\n\t\t\treturn this.runHook('after-token', node);\n\t\t}\n\n\t\tch = this.code;\n\n\t\tif (Jsep.isDecimalDigit(ch) || ch === Jsep.PERIOD_CODE) {\n\t\t\t// Char code 46 is a dot `.` which can start off a numeric literal\n\t\t\treturn this.gobbleNumericLiteral();\n\t\t}\n\n\t\tif (ch === Jsep.SQUOTE_CODE || ch === Jsep.DQUOTE_CODE) {\n\t\t\t// Single or double quotes\n\t\t\tnode = this.gobbleStringLiteral();\n\t\t}\n\t\telse if (ch === Jsep.OBRACK_CODE) {\n\t\t\tnode = this.gobbleArray();\n\t\t}\n\t\telse {\n\t\t\tto_check = this.expr.substr(this.index, Jsep.max_unop_len);\n\t\t\ttc_len = to_check.length;\n\n\t\t\twhile (tc_len > 0) {\n\t\t\t\t// Don't accept an unary op when it is an identifier.\n\t\t\t\t// Unary ops that start with a identifier-valid character must be followed\n\t\t\t\t// by a non identifier-part valid character\n\t\t\t\tif (Jsep.unary_ops.hasOwnProperty(to_check) && (\n\t\t\t\t\t!Jsep.isIdentifierStart(this.code) ||\n\t\t\t\t\t(this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))\n\t\t\t\t)) {\n\t\t\t\t\tthis.index += tc_len;\n\t\t\t\t\tconst argument = this.gobbleToken();\n\t\t\t\t\tif (!argument) {\n\t\t\t\t\t\tthis.throwError('missing unaryOp argument');\n\t\t\t\t\t}\n\t\t\t\t\treturn this.runHook('after-token', {\n\t\t\t\t\t\ttype: Jsep.UNARY_EXP,\n\t\t\t\t\t\toperator: to_check,\n\t\t\t\t\t\targument,\n\t\t\t\t\t\tprefix: true\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t\t}\n\n\t\t\tif (Jsep.isIdentifierStart(ch)) {\n\t\t\t\tnode = this.gobbleIdentifier();\n\t\t\t\tif (Jsep.literals.hasOwnProperty(node.name)) {\n\t\t\t\t\tnode = {\n\t\t\t\t\t\ttype: Jsep.LITERAL,\n\t\t\t\t\t\tvalue: Jsep.literals[node.name],\n\t\t\t\t\t\traw: node.name,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (node.name === Jsep.this_str) {\n\t\t\t\t\tnode = { type: Jsep.THIS_EXP };\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (ch === Jsep.OPAREN_CODE) { // open parenthesis\n\t\t\t\tnode = this.gobbleGroup();\n\t\t\t}\n\t\t}\n\n\t\tif (!node) {\n\t\t\treturn this.runHook('after-token', false);\n\t\t}\n\n\t\tnode = this.gobbleTokenProperty(node);\n\t\treturn this.runHook('after-token', node);\n\t}\n\n\t/**\n\t * Gobble properties of of identifiers/strings/arrays/groups.\n\t * e.g. `foo`, `bar.baz`, `foo['bar'].baz`\n\t * It also gobbles function calls:\n\t * e.g. `Math.acos(obj.angle)`\n\t * @param {jsep.Expression} node\n\t * @returns {jsep.Expression}\n\t */\n\tgobbleTokenProperty(node) {\n\t\tthis.gobbleSpaces();\n\n\t\tlet ch = this.code;\n\t\twhile (ch === Jsep.PERIOD_CODE || ch === Jsep.OBRACK_CODE || ch === Jsep.OPAREN_CODE || ch === Jsep.QUMARK_CODE) {\n\t\t\tlet optional;\n\t\t\tif (ch === Jsep.QUMARK_CODE) {\n\t\t\t\tif (this.expr.charCodeAt(this.index + 1) !== Jsep.PERIOD_CODE) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\toptional = true;\n\t\t\t\tthis.index += 2;\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tch = this.code;\n\t\t\t}\n\t\t\tthis.index++;\n\n\t\t\tif (ch === Jsep.OBRACK_CODE) {\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.MEMBER_EXP,\n\t\t\t\t\tcomputed: true,\n\t\t\t\t\tobject: node,\n\t\t\t\t\tproperty: this.gobbleExpression()\n\t\t\t\t};\n\t\t\t\tif (!node.property) {\n\t\t\t\t\tthis.throwError('Unexpected \"' + this.char + '\"');\n\t\t\t\t}\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tch = this.code;\n\t\t\t\tif (ch !== Jsep.CBRACK_CODE) {\n\t\t\t\t\tthis.throwError('Unclosed [');\n\t\t\t\t}\n\t\t\t\tthis.index++;\n\t\t\t}\n\t\t\telse if (ch === Jsep.OPAREN_CODE) {\n\t\t\t\t// A function call is being made; gobble all the arguments\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.CALL_EXP,\n\t\t\t\t\t'arguments': this.gobbleArguments(Jsep.CPAREN_CODE),\n\t\t\t\t\tcallee: node\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if (ch === Jsep.PERIOD_CODE || optional) {\n\t\t\t\tif (optional) {\n\t\t\t\t\tthis.index--;\n\t\t\t\t}\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.MEMBER_EXP,\n\t\t\t\t\tcomputed: false,\n\t\t\t\t\tobject: node,\n\t\t\t\t\tproperty: this.gobbleIdentifier(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (optional) {\n\t\t\t\tnode.optional = true;\n\t\t\t} // else leave undefined for compatibility with esprima\n\n\t\t\tthis.gobbleSpaces();\n\t\t\tch = this.code;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to\n\t * keep track of everything in the numeric literal and then calling `parseFloat` on that string\n\t * @returns {jsep.Literal}\n\t */\n\tgobbleNumericLiteral() {\n\t\tlet number = '', ch, chCode;\n\n\t\twhile (Jsep.isDecimalDigit(this.code)) {\n\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t}\n\n\t\tif (this.code === Jsep.PERIOD_CODE) { // can start with a decimal marker\n\t\t\tnumber += this.expr.charAt(this.index++);\n\n\t\t\twhile (Jsep.isDecimalDigit(this.code)) {\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\t\t}\n\n\t\tch = this.char;\n\n\t\tif (ch === 'e' || ch === 'E') { // exponent marker\n\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\tch = this.char;\n\n\t\t\tif (ch === '+' || ch === '-') { // exponent sign\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\n\t\t\twhile (Jsep.isDecimalDigit(this.code)) { // exponent itself\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\n\t\t\tif (!Jsep.isDecimalDigit(this.expr.charCodeAt(this.index - 1)) ) {\n\t\t\t\tthis.throwError('Expected exponent (' + number + this.char + ')');\n\t\t\t}\n\t\t}\n\n\t\tchCode = this.code;\n\n\t\t// Check to make sure this isn't a variable name that start with a number (123abc)\n\t\tif (Jsep.isIdentifierStart(chCode)) {\n\t\t\tthis.throwError('Variable names cannot start with a number (' +\n\t\t\t\tnumber + this.char + ')');\n\t\t}\n\t\telse if (chCode === Jsep.PERIOD_CODE || (number.length === 1 && number.charCodeAt(0) === Jsep.PERIOD_CODE)) {\n\t\t\tthis.throwError('Unexpected period');\n\t\t}\n\n\t\treturn {\n\t\t\ttype: Jsep.LITERAL,\n\t\t\tvalue: parseFloat(number),\n\t\t\traw: number\n\t\t};\n\t}\n\n\t/**\n\t * Parses a string literal, staring with single or double quotes with basic support for escape codes\n\t * e.g. `\"hello world\"`, `'this is\\nJSEP'`\n\t * @returns {jsep.Literal}\n\t */\n\tgobbleStringLiteral() {\n\t\tlet str = '';\n\t\tconst startIndex = this.index;\n\t\tconst quote = this.expr.charAt(this.index++);\n\t\tlet closed = false;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tlet ch = this.expr.charAt(this.index++);\n\n\t\t\tif (ch === quote) {\n\t\t\t\tclosed = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (ch === '\\\\') {\n\t\t\t\t// Check for all of the common escape codes\n\t\t\t\tch = this.expr.charAt(this.index++);\n\n\t\t\t\tswitch (ch) {\n\t\t\t\t\tcase 'n': str += '\\n'; break;\n\t\t\t\t\tcase 'r': str += '\\r'; break;\n\t\t\t\t\tcase 't': str += '\\t'; break;\n\t\t\t\t\tcase 'b': str += '\\b'; break;\n\t\t\t\t\tcase 'f': str += '\\f'; break;\n\t\t\t\t\tcase 'v': str += '\\x0B'; break;\n\t\t\t\t\tdefault : str += ch;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstr += ch;\n\t\t\t}\n\t\t}\n\n\t\tif (!closed) {\n\t\t\tthis.throwError('Unclosed quote after \"' + str + '\"');\n\t\t}\n\n\t\treturn {\n\t\t\ttype: Jsep.LITERAL,\n\t\t\tvalue: str,\n\t\t\traw: this.expr.substring(startIndex, this.index),\n\t\t};\n\t}\n\n\t/**\n\t * Gobbles only identifiers\n\t * e.g.: `foo`, `_value`, `$x1`\n\t * Also, this function checks if that identifier is a literal:\n\t * (e.g. `true`, `false`, `null`) or `this`\n\t * @returns {jsep.Identifier}\n\t */\n\tgobbleIdentifier() {\n\t\tlet ch = this.code, start = this.index;\n\n\t\tif (Jsep.isIdentifierStart(ch)) {\n\t\t\tthis.index++;\n\t\t}\n\t\telse {\n\t\t\tthis.throwError('Unexpected ' + this.char);\n\t\t}\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tch = this.code;\n\n\t\t\tif (Jsep.isIdentifierPart(ch)) {\n\t\t\t\tthis.index++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttype: Jsep.IDENTIFIER,\n\t\t\tname: this.expr.slice(start, this.index),\n\t\t};\n\t}\n\n\t/**\n\t * Gobbles a list of arguments within the context of a function call\n\t * or array literal. This function also assumes that the opening character\n\t * `(` or `[` has already been gobbled, and gobbles expressions and commas\n\t * until the terminator character `)` or `]` is encountered.\n\t * e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`\n\t * @param {number} termination\n\t * @returns {jsep.Expression[]}\n\t */\n\tgobbleArguments(termination) {\n\t\tconst args = [];\n\t\tlet closed = false;\n\t\tlet separator_count = 0;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tthis.gobbleSpaces();\n\t\t\tlet ch_i = this.code;\n\n\t\t\tif (ch_i === termination) { // done parsing\n\t\t\t\tclosed = true;\n\t\t\t\tthis.index++;\n\n\t\t\t\tif (termination === Jsep.CPAREN_CODE && separator_count && separator_count >= args.length){\n\t\t\t\t\tthis.throwError('Unexpected token ' + String.fromCharCode(termination));\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (ch_i === Jsep.COMMA_CODE) { // between expressions\n\t\t\t\tthis.index++;\n\t\t\t\tseparator_count++;\n\n\t\t\t\tif (separator_count !== args.length) { // missing argument\n\t\t\t\t\tif (termination === Jsep.CPAREN_CODE) {\n\t\t\t\t\t\tthis.throwError('Unexpected token ,');\n\t\t\t\t\t}\n\t\t\t\t\telse if (termination === Jsep.CBRACK_CODE) {\n\t\t\t\t\t\tfor (let arg = args.length; arg < separator_count; arg++) {\n\t\t\t\t\t\t\targs.push(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (args.length !== separator_count && separator_count !== 0) {\n\t\t\t\t// NOTE: `&& separator_count !== 0` allows for either all commas, or all spaces as arguments\n\t\t\t\tthis.throwError('Expected comma');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst node = this.gobbleExpression();\n\n\t\t\t\tif (!node || node.type === Jsep.COMPOUND) {\n\t\t\t\t\tthis.throwError('Expected comma');\n\t\t\t\t}\n\n\t\t\t\targs.push(node);\n\t\t\t}\n\t\t}\n\n\t\tif (!closed) {\n\t\t\tthis.throwError('Expected ' + String.fromCharCode(termination));\n\t\t}\n\n\t\treturn args;\n\t}\n\n\t/**\n\t * Responsible for parsing a group of things within parentheses `()`\n\t * that have no identifier in front (so not a function call)\n\t * This function assumes that it needs to gobble the opening parenthesis\n\t * and then tries to gobble everything within that parenthesis, assuming\n\t * that the next thing it should see is the close parenthesis. If not,\n\t * then the expression probably doesn't have a `)`\n\t * @returns {boolean|jsep.Expression}\n\t */\n\tgobbleGroup() {\n\t\tthis.index++;\n\t\tlet nodes = this.gobbleExpressions(Jsep.CPAREN_CODE);\n\t\tif (this.code === Jsep.CPAREN_CODE) {\n\t\t\tthis.index++;\n\t\t\tif (nodes.length === 1) {\n\t\t\t\treturn nodes[0];\n\t\t\t}\n\t\t\telse if (!nodes.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn {\n\t\t\t\t\ttype: Jsep.SEQUENCE_EXP,\n\t\t\t\t\texpressions: nodes,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.throwError('Unclosed (');\n\t\t}\n\t}\n\n\t/**\n\t * Responsible for parsing Array literals `[1, 2, 3]`\n\t * This function assumes that it needs to gobble the opening bracket\n\t * and then tries to gobble the expressions as arguments.\n\t * @returns {jsep.ArrayExpression}\n\t */\n\tgobbleArray() {\n\t\tthis.index++;\n\n\t\treturn {\n\t\t\ttype: Jsep.ARRAY_EXP,\n\t\t\telements: this.gobbleArguments(Jsep.CBRACK_CODE)\n\t\t};\n\t}\n}\n\n// Static fields:\nconst hooks = new Hooks();\nObject.assign(Jsep, {\n\thooks,\n\tplugins: new Plugins(Jsep),\n\n\t// Node Types\n\t// ----------\n\t// This is the full set of types that any JSEP node can be.\n\t// Store them here to save space when minified\n\tCOMPOUND: 'Compound',\n\tSEQUENCE_EXP: 'SequenceExpression',\n\tIDENTIFIER: 'Identifier',\n\tMEMBER_EXP: 'MemberExpression',\n\tLITERAL: 'Literal',\n\tTHIS_EXP: 'ThisExpression',\n\tCALL_EXP: 'CallExpression',\n\tUNARY_EXP: 'UnaryExpression',\n\tBINARY_EXP: 'BinaryExpression',\n\tARRAY_EXP: 'ArrayExpression',\n\n\tTAB_CODE: 9,\n\tLF_CODE: 10,\n\tCR_CODE: 13,\n\tSPACE_CODE: 32,\n\tPERIOD_CODE: 46, // '.'\n\tCOMMA_CODE: 44, // ','\n\tSQUOTE_CODE: 39, // single quote\n\tDQUOTE_CODE: 34, // double quotes\n\tOPAREN_CODE: 40, // (\n\tCPAREN_CODE: 41, // )\n\tOBRACK_CODE: 91, // [\n\tCBRACK_CODE: 93, // ]\n\tQUMARK_CODE: 63, // ?\n\tSEMCOL_CODE: 59, // ;\n\tCOLON_CODE: 58, // :\n\n\n\t// Operations\n\t// ----------\n\t// Use a quickly-accessible map to store all of the unary operators\n\t// Values are set to `1` (it really doesn't matter)\n\tunary_ops: {\n\t\t'-': 1,\n\t\t'!': 1,\n\t\t'~': 1,\n\t\t'+': 1\n\t},\n\n\t// Also use a map for the binary operations but set their values to their\n\t// binary precedence for quick reference (higher number = higher precedence)\n\t// see [Order of operations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)\n\tbinary_ops: {\n\t\t'||': 1, '??': 1,\n\t\t'&&': 2, '|': 3, '^': 4, '&': 5,\n\t\t'==': 6, '!=': 6, '===': 6, '!==': 6,\n\t\t'<': 7, '>': 7, '<=': 7, '>=': 7,\n\t\t'<<': 8, '>>': 8, '>>>': 8,\n\t\t'+': 9, '-': 9,\n\t\t'*': 10, '/': 10, '%': 10,\n\t\t'**': 11,\n\t},\n\n\t// sets specific binary_ops as right-associative\n\tright_associative: new Set(['**']),\n\n\t// Additional valid identifier chars, apart from a-z, A-Z and 0-9 (except on the starting char)\n\tadditional_identifier_chars: new Set(['$', '_']),\n\n\t// Literals\n\t// ----------\n\t// Store the values to return for the various literals we may encounter\n\tliterals: {\n\t\t'true': true,\n\t\t'false': false,\n\t\t'null': null\n\t},\n\n\t// Except for `this`, which is special. This could be changed to something like `'self'` as well\n\tthis_str: 'this',\n});\nJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\nJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\n// Backward Compatibility:\nconst jsep = expr => (new Jsep(expr)).parse();\nconst stdClassProps = Object.getOwnPropertyNames(class Test{});\nObject.getOwnPropertyNames(Jsep)\n\t.filter(prop => !stdClassProps.includes(prop) && jsep[prop] === undefined)\n\t.forEach((m) => {\n\t\tjsep[m] = Jsep[m];\n\t});\njsep.Jsep = Jsep; // allows for const { Jsep } = require('jsep');\n\nconst CONDITIONAL_EXP = 'ConditionalExpression';\n\nvar ternary = {\n\tname: 'ternary',\n\n\tinit(jsep) {\n\t\t// Ternary expression: test ? consequent : alternate\n\t\tjsep.hooks.add('after-expression', function gobbleTernary(env) {\n\t\t\tif (env.node && this.code === jsep.QUMARK_CODE) {\n\t\t\t\tthis.index++;\n\t\t\t\tconst test = env.node;\n\t\t\t\tconst consequent = this.gobbleExpression();\n\n\t\t\t\tif (!consequent) {\n\t\t\t\t\tthis.throwError('Expected expression');\n\t\t\t\t}\n\n\t\t\t\tthis.gobbleSpaces();\n\n\t\t\t\tif (this.code === jsep.COLON_CODE) {\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tconst alternate = this.gobbleExpression();\n\n\t\t\t\t\tif (!alternate) {\n\t\t\t\t\t\tthis.throwError('Expected expression');\n\t\t\t\t\t}\n\t\t\t\t\tenv.node = {\n\t\t\t\t\t\ttype: CONDITIONAL_EXP,\n\t\t\t\t\t\ttest,\n\t\t\t\t\t\tconsequent,\n\t\t\t\t\t\talternate,\n\t\t\t\t\t};\n\n\t\t\t\t\t// check for operators of higher priority than ternary (i.e. assignment)\n\t\t\t\t\t// jsep sets || at 1, and assignment at 0.9, and conditional should be between them\n\t\t\t\t\tif (test.operator && jsep.binary_ops[test.operator] <= 0.9) {\n\t\t\t\t\t\tlet newTest = test;\n\t\t\t\t\t\twhile (newTest.right.operator && jsep.binary_ops[newTest.right.operator] <= 0.9) {\n\t\t\t\t\t\t\tnewTest = newTest.right;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tenv.node.test = newTest.right;\n\t\t\t\t\t\tnewTest.right = env.node;\n\t\t\t\t\t\tenv.node = test;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.throwError('Expected :');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n};\n\n// Add default plugins:\n\njsep.plugins.register(ternary);\n\nexport { Jsep, jsep as default };\n","/*!\r\n * decimal.js v10.6.0\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js\r\n * Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licence\r\n */\r\n\r\n\r\n// ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The maximum exponent magnitude.\r\n // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\r\nvar EXP_LIMIT = 9e15, // 0 to 9e15\r\n\r\n // The limit on the value of `precision`, and on the value of the first argument to\r\n // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n // Base conversion alphabet.\r\n NUMERALS = '0123456789abcdef',\r\n\r\n // The natural logarithm of 10 (1025 digits).\r\n LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\r\n\r\n // Pi (1025 digits).\r\n PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n DEFAULTS = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed at run-time using the `Decimal.config` method.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. `Decimal.config({ precision: 20 });`\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used when rounding to `precision`.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `Decimal.rounding = 4;`\r\n // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n rounding: 4, // 0 to 8\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend (JavaScript %).\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 The IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\r\n //\r\n // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\r\n // division (9) are commonly used for the modulus operation. The other rounding modes can also\r\n // be used, but they may not give useful results.\r\n modulo: 1, // 0 to 9\r\n\r\n // The exponent value at and beneath which `toString` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -EXP_LIMIT\r\n\r\n // The exponent value at and above which `toString` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to EXP_LIMIT\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // JavaScript numbers: -324 (5e-324)\r\n minE: -EXP_LIMIT, // -1 to -EXP_LIMIT\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // JavaScript numbers: 308 (1.7976931348623157e+308)\r\n maxE: EXP_LIMIT, // 1 to EXP_LIMIT\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n crypto: false // true/false\r\n },\r\n\r\n\r\n// ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n inexact, quadrant,\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n precisionLimitExceeded = decimalError + 'Precision limit exceeded',\r\n cryptoUnavailable = decimalError + 'crypto unavailable',\r\n tag = '[object Decimal]',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\r\n isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\r\n isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n\r\n LN10_PRECISION = LN10.length - 1,\r\n PI_PRECISION = PI.length - 1,\r\n\r\n // Decimal.prototype object\r\n P = { toStringTag: tag };\r\n\r\n\r\n// Decimal prototype methods\r\n\r\n\r\n/*\r\n * absoluteValue abs\r\n * ceil\r\n * clampedTo clamp\r\n * comparedTo cmp\r\n * cosine cos\r\n * cubeRoot cbrt\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy divToInt\r\n * equals eq\r\n * floor\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * hyperbolicCosine cosh\r\n * hyperbolicSine sinh\r\n * hyperbolicTangent tanh\r\n * inverseCosine acos\r\n * inverseHyperbolicCosine acosh\r\n * inverseHyperbolicSine asinh\r\n * inverseHyperbolicTangent atanh\r\n * inverseSine asin\r\n * inverseTangent atan\r\n * isFinite\r\n * isInteger isInt\r\n * isNaN\r\n * isNegative isNeg\r\n * isPositive isPos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * [maximum] [max]\r\n * [minimum] [min]\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * round\r\n * sine sin\r\n * squareRoot sqrt\r\n * tangent tan\r\n * times mul\r\n * toBinary\r\n * toDecimalPlaces toDP\r\n * toExponential\r\n * toFixed\r\n * toFraction\r\n * toHexadecimal toHex\r\n * toNearest\r\n * toNumber\r\n * toOctal\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits toSD\r\n * toString\r\n * truncated trunc\r\n * valueOf toJSON\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\nP.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s < 0) x.s = 1;\r\n return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of positive Infinity.\r\n *\r\n */\r\nP.ceil = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n * delineated by `min` and `max`.\r\n *\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\nP.clampedTo = P.clamp = function (min, max) {\r\n var k,\r\n x = this,\r\n Ctor = x.constructor;\r\n min = new Ctor(min);\r\n max = new Ctor(max);\r\n if (!min.s || !max.s) return new Ctor(NaN);\r\n if (min.gt(max)) throw Error(invalidArgument + max);\r\n k = x.cmp(min);\r\n return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\r\n};\r\n\r\n\r\n/*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `y`,\r\n * -1 if the value of this Decimal is less than the value of `y`,\r\n * 0 if they have the same value,\r\n * NaN if the value of either Decimal is NaN.\r\n *\r\n */\r\nP.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this,\r\n xd = x.d,\r\n yd = (y = new x.constructor(y)).d,\r\n xs = x.s,\r\n ys = y.s;\r\n\r\n // Either NaN or ±Infinity?\r\n if (!xd || !yd) {\r\n return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Either zero?\r\n if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\r\n\r\n // Signs differ?\r\n if (xs !== ys) return xs;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\r\n\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * cos(0) = 1\r\n * cos(-0) = 1\r\n * cos(Infinity) = NaN\r\n * cos(-Infinity) = NaN\r\n * cos(NaN) = NaN\r\n *\r\n */\r\nP.cosine = P.cos = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.d) return new Ctor(NaN);\r\n\r\n // cos(0) = cos(-0) = 1\r\n if (!x.d[0]) return new Ctor(1);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *\r\n * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * cbrt(0) = 0\r\n * cbrt(-0) = -0\r\n * cbrt(1) = 1\r\n * cbrt(-1) = -1\r\n * cbrt(N) = N\r\n * cbrt(-I) = -I\r\n * cbrt(I) = I\r\n *\r\n * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n *\r\n */\r\nP.cubeRoot = P.cbrt = function () {\r\n var e, m, n, r, rep, s, sd, t, t3, t3plusx,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = x.s * mathpow(x.s * x, 1 / 3);\r\n\r\n // Math.cbrt underflow/overflow?\r\n // Pass x to Math.pow as integer, then adjust the exponent of the result.\r\n if (!s || Math.abs(s) == 1 / 0) {\r\n n = digitsToString(x.d);\r\n e = x.e;\r\n\r\n // Adjust n exponent so it is a multiple of 3 away from x exponent.\r\n if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\r\n s = mathpow(n, 1 / 3);\r\n\r\n // Rarely, e may be one less than the result exponent value.\r\n e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n r.s = x.s;\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Halley's method.\r\n // TODO? Compare Newton's method.\r\n for (;;) {\r\n t = r;\r\n t3 = t.times(t).times(t);\r\n t3plusx = t3.plus(x);\r\n r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\r\n // , i.e. approaching a rounding boundary, continue the iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n finalise(r, e + 1, 1);\r\n m = !r.times(r).times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\nP.decimalPlaces = P.dp = function () {\r\n var w,\r\n d = this.d,\r\n n = NaN;\r\n\r\n if (d) {\r\n w = d.length - 1;\r\n n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) n--;\r\n if (n < 0) n = 0;\r\n }\r\n\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedToIntegerBy = P.divToInt = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\nP.equals = P.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of negative Infinity.\r\n *\r\n */\r\nP.floor = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 3);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\nP.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\nP.greaterThanOrEqualTo = P.gte = function (y) {\r\n var k = this.cmp(y);\r\n return k == 1 || k === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [1, Infinity]\r\n *\r\n * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n *\r\n * cosh(0) = 1\r\n * cosh(-0) = 1\r\n * cosh(Infinity) = Infinity\r\n * cosh(-Infinity) = Infinity\r\n * cosh(NaN) = NaN\r\n *\r\n * x time taken (ms) result\r\n * 1000 9 9.8503555700852349694e+433\r\n * 10000 25 4.4034091128314607936e+4342\r\n * 100000 171 1.4033316802130615897e+43429\r\n * 1000000 3817 1.5166076984010437725e+434294\r\n * 10000000 abandoned after 2 minute wait\r\n *\r\n * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n *\r\n */\r\nP.hyperbolicCosine = P.cosh = function () {\r\n var k, n, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor,\r\n one = new Ctor(1);\r\n\r\n if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\r\n if (x.isZero()) return one;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\r\n // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n // TODO? Estimation reused from cosine() and may not be optimal here.\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n n = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n n = '2.3283064365386962890625e-10';\r\n }\r\n\r\n x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\r\n\r\n // Reverse argument reduction\r\n var cosh2_x,\r\n i = k,\r\n d8 = new Ctor(8);\r\n for (; i--;) {\r\n cosh2_x = x.times(x);\r\n x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\r\n }\r\n\r\n return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n *\r\n * sinh(0) = 0\r\n * sinh(-0) = -0\r\n * sinh(Infinity) = Infinity\r\n * sinh(-Infinity) = -Infinity\r\n * sinh(NaN) = NaN\r\n *\r\n * x time taken (ms)\r\n * 10 2 ms\r\n * 100 5 ms\r\n * 1000 14 ms\r\n * 10000 82 ms\r\n * 100000 886 ms 1.4033316802130615897e+43429\r\n * 200000 2613 ms\r\n * 300000 5407 ms\r\n * 400000 8824 ms\r\n * 500000 13026 ms 8.7080643612718084129e+217146\r\n * 1000000 48543 ms\r\n *\r\n * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n *\r\n */\r\nP.hyperbolicSine = P.sinh = function () {\r\n var k, pr, rm, len,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n } else {\r\n\r\n // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\r\n // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\r\n // 3 multiplications and 1 addition\r\n\r\n // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\r\n // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\r\n // 4 multiplications and 2 additions\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x, true);\r\n\r\n // Reverse argument reduction\r\n var sinh2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sinh2_x = x.times(x);\r\n x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\r\n }\r\n }\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * tanh(x) = sinh(x) / cosh(x)\r\n *\r\n * tanh(0) = 0\r\n * tanh(-0) = -0\r\n * tanh(Infinity) = 1\r\n * tanh(-Infinity) = -1\r\n * tanh(NaN) = NaN\r\n *\r\n */\r\nP.hyperbolicTangent = P.tanh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(x.s);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 7;\r\n Ctor.rounding = 1;\r\n\r\n return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n * this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [0, pi]\r\n *\r\n * acos(x) = pi/2 - asin(x)\r\n *\r\n * acos(0) = pi/2\r\n * acos(-0) = pi/2\r\n * acos(1) = 0\r\n * acos(-1) = pi\r\n * acos(1/2) = pi/3\r\n * acos(-1/2) = 2*pi/3\r\n * acos(|x| > 1) = NaN\r\n * acos(NaN) = NaN\r\n *\r\n */\r\nP.inverseCosine = P.acos = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n k = x.abs().cmp(1),\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n return k === 0\r\n // |x| is 1\r\n ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\r\n // |x| > 1 or x is NaN\r\n : new Ctor(NaN);\r\n }\r\n\r\n if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n // See https://github.com/MikeMcl/decimal.js/pull/217\r\n x = new Ctor(1).minus(x).div(x.plus(1)).sqrt().atan();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [1, Infinity]\r\n * Range: [0, Infinity]\r\n *\r\n * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n *\r\n * acosh(x < 1) = NaN\r\n * acosh(NaN) = NaN\r\n * acosh(Infinity) = Infinity\r\n * acosh(-Infinity) = NaN\r\n * acosh(0) = NaN\r\n * acosh(-0) = NaN\r\n * acosh(1) = 0\r\n * acosh(-1) = NaN\r\n *\r\n */\r\nP.inverseHyperbolicCosine = P.acosh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\r\n if (!x.isFinite()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).minus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n *\r\n * asinh(NaN) = NaN\r\n * asinh(Infinity) = Infinity\r\n * asinh(-Infinity) = -Infinity\r\n * asinh(0) = 0\r\n * asinh(-0) = -0\r\n *\r\n */\r\nP.inverseHyperbolicSine = P.asinh = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\r\n Ctor.rounding = 1;\r\n external = false;\r\n\r\n x = x.times(x).plus(1).sqrt().plus(x);\r\n\r\n external = true;\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n *\r\n * atanh(|x| > 1) = NaN\r\n * atanh(NaN) = NaN\r\n * atanh(Infinity) = NaN\r\n * atanh(-Infinity) = NaN\r\n * atanh(0) = 0\r\n * atanh(-0) = -0\r\n * atanh(1) = Infinity\r\n * atanh(-1) = -Infinity\r\n *\r\n */\r\nP.inverseHyperbolicTangent = P.atanh = function () {\r\n var pr, rm, wpr, xsd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n xsd = x.sd();\r\n\r\n if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\r\n\r\n Ctor.precision = wpr = xsd - x.e;\r\n\r\n x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\r\n\r\n Ctor.precision = pr + 4;\r\n Ctor.rounding = 1;\r\n\r\n x = x.ln();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(0.5);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n *\r\n * asin(0) = 0\r\n * asin(-0) = -0\r\n * asin(1/2) = pi/6\r\n * asin(-1/2) = -pi/6\r\n * asin(1) = pi/2\r\n * asin(-1) = -pi/2\r\n * asin(|x| > 1) = NaN\r\n * asin(NaN) = NaN\r\n *\r\n * TODO? Compare performance of Taylor series.\r\n *\r\n */\r\nP.inverseSine = P.asin = function () {\r\n var halfPi, k,\r\n pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n k = x.abs().cmp(1);\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (k !== -1) {\r\n\r\n // |x| is 1\r\n if (k === 0) {\r\n halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n halfPi.s = x.s;\r\n return halfPi;\r\n }\r\n\r\n // |x| > 1 or x is NaN\r\n return new Ctor(NaN);\r\n }\r\n\r\n // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\r\n\r\n Ctor.precision = pr + 6;\r\n Ctor.rounding = 1;\r\n\r\n x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n *\r\n * atan(0) = 0\r\n * atan(-0) = -0\r\n * atan(1) = pi/4\r\n * atan(-1) = -pi/4\r\n * atan(Infinity) = pi/2\r\n * atan(-Infinity) = -pi/2\r\n * atan(NaN) = NaN\r\n *\r\n */\r\nP.inverseTangent = P.atan = function () {\r\n var i, j, k, n, px, t, r, wpr, x2,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding;\r\n\r\n if (!x.isFinite()) {\r\n if (!x.s) return new Ctor(NaN);\r\n if (pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.5);\r\n r.s = x.s;\r\n return r;\r\n }\r\n } else if (x.isZero()) {\r\n return new Ctor(x);\r\n } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\r\n r = getPi(Ctor, pr + 4, rm).times(0.25);\r\n r.s = x.s;\r\n return r;\r\n }\r\n\r\n Ctor.precision = wpr = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\r\n\r\n // Argument reduction\r\n // Ensure |x| < 0.42\r\n // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\r\n\r\n k = Math.min(28, wpr / LOG_BASE + 2 | 0);\r\n\r\n for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\r\n\r\n external = false;\r\n\r\n j = Math.ceil(wpr / LOG_BASE);\r\n n = 1;\r\n x2 = x.times(x);\r\n r = new Ctor(x);\r\n px = x;\r\n\r\n // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n for (; i !== -1;) {\r\n px = px.times(x2);\r\n t = r.minus(px.div(n += 2));\r\n\r\n px = px.times(x2);\r\n r = t.plus(px.div(n += 2));\r\n\r\n if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\r\n }\r\n\r\n if (k) r = r.times(2 << (k - 1));\r\n\r\n external = true;\r\n\r\n return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n *\r\n */\r\nP.isFinite = function () {\r\n return !!this.d;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\nP.isInteger = P.isInt = function () {\r\n return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is NaN, otherwise return false.\r\n *\r\n */\r\nP.isNaN = function () {\r\n return !this.s;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\nP.isNegative = P.isNeg = function () {\r\n return this.s < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\nP.isPositive = P.isPos = function () {\r\n return this.s > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n *\r\n */\r\nP.isZero = function () {\r\n return !!this.d && this.d[0] === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * If no base is specified, return log[10](arg).\r\n *\r\n * log[base](arg) = ln(arg) / ln(base)\r\n *\r\n * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n * otherwise:\r\n *\r\n * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n *\r\n * log[-b](a) = NaN\r\n * log[0](a) = NaN\r\n * log[1](a) = NaN\r\n * log[NaN](a) = NaN\r\n * log[Infinity](a) = NaN\r\n * log[b](0) = -Infinity\r\n * log[b](-0) = -Infinity\r\n * log[b](-a) = NaN\r\n * log[b](1) = 0\r\n * log[b](Infinity) = Infinity\r\n * log[b](NaN) = NaN\r\n *\r\n * [base] {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\nP.logarithm = P.log = function (base) {\r\n var isBase10, d, denominator, k, inf, num, sd, r,\r\n arg = this,\r\n Ctor = arg.constructor,\r\n pr = Ctor.precision,\r\n rm = Ctor.rounding,\r\n guard = 5;\r\n\r\n // Default base is 10.\r\n if (base == null) {\r\n base = new Ctor(10);\r\n isBase10 = true;\r\n } else {\r\n base = new Ctor(base);\r\n d = base.d;\r\n\r\n // Return NaN if base is negative, or non-finite, or is 0 or 1.\r\n if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\r\n\r\n isBase10 = base.eq(10);\r\n }\r\n\r\n d = arg.d;\r\n\r\n // Is arg negative, non-finite, 0 or 1?\r\n if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\r\n return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\r\n }\r\n\r\n // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\r\n // integer power of 10.\r\n if (isBase10) {\r\n if (d.length > 1) {\r\n inf = true;\r\n } else {\r\n for (k = d[0]; k % 10 === 0;) k /= 10;\r\n inf = k !== 1;\r\n }\r\n }\r\n\r\n external = false;\r\n sd = pr + guard;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n\r\n // The result will have 5 rounding digits.\r\n r = divide(num, denominator, sd, 1);\r\n\r\n // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\r\n // calculate 10 further digits.\r\n //\r\n // If the result is known to have an infinite decimal expansion, repeat this until it is clear\r\n // that the result is above or below the boundary. Otherwise, if after calculating the 10\r\n // further digits, the last 14 are nines, round up and assume the result is exact.\r\n // Also assume the result is exact if the last 14 are zero.\r\n //\r\n // Example of a result that will be incorrectly rounded:\r\n // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\r\n // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\r\n // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\r\n // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\r\n // place is still 2.6.\r\n if (checkRoundingDigits(r.d, k = pr, rm)) {\r\n\r\n do {\r\n sd += 10;\r\n num = naturalLogarithm(arg, sd);\r\n denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n r = divide(num, denominator, sd, 1);\r\n\r\n if (!inf) {\r\n\r\n // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\r\n if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n\r\n break;\r\n }\r\n } while (checkRoundingDigits(r.d, k += 10, rm));\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.max = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, -1);\r\n};\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.min = function () {\r\n Array.prototype.push.call(arguments, this);\r\n return maxOrMin(this.constructor, arguments, 1);\r\n};\r\n */\r\n\r\n\r\n/*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.minus = P.sub = function (y) {\r\n var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return y negated if x is finite and y is ±Infinity.\r\n else if (x.d) y.s = -y.s;\r\n\r\n // Return x if y is finite and x is ±Infinity.\r\n // Return x if both are ±Infinity with different signs.\r\n // Return NaN if both are ±Infinity with the same sign.\r\n else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.plus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return y negated if x is zero and y is non-zero.\r\n if (yd[0]) y.s = -y.s;\r\n\r\n // Return x if y is zero and x is non-zero.\r\n else if (xd[0]) y = new Ctor(x);\r\n\r\n // Return zero if both are zero.\r\n // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\r\n else return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n e = mathfloor(y.e / LOG_BASE);\r\n xe = mathfloor(x.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of\r\n // zeros needing to be prepended, but this can be avoided while still ensuring correct\r\n // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to `xd` if shorter.\r\n // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * The result depends on the modulo mode.\r\n *\r\n */\r\nP.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // Return NaN if x is ±Infinity or NaN, or y is NaN or ±0.\r\n if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\r\n\r\n // Return x if y is ±Infinity or x is ±0.\r\n if (!y.d || x.d && !x.d[0]) {\r\n return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\r\n }\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n\r\n if (Ctor.modulo == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // result = x - q * y where 0 <= result < abs(y)\r\n q = divide(x, y.abs(), 0, 3, 1);\r\n q.s *= y.s;\r\n } else {\r\n q = divide(x, y, 0, Ctor.modulo, 1);\r\n }\r\n\r\n q = q.times(y);\r\n\r\n external = true;\r\n\r\n return x.minus(q);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalExponential = P.exp = function () {\r\n return naturalExponential(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalLogarithm = P.ln = function () {\r\n return naturalLogarithm(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\nP.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.plus = P.add = function (y) {\r\n var carry, d, e, i, k, len, pr, rm, xd, yd,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n y = new Ctor(y);\r\n\r\n // If either is not finite...\r\n if (!x.d || !y.d) {\r\n\r\n // Return NaN if either is NaN.\r\n if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n // Return x if y is finite and x is ±Infinity.\r\n // Return x if both are ±Infinity with the same sign.\r\n // Return NaN if both are ±Infinity with different signs.\r\n // Return y if x is finite and y is ±Infinity.\r\n else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\r\n\r\n return y;\r\n }\r\n\r\n // If signs differ...\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n // If either is zero...\r\n if (!xd[0] || !yd[0]) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!yd[0]) y = new Ctor(x);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n }\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n // Calculate base 1e7 exponents.\r\n k = mathfloor(x.e / LOG_BASE);\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = getBase10Exponent(xd, e);\r\n\r\n return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\nP.precision = P.sd = function (z) {\r\n var k,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n if (x.d) {\r\n k = getPrecision(x.d);\r\n if (z && x.e + 1 > k) k = x.e + 1;\r\n } else {\r\n k = NaN;\r\n }\r\n\r\n return k;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\nP.round = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n *\r\n * sin(0) = 0\r\n * sin(-0) = -0\r\n * sin(Infinity) = NaN\r\n * sin(-Infinity) = NaN\r\n * sin(NaN) = NaN\r\n *\r\n */\r\nP.sine = P.sin = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n Ctor.rounding = 1;\r\n\r\n x = sine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n */\r\nP.squareRoot = P.sqrt = function () {\r\n var m, n, sd, r, rep, t,\r\n x = this,\r\n d = x.d,\r\n e = x.e,\r\n s = x.s,\r\n Ctor = x.constructor;\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !d || !d[0]) {\r\n return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\r\n }\r\n\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+x);\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = digitsToString(d);\r\n\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n sd = (e = Ctor.precision) + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\r\n\r\n // TODO? Replace with for-loop and checkRoundingDigits.\r\n if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n n = n.slice(sd - 3, sd + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n if (!rep) {\r\n finalise(t, e + 1, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n sd += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n // If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n finalise(r, e + 1, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * tan(0) = 0\r\n * tan(-0) = -0\r\n * tan(Infinity) = NaN\r\n * tan(-Infinity) = NaN\r\n * tan(NaN) = NaN\r\n *\r\n */\r\nP.tangent = P.tan = function () {\r\n var pr, rm,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (!x.isFinite()) return new Ctor(NaN);\r\n if (x.isZero()) return new Ctor(x);\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n Ctor.precision = pr + 10;\r\n Ctor.rounding = 1;\r\n\r\n x = x.sin();\r\n x.s = 1;\r\n x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\r\n\r\n Ctor.precision = pr;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n y.s *= x.s;\r\n\r\n // If either is NaN, ±Infinity or ±0...\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\r\n\r\n // Return NaN if either is NaN.\r\n // Return NaN if x is ±0 and y is ±Infinity, or y is ±0 and x is ±Infinity.\r\n ? NaN\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n // Return ±0 if either is ±0.\r\n : !xd || !yd ? y.s / 0 : y.s * 0);\r\n }\r\n\r\n e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = getBase10Exponent(r, e);\r\n\r\n return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toBinary = function (sd, rm) {\r\n return toStringBinary(this, 2, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toDecimalPlaces = P.toDP = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return finalise(x, dp + x.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), dp + 1, rm);\r\n str = finiteToString(x, true, dp + 1);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = finiteToString(x);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = finalise(new Ctor(x), dp + x.e + 1, rm);\r\n str = finiteToString(y, false, dp + y.e + 1);\r\n }\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at `x` rather than `y`.\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n * numerator and an integer denominator.\r\n *\r\n * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n * value necessary to represent the number exactly.\r\n *\r\n * [maxD] {number|string|bigint|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n *\r\n */\r\nP.toFraction = function (maxD) {\r\n var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\r\n x = this,\r\n xd = x.d,\r\n Ctor = x.constructor;\r\n\r\n if (!xd) return new Ctor(x);\r\n\r\n n1 = d0 = new Ctor(1);\r\n d1 = n0 = new Ctor(0);\r\n\r\n d = new Ctor(d1);\r\n e = d.e = getPrecision(xd) - x.e - 1;\r\n k = e % LOG_BASE;\r\n d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\r\n\r\n if (maxD == null) {\r\n\r\n // d is 10**e, the minimum max-denominator needed.\r\n maxD = e > 0 ? d : n1;\r\n } else {\r\n n = new Ctor(maxD);\r\n if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\r\n maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\r\n }\r\n\r\n external = false;\r\n n = new Ctor(digitsToString(xd));\r\n pr = Ctor.precision;\r\n Ctor.precision = e = xd.length * LOG_BASE * 2;\r\n\r\n for (;;) {\r\n q = divide(n, d, 0, 1, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.cmp(maxD) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n d2 = n1;\r\n n1 = n0.plus(q.times(d2));\r\n n0 = d2;\r\n d2 = d;\r\n d = n.minus(q.times(d2));\r\n n = d2;\r\n }\r\n\r\n d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1?\r\n r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\r\n ? [n1, d1] : [n0, d0];\r\n\r\n Ctor.precision = pr;\r\n external = true;\r\n\r\n return r;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toHexadecimal = P.toHex = function (sd, rm) {\r\n return toStringBinary(this, 16, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n *\r\n * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n * or `y` is NaN, in which case the return value will be also be NaN.\r\n *\r\n * The return value is not affected by the value of `precision`.\r\n *\r\n * y {number|string|bigint|Decimal} The magnitude to round to a multiple of.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toNearest() rounding mode not an integer: {rm}'\r\n * 'toNearest() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toNearest = function (y, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n\r\n if (y == null) {\r\n\r\n // If x is not finite, return x.\r\n if (!x.d) return x;\r\n\r\n y = new Ctor(1);\r\n rm = Ctor.rounding;\r\n } else {\r\n y = new Ctor(y);\r\n if (rm === void 0) {\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(rm, 0, 8);\r\n }\r\n\r\n // If x is not finite, return x if y is not NaN, else NaN.\r\n if (!x.d) return y.s ? x : y;\r\n\r\n // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\r\n if (!y.d) {\r\n if (y.s) y.s = x.s;\r\n return y;\r\n }\r\n }\r\n\r\n // If y is not zero, calculate the nearest multiple of y to x.\r\n if (y.d[0]) {\r\n external = false;\r\n x = divide(x, y, 0, rm, 1).times(y);\r\n external = true;\r\n finalise(x);\r\n\r\n // If y is zero, return zero with the sign of x.\r\n } else {\r\n y.s = x.s;\r\n x = y;\r\n }\r\n\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n * Zero keeps its sign.\r\n *\r\n */\r\nP.toNumber = function () {\r\n return +this;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toOctal = function (sd, rm) {\r\n return toStringBinary(this, 8, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n * to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * ECMAScript compliant.\r\n *\r\n * pow(x, NaN) = NaN\r\n * pow(x, ±0) = 1\r\n\r\n * pow(NaN, non-zero) = NaN\r\n * pow(abs(x) > 1, +Infinity) = +Infinity\r\n * pow(abs(x) > 1, -Infinity) = +0\r\n * pow(abs(x) == 1, ±Infinity) = NaN\r\n * pow(abs(x) < 1, +Infinity) = +0\r\n * pow(abs(x) < 1, -Infinity) = +Infinity\r\n * pow(+Infinity, y > 0) = +Infinity\r\n * pow(+Infinity, y < 0) = +0\r\n * pow(-Infinity, odd integer > 0) = -Infinity\r\n * pow(-Infinity, even integer > 0) = +Infinity\r\n * pow(-Infinity, odd integer < 0) = -0\r\n * pow(-Infinity, even integer < 0) = +0\r\n * pow(+0, y > 0) = +0\r\n * pow(+0, y < 0) = +Infinity\r\n * pow(-0, odd integer > 0) = -0\r\n * pow(-0, even integer > 0) = +0\r\n * pow(-0, odd integer < 0) = -Infinity\r\n * pow(-0, even integer < 0) = +Infinity\r\n * pow(finite x < 0, finite non-integer) = NaN\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n * probability of an incorrectly rounded result\r\n * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n * i.e. 1 in 250,000,000,000,000\r\n *\r\n * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n *\r\n * y {number|string|bigint|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\nP.toPower = P.pow = function (y) {\r\n var e, k, pr, r, rm, s,\r\n x = this,\r\n Ctor = x.constructor,\r\n yn = +(y = new Ctor(y));\r\n\r\n // Either ±Infinity, NaN or ±0?\r\n if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\r\n\r\n x = new Ctor(x);\r\n\r\n if (x.eq(1)) return x;\r\n\r\n pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n\r\n if (y.eq(1)) return finalise(x, pr, rm);\r\n\r\n // y exponent\r\n e = mathfloor(y.e / LOG_BASE);\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = intPow(Ctor, x, k, pr);\r\n return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\r\n }\r\n\r\n s = x.s;\r\n\r\n // if x is negative\r\n if (s < 0) {\r\n\r\n // if y is not an integer\r\n if (e < y.d.length - 1) return new Ctor(NaN);\r\n\r\n // Result is positive if x is negative and the last digit of integer y is even.\r\n if ((y.d[e] & 1) == 0) s = 1;\r\n\r\n // if x.eq(-1)\r\n if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\r\n x.s = s;\r\n return x;\r\n }\r\n }\r\n\r\n // Estimate result exponent.\r\n // x^y = 10^e, where e = y * log10(x)\r\n // log10(x) = log10(x_significand) + x_exponent\r\n // log10(x_significand) = ln(x_significand) / ln(10)\r\n k = mathpow(+x, yn);\r\n e = k == 0 || !isFinite(k)\r\n ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\r\n : new Ctor(k + '').e;\r\n\r\n // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\r\n\r\n // Overflow/underflow?\r\n if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\r\n\r\n external = false;\r\n Ctor.rounding = x.s = 1;\r\n\r\n // Estimate the extra guard digits needed to ensure five correct rounding digits from\r\n // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\r\n // new Decimal(2.32456).pow('2087987436534566.46411')\r\n // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\r\n k = Math.min(12, (e + '').length);\r\n\r\n // r = x^y = exp(y*ln(x))\r\n r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\r\n\r\n // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\r\n if (r.d) {\r\n\r\n // Truncate to the required precision plus five rounding digits.\r\n r = finalise(r, pr + 5, 1);\r\n\r\n // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\r\n // the result.\r\n if (checkRoundingDigits(r.d, pr, rm)) {\r\n e = pr + 10;\r\n\r\n // Truncate to the increased precision plus five rounding digits.\r\n r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\r\n\r\n // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\r\n if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\r\n r = finalise(r, pr + 1, 0);\r\n }\r\n }\r\n }\r\n\r\n r.s = s;\r\n external = true;\r\n Ctor.rounding = rm;\r\n\r\n return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = finalise(new Ctor(x), sd, rm);\r\n str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toSD() digits out of range: {sd}'\r\n * 'toSD() digits not an integer: {sd}'\r\n * 'toSD() rounding mode not an integer: {rm}'\r\n * 'toSD() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toSignificantDigits = P.toSD = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return finalise(new Ctor(x), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\nP.toString = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n *\r\n */\r\nP.truncated = P.trunc = function () {\r\n return finalise(new this.constructor(this), this.e + 1, 1);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n * Unlike `toString`, negative zero will include the minus sign.\r\n *\r\n */\r\nP.valueOf = P.toJSON = function () {\r\n var x = this,\r\n Ctor = x.constructor,\r\n str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n return x.isNeg() ? '-' + str : str;\r\n};\r\n\r\n\r\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n/*\r\n * digitsToString P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n * finiteToString, naturalExponential, naturalLogarithm\r\n * checkInt32 P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n * P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n * checkRoundingDigits P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n * convertBase toStringBinary, parseOther\r\n * cos P.cos\r\n * divide P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n * P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n * P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n * taylorSeries, atan2, parseOther\r\n * finalise P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n * P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n * P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n * P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n * P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n * P.truncated, divide, getLn10, getPi, naturalExponential,\r\n * naturalLogarithm, ceil, floor, round, trunc\r\n * finiteToString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n * toStringBinary\r\n * getBase10Exponent P.minus, P.plus, P.times, parseOther\r\n * getLn10 P.logarithm, naturalLogarithm\r\n * getPi P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n * getPrecision P.precision, P.toFraction\r\n * getZeroString digitsToString, finiteToString\r\n * intPow P.toPower, parseOther\r\n * isOdd toLessThanHalfPi\r\n * maxOrMin max, min\r\n * naturalExponential P.naturalExponential, P.toPower\r\n * naturalLogarithm P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n * P.toPower, naturalExponential\r\n * nonFiniteToString finiteToString, toStringBinary\r\n * parseDecimal Decimal\r\n * parseOther Decimal\r\n * sin P.sin\r\n * taylorSeries P.cosh, P.sinh, cos, sin\r\n * toLessThanHalfPi P.cos, P.sin\r\n * toStringBinary P.toBinary, P.toHexadecimal, P.toOctal\r\n * truncate intPow\r\n *\r\n * Throws: P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n * naturalLogarithm, config, parseOther, random, Decimal\r\n */\r\n\r\n\r\nfunction digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n}\r\n\r\n\r\nfunction checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n}\r\n\r\n\r\n/*\r\n * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n * `repeating == null` if caller is `log` or `pow`,\r\n * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n */\r\nfunction checkRoundingDigits(d, i, rm, repeating) {\r\n var di, k, r, rd;\r\n\r\n // Get the length of the first word of the array d.\r\n for (k = d[0]; k >= 10; k /= 10) --i;\r\n\r\n // Is the rounding digit in the first word of d?\r\n if (--i < 0) {\r\n i += LOG_BASE;\r\n di = 0;\r\n } else {\r\n di = Math.ceil((i + 1) / LOG_BASE);\r\n i %= LOG_BASE;\r\n }\r\n\r\n // i is the index (0 - 6) of the rounding digit.\r\n // E.g. if within the word 3487563 the first rounding digit is 5,\r\n // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\r\n k = mathpow(10, LOG_BASE - i);\r\n rd = d[di] % k | 0;\r\n\r\n if (repeating == null) {\r\n if (i < 3) {\r\n if (i == 0) rd = rd / 100 | 0;\r\n else if (i == 1) rd = rd / 10 | 0;\r\n r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\r\n } else {\r\n r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\r\n (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\r\n }\r\n } else {\r\n if (i < 4) {\r\n if (i == 0) rd = rd / 1000 | 0;\r\n else if (i == 1) rd = rd / 100 | 0;\r\n else if (i == 2) rd = rd / 10 | 0;\r\n r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\r\n } else {\r\n r = ((repeating || rm < 4) && rd + 1 == k ||\r\n (!repeating && rm > 3) && rd + 1 == k / 2) &&\r\n (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\r\n }\r\n }\r\n\r\n return r;\r\n}\r\n\r\n\r\n// Convert string of `baseIn` to an array of numbers of `baseOut`.\r\n// Eg. convertBase('255', 10, 16) returns [15, 15].\r\n// Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\r\nfunction convertBase(str, baseIn, baseOut) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n strL = str.length;\r\n\r\n for (; i < strL;) {\r\n for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\r\n arr[0] += NUMERALS.indexOf(str.charAt(i++));\r\n for (j = 0; j < arr.length; j++) {\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] === void 0) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n}\r\n\r\n\r\n/*\r\n * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction cosine(Ctor, x) {\r\n var k, len, y;\r\n\r\n if (x.isZero()) return x;\r\n\r\n // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\r\n // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n len = x.d.length;\r\n if (len < 32) {\r\n k = Math.ceil(len / 3);\r\n y = (1 / tinyPow(4, k)).toString();\r\n } else {\r\n k = 16;\r\n y = '2.3283064365386962890625e-10';\r\n }\r\n\r\n Ctor.precision += k;\r\n\r\n x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\r\n\r\n // Reverse argument reduction\r\n for (var i = k; i--;) {\r\n var cos2x = x.times(x);\r\n x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\r\n }\r\n\r\n Ctor.precision -= k;\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Perform division in the specified base.\r\n */\r\nvar divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k, base) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % base | 0;\r\n carry = temp / base | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1;) a.shift();\r\n }\r\n\r\n return function (x, y, pr, rm, dp, base) {\r\n var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\r\n yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\r\n\r\n // Return ±0 if x is 0 or y is ±Infinity, or return ±Infinity as y is 0.\r\n xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\r\n }\r\n\r\n if (base) {\r\n logBase = 1;\r\n e = x.e - y.e;\r\n } else {\r\n base = BASE;\r\n logBase = LOG_BASE;\r\n e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\r\n }\r\n\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n // The digit array of a Decimal from toStringBinary may have trailing zeros.\r\n for (i = 0; yd[i] == (xd[i] || 0); i++);\r\n\r\n if (yd[i] > (xd[i] || 0)) e--;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else if (dp) {\r\n sd = pr + (x.e - y.e) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) {\r\n qd.push(1);\r\n more = true;\r\n } else {\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / logBase + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * base + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n more = k || i < xL;\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= base/2\r\n k = base / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k, base);\r\n xd = multiplyInteger(xd, k, base);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL;) rem[remL++] = 0;\r\n\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= base / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= base) k = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL, base);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL, base);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n\r\n more = rem[0] !== void 0;\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n }\r\n\r\n // logBase is 1 when divide is being used for base conversion.\r\n if (logBase == 1) {\r\n q.e = e;\r\n inexact = more;\r\n } else {\r\n\r\n // To calculate q.e, first get the number of digits of qd[0].\r\n for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\r\n q.e = i + e * logBase - 1;\r\n\r\n finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\r\n }\r\n\r\n return q;\r\n };\r\n})();\r\n\r\n\r\n/*\r\n * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n * Check for over/under-flow.\r\n */\r\n function finalise(x, sd, rm, isTruncated) {\r\n var digits, i, j, k, rd, roundUp, w, xd, xdi,\r\n Ctor = x.constructor;\r\n\r\n // Don't round if sd is null or undefined.\r\n out: if (sd != null) {\r\n xd = x.d;\r\n\r\n // Infinity/NaN.\r\n if (!xd) return x;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd containing rd, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // digits: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\r\n i = sd - digits;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / mathpow(10, digits - j - 1) % 10 | 0;\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) {\r\n if (isTruncated) {\r\n\r\n // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\r\n for (; k++ <= xdi;) xd.push(0);\r\n w = rd = 0;\r\n digits = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (digits = 1; k >= 10; k /= 10) digits++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - digits.\r\n j = i - LOG_BASE + digits;\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\r\n }\r\n }\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n isTruncated = isTruncated || sd < 0 ||\r\n xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\r\n\r\n // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\r\n // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\r\n // will give 714.\r\n\r\n roundUp = rm < 4\r\n ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xd[0]) {\r\n xd.length = 0;\r\n if (roundUp) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xd[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, LOG_BASE - i);\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (roundUp) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n\r\n // i will be the length of xd[0] before k is added.\r\n for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\r\n j = xd[0] += k;\r\n for (k = 1; j >= 10; j /= 10) k++;\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xd[0] == BASE) xd[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n }\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > Ctor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < Ctor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // Ctor.underflow = true;\r\n } // else Ctor.underflow = false;\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\nfunction finiteToString(x, isExp, sd) {\r\n if (!x.isFinite()) return nonFiniteToString(x);\r\n var k,\r\n e = x.e,\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return str;\r\n}\r\n\r\n\r\n// Calculate the base 10 exponent from the base 1e7 exponent.\r\nfunction getBase10Exponent(digits, e) {\r\n var w = digits[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\r\n return e;\r\n}\r\n\r\n\r\nfunction getLn10(Ctor, sd, pr) {\r\n if (sd > LN10_PRECISION) {\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(precisionLimitExceeded);\r\n }\r\n return finalise(new Ctor(LN10), sd, 1, true);\r\n}\r\n\r\n\r\nfunction getPi(Ctor, sd, rm) {\r\n if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\r\n return finalise(new Ctor(PI), sd, rm, true);\r\n}\r\n\r\n\r\nfunction getPrecision(digits) {\r\n var w = digits.length - 1,\r\n len = w * LOG_BASE + 1;\r\n\r\n w = digits[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) len--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = digits[0]; w >= 10; w /= 10) len++;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n\r\nfunction getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n * integer of type number.\r\n *\r\n * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n *\r\n */\r\nfunction intPow(Ctor, x, n, pr) {\r\n var isTruncated,\r\n r = new Ctor(1),\r\n\r\n // Max n of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n k = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (n % 2) {\r\n r = r.times(x);\r\n if (truncate(r.d, k)) isTruncated = true;\r\n }\r\n\r\n n = mathfloor(n / 2);\r\n if (n === 0) {\r\n\r\n // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\r\n n = r.d.length - 1;\r\n if (isTruncated && r.d[n] === 0) ++r.d[n];\r\n break;\r\n }\r\n\r\n x = x.times(x);\r\n truncate(x.d, k);\r\n }\r\n\r\n external = true;\r\n\r\n return r;\r\n}\r\n\r\n\r\nfunction isOdd(n) {\r\n return n.d[n.d.length - 1] & 1;\r\n}\r\n\r\n\r\n/*\r\n * Handle `max` (`n` is -1) and `min` (`n` is 1).\r\n */\r\nfunction maxOrMin(Ctor, args, n) {\r\n var k, y,\r\n x = new Ctor(args[0]),\r\n i = 0;\r\n\r\n for (; ++i < args.length;) {\r\n y = new Ctor(args[i]);\r\n\r\n // NaN?\r\n if (!y.s) {\r\n x = y;\r\n break;\r\n }\r\n\r\n k = x.cmp(y);\r\n\r\n if (k === n || k === 0 && x.s === n) {\r\n x = y;\r\n }\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(Infinity) = Infinity\r\n * exp(-Infinity) = 0\r\n * exp(NaN) = NaN\r\n * exp(±0) = 1\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n * The result will always be correctly rounded.\r\n *\r\n */\r\nfunction naturalExponential(x, sd) {\r\n var denominator, guard, j, pow, sum, t, wpr,\r\n rep = 0,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // 0/NaN/Infinity?\r\n if (!x.d || !x.d[0] || x.e > 17) {\r\n\r\n return new Ctor(x.d\r\n ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\r\n : x.s ? x.s < 0 ? 0 : x : 0 / 0);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n // while abs(x) >= 0.1\r\n while (x.e > -2) {\r\n\r\n // x = x / 2^5\r\n x = x.times(t);\r\n k += 5;\r\n }\r\n\r\n // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\r\n // necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(1);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = finalise(pow.times(x), wpr, 1);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n j = k;\r\n while (j--) sum = finalise(sum.times(sum), wpr, 1);\r\n\r\n // Check to see if the first 4 rounding digits are [49]999.\r\n // If so, repeat the summation with a higher precision, otherwise\r\n // e.g. with precision: 18, rounding: 1\r\n // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n\r\n if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += 10;\r\n denominator = pow = t = new Ctor(1);\r\n i = 0;\r\n rep++;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n }\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * ln(-n) = NaN\r\n * ln(0) = -Infinity\r\n * ln(-0) = -Infinity\r\n * ln(1) = 0\r\n * ln(Infinity) = Infinity\r\n * ln(-Infinity) = NaN\r\n * ln(NaN) = NaN\r\n *\r\n * ln(n) (n != 1) is non-terminating.\r\n *\r\n */\r\nfunction naturalLogarithm(y, sd) {\r\n var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n rm = Ctor.rounding,\r\n pr = Ctor.precision;\r\n\r\n // Is x negative or Infinity, NaN, 0 or 1?\r\n if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\r\n return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\r\n }\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n Ctor.precision = wpr += guard;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n\r\n if (Math.abs(e = x.e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = x.e;\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n Ctor.precision = pr;\r\n\r\n return sd == null ? finalise(x, pr, rm, external = true) : x;\r\n }\r\n\r\n // x1 is x reduced to a value near 1.\r\n x1 = x;\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = finalise(numerator.times(x2), wpr, 1);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\r\n // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr, 1);\r\n\r\n // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\r\n // been repeated previously) and the first 4 rounding digits 9999?\r\n // If so, restart the summation with a higher precision, otherwise\r\n // e.g. with precision: 12, rounding: 1\r\n // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\r\n // `wpr - guard` is the index of first rounding digit.\r\n if (sd == null) {\r\n if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n Ctor.precision = wpr += guard;\r\n t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\r\n x2 = finalise(x.times(x), wpr, 1);\r\n denominator = rep = 1;\r\n } else {\r\n return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n }\r\n } else {\r\n Ctor.precision = pr;\r\n return sum;\r\n }\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n}\r\n\r\n\r\n// ±Infinity, NaN.\r\nfunction nonFiniteToString(x) {\r\n // Unsigned.\r\n return String(x.s * x.s / 0);\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\nfunction parseDecimal(x, str) {\r\n var e, i, len;\r\n\r\n // TODO BigInt str: no need to check for decimal point, exponential form or leading zeros.\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n x.e = e = e - i - 1;\r\n x.d = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external) {\r\n\r\n // Overflow?\r\n if (x.e > x.constructor.maxE) {\r\n\r\n // Infinity.\r\n x.d = null;\r\n x.e = NaN;\r\n\r\n // Underflow?\r\n } else if (x.e < x.constructor.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n // x.constructor.underflow = true;\r\n } // else x.constructor.underflow = false;\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n */\r\nfunction parseOther(x, str) {\r\n var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\r\n\r\n if (str.indexOf('_') > -1) {\r\n str = str.replace(/(\\d)_(?=\\d)/g, '$1');\r\n if (isDecimal.test(str)) return parseDecimal(x, str);\r\n } else if (str === 'Infinity' || str === 'NaN') {\r\n if (!+str) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return x;\r\n }\r\n\r\n if (isHex.test(str)) {\r\n base = 16;\r\n str = str.toLowerCase();\r\n } else if (isBinary.test(str)) {\r\n base = 2;\r\n } else if (isOctal.test(str)) {\r\n base = 8;\r\n } else {\r\n throw Error(invalidArgument + str);\r\n }\r\n\r\n // Is there a binary exponent part?\r\n i = str.search(/p/i);\r\n\r\n if (i > 0) {\r\n p = +str.slice(i + 1);\r\n str = str.substring(2, i);\r\n } else {\r\n str = str.slice(2);\r\n }\r\n\r\n // Convert `str` as an integer then divide the result by `base` raised to a power such that the\r\n // fraction part will be restored.\r\n i = str.indexOf('.');\r\n isFloat = i >= 0;\r\n Ctor = x.constructor;\r\n\r\n if (isFloat) {\r\n str = str.replace('.', '');\r\n len = str.length;\r\n i = len - i;\r\n\r\n // log[10](16) = 1.2041... , log[10](88) = 1.9444....\r\n divisor = intPow(Ctor, new Ctor(base), i, i * 2);\r\n }\r\n\r\n xd = convertBase(str, base, BASE);\r\n xe = xd.length - 1;\r\n\r\n // Remove trailing zeros.\r\n for (i = xe; xd[i] === 0; --i) xd.pop();\r\n if (i < 0) return new Ctor(x.s * 0);\r\n x.e = getBase10Exponent(xd, xe);\r\n x.d = xd;\r\n external = false;\r\n\r\n // At what precision to perform the division to ensure exact conversion?\r\n // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\r\n // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\r\n // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\r\n // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\r\n // Therefore using 4 * the number of digits of str will always be enough.\r\n if (isFloat) x = divide(x, divisor, len * 4);\r\n\r\n // Multiply by the binary exponent part if present.\r\n if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\r\n external = true;\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction sine(Ctor, x) {\r\n var k,\r\n len = x.d.length;\r\n\r\n if (len < 3) {\r\n return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\r\n }\r\n\r\n // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\r\n // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\r\n // and sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\r\n\r\n // Estimate the optimum number of times to use the argument reduction.\r\n k = 1.4 * Math.sqrt(len);\r\n k = k > 16 ? 16 : k | 0;\r\n\r\n x = x.times(1 / tinyPow(5, k));\r\n x = taylorSeries(Ctor, 2, x, x);\r\n\r\n // Reverse argument reduction\r\n var sin2_x,\r\n d5 = new Ctor(5),\r\n d16 = new Ctor(16),\r\n d20 = new Ctor(20);\r\n for (; k--;) {\r\n sin2_x = x.times(x);\r\n x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n// Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\r\nfunction taylorSeries(Ctor, n, x, y, isHyperbolic) {\r\n var j, t, u, x2,\r\n i = 1,\r\n pr = Ctor.precision,\r\n k = Math.ceil(pr / LOG_BASE);\r\n\r\n external = false;\r\n x2 = x.times(x);\r\n u = new Ctor(y);\r\n\r\n for (;;) {\r\n t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\r\n u = isHyperbolic ? y.plus(t) : y.minus(t);\r\n y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\r\n t = u.plus(y);\r\n\r\n if (t.d[k] !== void 0) {\r\n for (j = k; t.d[j] === u.d[j] && j--;);\r\n if (j == -1) break;\r\n }\r\n\r\n j = u;\r\n u = y;\r\n y = t;\r\n t = j;\r\n i++;\r\n }\r\n\r\n external = true;\r\n t.d.length = k + 1;\r\n\r\n return t;\r\n}\r\n\r\n\r\n// Exponent e must be positive and non-zero.\r\nfunction tinyPow(b, e) {\r\n var n = b;\r\n while (--e) n *= b;\r\n return n;\r\n}\r\n\r\n\r\n// Return the absolute value of `x` reduced to less than or equal to half pi.\r\nfunction toLessThanHalfPi(Ctor, x) {\r\n var t,\r\n isNeg = x.s < 0,\r\n pi = getPi(Ctor, Ctor.precision, 1),\r\n halfPi = pi.times(0.5);\r\n\r\n x = x.abs();\r\n\r\n if (x.lte(halfPi)) {\r\n quadrant = isNeg ? 4 : 1;\r\n return x;\r\n }\r\n\r\n t = x.divToInt(pi);\r\n\r\n if (t.isZero()) {\r\n quadrant = isNeg ? 3 : 2;\r\n } else {\r\n x = x.minus(t.times(pi));\r\n\r\n // 0 <= x < pi\r\n if (x.lte(halfPi)) {\r\n quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\r\n return x;\r\n }\r\n\r\n quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\r\n }\r\n\r\n return x.minus(pi).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return the value of Decimal `x` as a string in base `baseOut`.\r\n *\r\n * If the optional `sd` argument is present include a binary exponent suffix.\r\n */\r\nfunction toStringBinary(x, baseOut, sd, rm) {\r\n var base, e, i, k, len, roundUp, str, xd, y,\r\n Ctor = x.constructor,\r\n isExp = sd !== void 0;\r\n\r\n if (isExp) {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n } else {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n }\r\n\r\n if (!x.isFinite()) {\r\n str = nonFiniteToString(x);\r\n } else {\r\n str = finiteToString(x);\r\n i = str.indexOf('.');\r\n\r\n // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\r\n // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\r\n // minBinaryExponent = floor(decimalExponent * log[2](10))\r\n // log[2](10) = 3.321928094887362347870319429489390175864\r\n\r\n if (isExp) {\r\n base = 2;\r\n if (baseOut == 16) {\r\n sd = sd * 4 - 3;\r\n } else if (baseOut == 8) {\r\n sd = sd * 3 - 2;\r\n }\r\n } else {\r\n base = baseOut;\r\n }\r\n\r\n // Convert the number as an integer then divide the result by its base raised to a power such\r\n // that the fraction part will be restored.\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n str = str.replace('.', '');\r\n y = new Ctor(1);\r\n y.e = str.length - i;\r\n y.d = convertBase(finiteToString(y), 10, base);\r\n y.e = y.d.length;\r\n }\r\n\r\n xd = convertBase(str, 10, base);\r\n e = len = xd.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] == 0;) xd.pop();\r\n\r\n if (!xd[0]) {\r\n str = isExp ? '0p+0' : '0';\r\n } else {\r\n if (i < 0) {\r\n e--;\r\n } else {\r\n x = new Ctor(x);\r\n x.d = xd;\r\n x.e = e;\r\n x = divide(x, y, sd, rm, 0, base);\r\n xd = x.d;\r\n e = x.e;\r\n roundUp = inexact;\r\n }\r\n\r\n // The rounding digit, i.e. the digit after the digit that may be rounded up.\r\n i = xd[sd];\r\n k = base / 2;\r\n roundUp = roundUp || xd[sd + 1] !== void 0;\r\n\r\n roundUp = rm < 4\r\n ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\r\n : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\r\n rm === (x.s < 0 ? 8 : 7));\r\n\r\n xd.length = sd;\r\n\r\n if (roundUp) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (; ++xd[--sd] > base - 1;) {\r\n xd[sd] = 0;\r\n if (!sd) {\r\n ++e;\r\n xd.unshift(1);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n\r\n // Add binary exponent suffix?\r\n if (isExp) {\r\n if (len > 1) {\r\n if (baseOut == 16 || baseOut == 8) {\r\n i = baseOut == 16 ? 4 : 3;\r\n for (--len; len % i; len++) str += '0';\r\n xd = convertBase(str, base, baseOut);\r\n for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n // xd[0] will always be be 1\r\n for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n } else {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n }\r\n\r\n str = str + (e < 0 ? 'p' : 'p+') + e;\r\n } else if (e < 0) {\r\n for (; ++e;) str = '0' + str;\r\n str = '0.' + str;\r\n } else {\r\n if (++e > len) for (e -= len; e-- ;) str += '0';\r\n else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n}\r\n\r\n\r\n// Does not strip trailing zeros.\r\nfunction truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n}\r\n\r\n\r\n// Decimal methods\r\n\r\n\r\n/*\r\n * abs\r\n * acos\r\n * acosh\r\n * add\r\n * asin\r\n * asinh\r\n * atan\r\n * atanh\r\n * atan2\r\n * cbrt\r\n * ceil\r\n * clamp\r\n * clone\r\n * config\r\n * cos\r\n * cosh\r\n * div\r\n * exp\r\n * floor\r\n * hypot\r\n * ln\r\n * log\r\n * log2\r\n * log10\r\n * max\r\n * min\r\n * mod\r\n * mul\r\n * pow\r\n * random\r\n * round\r\n * set\r\n * sign\r\n * sin\r\n * sinh\r\n * sqrt\r\n * sub\r\n * sum\r\n * tan\r\n * tanh\r\n * trunc\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction abs(x) {\r\n return new this(x).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction acos(x) {\r\n return new this(x).acos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction acosh(x) {\r\n return new this(x).acosh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction add(x, y) {\r\n return new this(x).plus(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction asin(x) {\r\n return new this(x).asin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction asinh(x) {\r\n return new this(x).asinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction atan(x) {\r\n return new this(x).atan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction atanh(x) {\r\n return new this(x).atanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi, pi]\r\n *\r\n * y {number|string|bigint|Decimal} The y-coordinate.\r\n * x {number|string|bigint|Decimal} The x-coordinate.\r\n *\r\n * atan2(±0, -0) = ±pi\r\n * atan2(±0, +0) = ±0\r\n * atan2(±0, -x) = ±pi for x > 0\r\n * atan2(±0, x) = ±0 for x > 0\r\n * atan2(-y, ±0) = -pi/2 for y > 0\r\n * atan2(y, ±0) = pi/2 for y > 0\r\n * atan2(±y, -Infinity) = ±pi for finite y > 0\r\n * atan2(±y, +Infinity) = ±0 for finite y > 0\r\n * atan2(±Infinity, x) = ±pi/2 for finite x\r\n * atan2(±Infinity, -Infinity) = ±3*pi/4\r\n * atan2(±Infinity, +Infinity) = ±pi/4\r\n * atan2(NaN, x) = NaN\r\n * atan2(y, NaN) = NaN\r\n *\r\n */\r\nfunction atan2(y, x) {\r\n y = new this(y);\r\n x = new this(x);\r\n var r,\r\n pr = this.precision,\r\n rm = this.rounding,\r\n wpr = pr + 4;\r\n\r\n // Either NaN\r\n if (!y.s || !x.s) {\r\n r = new this(NaN);\r\n\r\n // Both ±Infinity\r\n } else if (!y.d && !x.d) {\r\n r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\r\n r.s = y.s;\r\n\r\n // x is ±Infinity or y is ±0\r\n } else if (!x.d || y.isZero()) {\r\n r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\r\n r.s = y.s;\r\n\r\n // y is ±Infinity or x is ±0\r\n } else if (!y.d || x.isZero()) {\r\n r = getPi(this, wpr, 1).times(0.5);\r\n r.s = y.s;\r\n\r\n // Both non-zero and finite\r\n } else if (x.s < 0) {\r\n this.precision = wpr;\r\n this.rounding = 1;\r\n r = this.atan(divide(y, x, wpr, 1));\r\n x = getPi(this, wpr, 1);\r\n this.precision = pr;\r\n this.rounding = rm;\r\n r = y.s < 0 ? r.minus(x) : r.plus(x);\r\n } else {\r\n r = this.atan(divide(y, x, wpr, 1));\r\n }\r\n\r\n return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction cbrt(x) {\r\n return new this(x).cbrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction ceil(x) {\r\n return finalise(x = new this(x), x.e + 1, 2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction clamp(x, min, max) {\r\n return new this(x).clamp(min, max);\r\n}\r\n\r\n\r\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n * maxE {number}\r\n * minE {number}\r\n * modulo {number}\r\n * crypto {boolean|number}\r\n * defaults {true}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\nfunction config(obj) {\r\n if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\r\n var i, p, v,\r\n useDefaults = obj.defaults === true,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -EXP_LIMIT, 0,\r\n 'toExpPos', 0, EXP_LIMIT,\r\n 'maxE', 0, EXP_LIMIT,\r\n 'minE', -EXP_LIMIT, 0,\r\n 'modulo', 0, 9\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\r\n if ((v = obj[p]) !== void 0) {\r\n if (v === true || v === false || v === 0 || v === 1) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n this[p] = true;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n } else {\r\n this[p] = false;\r\n }\r\n } else {\r\n throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n return this;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cos(x) {\r\n return new this(x).cos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cosh(x) {\r\n return new this(x).cosh();\r\n}\r\n\r\n\r\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\nfunction clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * v {number|string|bigint|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(v) {\r\n var e, i, t,\r\n x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(v);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n if (isDecimalInstance(v)) {\r\n x.s = v.s;\r\n\r\n if (external) {\r\n if (!v.d || v.e > Decimal.maxE) {\r\n\r\n // Infinity.\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (v.e < Decimal.minE) {\r\n\r\n // Zero.\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d.slice();\r\n }\r\n } else {\r\n x.e = v.e;\r\n x.d = v.d ? v.d.slice() : v.d;\r\n }\r\n\r\n return;\r\n }\r\n\r\n t = typeof v;\r\n\r\n if (t === 'number') {\r\n if (v === 0) {\r\n x.s = 1 / v < 0 ? -1 : 1;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n if (v < 0) {\r\n v = -v;\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (v === ~~v && v < 1e7) {\r\n for (e = 0, i = v; i >= 10; i /= 10) e++;\r\n\r\n if (external) {\r\n if (e > Decimal.maxE) {\r\n x.e = NaN;\r\n x.d = null;\r\n } else if (e < Decimal.minE) {\r\n x.e = 0;\r\n x.d = [0];\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n } else {\r\n x.e = e;\r\n x.d = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Infinity or NaN?\r\n if (v * 0 !== 0) {\r\n if (!v) x.s = NaN;\r\n x.e = NaN;\r\n x.d = null;\r\n return;\r\n }\r\n\r\n return parseDecimal(x, v.toString());\r\n }\r\n\r\n if (t === 'string') {\r\n if ((i = v.charCodeAt(0)) === 45) { // minus sign\r\n v = v.slice(1);\r\n x.s = -1;\r\n } else {\r\n if (i === 43) v = v.slice(1); // plus sign\r\n x.s = 1;\r\n }\r\n\r\n return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\r\n }\r\n\r\n if (t === 'bigint') {\r\n if (v < 0) {\r\n v = -v;\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n return parseDecimal(x, v.toString());\r\n }\r\n\r\n throw Error(invalidArgument + v);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n Decimal.EUCLID = 9;\r\n\r\n Decimal.config = Decimal.set = config;\r\n Decimal.clone = clone;\r\n Decimal.isDecimal = isDecimalInstance;\r\n\r\n Decimal.abs = abs;\r\n Decimal.acos = acos;\r\n Decimal.acosh = acosh; // ES6\r\n Decimal.add = add;\r\n Decimal.asin = asin;\r\n Decimal.asinh = asinh; // ES6\r\n Decimal.atan = atan;\r\n Decimal.atanh = atanh; // ES6\r\n Decimal.atan2 = atan2;\r\n Decimal.cbrt = cbrt; // ES6\r\n Decimal.ceil = ceil;\r\n Decimal.clamp = clamp;\r\n Decimal.cos = cos;\r\n Decimal.cosh = cosh; // ES6\r\n Decimal.div = div;\r\n Decimal.exp = exp;\r\n Decimal.floor = floor;\r\n Decimal.hypot = hypot; // ES6\r\n Decimal.ln = ln;\r\n Decimal.log = log;\r\n Decimal.log10 = log10; // ES6\r\n Decimal.log2 = log2; // ES6\r\n Decimal.max = max;\r\n Decimal.min = min;\r\n Decimal.mod = mod;\r\n Decimal.mul = mul;\r\n Decimal.pow = pow;\r\n Decimal.random = random;\r\n Decimal.round = round;\r\n Decimal.sign = sign; // ES6\r\n Decimal.sin = sin;\r\n Decimal.sinh = sinh; // ES6\r\n Decimal.sqrt = sqrt;\r\n Decimal.sub = sub;\r\n Decimal.sum = sum;\r\n Decimal.tan = tan;\r\n Decimal.tanh = tanh; // ES6\r\n Decimal.trunc = trunc; // ES6\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n if (obj.defaults !== true) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction div(x, y) {\r\n return new this(x).div(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The power to which to raise the base of the natural log.\r\n *\r\n */\r\nfunction exp(x) {\r\n return new this(x).exp();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction floor(x) {\r\n return finalise(x = new this(x), x.e + 1, 3);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction hypot() {\r\n var i, n,\r\n t = new this(0);\r\n\r\n external = false;\r\n\r\n for (i = 0; i < arguments.length;) {\r\n n = new this(arguments[i++]);\r\n if (!n.d) {\r\n if (n.s) {\r\n external = true;\r\n return new this(1 / 0);\r\n }\r\n t = n;\r\n } else if (t.d) {\r\n t = t.plus(n.times(n));\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return t.sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n * otherwise return false.\r\n *\r\n */\r\nfunction isDecimalInstance(obj) {\r\n return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction ln(x) {\r\n return new this(x).ln();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * log[y](x)\r\n *\r\n * x {number|string|bigint|Decimal} The argument of the logarithm.\r\n * y {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\nfunction log(x, y) {\r\n return new this(x).log(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction log2(x) {\r\n return new this(x).log(2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction log10(x) {\r\n return new this(x).log(10);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction max() {\r\n return maxOrMin(this, arguments, -1);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction min() {\r\n return maxOrMin(this, arguments, 1);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction mod(x, y) {\r\n return new this(x).mod(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction mul(x, y) {\r\n return new this(x).mul(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The base.\r\n * y {number|string|bigint|Decimal} The exponent.\r\n *\r\n */\r\nfunction pow(x, y) {\r\n return new this(x).pow(y);\r\n}\r\n\r\n\r\n/*\r\n * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n * are produced).\r\n *\r\n * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n *\r\n */\r\nfunction random(sd) {\r\n var d, e, k, n,\r\n i = 0,\r\n r = new this(1),\r\n rd = [];\r\n\r\n if (sd === void 0) sd = this.precision;\r\n else checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n k = Math.ceil(sd / LOG_BASE);\r\n\r\n if (!this.crypto) {\r\n for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n } else if (crypto.getRandomValues) {\r\n d = crypto.getRandomValues(new Uint32Array(k));\r\n\r\n for (; i < k;) {\r\n n = d[i];\r\n\r\n // 0 <= n < 4294967296\r\n // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\r\n if (n >= 4.29e9) {\r\n d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\r\n } else {\r\n\r\n // 0 <= n <= 4289999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd[i++] = n % 1e7;\r\n }\r\n }\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n d = crypto.randomBytes(k *= 4);\r\n\r\n for (; i < k;) {\r\n\r\n // 0 <= n < 2147483648\r\n n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\r\n\r\n // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\r\n if (n >= 2.14e9) {\r\n crypto.randomBytes(4).copy(d, i);\r\n } else {\r\n\r\n // 0 <= n <= 2139999999\r\n // 0 <= (n % 1e7) <= 9999999\r\n rd.push(n % 1e7);\r\n i += 4;\r\n }\r\n }\r\n\r\n i = k / 4;\r\n } else {\r\n throw Error(cryptoUnavailable);\r\n }\r\n\r\n k = rd[--i];\r\n sd %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to sd.\r\n if (k && sd) {\r\n n = mathpow(10, LOG_BASE - sd);\r\n rd[i] = (k / n | 0) * n;\r\n }\r\n\r\n // Remove trailing words which are zero.\r\n for (; rd[i] === 0; i--) rd.pop();\r\n\r\n // Zero?\r\n if (i < 0) {\r\n e = 0;\r\n rd = [0];\r\n } else {\r\n e = -1;\r\n\r\n // Remove leading words which are zero and adjust exponent accordingly.\r\n for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\r\n\r\n // Count the digits of the first word of rd to determine leading zeros.\r\n for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\r\n\r\n // Adjust the exponent for leading zeros of the first word of rd.\r\n if (k < LOG_BASE) e -= LOG_BASE - k;\r\n }\r\n\r\n r.e = e;\r\n r.d = rd;\r\n\r\n return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n *\r\n * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction round(x) {\r\n return finalise(x = new this(x), x.e + 1, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return\r\n * 1 if x > 0,\r\n * -1 if x < 0,\r\n * 0 if x is 0,\r\n * -0 if x is -0,\r\n * NaN otherwise\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sign(x) {\r\n x = new this(x);\r\n return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sin(x) {\r\n return new this(x).sin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sinh(x) {\r\n return new this(x).sinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sqrt(x) {\r\n return new this(x).sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sub(x, y) {\r\n return new this(x).sub(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * Only the result is rounded, not the intermediate calculations.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sum() {\r\n var i = 0,\r\n args = arguments,\r\n x = new this(args[i]);\r\n\r\n external = false;\r\n for (; x.s && ++i < args.length;) x = x.plus(args[i]);\r\n external = true;\r\n\r\n return finalise(x, this.precision, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tan(x) {\r\n return new this(x).tan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tanh(x) {\r\n return new this(x).tanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` truncated to an integer.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction trunc(x) {\r\n return finalise(x = new this(x), x.e + 1, 1);\r\n}\r\n\r\n\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toString;\r\nP[Symbol.toStringTag] = 'Decimal';\r\n\r\n// Create and configure initial Decimal constructor.\r\nexport var Decimal = P.constructor = clone(DEFAULTS);\r\n\r\n// Create the internal constants from their string values.\r\nLN10 = new Decimal(LN10);\r\nPI = new Decimal(PI);\r\n\r\nexport default Decimal;\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Barcode = function Barcode(data, options) {\n\t_classCallCheck(this, Barcode);\n\n\tthis.data = data;\n\tthis.text = options.text || data;\n\tthis.options = options;\n};\n\nexports.default = Barcode;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.CODE39 = undefined;\n\nvar _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; }; }();\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/Code_39#Encoding\n\nvar CODE39 = function (_Barcode) {\n\t_inherits(CODE39, _Barcode);\n\n\tfunction CODE39(data, options) {\n\t\t_classCallCheck(this, CODE39);\n\n\t\tdata = data.toUpperCase();\n\n\t\t// Calculate mod43 checksum if enabled\n\t\tif (options.mod43) {\n\t\t\tdata += getCharacter(mod43checksum(data));\n\t\t}\n\n\t\treturn _possibleConstructorReturn(this, (CODE39.__proto__ || Object.getPrototypeOf(CODE39)).call(this, data, options));\n\t}\n\n\t_createClass(CODE39, [{\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\t// First character is always a *\n\t\t\tvar result = getEncoding(\"*\");\n\n\t\t\t// Take every character and add the binary representation to the result\n\t\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t\tresult += getEncoding(this.data[i]) + \"0\";\n\t\t\t}\n\n\t\t\t// Last character is always a *\n\t\t\tresult += getEncoding(\"*\");\n\n\t\t\treturn {\n\t\t\t\tdata: result,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9A-Z\\-\\.\\ \\$\\/\\+\\%]+$/) !== -1;\n\t\t}\n\t}]);\n\n\treturn CODE39;\n}(_Barcode3.default);\n\n// All characters. The position in the array is the (checksum) value\n\n\nvar characters = [\"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\", \"-\", \".\", \" \", \"$\", \"/\", \"+\", \"%\", \"*\"];\n\n// The decimal representation of the characters, is converted to the\n// corresponding binary with the getEncoding function\nvar encodings = [20957, 29783, 23639, 30485, 20951, 29813, 23669, 20855, 29789, 23645, 29975, 23831, 30533, 22295, 30149, 24005, 21623, 29981, 23837, 22301, 30023, 23879, 30545, 22343, 30161, 24017, 21959, 30065, 23921, 22385, 29015, 18263, 29141, 17879, 29045, 18293, 17783, 29021, 18269, 17477, 17489, 17681, 20753, 35770];\n\n// Get the binary representation of a character by converting the encodings\n// from decimal to binary\nfunction getEncoding(character) {\n\treturn getBinary(characterValue(character));\n}\n\nfunction getBinary(characterValue) {\n\treturn encodings[characterValue].toString(2);\n}\n\nfunction getCharacter(characterValue) {\n\treturn characters[characterValue];\n}\n\nfunction characterValue(character) {\n\treturn characters.indexOf(character);\n}\n\nfunction mod43checksum(data) {\n\tvar checksum = 0;\n\tfor (var i = 0; i < data.length; i++) {\n\t\tchecksum += characterValue(data[i]);\n\t}\n\n\tchecksum = checksum % 43;\n\treturn checksum;\n}\n\nexports.CODE39 = CODE39;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _SET_BY_CODE;\n\nfunction _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; }\n\n// constants for internal usage\nvar SET_A = exports.SET_A = 0;\nvar SET_B = exports.SET_B = 1;\nvar SET_C = exports.SET_C = 2;\n\n// Special characters\nvar SHIFT = exports.SHIFT = 98;\nvar START_A = exports.START_A = 103;\nvar START_B = exports.START_B = 104;\nvar START_C = exports.START_C = 105;\nvar MODULO = exports.MODULO = 103;\nvar STOP = exports.STOP = 106;\nvar FNC1 = exports.FNC1 = 207;\n\n// Get set by start code\nvar SET_BY_CODE = exports.SET_BY_CODE = (_SET_BY_CODE = {}, _defineProperty(_SET_BY_CODE, START_A, SET_A), _defineProperty(_SET_BY_CODE, START_B, SET_B), _defineProperty(_SET_BY_CODE, START_C, SET_C), _SET_BY_CODE);\n\n// Get next set by code\nvar SWAP = exports.SWAP = {\n\t101: SET_A,\n\t100: SET_B,\n\t99: SET_C\n};\n\nvar A_START_CHAR = exports.A_START_CHAR = String.fromCharCode(208); // START_A + 105\nvar B_START_CHAR = exports.B_START_CHAR = String.fromCharCode(209); // START_B + 105\nvar C_START_CHAR = exports.C_START_CHAR = String.fromCharCode(210); // START_C + 105\n\n// 128A (Code Set A)\n// ASCII characters 00 to 95 (0–9, A–Z and control codes), special characters, and FNC 1–4\nvar A_CHARS = exports.A_CHARS = \"[\\x00-\\x5F\\xC8-\\xCF]\";\n\n// 128B (Code Set B)\n// ASCII characters 32 to 127 (0–9, A–Z, a–z), special characters, and FNC 1–4\nvar B_CHARS = exports.B_CHARS = \"[\\x20-\\x7F\\xC8-\\xCF]\";\n\n// 128C (Code Set C)\n// 00–99 (encodes two digits with a single code point) and FNC1\nvar C_CHARS = exports.C_CHARS = \"(\\xCF*[0-9]{2}\\xCF*)\";\n\n// CODE128 includes 107 symbols:\n// 103 data symbols, 3 start symbols (A, B and C), and 1 stop symbol (the last one)\n// Each symbol consist of three black bars (1) and three white spaces (0).\nvar BARS = exports.BARS = [11011001100, 11001101100, 11001100110, 10010011000, 10010001100, 10001001100, 10011001000, 10011000100, 10001100100, 11001001000, 11001000100, 11000100100, 10110011100, 10011011100, 10011001110, 10111001100, 10011101100, 10011100110, 11001110010, 11001011100, 11001001110, 11011100100, 11001110100, 11101101110, 11101001100, 11100101100, 11100100110, 11101100100, 11100110100, 11100110010, 11011011000, 11011000110, 11000110110, 10100011000, 10001011000, 10001000110, 10110001000, 10001101000, 10001100010, 11010001000, 11000101000, 11000100010, 10110111000, 10110001110, 10001101110, 10111011000, 10111000110, 10001110110, 11101110110, 11010001110, 11000101110, 11011101000, 11011100010, 11011101110, 11101011000, 11101000110, 11100010110, 11101101000, 11101100010, 11100011010, 11101111010, 11001000010, 11110001010, 10100110000, 10100001100, 10010110000, 10010000110, 10000101100, 10000100110, 10110010000, 10110000100, 10011010000, 10011000010, 10000110100, 10000110010, 11000010010, 11001010000, 11110111010, 11000010100, 10001111010, 10100111100, 10010111100, 10010011110, 10111100100, 10011110100, 10011110010, 11110100100, 11110010100, 11110010010, 11011011110, 11011110110, 11110110110, 10101111000, 10100011110, 10001011110, 10111101000, 10111100010, 11110101000, 11110100010, 10111011110, 10111101110, 11101011110, 11110101110, 11010000100, 11010010000, 11010011100, 1100011101011];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _Barcode2 = require('../Barcode.js');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nvar _constants = require('./constants');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n// This is the master class,\n// it does require the start code to be included in the string\nvar CODE128 = function (_Barcode) {\n\t_inherits(CODE128, _Barcode);\n\n\tfunction CODE128(data, options) {\n\t\t_classCallCheck(this, CODE128);\n\n\t\t// Get array of ascii codes from data\n\t\tvar _this = _possibleConstructorReturn(this, (CODE128.__proto__ || Object.getPrototypeOf(CODE128)).call(this, data.substring(1), options));\n\n\t\t_this.bytes = data.split('').map(function (char) {\n\t\t\treturn char.charCodeAt(0);\n\t\t});\n\t\treturn _this;\n\t}\n\n\t_createClass(CODE128, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\t// ASCII value ranges 0-127, 200-211\n\t\t\treturn (/^[\\x00-\\x7F\\xC8-\\xD3]+$/.test(this.data)\n\t\t\t);\n\t\t}\n\n\t\t// The public encoding function\n\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\tvar bytes = this.bytes;\n\t\t\t// Remove the start code from the bytes and set its index\n\t\t\tvar startIndex = bytes.shift() - 105;\n\t\t\t// Get start set by index\n\t\t\tvar startSet = _constants.SET_BY_CODE[startIndex];\n\n\t\t\tif (startSet === undefined) {\n\t\t\t\tthrow new RangeError('The encoding does not start with a start character.');\n\t\t\t}\n\n\t\t\tif (this.shouldEncodeAsEan128() === true) {\n\t\t\t\tbytes.unshift(_constants.FNC1);\n\t\t\t}\n\n\t\t\t// Start encode with the right type\n\t\t\tvar encodingResult = CODE128.next(bytes, 1, startSet);\n\n\t\t\treturn {\n\t\t\t\ttext: this.text === this.data ? this.text.replace(/[^\\x20-\\x7E]/g, '') : this.text,\n\t\t\t\tdata:\n\t\t\t\t// Add the start bits\n\t\t\t\tCODE128.getBar(startIndex) +\n\t\t\t\t// Add the encoded bits\n\t\t\t\tencodingResult.result +\n\t\t\t\t// Add the checksum\n\t\t\t\tCODE128.getBar((encodingResult.checksum + startIndex) % _constants.MODULO) +\n\t\t\t\t// Add the end bits\n\t\t\t\tCODE128.getBar(_constants.STOP)\n\t\t\t};\n\t\t}\n\n\t\t// GS1-128/EAN-128\n\n\t}, {\n\t\tkey: 'shouldEncodeAsEan128',\n\t\tvalue: function shouldEncodeAsEan128() {\n\t\t\tvar isEAN128 = this.options.ean128 || false;\n\t\t\tif (typeof isEAN128 === 'string') {\n\t\t\t\tisEAN128 = isEAN128.toLowerCase() === 'true';\n\t\t\t}\n\t\t\treturn isEAN128;\n\t\t}\n\n\t\t// Get a bar symbol by index\n\n\t}], [{\n\t\tkey: 'getBar',\n\t\tvalue: function getBar(index) {\n\t\t\treturn _constants.BARS[index] ? _constants.BARS[index].toString() : '';\n\t\t}\n\n\t\t// Correct an index by a set and shift it from the bytes array\n\n\t}, {\n\t\tkey: 'correctIndex',\n\t\tvalue: function correctIndex(bytes, set) {\n\t\t\tif (set === _constants.SET_A) {\n\t\t\t\tvar charCode = bytes.shift();\n\t\t\t\treturn charCode < 32 ? charCode + 64 : charCode - 32;\n\t\t\t} else if (set === _constants.SET_B) {\n\t\t\t\treturn bytes.shift() - 32;\n\t\t\t} else {\n\t\t\t\treturn (bytes.shift() - 48) * 10 + bytes.shift() - 48;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'next',\n\t\tvalue: function next(bytes, pos, set) {\n\t\t\tif (!bytes.length) {\n\t\t\t\treturn { result: '', checksum: 0 };\n\t\t\t}\n\n\t\t\tvar nextCode = void 0,\n\t\t\t index = void 0;\n\n\t\t\t// Special characters\n\t\t\tif (bytes[0] >= 200) {\n\t\t\t\tindex = bytes.shift() - 105;\n\t\t\t\tvar nextSet = _constants.SWAP[index];\n\n\t\t\t\t// Swap to other set\n\t\t\t\tif (nextSet !== undefined) {\n\t\t\t\t\tnextCode = CODE128.next(bytes, pos + 1, nextSet);\n\t\t\t\t}\n\t\t\t\t// Continue on current set but encode a special character\n\t\t\t\telse {\n\t\t\t\t\t\t// Shift\n\t\t\t\t\t\tif ((set === _constants.SET_A || set === _constants.SET_B) && index === _constants.SHIFT) {\n\t\t\t\t\t\t\t// Convert the next character so that is encoded correctly\n\t\t\t\t\t\t\tbytes[0] = set === _constants.SET_A ? bytes[0] > 95 ? bytes[0] - 96 : bytes[0] : bytes[0] < 32 ? bytes[0] + 96 : bytes[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnextCode = CODE128.next(bytes, pos + 1, set);\n\t\t\t\t\t}\n\t\t\t}\n\t\t\t// Continue encoding\n\t\t\telse {\n\t\t\t\t\tindex = CODE128.correctIndex(bytes, set);\n\t\t\t\t\tnextCode = CODE128.next(bytes, pos + 1, set);\n\t\t\t\t}\n\n\t\t\t// Get the correct binary encoding and calculate the weight\n\t\t\tvar enc = CODE128.getBar(index);\n\t\t\tvar weight = index * pos;\n\n\t\t\treturn {\n\t\t\t\tresult: enc + nextCode.result,\n\t\t\t\tchecksum: weight + nextCode.checksum\n\t\t\t};\n\t\t}\n\t}]);\n\n\treturn CODE128;\n}(_Barcode3.default);\n\nexports.default = CODE128;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _constants = require('./constants');\n\n// Match Set functions\nvar matchSetALength = function matchSetALength(string) {\n\treturn string.match(new RegExp('^' + _constants.A_CHARS + '*'))[0].length;\n};\nvar matchSetBLength = function matchSetBLength(string) {\n\treturn string.match(new RegExp('^' + _constants.B_CHARS + '*'))[0].length;\n};\nvar matchSetC = function matchSetC(string) {\n\treturn string.match(new RegExp('^' + _constants.C_CHARS + '*'))[0];\n};\n\n// CODE128A or CODE128B\nfunction autoSelectFromAB(string, isA) {\n\tvar ranges = isA ? _constants.A_CHARS : _constants.B_CHARS;\n\tvar untilC = string.match(new RegExp('^(' + ranges + '+?)(([0-9]{2}){2,})([^0-9]|$)'));\n\n\tif (untilC) {\n\t\treturn untilC[1] + String.fromCharCode(204) + autoSelectFromC(string.substring(untilC[1].length));\n\t}\n\n\tvar chars = string.match(new RegExp('^' + ranges + '+'))[0];\n\n\tif (chars.length === string.length) {\n\t\treturn string;\n\t}\n\n\treturn chars + String.fromCharCode(isA ? 205 : 206) + autoSelectFromAB(string.substring(chars.length), !isA);\n}\n\n// CODE128C\nfunction autoSelectFromC(string) {\n\tvar cMatch = matchSetC(string);\n\tvar length = cMatch.length;\n\n\tif (length === string.length) {\n\t\treturn string;\n\t}\n\n\tstring = string.substring(length);\n\n\t// Select A/B depending on the longest match\n\tvar isA = matchSetALength(string) >= matchSetBLength(string);\n\treturn cMatch + String.fromCharCode(isA ? 206 : 205) + autoSelectFromAB(string, isA);\n}\n\n// Detect Code Set (A, B or C) and format the string\n\nexports.default = function (string) {\n\tvar newString = void 0;\n\tvar cLength = matchSetC(string).length;\n\n\t// Select 128C if the string start with enough digits\n\tif (cLength >= 2) {\n\t\tnewString = _constants.C_START_CHAR + autoSelectFromC(string);\n\t} else {\n\t\t// Select A/B depending on the longest match\n\t\tvar isA = matchSetALength(string) > matchSetBLength(string);\n\t\tnewString = (isA ? _constants.A_START_CHAR : _constants.B_START_CHAR) + autoSelectFromAB(string, isA);\n\t}\n\n\treturn newString.replace(/[\\xCD\\xCE]([^])[\\xCD\\xCE]/, // Any sequence between 205 and 206 characters\n\tfunction (match, char) {\n\t\treturn String.fromCharCode(203) + char;\n\t});\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _CODE2 = require('./CODE128');\n\nvar _CODE3 = _interopRequireDefault(_CODE2);\n\nvar _auto = require('./auto');\n\nvar _auto2 = _interopRequireDefault(_auto);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar CODE128AUTO = function (_CODE) {\n\t_inherits(CODE128AUTO, _CODE);\n\n\tfunction CODE128AUTO(data, options) {\n\t\t_classCallCheck(this, CODE128AUTO);\n\n\t\t// ASCII value ranges 0-127, 200-211\n\t\tif (/^[\\x00-\\x7F\\xC8-\\xD3]+$/.test(data)) {\n\t\t\tvar _this = _possibleConstructorReturn(this, (CODE128AUTO.__proto__ || Object.getPrototypeOf(CODE128AUTO)).call(this, (0, _auto2.default)(data), options));\n\t\t} else {\n\t\t\tvar _this = _possibleConstructorReturn(this, (CODE128AUTO.__proto__ || Object.getPrototypeOf(CODE128AUTO)).call(this, data, options));\n\t\t}\n\t\treturn _possibleConstructorReturn(_this);\n\t}\n\n\treturn CODE128AUTO;\n}(_CODE3.default);\n\nexports.default = CODE128AUTO;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _CODE2 = require('./CODE128.js');\n\nvar _CODE3 = _interopRequireDefault(_CODE2);\n\nvar _constants = require('./constants');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar CODE128A = function (_CODE) {\n\t_inherits(CODE128A, _CODE);\n\n\tfunction CODE128A(string, options) {\n\t\t_classCallCheck(this, CODE128A);\n\n\t\treturn _possibleConstructorReturn(this, (CODE128A.__proto__ || Object.getPrototypeOf(CODE128A)).call(this, _constants.A_START_CHAR + string, options));\n\t}\n\n\t_createClass(CODE128A, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn new RegExp('^' + _constants.A_CHARS + '+$').test(this.data);\n\t\t}\n\t}]);\n\n\treturn CODE128A;\n}(_CODE3.default);\n\nexports.default = CODE128A;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _CODE2 = require('./CODE128.js');\n\nvar _CODE3 = _interopRequireDefault(_CODE2);\n\nvar _constants = require('./constants');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar CODE128B = function (_CODE) {\n\t_inherits(CODE128B, _CODE);\n\n\tfunction CODE128B(string, options) {\n\t\t_classCallCheck(this, CODE128B);\n\n\t\treturn _possibleConstructorReturn(this, (CODE128B.__proto__ || Object.getPrototypeOf(CODE128B)).call(this, _constants.B_START_CHAR + string, options));\n\t}\n\n\t_createClass(CODE128B, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn new RegExp('^' + _constants.B_CHARS + '+$').test(this.data);\n\t\t}\n\t}]);\n\n\treturn CODE128B;\n}(_CODE3.default);\n\nexports.default = CODE128B;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _CODE2 = require('./CODE128.js');\n\nvar _CODE3 = _interopRequireDefault(_CODE2);\n\nvar _constants = require('./constants');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar CODE128C = function (_CODE) {\n\t_inherits(CODE128C, _CODE);\n\n\tfunction CODE128C(string, options) {\n\t\t_classCallCheck(this, CODE128C);\n\n\t\treturn _possibleConstructorReturn(this, (CODE128C.__proto__ || Object.getPrototypeOf(CODE128C)).call(this, _constants.C_START_CHAR + string, options));\n\t}\n\n\t_createClass(CODE128C, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn new RegExp('^' + _constants.C_CHARS + '+$').test(this.data);\n\t\t}\n\t}]);\n\n\treturn CODE128C;\n}(_CODE3.default);\n\nexports.default = CODE128C;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CODE128C = exports.CODE128B = exports.CODE128A = exports.CODE128 = undefined;\n\nvar _CODE128_AUTO = require('./CODE128_AUTO.js');\n\nvar _CODE128_AUTO2 = _interopRequireDefault(_CODE128_AUTO);\n\nvar _CODE128A = require('./CODE128A.js');\n\nvar _CODE128A2 = _interopRequireDefault(_CODE128A);\n\nvar _CODE128B = require('./CODE128B.js');\n\nvar _CODE128B2 = _interopRequireDefault(_CODE128B);\n\nvar _CODE128C = require('./CODE128C.js');\n\nvar _CODE128C2 = _interopRequireDefault(_CODE128C);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.CODE128 = _CODE128_AUTO2.default;\nexports.CODE128A = _CODE128A2.default;\nexports.CODE128B = _CODE128B2.default;\nexports.CODE128C = _CODE128C2.default;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n// Standard start end and middle bits\nvar SIDE_BIN = exports.SIDE_BIN = '101';\nvar MIDDLE_BIN = exports.MIDDLE_BIN = '01010';\n\nvar BINARIES = exports.BINARIES = {\n\t'L': [// The L (left) type of encoding\n\t'0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011'],\n\t'G': [// The G type of encoding\n\t'0100111', '0110011', '0011011', '0100001', '0011101', '0111001', '0000101', '0010001', '0001001', '0010111'],\n\t'R': [// The R (right) type of encoding\n\t'1110010', '1100110', '1101100', '1000010', '1011100', '1001110', '1010000', '1000100', '1001000', '1110100'],\n\t'O': [// The O (odd) encoding for UPC-E\n\t'0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011'],\n\t'E': [// The E (even) encoding for UPC-E\n\t'0100111', '0110011', '0011011', '0100001', '0011101', '0111001', '0000101', '0010001', '0001001', '0010111']\n};\n\n// Define the EAN-2 structure\nvar EAN2_STRUCTURE = exports.EAN2_STRUCTURE = ['LL', 'LG', 'GL', 'GG'];\n\n// Define the EAN-5 structure\nvar EAN5_STRUCTURE = exports.EAN5_STRUCTURE = ['GGLLL', 'GLGLL', 'GLLGL', 'GLLLG', 'LGGLL', 'LLGGL', 'LLLGG', 'LGLGL', 'LGLLG', 'LLGLG'];\n\n// Define the EAN-13 structure\nvar EAN13_STRUCTURE = exports.EAN13_STRUCTURE = ['LLLLLL', 'LLGLGG', 'LLGGLG', 'LLGGGL', 'LGLLGG', 'LGGLLG', 'LGGGLL', 'LGLGLG', 'LGLGGL', 'LGGLGL'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _constants = require('./constants');\n\n// Encode data string\nvar encode = function encode(data, structure, separator) {\n\tvar encoded = data.split('').map(function (val, idx) {\n\t\treturn _constants.BINARIES[structure[idx]];\n\t}).map(function (val, idx) {\n\t\treturn val ? val[data[idx]] : '';\n\t});\n\n\tif (separator) {\n\t\tvar last = data.length - 1;\n\t\tencoded = encoded.map(function (val, idx) {\n\t\t\treturn idx < last ? val + separator : val;\n\t\t});\n\t}\n\n\treturn encoded.join('');\n};\n\nexports.default = encode;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _constants = require('./constants');\n\nvar _encoder = require('./encoder');\n\nvar _encoder2 = _interopRequireDefault(_encoder);\n\nvar _Barcode2 = require('../Barcode');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n// Base class for EAN8 & EAN13\nvar EAN = function (_Barcode) {\n\t_inherits(EAN, _Barcode);\n\n\tfunction EAN(data, options) {\n\t\t_classCallCheck(this, EAN);\n\n\t\t// Make sure the font is not bigger than the space between the guard bars\n\t\tvar _this = _possibleConstructorReturn(this, (EAN.__proto__ || Object.getPrototypeOf(EAN)).call(this, data, options));\n\n\t\t_this.fontSize = !options.flat && options.fontSize > options.width * 10 ? options.width * 10 : options.fontSize;\n\n\t\t// Make the guard bars go down half the way of the text\n\t\t_this.guardHeight = options.height + _this.fontSize / 2 + options.textMargin;\n\t\treturn _this;\n\t}\n\n\t_createClass(EAN, [{\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\treturn this.options.flat ? this.encodeFlat() : this.encodeGuarded();\n\t\t}\n\t}, {\n\t\tkey: 'leftText',\n\t\tvalue: function leftText(from, to) {\n\t\t\treturn this.text.substr(from, to);\n\t\t}\n\t}, {\n\t\tkey: 'leftEncode',\n\t\tvalue: function leftEncode(data, structure) {\n\t\t\treturn (0, _encoder2.default)(data, structure);\n\t\t}\n\t}, {\n\t\tkey: 'rightText',\n\t\tvalue: function rightText(from, to) {\n\t\t\treturn this.text.substr(from, to);\n\t\t}\n\t}, {\n\t\tkey: 'rightEncode',\n\t\tvalue: function rightEncode(data, structure) {\n\t\t\treturn (0, _encoder2.default)(data, structure);\n\t\t}\n\t}, {\n\t\tkey: 'encodeGuarded',\n\t\tvalue: function encodeGuarded() {\n\t\t\tvar textOptions = { fontSize: this.fontSize };\n\t\t\tvar guardOptions = { height: this.guardHeight };\n\n\t\t\treturn [{ data: _constants.SIDE_BIN, options: guardOptions }, { data: this.leftEncode(), text: this.leftText(), options: textOptions }, { data: _constants.MIDDLE_BIN, options: guardOptions }, { data: this.rightEncode(), text: this.rightText(), options: textOptions }, { data: _constants.SIDE_BIN, options: guardOptions }];\n\t\t}\n\t}, {\n\t\tkey: 'encodeFlat',\n\t\tvalue: function encodeFlat() {\n\t\t\tvar data = [_constants.SIDE_BIN, this.leftEncode(), _constants.MIDDLE_BIN, this.rightEncode(), _constants.SIDE_BIN];\n\n\t\t\treturn {\n\t\t\t\tdata: data.join(''),\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}]);\n\n\treturn EAN;\n}(_Barcode3.default);\n\nexports.default = EAN;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _constants = require('./constants');\n\nvar _EAN2 = require('./EAN');\n\nvar _EAN3 = _interopRequireDefault(_EAN2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/International_Article_Number_(EAN)#Binary_encoding_of_data_digits_into_EAN-13_barcode\n\n// Calculate the checksum digit\n// https://en.wikipedia.org/wiki/International_Article_Number_(EAN)#Calculation_of_checksum_digit\nvar checksum = function checksum(number) {\n\tvar res = number.substr(0, 12).split('').map(function (n) {\n\t\treturn +n;\n\t}).reduce(function (sum, a, idx) {\n\t\treturn idx % 2 ? sum + a * 3 : sum + a;\n\t}, 0);\n\n\treturn (10 - res % 10) % 10;\n};\n\nvar EAN13 = function (_EAN) {\n\t_inherits(EAN13, _EAN);\n\n\tfunction EAN13(data, options) {\n\t\t_classCallCheck(this, EAN13);\n\n\t\t// Add checksum if it does not exist\n\t\tif (data.search(/^[0-9]{12}$/) !== -1) {\n\t\t\tdata += checksum(data);\n\t\t}\n\n\t\t// Adds a last character to the end of the barcode\n\t\tvar _this = _possibleConstructorReturn(this, (EAN13.__proto__ || Object.getPrototypeOf(EAN13)).call(this, data, options));\n\n\t\t_this.lastChar = options.lastChar;\n\t\treturn _this;\n\t}\n\n\t_createClass(EAN13, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{13}$/) !== -1 && +this.data[12] === checksum(this.data);\n\t\t}\n\t}, {\n\t\tkey: 'leftText',\n\t\tvalue: function leftText() {\n\t\t\treturn _get(EAN13.prototype.__proto__ || Object.getPrototypeOf(EAN13.prototype), 'leftText', this).call(this, 1, 6);\n\t\t}\n\t}, {\n\t\tkey: 'leftEncode',\n\t\tvalue: function leftEncode() {\n\t\t\tvar data = this.data.substr(1, 6);\n\t\t\tvar structure = _constants.EAN13_STRUCTURE[this.data[0]];\n\t\t\treturn _get(EAN13.prototype.__proto__ || Object.getPrototypeOf(EAN13.prototype), 'leftEncode', this).call(this, data, structure);\n\t\t}\n\t}, {\n\t\tkey: 'rightText',\n\t\tvalue: function rightText() {\n\t\t\treturn _get(EAN13.prototype.__proto__ || Object.getPrototypeOf(EAN13.prototype), 'rightText', this).call(this, 7, 6);\n\t\t}\n\t}, {\n\t\tkey: 'rightEncode',\n\t\tvalue: function rightEncode() {\n\t\t\tvar data = this.data.substr(7, 6);\n\t\t\treturn _get(EAN13.prototype.__proto__ || Object.getPrototypeOf(EAN13.prototype), 'rightEncode', this).call(this, data, 'RRRRRR');\n\t\t}\n\n\t\t// The \"standard\" way of printing EAN13 barcodes with guard bars\n\n\t}, {\n\t\tkey: 'encodeGuarded',\n\t\tvalue: function encodeGuarded() {\n\t\t\tvar data = _get(EAN13.prototype.__proto__ || Object.getPrototypeOf(EAN13.prototype), 'encodeGuarded', this).call(this);\n\n\t\t\t// Extend data with left digit & last character\n\t\t\tif (this.options.displayValue) {\n\t\t\t\tdata.unshift({\n\t\t\t\t\tdata: '000000000000',\n\t\t\t\t\ttext: this.text.substr(0, 1),\n\t\t\t\t\toptions: { textAlign: 'left', fontSize: this.fontSize }\n\t\t\t\t});\n\n\t\t\t\tif (this.options.lastChar) {\n\t\t\t\t\tdata.push({\n\t\t\t\t\t\tdata: '00'\n\t\t\t\t\t});\n\t\t\t\t\tdata.push({\n\t\t\t\t\t\tdata: '00000',\n\t\t\t\t\t\ttext: this.options.lastChar,\n\t\t\t\t\t\toptions: { fontSize: this.fontSize }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\t}]);\n\n\treturn EAN13;\n}(_EAN3.default);\n\nexports.default = EAN13;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _EAN2 = require('./EAN');\n\nvar _EAN3 = _interopRequireDefault(_EAN2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation:\n// http://www.barcodeisland.com/ean8.phtml\n\n// Calculate the checksum digit\nvar checksum = function checksum(number) {\n\tvar res = number.substr(0, 7).split('').map(function (n) {\n\t\treturn +n;\n\t}).reduce(function (sum, a, idx) {\n\t\treturn idx % 2 ? sum + a : sum + a * 3;\n\t}, 0);\n\n\treturn (10 - res % 10) % 10;\n};\n\nvar EAN8 = function (_EAN) {\n\t_inherits(EAN8, _EAN);\n\n\tfunction EAN8(data, options) {\n\t\t_classCallCheck(this, EAN8);\n\n\t\t// Add checksum if it does not exist\n\t\tif (data.search(/^[0-9]{7}$/) !== -1) {\n\t\t\tdata += checksum(data);\n\t\t}\n\n\t\treturn _possibleConstructorReturn(this, (EAN8.__proto__ || Object.getPrototypeOf(EAN8)).call(this, data, options));\n\t}\n\n\t_createClass(EAN8, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{8}$/) !== -1 && +this.data[7] === checksum(this.data);\n\t\t}\n\t}, {\n\t\tkey: 'leftText',\n\t\tvalue: function leftText() {\n\t\t\treturn _get(EAN8.prototype.__proto__ || Object.getPrototypeOf(EAN8.prototype), 'leftText', this).call(this, 0, 4);\n\t\t}\n\t}, {\n\t\tkey: 'leftEncode',\n\t\tvalue: function leftEncode() {\n\t\t\tvar data = this.data.substr(0, 4);\n\t\t\treturn _get(EAN8.prototype.__proto__ || Object.getPrototypeOf(EAN8.prototype), 'leftEncode', this).call(this, data, 'LLLL');\n\t\t}\n\t}, {\n\t\tkey: 'rightText',\n\t\tvalue: function rightText() {\n\t\t\treturn _get(EAN8.prototype.__proto__ || Object.getPrototypeOf(EAN8.prototype), 'rightText', this).call(this, 4, 4);\n\t\t}\n\t}, {\n\t\tkey: 'rightEncode',\n\t\tvalue: function rightEncode() {\n\t\t\tvar data = this.data.substr(4, 4);\n\t\t\treturn _get(EAN8.prototype.__proto__ || Object.getPrototypeOf(EAN8.prototype), 'rightEncode', this).call(this, data, 'RRRR');\n\t\t}\n\t}]);\n\n\treturn EAN8;\n}(_EAN3.default);\n\nexports.default = EAN8;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _constants = require('./constants');\n\nvar _encoder = require('./encoder');\n\nvar _encoder2 = _interopRequireDefault(_encoder);\n\nvar _Barcode2 = require('../Barcode');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/EAN_5#Encoding\n\nvar checksum = function checksum(data) {\n\tvar result = data.split('').map(function (n) {\n\t\treturn +n;\n\t}).reduce(function (sum, a, idx) {\n\t\treturn idx % 2 ? sum + a * 9 : sum + a * 3;\n\t}, 0);\n\treturn result % 10;\n};\n\nvar EAN5 = function (_Barcode) {\n\t_inherits(EAN5, _Barcode);\n\n\tfunction EAN5(data, options) {\n\t\t_classCallCheck(this, EAN5);\n\n\t\treturn _possibleConstructorReturn(this, (EAN5.__proto__ || Object.getPrototypeOf(EAN5)).call(this, data, options));\n\t}\n\n\t_createClass(EAN5, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{5}$/) !== -1;\n\t\t}\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\tvar structure = _constants.EAN5_STRUCTURE[checksum(this.data)];\n\t\t\treturn {\n\t\t\t\tdata: '1011' + (0, _encoder2.default)(this.data, structure, '01'),\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}]);\n\n\treturn EAN5;\n}(_Barcode3.default);\n\nexports.default = EAN5;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _constants = require('./constants');\n\nvar _encoder = require('./encoder');\n\nvar _encoder2 = _interopRequireDefault(_encoder);\n\nvar _Barcode2 = require('../Barcode');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/EAN_2#Encoding\n\nvar EAN2 = function (_Barcode) {\n\t_inherits(EAN2, _Barcode);\n\n\tfunction EAN2(data, options) {\n\t\t_classCallCheck(this, EAN2);\n\n\t\treturn _possibleConstructorReturn(this, (EAN2.__proto__ || Object.getPrototypeOf(EAN2)).call(this, data, options));\n\t}\n\n\t_createClass(EAN2, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{2}$/) !== -1;\n\t\t}\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\t// Choose the structure based on the number mod 4\n\t\t\tvar structure = _constants.EAN2_STRUCTURE[parseInt(this.data) % 4];\n\t\t\treturn {\n\t\t\t\t// Start bits + Encode the two digits with 01 in between\n\t\t\t\tdata: '1011' + (0, _encoder2.default)(this.data, structure, '01'),\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}]);\n\n\treturn EAN2;\n}(_Barcode3.default);\n\nexports.default = EAN2;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nexports.checksum = checksum;\n\nvar _encoder = require(\"./encoder\");\n\nvar _encoder2 = _interopRequireDefault(_encoder);\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/Universal_Product_Code#Encoding\n\nvar UPC = function (_Barcode) {\n\t_inherits(UPC, _Barcode);\n\n\tfunction UPC(data, options) {\n\t\t_classCallCheck(this, UPC);\n\n\t\t// Add checksum if it does not exist\n\t\tif (data.search(/^[0-9]{11}$/) !== -1) {\n\t\t\tdata += checksum(data);\n\t\t}\n\n\t\tvar _this = _possibleConstructorReturn(this, (UPC.__proto__ || Object.getPrototypeOf(UPC)).call(this, data, options));\n\n\t\t_this.displayValue = options.displayValue;\n\n\t\t// Make sure the font is not bigger than the space between the guard bars\n\t\tif (options.fontSize > options.width * 10) {\n\t\t\t_this.fontSize = options.width * 10;\n\t\t} else {\n\t\t\t_this.fontSize = options.fontSize;\n\t\t}\n\n\t\t// Make the guard bars go down half the way of the text\n\t\t_this.guardHeight = options.height + _this.fontSize / 2 + options.textMargin;\n\t\treturn _this;\n\t}\n\n\t_createClass(UPC, [{\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{12}$/) !== -1 && this.data[11] == checksum(this.data);\n\t\t}\n\t}, {\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\tif (this.options.flat) {\n\t\t\t\treturn this.flatEncoding();\n\t\t\t} else {\n\t\t\t\treturn this.guardedEncoding();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"flatEncoding\",\n\t\tvalue: function flatEncoding() {\n\t\t\tvar result = \"\";\n\n\t\t\tresult += \"101\";\n\t\t\tresult += (0, _encoder2.default)(this.data.substr(0, 6), \"LLLLLL\");\n\t\t\tresult += \"01010\";\n\t\t\tresult += (0, _encoder2.default)(this.data.substr(6, 6), \"RRRRRR\");\n\t\t\tresult += \"101\";\n\n\t\t\treturn {\n\t\t\t\tdata: result,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"guardedEncoding\",\n\t\tvalue: function guardedEncoding() {\n\t\t\tvar result = [];\n\n\t\t\t// Add the first digit\n\t\t\tif (this.displayValue) {\n\t\t\t\tresult.push({\n\t\t\t\t\tdata: \"00000000\",\n\t\t\t\t\ttext: this.text.substr(0, 1),\n\t\t\t\t\toptions: { textAlign: \"left\", fontSize: this.fontSize }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Add the guard bars\n\t\t\tresult.push({\n\t\t\t\tdata: \"101\" + (0, _encoder2.default)(this.data[0], \"L\"),\n\t\t\t\toptions: { height: this.guardHeight }\n\t\t\t});\n\n\t\t\t// Add the left side\n\t\t\tresult.push({\n\t\t\t\tdata: (0, _encoder2.default)(this.data.substr(1, 5), \"LLLLL\"),\n\t\t\t\ttext: this.text.substr(1, 5),\n\t\t\t\toptions: { fontSize: this.fontSize }\n\t\t\t});\n\n\t\t\t// Add the middle bits\n\t\t\tresult.push({\n\t\t\t\tdata: \"01010\",\n\t\t\t\toptions: { height: this.guardHeight }\n\t\t\t});\n\n\t\t\t// Add the right side\n\t\t\tresult.push({\n\t\t\t\tdata: (0, _encoder2.default)(this.data.substr(6, 5), \"RRRRR\"),\n\t\t\t\ttext: this.text.substr(6, 5),\n\t\t\t\toptions: { fontSize: this.fontSize }\n\t\t\t});\n\n\t\t\t// Add the end bits\n\t\t\tresult.push({\n\t\t\t\tdata: (0, _encoder2.default)(this.data[11], \"R\") + \"101\",\n\t\t\t\toptions: { height: this.guardHeight }\n\t\t\t});\n\n\t\t\t// Add the last digit\n\t\t\tif (this.displayValue) {\n\t\t\t\tresult.push({\n\t\t\t\t\tdata: \"00000000\",\n\t\t\t\t\ttext: this.text.substr(11, 1),\n\t\t\t\t\toptions: { textAlign: \"right\", fontSize: this.fontSize }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t}]);\n\n\treturn UPC;\n}(_Barcode3.default);\n\n// Calulate the checksum digit\n// https://en.wikipedia.org/wiki/International_Article_Number_(EAN)#Calculation_of_checksum_digit\n\n\nfunction checksum(number) {\n\tvar result = 0;\n\n\tvar i;\n\tfor (i = 1; i < 11; i += 2) {\n\t\tresult += parseInt(number[i]);\n\t}\n\tfor (i = 0; i < 11; i += 2) {\n\t\tresult += parseInt(number[i]) * 3;\n\t}\n\n\treturn (10 - result % 10) % 10;\n}\n\nexports.default = UPC;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _encoder = require('./encoder');\n\nvar _encoder2 = _interopRequireDefault(_encoder);\n\nvar _Barcode2 = require('../Barcode.js');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nvar _UPC = require('./UPC.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/Universal_Product_Code#Encoding\n//\n// UPC-E documentation:\n// https://en.wikipedia.org/wiki/Universal_Product_Code#UPC-E\n\nvar EXPANSIONS = [\"XX00000XXX\", \"XX10000XXX\", \"XX20000XXX\", \"XXX00000XX\", \"XXXX00000X\", \"XXXXX00005\", \"XXXXX00006\", \"XXXXX00007\", \"XXXXX00008\", \"XXXXX00009\"];\n\nvar PARITIES = [[\"EEEOOO\", \"OOOEEE\"], [\"EEOEOO\", \"OOEOEE\"], [\"EEOOEO\", \"OOEEOE\"], [\"EEOOOE\", \"OOEEEO\"], [\"EOEEOO\", \"OEOOEE\"], [\"EOOEEO\", \"OEEOOE\"], [\"EOOOEE\", \"OEEEOO\"], [\"EOEOEO\", \"OEOEOE\"], [\"EOEOOE\", \"OEOEEO\"], [\"EOOEOE\", \"OEEOEO\"]];\n\nvar UPCE = function (_Barcode) {\n\t_inherits(UPCE, _Barcode);\n\n\tfunction UPCE(data, options) {\n\t\t_classCallCheck(this, UPCE);\n\n\t\tvar _this = _possibleConstructorReturn(this, (UPCE.__proto__ || Object.getPrototypeOf(UPCE)).call(this, data, options));\n\t\t// Code may be 6 or 8 digits;\n\t\t// A 7 digit code is ambiguous as to whether the extra digit\n\t\t// is a UPC-A check or number system digit.\n\n\n\t\t_this.isValid = false;\n\t\tif (data.search(/^[0-9]{6}$/) !== -1) {\n\t\t\t_this.middleDigits = data;\n\t\t\t_this.upcA = expandToUPCA(data, \"0\");\n\t\t\t_this.text = options.text || '' + _this.upcA[0] + data + _this.upcA[_this.upcA.length - 1];\n\t\t\t_this.isValid = true;\n\t\t} else if (data.search(/^[01][0-9]{7}$/) !== -1) {\n\t\t\t_this.middleDigits = data.substring(1, data.length - 1);\n\t\t\t_this.upcA = expandToUPCA(_this.middleDigits, data[0]);\n\n\t\t\tif (_this.upcA[_this.upcA.length - 1] === data[data.length - 1]) {\n\t\t\t\t_this.isValid = true;\n\t\t\t} else {\n\t\t\t\t// checksum mismatch\n\t\t\t\treturn _possibleConstructorReturn(_this);\n\t\t\t}\n\t\t} else {\n\t\t\treturn _possibleConstructorReturn(_this);\n\t\t}\n\n\t\t_this.displayValue = options.displayValue;\n\n\t\t// Make sure the font is not bigger than the space between the guard bars\n\t\tif (options.fontSize > options.width * 10) {\n\t\t\t_this.fontSize = options.width * 10;\n\t\t} else {\n\t\t\t_this.fontSize = options.fontSize;\n\t\t}\n\n\t\t// Make the guard bars go down half the way of the text\n\t\t_this.guardHeight = options.height + _this.fontSize / 2 + options.textMargin;\n\t\treturn _this;\n\t}\n\n\t_createClass(UPCE, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.isValid;\n\t\t}\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\tif (this.options.flat) {\n\t\t\t\treturn this.flatEncoding();\n\t\t\t} else {\n\t\t\t\treturn this.guardedEncoding();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'flatEncoding',\n\t\tvalue: function flatEncoding() {\n\t\t\tvar result = \"\";\n\n\t\t\tresult += \"101\";\n\t\t\tresult += this.encodeMiddleDigits();\n\t\t\tresult += \"010101\";\n\n\t\t\treturn {\n\t\t\t\tdata: result,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: 'guardedEncoding',\n\t\tvalue: function guardedEncoding() {\n\t\t\tvar result = [];\n\n\t\t\t// Add the UPC-A number system digit beneath the quiet zone\n\t\t\tif (this.displayValue) {\n\t\t\t\tresult.push({\n\t\t\t\t\tdata: \"00000000\",\n\t\t\t\t\ttext: this.text[0],\n\t\t\t\t\toptions: { textAlign: \"left\", fontSize: this.fontSize }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Add the guard bars\n\t\t\tresult.push({\n\t\t\t\tdata: \"101\",\n\t\t\t\toptions: { height: this.guardHeight }\n\t\t\t});\n\n\t\t\t// Add the 6 UPC-E digits\n\t\t\tresult.push({\n\t\t\t\tdata: this.encodeMiddleDigits(),\n\t\t\t\ttext: this.text.substring(1, 7),\n\t\t\t\toptions: { fontSize: this.fontSize }\n\t\t\t});\n\n\t\t\t// Add the end bits\n\t\t\tresult.push({\n\t\t\t\tdata: \"010101\",\n\t\t\t\toptions: { height: this.guardHeight }\n\t\t\t});\n\n\t\t\t// Add the UPC-A check digit beneath the quiet zone\n\t\t\tif (this.displayValue) {\n\t\t\t\tresult.push({\n\t\t\t\t\tdata: \"00000000\",\n\t\t\t\t\ttext: this.text[7],\n\t\t\t\t\toptions: { textAlign: \"right\", fontSize: this.fontSize }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t}, {\n\t\tkey: 'encodeMiddleDigits',\n\t\tvalue: function encodeMiddleDigits() {\n\t\t\tvar numberSystem = this.upcA[0];\n\t\t\tvar checkDigit = this.upcA[this.upcA.length - 1];\n\t\t\tvar parity = PARITIES[parseInt(checkDigit)][parseInt(numberSystem)];\n\t\t\treturn (0, _encoder2.default)(this.middleDigits, parity);\n\t\t}\n\t}]);\n\n\treturn UPCE;\n}(_Barcode3.default);\n\nfunction expandToUPCA(middleDigits, numberSystem) {\n\tvar lastUpcE = parseInt(middleDigits[middleDigits.length - 1]);\n\tvar expansion = EXPANSIONS[lastUpcE];\n\n\tvar result = \"\";\n\tvar digitIndex = 0;\n\tfor (var i = 0; i < expansion.length; i++) {\n\t\tvar c = expansion[i];\n\t\tif (c === 'X') {\n\t\t\tresult += middleDigits[digitIndex++];\n\t\t} else {\n\t\t\tresult += c;\n\t\t}\n\t}\n\n\tresult = '' + numberSystem + result;\n\treturn '' + result + (0, _UPC.checksum)(result);\n}\n\nexports.default = UPCE;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.UPCE = exports.UPC = exports.EAN2 = exports.EAN5 = exports.EAN8 = exports.EAN13 = undefined;\n\nvar _EAN = require('./EAN13.js');\n\nvar _EAN2 = _interopRequireDefault(_EAN);\n\nvar _EAN3 = require('./EAN8.js');\n\nvar _EAN4 = _interopRequireDefault(_EAN3);\n\nvar _EAN5 = require('./EAN5.js');\n\nvar _EAN6 = _interopRequireDefault(_EAN5);\n\nvar _EAN7 = require('./EAN2.js');\n\nvar _EAN8 = _interopRequireDefault(_EAN7);\n\nvar _UPC = require('./UPC.js');\n\nvar _UPC2 = _interopRequireDefault(_UPC);\n\nvar _UPCE = require('./UPCE.js');\n\nvar _UPCE2 = _interopRequireDefault(_UPCE);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.EAN13 = _EAN2.default;\nexports.EAN8 = _EAN4.default;\nexports.EAN5 = _EAN6.default;\nexports.EAN2 = _EAN8.default;\nexports.UPC = _UPC2.default;\nexports.UPCE = _UPCE2.default;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nvar START_BIN = exports.START_BIN = '1010';\nvar END_BIN = exports.END_BIN = '11101';\n\nvar BINARIES = exports.BINARIES = ['00110', '10001', '01001', '11000', '00101', '10100', '01100', '00011', '10010', '01010'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _constants = require('./constants');\n\nvar _Barcode2 = require('../Barcode');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar ITF = function (_Barcode) {\n\t_inherits(ITF, _Barcode);\n\n\tfunction ITF() {\n\t\t_classCallCheck(this, ITF);\n\n\t\treturn _possibleConstructorReturn(this, (ITF.__proto__ || Object.getPrototypeOf(ITF)).apply(this, arguments));\n\t}\n\n\t_createClass(ITF, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^([0-9]{2})+$/) !== -1;\n\t\t}\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\tvar _this2 = this;\n\n\t\t\t// Calculate all the digit pairs\n\t\t\tvar encoded = this.data.match(/.{2}/g).map(function (pair) {\n\t\t\t\treturn _this2.encodePair(pair);\n\t\t\t}).join('');\n\n\t\t\treturn {\n\t\t\t\tdata: _constants.START_BIN + encoded + _constants.END_BIN,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\n\t\t// Calculate the data of a number pair\n\n\t}, {\n\t\tkey: 'encodePair',\n\t\tvalue: function encodePair(pair) {\n\t\t\tvar second = _constants.BINARIES[pair[1]];\n\n\t\t\treturn _constants.BINARIES[pair[0]].split('').map(function (first, idx) {\n\t\t\t\treturn (first === '1' ? '111' : '1') + (second[idx] === '1' ? '000' : '0');\n\t\t\t}).join('');\n\t\t}\n\t}]);\n\n\treturn ITF;\n}(_Barcode3.default);\n\nexports.default = ITF;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _ITF2 = require('./ITF');\n\nvar _ITF3 = _interopRequireDefault(_ITF2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n// Calculate the checksum digit\nvar checksum = function checksum(data) {\n\tvar res = data.substr(0, 13).split('').map(function (num) {\n\t\treturn parseInt(num, 10);\n\t}).reduce(function (sum, n, idx) {\n\t\treturn sum + n * (3 - idx % 2 * 2);\n\t}, 0);\n\n\treturn Math.ceil(res / 10) * 10 - res;\n};\n\nvar ITF14 = function (_ITF) {\n\t_inherits(ITF14, _ITF);\n\n\tfunction ITF14(data, options) {\n\t\t_classCallCheck(this, ITF14);\n\n\t\t// Add checksum if it does not exist\n\t\tif (data.search(/^[0-9]{13}$/) !== -1) {\n\t\t\tdata += checksum(data);\n\t\t}\n\t\treturn _possibleConstructorReturn(this, (ITF14.__proto__ || Object.getPrototypeOf(ITF14)).call(this, data, options));\n\t}\n\n\t_createClass(ITF14, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]{14}$/) !== -1 && +this.data[13] === checksum(this.data);\n\t\t}\n\t}]);\n\n\treturn ITF14;\n}(_ITF3.default);\n\nexports.default = ITF14;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ITF14 = exports.ITF = undefined;\n\nvar _ITF = require('./ITF');\n\nvar _ITF2 = _interopRequireDefault(_ITF);\n\nvar _ITF3 = require('./ITF14');\n\nvar _ITF4 = _interopRequireDefault(_ITF3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.ITF = _ITF2.default;\nexports.ITF14 = _ITF4.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation\n// https://en.wikipedia.org/wiki/MSI_Barcode#Character_set_and_binary_lookup\n\nvar MSI = function (_Barcode) {\n\t_inherits(MSI, _Barcode);\n\n\tfunction MSI(data, options) {\n\t\t_classCallCheck(this, MSI);\n\n\t\treturn _possibleConstructorReturn(this, (MSI.__proto__ || Object.getPrototypeOf(MSI)).call(this, data, options));\n\t}\n\n\t_createClass(MSI, [{\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\t// Start bits\n\t\t\tvar ret = \"110\";\n\n\t\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t\t// Convert the character to binary (always 4 binary digits)\n\t\t\t\tvar digit = parseInt(this.data[i]);\n\t\t\t\tvar bin = digit.toString(2);\n\t\t\t\tbin = addZeroes(bin, 4 - bin.length);\n\n\t\t\t\t// Add 100 for every zero and 110 for every 1\n\t\t\t\tfor (var b = 0; b < bin.length; b++) {\n\t\t\t\t\tret += bin[b] == \"0\" ? \"100\" : \"110\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// End bits\n\t\t\tret += \"1001\";\n\n\t\t\treturn {\n\t\t\t\tdata: ret,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[0-9]+$/) !== -1;\n\t\t}\n\t}]);\n\n\treturn MSI;\n}(_Barcode3.default);\n\nfunction addZeroes(number, n) {\n\tfor (var i = 0; i < n; i++) {\n\t\tnumber = \"0\" + number;\n\t}\n\treturn number;\n}\n\nexports.default = MSI;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.mod10 = mod10;\nexports.mod11 = mod11;\nfunction mod10(number) {\n\tvar sum = 0;\n\tfor (var i = 0; i < number.length; i++) {\n\t\tvar n = parseInt(number[i]);\n\t\tif ((i + number.length) % 2 === 0) {\n\t\t\tsum += n;\n\t\t} else {\n\t\t\tsum += n * 2 % 10 + Math.floor(n * 2 / 10);\n\t\t}\n\t}\n\treturn (10 - sum % 10) % 10;\n}\n\nfunction mod11(number) {\n\tvar sum = 0;\n\tvar weights = [2, 3, 4, 5, 6, 7];\n\tfor (var i = 0; i < number.length; i++) {\n\t\tvar n = parseInt(number[number.length - 1 - i]);\n\t\tsum += weights[i % weights.length] * n;\n\t}\n\treturn (11 - sum % 11) % 11;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _MSI2 = require('./MSI.js');\n\nvar _MSI3 = _interopRequireDefault(_MSI2);\n\nvar _checksums = require('./checksums.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar MSI10 = function (_MSI) {\n\t_inherits(MSI10, _MSI);\n\n\tfunction MSI10(data, options) {\n\t\t_classCallCheck(this, MSI10);\n\n\t\treturn _possibleConstructorReturn(this, (MSI10.__proto__ || Object.getPrototypeOf(MSI10)).call(this, data + (0, _checksums.mod10)(data), options));\n\t}\n\n\treturn MSI10;\n}(_MSI3.default);\n\nexports.default = MSI10;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _MSI2 = require('./MSI.js');\n\nvar _MSI3 = _interopRequireDefault(_MSI2);\n\nvar _checksums = require('./checksums.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar MSI11 = function (_MSI) {\n\t_inherits(MSI11, _MSI);\n\n\tfunction MSI11(data, options) {\n\t\t_classCallCheck(this, MSI11);\n\n\t\treturn _possibleConstructorReturn(this, (MSI11.__proto__ || Object.getPrototypeOf(MSI11)).call(this, data + (0, _checksums.mod11)(data), options));\n\t}\n\n\treturn MSI11;\n}(_MSI3.default);\n\nexports.default = MSI11;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _MSI2 = require('./MSI.js');\n\nvar _MSI3 = _interopRequireDefault(_MSI2);\n\nvar _checksums = require('./checksums.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar MSI1010 = function (_MSI) {\n\t_inherits(MSI1010, _MSI);\n\n\tfunction MSI1010(data, options) {\n\t\t_classCallCheck(this, MSI1010);\n\n\t\tdata += (0, _checksums.mod10)(data);\n\t\tdata += (0, _checksums.mod10)(data);\n\t\treturn _possibleConstructorReturn(this, (MSI1010.__proto__ || Object.getPrototypeOf(MSI1010)).call(this, data, options));\n\t}\n\n\treturn MSI1010;\n}(_MSI3.default);\n\nexports.default = MSI1010;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _MSI2 = require('./MSI.js');\n\nvar _MSI3 = _interopRequireDefault(_MSI2);\n\nvar _checksums = require('./checksums.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar MSI1110 = function (_MSI) {\n\t_inherits(MSI1110, _MSI);\n\n\tfunction MSI1110(data, options) {\n\t\t_classCallCheck(this, MSI1110);\n\n\t\tdata += (0, _checksums.mod11)(data);\n\t\tdata += (0, _checksums.mod10)(data);\n\t\treturn _possibleConstructorReturn(this, (MSI1110.__proto__ || Object.getPrototypeOf(MSI1110)).call(this, data, options));\n\t}\n\n\treturn MSI1110;\n}(_MSI3.default);\n\nexports.default = MSI1110;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MSI1110 = exports.MSI1010 = exports.MSI11 = exports.MSI10 = exports.MSI = undefined;\n\nvar _MSI = require('./MSI.js');\n\nvar _MSI2 = _interopRequireDefault(_MSI);\n\nvar _MSI3 = require('./MSI10.js');\n\nvar _MSI4 = _interopRequireDefault(_MSI3);\n\nvar _MSI5 = require('./MSI11.js');\n\nvar _MSI6 = _interopRequireDefault(_MSI5);\n\nvar _MSI7 = require('./MSI1010.js');\n\nvar _MSI8 = _interopRequireDefault(_MSI7);\n\nvar _MSI9 = require('./MSI1110.js');\n\nvar _MSI10 = _interopRequireDefault(_MSI9);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.MSI = _MSI2.default;\nexports.MSI10 = _MSI4.default;\nexports.MSI11 = _MSI6.default;\nexports.MSI1010 = _MSI8.default;\nexports.MSI1110 = _MSI10.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.pharmacode = undefined;\n\nvar _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; }; }();\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation\n// http://www.gomaro.ch/ftproot/Laetus_PHARMA-CODE.pdf\n\nvar pharmacode = function (_Barcode) {\n\t_inherits(pharmacode, _Barcode);\n\n\tfunction pharmacode(data, options) {\n\t\t_classCallCheck(this, pharmacode);\n\n\t\tvar _this = _possibleConstructorReturn(this, (pharmacode.__proto__ || Object.getPrototypeOf(pharmacode)).call(this, data, options));\n\n\t\t_this.number = parseInt(data, 10);\n\t\treturn _this;\n\t}\n\n\t_createClass(pharmacode, [{\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\tvar z = this.number;\n\t\t\tvar result = \"\";\n\n\t\t\t// http://i.imgur.com/RMm4UDJ.png\n\t\t\t// (source: http://www.gomaro.ch/ftproot/Laetus_PHARMA-CODE.pdf, page: 34)\n\t\t\twhile (!isNaN(z) && z != 0) {\n\t\t\t\tif (z % 2 === 0) {\n\t\t\t\t\t// Even\n\t\t\t\t\tresult = \"11100\" + result;\n\t\t\t\t\tz = (z - 2) / 2;\n\t\t\t\t} else {\n\t\t\t\t\t// Odd\n\t\t\t\t\tresult = \"100\" + result;\n\t\t\t\t\tz = (z - 1) / 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the two last zeroes\n\t\t\tresult = result.slice(0, -2);\n\n\t\t\treturn {\n\t\t\t\tdata: result,\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn this.number >= 3 && this.number <= 131070;\n\t\t}\n\t}]);\n\n\treturn pharmacode;\n}(_Barcode3.default);\n\nexports.pharmacode = pharmacode;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.codabar = undefined;\n\nvar _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; }; }();\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding specification:\n// http://www.barcodeisland.com/codabar.phtml\n\nvar codabar = function (_Barcode) {\n\t_inherits(codabar, _Barcode);\n\n\tfunction codabar(data, options) {\n\t\t_classCallCheck(this, codabar);\n\n\t\tif (data.search(/^[0-9\\-\\$\\:\\.\\+\\/]+$/) === 0) {\n\t\t\tdata = \"A\" + data + \"A\";\n\t\t}\n\n\t\tvar _this = _possibleConstructorReturn(this, (codabar.__proto__ || Object.getPrototypeOf(codabar)).call(this, data.toUpperCase(), options));\n\n\t\t_this.text = _this.options.text || _this.text.replace(/[A-D]/g, '');\n\t\treturn _this;\n\t}\n\n\t_createClass(codabar, [{\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn this.data.search(/^[A-D][0-9\\-\\$\\:\\.\\+\\/]+[A-D]$/) !== -1;\n\t\t}\n\t}, {\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\tvar result = [];\n\t\t\tvar encodings = this.getEncodings();\n\t\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t\tresult.push(encodings[this.data.charAt(i)]);\n\t\t\t\t// for all characters except the last, append a narrow-space (\"0\")\n\t\t\t\tif (i !== this.data.length - 1) {\n\t\t\t\t\tresult.push(\"0\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttext: this.text,\n\t\t\t\tdata: result.join('')\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"getEncodings\",\n\t\tvalue: function getEncodings() {\n\t\t\treturn {\n\t\t\t\t\"0\": \"101010011\",\n\t\t\t\t\"1\": \"101011001\",\n\t\t\t\t\"2\": \"101001011\",\n\t\t\t\t\"3\": \"110010101\",\n\t\t\t\t\"4\": \"101101001\",\n\t\t\t\t\"5\": \"110101001\",\n\t\t\t\t\"6\": \"100101011\",\n\t\t\t\t\"7\": \"100101101\",\n\t\t\t\t\"8\": \"100110101\",\n\t\t\t\t\"9\": \"110100101\",\n\t\t\t\t\"-\": \"101001101\",\n\t\t\t\t\"$\": \"101100101\",\n\t\t\t\t\":\": \"1101011011\",\n\t\t\t\t\"/\": \"1101101011\",\n\t\t\t\t\".\": \"1101101101\",\n\t\t\t\t\"+\": \"1011011011\",\n\t\t\t\t\"A\": \"1011001001\",\n\t\t\t\t\"B\": \"1001001011\",\n\t\t\t\t\"C\": \"1010010011\",\n\t\t\t\t\"D\": \"1010011001\"\n\t\t\t};\n\t\t}\n\t}]);\n\n\treturn codabar;\n}(_Barcode3.default);\n\nexports.codabar = codabar;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n// The position in the array is the (checksum) value\nvar SYMBOLS = exports.SYMBOLS = ['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', '-', '.', ' ', '$', '/', '+', '%',\n// Only used for csum and multi-symbols character encodings\n'($)', '(%)', '(/)', '(+)',\n// Start/Stop\n'\\xff'];\n\n// Order matches SYMBOLS array\nvar BINARIES = exports.BINARIES = ['100010100', '101001000', '101000100', '101000010', '100101000', '100100100', '100100010', '101010000', '100010010', '100001010', '110101000', '110100100', '110100010', '110010100', '110010010', '110001010', '101101000', '101100100', '101100010', '100110100', '100011010', '101011000', '101001100', '101000110', '100101100', '100010110', '110110100', '110110010', '110101100', '110100110', '110010110', '110011010', '101101100', '101100110', '100110110', '100111010', '100101110', '111010100', '111010010', '111001010', '101101110', '101110110', '110101110', '100100110', '111011010', '111010110', '100110010', '101011110'];\n\n// Multi-symbol characters (Full ASCII Code 93)\nvar MULTI_SYMBOLS = exports.MULTI_SYMBOLS = {\n\t'\\x00': ['(%)', 'U'],\n\t'\\x01': ['($)', 'A'],\n\t'\\x02': ['($)', 'B'],\n\t'\\x03': ['($)', 'C'],\n\t'\\x04': ['($)', 'D'],\n\t'\\x05': ['($)', 'E'],\n\t'\\x06': ['($)', 'F'],\n\t'\\x07': ['($)', 'G'],\n\t'\\x08': ['($)', 'H'],\n\t'\\x09': ['($)', 'I'],\n\t'\\x0a': ['($)', 'J'],\n\t'\\x0b': ['($)', 'K'],\n\t'\\x0c': ['($)', 'L'],\n\t'\\x0d': ['($)', 'M'],\n\t'\\x0e': ['($)', 'N'],\n\t'\\x0f': ['($)', 'O'],\n\t'\\x10': ['($)', 'P'],\n\t'\\x11': ['($)', 'Q'],\n\t'\\x12': ['($)', 'R'],\n\t'\\x13': ['($)', 'S'],\n\t'\\x14': ['($)', 'T'],\n\t'\\x15': ['($)', 'U'],\n\t'\\x16': ['($)', 'V'],\n\t'\\x17': ['($)', 'W'],\n\t'\\x18': ['($)', 'X'],\n\t'\\x19': ['($)', 'Y'],\n\t'\\x1a': ['($)', 'Z'],\n\t'\\x1b': ['(%)', 'A'],\n\t'\\x1c': ['(%)', 'B'],\n\t'\\x1d': ['(%)', 'C'],\n\t'\\x1e': ['(%)', 'D'],\n\t'\\x1f': ['(%)', 'E'],\n\t'!': ['(/)', 'A'],\n\t'\"': ['(/)', 'B'],\n\t'#': ['(/)', 'C'],\n\t'&': ['(/)', 'F'],\n\t'\\'': ['(/)', 'G'],\n\t'(': ['(/)', 'H'],\n\t')': ['(/)', 'I'],\n\t'*': ['(/)', 'J'],\n\t',': ['(/)', 'L'],\n\t':': ['(/)', 'Z'],\n\t';': ['(%)', 'F'],\n\t'<': ['(%)', 'G'],\n\t'=': ['(%)', 'H'],\n\t'>': ['(%)', 'I'],\n\t'?': ['(%)', 'J'],\n\t'@': ['(%)', 'V'],\n\t'[': ['(%)', 'K'],\n\t'\\\\': ['(%)', 'L'],\n\t']': ['(%)', 'M'],\n\t'^': ['(%)', 'N'],\n\t'_': ['(%)', 'O'],\n\t'`': ['(%)', 'W'],\n\t'a': ['(+)', 'A'],\n\t'b': ['(+)', 'B'],\n\t'c': ['(+)', 'C'],\n\t'd': ['(+)', 'D'],\n\t'e': ['(+)', 'E'],\n\t'f': ['(+)', 'F'],\n\t'g': ['(+)', 'G'],\n\t'h': ['(+)', 'H'],\n\t'i': ['(+)', 'I'],\n\t'j': ['(+)', 'J'],\n\t'k': ['(+)', 'K'],\n\t'l': ['(+)', 'L'],\n\t'm': ['(+)', 'M'],\n\t'n': ['(+)', 'N'],\n\t'o': ['(+)', 'O'],\n\t'p': ['(+)', 'P'],\n\t'q': ['(+)', 'Q'],\n\t'r': ['(+)', 'R'],\n\t's': ['(+)', 'S'],\n\t't': ['(+)', 'T'],\n\t'u': ['(+)', 'U'],\n\t'v': ['(+)', 'V'],\n\t'w': ['(+)', 'W'],\n\t'x': ['(+)', 'X'],\n\t'y': ['(+)', 'Y'],\n\t'z': ['(+)', 'Z'],\n\t'{': ['(%)', 'P'],\n\t'|': ['(%)', 'Q'],\n\t'}': ['(%)', 'R'],\n\t'~': ['(%)', 'S'],\n\t'\\x7f': ['(%)', 'T']\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _constants = require('./constants');\n\nvar _Barcode2 = require('../Barcode.js');\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation:\n// https://en.wikipedia.org/wiki/Code_93#Detailed_outline\n\nvar CODE93 = function (_Barcode) {\n\t_inherits(CODE93, _Barcode);\n\n\tfunction CODE93(data, options) {\n\t\t_classCallCheck(this, CODE93);\n\n\t\treturn _possibleConstructorReturn(this, (CODE93.__proto__ || Object.getPrototypeOf(CODE93)).call(this, data, options));\n\t}\n\n\t_createClass(CODE93, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn (/^[0-9A-Z\\-. $/+%]+$/.test(this.data)\n\t\t\t);\n\t\t}\n\t}, {\n\t\tkey: 'encode',\n\t\tvalue: function encode() {\n\t\t\tvar symbols = this.data.split('').flatMap(function (c) {\n\t\t\t\treturn _constants.MULTI_SYMBOLS[c] || c;\n\t\t\t});\n\t\t\tvar encoded = symbols.map(function (s) {\n\t\t\t\treturn CODE93.getEncoding(s);\n\t\t\t}).join('');\n\n\t\t\t// Compute checksum symbols\n\t\t\tvar csumC = CODE93.checksum(symbols, 20);\n\t\t\tvar csumK = CODE93.checksum(symbols.concat(csumC), 15);\n\n\t\t\treturn {\n\t\t\t\ttext: this.text,\n\t\t\t\tdata:\n\t\t\t\t// Add the start bits\n\t\t\t\tCODE93.getEncoding('\\xff') +\n\t\t\t\t// Add the encoded bits\n\t\t\t\tencoded +\n\t\t\t\t// Add the checksum\n\t\t\t\tCODE93.getEncoding(csumC) + CODE93.getEncoding(csumK) +\n\t\t\t\t// Add the stop bits\n\t\t\t\tCODE93.getEncoding('\\xff') +\n\t\t\t\t// Add the termination bit\n\t\t\t\t'1'\n\t\t\t};\n\t\t}\n\n\t\t// Get the binary encoding of a symbol\n\n\t}], [{\n\t\tkey: 'getEncoding',\n\t\tvalue: function getEncoding(symbol) {\n\t\t\treturn _constants.BINARIES[CODE93.symbolValue(symbol)];\n\t\t}\n\n\t\t// Get the symbol for a symbol value\n\n\t}, {\n\t\tkey: 'getSymbol',\n\t\tvalue: function getSymbol(symbolValue) {\n\t\t\treturn _constants.SYMBOLS[symbolValue];\n\t\t}\n\n\t\t// Get the symbol value of a symbol\n\n\t}, {\n\t\tkey: 'symbolValue',\n\t\tvalue: function symbolValue(symbol) {\n\t\t\treturn _constants.SYMBOLS.indexOf(symbol);\n\t\t}\n\n\t\t// Calculate a checksum symbol\n\n\t}, {\n\t\tkey: 'checksum',\n\t\tvalue: function checksum(symbols, maxWeight) {\n\t\t\tvar csum = symbols.slice().reverse().reduce(function (sum, symbol, idx) {\n\t\t\t\tvar weight = idx % maxWeight + 1;\n\t\t\t\treturn sum + CODE93.symbolValue(symbol) * weight;\n\t\t\t}, 0);\n\n\t\t\treturn CODE93.getSymbol(csum % 47);\n\t\t}\n\t}]);\n\n\treturn CODE93;\n}(_Barcode3.default);\n\nexports.default = CODE93;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _CODE2 = require('./CODE93.js');\n\nvar _CODE3 = _interopRequireDefault(_CODE2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; } // Encoding documentation\n// https://en.wikipedia.org/wiki/Code_93#Full_ASCII_Code_93\n\nvar CODE93FullASCII = function (_CODE) {\n\t_inherits(CODE93FullASCII, _CODE);\n\n\tfunction CODE93FullASCII(data, options) {\n\t\t_classCallCheck(this, CODE93FullASCII);\n\n\t\treturn _possibleConstructorReturn(this, (CODE93FullASCII.__proto__ || Object.getPrototypeOf(CODE93FullASCII)).call(this, data, options));\n\t}\n\n\t_createClass(CODE93FullASCII, [{\n\t\tkey: 'valid',\n\t\tvalue: function valid() {\n\t\t\treturn (/^[\\x00-\\x7f]+$/.test(this.data)\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn CODE93FullASCII;\n}(_CODE3.default);\n\nexports.default = CODE93FullASCII;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CODE93FullASCII = exports.CODE93 = undefined;\n\nvar _CODE = require('./CODE93.js');\n\nvar _CODE2 = _interopRequireDefault(_CODE);\n\nvar _CODE93FullASCII = require('./CODE93FullASCII.js');\n\nvar _CODE93FullASCII2 = _interopRequireDefault(_CODE93FullASCII);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.CODE93 = _CODE2.default;\nexports.CODE93FullASCII = _CODE93FullASCII2.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.GenericBarcode = undefined;\n\nvar _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; }; }();\n\nvar _Barcode2 = require(\"../Barcode.js\");\n\nvar _Barcode3 = _interopRequireDefault(_Barcode2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar GenericBarcode = function (_Barcode) {\n\t_inherits(GenericBarcode, _Barcode);\n\n\tfunction GenericBarcode(data, options) {\n\t\t_classCallCheck(this, GenericBarcode);\n\n\t\treturn _possibleConstructorReturn(this, (GenericBarcode.__proto__ || Object.getPrototypeOf(GenericBarcode)).call(this, data, options)); // Sets this.data and this.text\n\t}\n\n\t// Return the corresponding binary numbers for the data provided\n\n\n\t_createClass(GenericBarcode, [{\n\t\tkey: \"encode\",\n\t\tvalue: function encode() {\n\t\t\treturn {\n\t\t\t\tdata: \"10101010101010101010101010101010101010101\",\n\t\t\t\ttext: this.text\n\t\t\t};\n\t\t}\n\n\t\t// Resturn true/false if the string provided is valid for this encoder\n\n\t}, {\n\t\tkey: \"valid\",\n\t\tvalue: function valid() {\n\t\t\treturn true;\n\t\t}\n\t}]);\n\n\treturn GenericBarcode;\n}(_Barcode3.default);\n\nexports.GenericBarcode = GenericBarcode;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _CODE = require('./CODE39/');\n\nvar _CODE2 = require('./CODE128/');\n\nvar _EAN_UPC = require('./EAN_UPC/');\n\nvar _ITF = require('./ITF/');\n\nvar _MSI = require('./MSI/');\n\nvar _pharmacode = require('./pharmacode/');\n\nvar _codabar = require('./codabar');\n\nvar _CODE3 = require('./CODE93/');\n\nvar _GenericBarcode = require('./GenericBarcode/');\n\nexports.default = {\n\tCODE39: _CODE.CODE39,\n\tCODE128: _CODE2.CODE128, CODE128A: _CODE2.CODE128A, CODE128B: _CODE2.CODE128B, CODE128C: _CODE2.CODE128C,\n\tEAN13: _EAN_UPC.EAN13, EAN8: _EAN_UPC.EAN8, EAN5: _EAN_UPC.EAN5, EAN2: _EAN_UPC.EAN2, UPC: _EAN_UPC.UPC, UPCE: _EAN_UPC.UPCE,\n\tITF14: _ITF.ITF14,\n\tITF: _ITF.ITF,\n\tMSI: _MSI.MSI, MSI10: _MSI.MSI10, MSI11: _MSI.MSI11, MSI1010: _MSI.MSI1010, MSI1110: _MSI.MSI1110,\n\tpharmacode: _pharmacode.pharmacode,\n\tcodabar: _codabar.codabar,\n\tCODE93: _CODE3.CODE93, CODE93FullASCII: _CODE3.CODE93FullASCII,\n\tGenericBarcode: _GenericBarcode.GenericBarcode\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = function (old, replaceObj) {\n return _extends({}, old, replaceObj);\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.default = linearizeEncodings;\n\n// Encodings can be nestled like [[1-1, 1-2], 2, [3-1, 3-2]\n// Convert to [1-1, 1-2, 2, 3-1, 3-2]\n\nfunction linearizeEncodings(encodings) {\n\tvar linearEncodings = [];\n\tfunction nextLevel(encoded) {\n\t\tif (Array.isArray(encoded)) {\n\t\t\tfor (var i = 0; i < encoded.length; i++) {\n\t\t\t\tnextLevel(encoded[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tencoded.text = encoded.text || \"\";\n\t\t\tencoded.data = encoded.data || \"\";\n\t\t\tlinearEncodings.push(encoded);\n\t\t}\n\t}\n\tnextLevel(encodings);\n\n\treturn linearEncodings;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.default = fixOptions;\n\n\nfunction fixOptions(options) {\n\t// Fix the margins\n\toptions.marginTop = options.marginTop || options.margin;\n\toptions.marginBottom = options.marginBottom || options.margin;\n\toptions.marginRight = options.marginRight || options.margin;\n\toptions.marginLeft = options.marginLeft || options.margin;\n\n\treturn options;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.default = optionsFromStrings;\n\n// Convert string to integers/booleans where it should be\n\nfunction optionsFromStrings(options) {\n\tvar intOptions = [\"width\", \"height\", \"textMargin\", \"fontSize\", \"margin\", \"marginTop\", \"marginBottom\", \"marginLeft\", \"marginRight\"];\n\n\tfor (var intOption in intOptions) {\n\t\tif (intOptions.hasOwnProperty(intOption)) {\n\t\t\tintOption = intOptions[intOption];\n\t\t\tif (typeof options[intOption] === \"string\") {\n\t\t\t\toptions[intOption] = parseInt(options[intOption], 10);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof options[\"displayValue\"] === \"string\") {\n\t\toptions[\"displayValue\"] = options[\"displayValue\"] != \"false\";\n\t}\n\n\treturn options;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nvar defaults = {\n\twidth: 2,\n\theight: 100,\n\tformat: \"auto\",\n\tdisplayValue: true,\n\tfontOptions: \"\",\n\tfont: \"monospace\",\n\ttext: undefined,\n\ttextAlign: \"center\",\n\ttextPosition: \"bottom\",\n\ttextMargin: 2,\n\tfontSize: 20,\n\tbackground: \"#ffffff\",\n\tlineColor: \"#000000\",\n\tmargin: 10,\n\tmarginTop: undefined,\n\tmarginBottom: undefined,\n\tmarginLeft: undefined,\n\tmarginRight: undefined,\n\tvalid: function valid() {}\n};\n\nexports.default = defaults;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _optionsFromStrings = require(\"./optionsFromStrings.js\");\n\nvar _optionsFromStrings2 = _interopRequireDefault(_optionsFromStrings);\n\nvar _defaults = require(\"../options/defaults.js\");\n\nvar _defaults2 = _interopRequireDefault(_defaults);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getOptionsFromElement(element) {\n\tvar options = {};\n\tfor (var property in _defaults2.default) {\n\t\tif (_defaults2.default.hasOwnProperty(property)) {\n\t\t\t// jsbarcode-*\n\t\t\tif (element.hasAttribute(\"jsbarcode-\" + property.toLowerCase())) {\n\t\t\t\toptions[property] = element.getAttribute(\"jsbarcode-\" + property.toLowerCase());\n\t\t\t}\n\n\t\t\t// data-*\n\t\t\tif (element.hasAttribute(\"data-\" + property.toLowerCase())) {\n\t\t\t\toptions[property] = element.getAttribute(\"data-\" + property.toLowerCase());\n\t\t\t}\n\t\t}\n\t}\n\n\toptions[\"value\"] = element.getAttribute(\"jsbarcode-value\") || element.getAttribute(\"data-value\");\n\n\t// Since all atributes are string they need to be converted to integers\n\toptions = (0, _optionsFromStrings2.default)(options);\n\n\treturn options;\n}\n\nexports.default = getOptionsFromElement;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.getTotalWidthOfEncodings = exports.calculateEncodingAttributes = exports.getBarcodePadding = exports.getEncodingHeight = exports.getMaximumHeightOfEncodings = undefined;\n\nvar _merge = require(\"../help/merge.js\");\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getEncodingHeight(encoding, options) {\n\treturn options.height + (options.displayValue && encoding.text.length > 0 ? options.fontSize + options.textMargin : 0) + options.marginTop + options.marginBottom;\n}\n\nfunction getBarcodePadding(textWidth, barcodeWidth, options) {\n\tif (options.displayValue && barcodeWidth < textWidth) {\n\t\tif (options.textAlign == \"center\") {\n\t\t\treturn Math.floor((textWidth - barcodeWidth) / 2);\n\t\t} else if (options.textAlign == \"left\") {\n\t\t\treturn 0;\n\t\t} else if (options.textAlign == \"right\") {\n\t\t\treturn Math.floor(textWidth - barcodeWidth);\n\t\t}\n\t}\n\treturn 0;\n}\n\nfunction calculateEncodingAttributes(encodings, barcodeOptions, context) {\n\tfor (var i = 0; i < encodings.length; i++) {\n\t\tvar encoding = encodings[i];\n\t\tvar options = (0, _merge2.default)(barcodeOptions, encoding.options);\n\n\t\t// Calculate the width of the encoding\n\t\tvar textWidth;\n\t\tif (options.displayValue) {\n\t\t\ttextWidth = messureText(encoding.text, options, context);\n\t\t} else {\n\t\t\ttextWidth = 0;\n\t\t}\n\n\t\tvar barcodeWidth = encoding.data.length * options.width;\n\t\tencoding.width = Math.ceil(Math.max(textWidth, barcodeWidth));\n\n\t\tencoding.height = getEncodingHeight(encoding, options);\n\n\t\tencoding.barcodePadding = getBarcodePadding(textWidth, barcodeWidth, options);\n\t}\n}\n\nfunction getTotalWidthOfEncodings(encodings) {\n\tvar totalWidth = 0;\n\tfor (var i = 0; i < encodings.length; i++) {\n\t\ttotalWidth += encodings[i].width;\n\t}\n\treturn totalWidth;\n}\n\nfunction getMaximumHeightOfEncodings(encodings) {\n\tvar maxHeight = 0;\n\tfor (var i = 0; i < encodings.length; i++) {\n\t\tif (encodings[i].height > maxHeight) {\n\t\t\tmaxHeight = encodings[i].height;\n\t\t}\n\t}\n\treturn maxHeight;\n}\n\nfunction messureText(string, options, context) {\n\tvar ctx;\n\n\tif (context) {\n\t\tctx = context;\n\t} else if (typeof document !== \"undefined\") {\n\t\tctx = document.createElement(\"canvas\").getContext(\"2d\");\n\t} else {\n\t\t// If the text cannot be messured we will return 0.\n\t\t// This will make some barcode with big text render incorrectly\n\t\treturn 0;\n\t}\n\tctx.font = options.fontOptions + \" \" + options.fontSize + \"px \" + options.font;\n\n\t// Calculate the width of the encoding\n\tvar measureTextResult = ctx.measureText(string);\n\tif (!measureTextResult) {\n\t\t// Some implementations don't implement measureText and return undefined.\n\t\t// If the text cannot be measured we will return 0.\n\t\t// This will make some barcode with big text render incorrectly\n\t\treturn 0;\n\t}\n\tvar size = measureTextResult.width;\n\treturn size;\n}\n\nexports.getMaximumHeightOfEncodings = getMaximumHeightOfEncodings;\nexports.getEncodingHeight = getEncodingHeight;\nexports.getBarcodePadding = getBarcodePadding;\nexports.calculateEncodingAttributes = calculateEncodingAttributes;\nexports.getTotalWidthOfEncodings = getTotalWidthOfEncodings;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _merge = require(\"../help/merge.js\");\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _shared = require(\"./shared.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CanvasRenderer = function () {\n\tfunction CanvasRenderer(canvas, encodings, options) {\n\t\t_classCallCheck(this, CanvasRenderer);\n\n\t\tthis.canvas = canvas;\n\t\tthis.encodings = encodings;\n\t\tthis.options = options;\n\t}\n\n\t_createClass(CanvasRenderer, [{\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\t// Abort if the browser does not support HTML5 canvas\n\t\t\tif (!this.canvas.getContext) {\n\t\t\t\tthrow new Error('The browser does not support canvas.');\n\t\t\t}\n\n\t\t\tthis.prepareCanvas();\n\t\t\tfor (var i = 0; i < this.encodings.length; i++) {\n\t\t\t\tvar encodingOptions = (0, _merge2.default)(this.options, this.encodings[i].options);\n\n\t\t\t\tthis.drawCanvasBarcode(encodingOptions, this.encodings[i]);\n\t\t\t\tthis.drawCanvasText(encodingOptions, this.encodings[i]);\n\n\t\t\t\tthis.moveCanvasDrawing(this.encodings[i]);\n\t\t\t}\n\n\t\t\tthis.restoreCanvas();\n\t\t}\n\t}, {\n\t\tkey: \"prepareCanvas\",\n\t\tvalue: function prepareCanvas() {\n\t\t\t// Get the canvas context\n\t\t\tvar ctx = this.canvas.getContext(\"2d\");\n\n\t\t\tctx.save();\n\n\t\t\t(0, _shared.calculateEncodingAttributes)(this.encodings, this.options, ctx);\n\t\t\tvar totalWidth = (0, _shared.getTotalWidthOfEncodings)(this.encodings);\n\t\t\tvar maxHeight = (0, _shared.getMaximumHeightOfEncodings)(this.encodings);\n\n\t\t\tthis.canvas.width = totalWidth + this.options.marginLeft + this.options.marginRight;\n\n\t\t\tthis.canvas.height = maxHeight;\n\n\t\t\t// Paint the canvas\n\t\t\tctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\t\t\tif (this.options.background) {\n\t\t\t\tctx.fillStyle = this.options.background;\n\t\t\t\tctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\t\t\t}\n\n\t\t\tctx.translate(this.options.marginLeft, 0);\n\t\t}\n\t}, {\n\t\tkey: \"drawCanvasBarcode\",\n\t\tvalue: function drawCanvasBarcode(options, encoding) {\n\t\t\t// Get the canvas context\n\t\t\tvar ctx = this.canvas.getContext(\"2d\");\n\n\t\t\tvar binary = encoding.data;\n\n\t\t\t// Creates the barcode out of the encoded binary\n\t\t\tvar yFrom;\n\t\t\tif (options.textPosition == \"top\") {\n\t\t\t\tyFrom = options.marginTop + options.fontSize + options.textMargin;\n\t\t\t} else {\n\t\t\t\tyFrom = options.marginTop;\n\t\t\t}\n\n\t\t\tctx.fillStyle = options.lineColor;\n\n\t\t\tfor (var b = 0; b < binary.length; b++) {\n\t\t\t\tvar x = b * options.width + encoding.barcodePadding;\n\n\t\t\t\tif (binary[b] === \"1\") {\n\t\t\t\t\tctx.fillRect(x, yFrom, options.width, options.height);\n\t\t\t\t} else if (binary[b]) {\n\t\t\t\t\tctx.fillRect(x, yFrom, options.width, options.height * binary[b]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"drawCanvasText\",\n\t\tvalue: function drawCanvasText(options, encoding) {\n\t\t\t// Get the canvas context\n\t\t\tvar ctx = this.canvas.getContext(\"2d\");\n\n\t\t\tvar font = options.fontOptions + \" \" + options.fontSize + \"px \" + options.font;\n\n\t\t\t// Draw the text if displayValue is set\n\t\t\tif (options.displayValue) {\n\t\t\t\tvar x, y;\n\n\t\t\t\tif (options.textPosition == \"top\") {\n\t\t\t\t\ty = options.marginTop + options.fontSize - options.textMargin;\n\t\t\t\t} else {\n\t\t\t\t\ty = options.height + options.textMargin + options.marginTop + options.fontSize;\n\t\t\t\t}\n\n\t\t\t\tctx.font = font;\n\n\t\t\t\t// Draw the text in the correct X depending on the textAlign option\n\t\t\t\tif (options.textAlign == \"left\" || encoding.barcodePadding > 0) {\n\t\t\t\t\tx = 0;\n\t\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t} else if (options.textAlign == \"right\") {\n\t\t\t\t\tx = encoding.width - 1;\n\t\t\t\t\tctx.textAlign = 'right';\n\t\t\t\t}\n\t\t\t\t// In all other cases, center the text\n\t\t\t\telse {\n\t\t\t\t\t\tx = encoding.width / 2;\n\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t}\n\n\t\t\t\tctx.fillText(encoding.text, x, y);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"moveCanvasDrawing\",\n\t\tvalue: function moveCanvasDrawing(encoding) {\n\t\t\tvar ctx = this.canvas.getContext(\"2d\");\n\n\t\t\tctx.translate(encoding.width, 0);\n\t\t}\n\t}, {\n\t\tkey: \"restoreCanvas\",\n\t\tvalue: function restoreCanvas() {\n\t\t\t// Get the canvas context\n\t\t\tvar ctx = this.canvas.getContext(\"2d\");\n\n\t\t\tctx.restore();\n\t\t}\n\t}]);\n\n\treturn CanvasRenderer;\n}();\n\nexports.default = CanvasRenderer;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nvar _merge = require(\"../help/merge.js\");\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _shared = require(\"./shared.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar svgns = \"http://www.w3.org/2000/svg\";\n\nvar SVGRenderer = function () {\n\tfunction SVGRenderer(svg, encodings, options) {\n\t\t_classCallCheck(this, SVGRenderer);\n\n\t\tthis.svg = svg;\n\t\tthis.encodings = encodings;\n\t\tthis.options = options;\n\t\tthis.document = options.xmlDocument || document;\n\t}\n\n\t_createClass(SVGRenderer, [{\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\tvar currentX = this.options.marginLeft;\n\n\t\t\tthis.prepareSVG();\n\t\t\tfor (var i = 0; i < this.encodings.length; i++) {\n\t\t\t\tvar encoding = this.encodings[i];\n\t\t\t\tvar encodingOptions = (0, _merge2.default)(this.options, encoding.options);\n\n\t\t\t\tvar group = this.createGroup(currentX, encodingOptions.marginTop, this.svg);\n\n\t\t\t\tthis.setGroupOptions(group, encodingOptions);\n\n\t\t\t\tthis.drawSvgBarcode(group, encodingOptions, encoding);\n\t\t\t\tthis.drawSVGText(group, encodingOptions, encoding);\n\n\t\t\t\tcurrentX += encoding.width;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"prepareSVG\",\n\t\tvalue: function prepareSVG() {\n\t\t\t// Clear the SVG\n\t\t\twhile (this.svg.firstChild) {\n\t\t\t\tthis.svg.removeChild(this.svg.firstChild);\n\t\t\t}\n\n\t\t\t(0, _shared.calculateEncodingAttributes)(this.encodings, this.options);\n\t\t\tvar totalWidth = (0, _shared.getTotalWidthOfEncodings)(this.encodings);\n\t\t\tvar maxHeight = (0, _shared.getMaximumHeightOfEncodings)(this.encodings);\n\n\t\t\tvar width = totalWidth + this.options.marginLeft + this.options.marginRight;\n\t\t\tthis.setSvgAttributes(width, maxHeight);\n\n\t\t\tif (this.options.background) {\n\t\t\t\tthis.drawRect(0, 0, width, maxHeight, this.svg).setAttribute(\"fill\", this.options.background);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"drawSvgBarcode\",\n\t\tvalue: function drawSvgBarcode(parent, options, encoding) {\n\t\t\tvar binary = encoding.data;\n\n\t\t\t// Creates the barcode out of the encoded binary\n\t\t\tvar yFrom;\n\t\t\tif (options.textPosition == \"top\") {\n\t\t\t\tyFrom = options.fontSize + options.textMargin;\n\t\t\t} else {\n\t\t\t\tyFrom = 0;\n\t\t\t}\n\n\t\t\tvar barWidth = 0;\n\t\t\tvar x = 0;\n\t\t\tfor (var b = 0; b < binary.length; b++) {\n\t\t\t\tx = b * options.width + encoding.barcodePadding;\n\n\t\t\t\tif (binary[b] === \"1\") {\n\t\t\t\t\tbarWidth++;\n\t\t\t\t} else if (barWidth > 0) {\n\t\t\t\t\tthis.drawRect(x - options.width * barWidth, yFrom, options.width * barWidth, options.height, parent);\n\t\t\t\t\tbarWidth = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Last draw is needed since the barcode ends with 1\n\t\t\tif (barWidth > 0) {\n\t\t\t\tthis.drawRect(x - options.width * (barWidth - 1), yFrom, options.width * barWidth, options.height, parent);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"drawSVGText\",\n\t\tvalue: function drawSVGText(parent, options, encoding) {\n\t\t\tvar textElem = this.document.createElementNS(svgns, 'text');\n\n\t\t\t// Draw the text if displayValue is set\n\t\t\tif (options.displayValue) {\n\t\t\t\tvar x, y;\n\n\t\t\t\ttextElem.setAttribute(\"font-family\", options.font);\n\t\t\t\ttextElem.setAttribute(\"font-size\", options.fontSize);\n\t\t\t\tif (options.fontOptions.includes(\"bold\")) {\n\t\t\t\t\ttextElem.setAttribute(\"font-weight\", \"bold\");\n\t\t\t\t}\n\t\t\t\tif (options.fontOptions.includes(\"italic\")) {\n\t\t\t\t\ttextElem.setAttribute(\"font-style\", \"italic\");\n\t\t\t\t}\n\n\t\t\t\tif (options.textPosition == \"top\") {\n\t\t\t\t\ty = options.fontSize - options.textMargin;\n\t\t\t\t} else {\n\t\t\t\t\ty = options.height + options.textMargin + options.fontSize;\n\t\t\t\t}\n\n\t\t\t\t// Draw the text in the correct X depending on the textAlign option\n\t\t\t\tif (options.textAlign == \"left\" || encoding.barcodePadding > 0) {\n\t\t\t\t\tx = 0;\n\t\t\t\t\ttextElem.setAttribute(\"text-anchor\", \"start\");\n\t\t\t\t} else if (options.textAlign == \"right\") {\n\t\t\t\t\tx = encoding.width - 1;\n\t\t\t\t\ttextElem.setAttribute(\"text-anchor\", \"end\");\n\t\t\t\t}\n\t\t\t\t// In all other cases, center the text\n\t\t\t\telse {\n\t\t\t\t\t\tx = encoding.width / 2;\n\t\t\t\t\t\ttextElem.setAttribute(\"text-anchor\", \"middle\");\n\t\t\t\t\t}\n\n\t\t\t\ttextElem.setAttribute(\"x\", x);\n\t\t\t\ttextElem.setAttribute(\"y\", y);\n\n\t\t\t\ttextElem.appendChild(this.document.createTextNode(encoding.text));\n\n\t\t\t\tparent.appendChild(textElem);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"setSvgAttributes\",\n\t\tvalue: function setSvgAttributes(width, height) {\n\t\t\tvar svg = this.svg;\n\t\t\tsvg.setAttribute(\"width\", width + \"px\");\n\t\t\tsvg.setAttribute(\"height\", height + \"px\");\n\t\t\tsvg.setAttribute(\"x\", \"0px\");\n\t\t\tsvg.setAttribute(\"y\", \"0px\");\n\t\t\tsvg.setAttribute(\"viewBox\", \"0 0 \" + width + \" \" + height);\n\n\t\t\tsvg.setAttribute(\"xmlns\", svgns);\n\t\t\tsvg.setAttribute(\"version\", \"1.1\");\n\t\t}\n\t}, {\n\t\tkey: \"createGroup\",\n\t\tvalue: function createGroup(x, y, parent) {\n\t\t\tvar group = this.document.createElementNS(svgns, 'g');\n\t\t\tgroup.setAttribute(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n\n\t\t\tparent.appendChild(group);\n\n\t\t\treturn group;\n\t\t}\n\t}, {\n\t\tkey: \"setGroupOptions\",\n\t\tvalue: function setGroupOptions(group, options) {\n\t\t\tgroup.setAttribute(\"fill\", options.lineColor);\n\t\t}\n\t}, {\n\t\tkey: \"drawRect\",\n\t\tvalue: function drawRect(x, y, width, height, parent) {\n\t\t\tvar rect = this.document.createElementNS(svgns, 'rect');\n\n\t\t\trect.setAttribute(\"x\", x);\n\t\t\trect.setAttribute(\"y\", y);\n\t\t\trect.setAttribute(\"width\", width);\n\t\t\trect.setAttribute(\"height\", height);\n\n\t\t\tparent.appendChild(rect);\n\n\t\t\treturn rect;\n\t\t}\n\t}]);\n\n\treturn SVGRenderer;\n}();\n\nexports.default = SVGRenderer;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ObjectRenderer = function () {\n\tfunction ObjectRenderer(object, encodings, options) {\n\t\t_classCallCheck(this, ObjectRenderer);\n\n\t\tthis.object = object;\n\t\tthis.encodings = encodings;\n\t\tthis.options = options;\n\t}\n\n\t_createClass(ObjectRenderer, [{\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\tthis.object.encodings = this.encodings;\n\t\t}\n\t}]);\n\n\treturn ObjectRenderer;\n}();\n\nexports.default = ObjectRenderer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _canvas = require('./canvas.js');\n\nvar _canvas2 = _interopRequireDefault(_canvas);\n\nvar _svg = require('./svg.js');\n\nvar _svg2 = _interopRequireDefault(_svg);\n\nvar _object = require('./object.js');\n\nvar _object2 = _interopRequireDefault(_object);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = { CanvasRenderer: _canvas2.default, SVGRenderer: _svg2.default, ObjectRenderer: _object2.default };","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar InvalidInputException = function (_Error) {\n\t_inherits(InvalidInputException, _Error);\n\n\tfunction InvalidInputException(symbology, input) {\n\t\t_classCallCheck(this, InvalidInputException);\n\n\t\tvar _this = _possibleConstructorReturn(this, (InvalidInputException.__proto__ || Object.getPrototypeOf(InvalidInputException)).call(this));\n\n\t\t_this.name = \"InvalidInputException\";\n\n\t\t_this.symbology = symbology;\n\t\t_this.input = input;\n\n\t\t_this.message = '\"' + _this.input + '\" is not a valid input for ' + _this.symbology;\n\t\treturn _this;\n\t}\n\n\treturn InvalidInputException;\n}(Error);\n\nvar InvalidElementException = function (_Error2) {\n\t_inherits(InvalidElementException, _Error2);\n\n\tfunction InvalidElementException() {\n\t\t_classCallCheck(this, InvalidElementException);\n\n\t\tvar _this2 = _possibleConstructorReturn(this, (InvalidElementException.__proto__ || Object.getPrototypeOf(InvalidElementException)).call(this));\n\n\t\t_this2.name = \"InvalidElementException\";\n\t\t_this2.message = \"Not supported type to render on\";\n\t\treturn _this2;\n\t}\n\n\treturn InvalidElementException;\n}(Error);\n\nvar NoElementException = function (_Error3) {\n\t_inherits(NoElementException, _Error3);\n\n\tfunction NoElementException() {\n\t\t_classCallCheck(this, NoElementException);\n\n\t\tvar _this3 = _possibleConstructorReturn(this, (NoElementException.__proto__ || Object.getPrototypeOf(NoElementException)).call(this));\n\n\t\t_this3.name = \"NoElementException\";\n\t\t_this3.message = \"No element to render on.\";\n\t\treturn _this3;\n\t}\n\n\treturn NoElementException;\n}(Error);\n\nexports.InvalidInputException = InvalidInputException;\nexports.InvalidElementException = InvalidElementException;\nexports.NoElementException = NoElementException;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; /* global HTMLImageElement */\n/* global HTMLCanvasElement */\n/* global SVGElement */\n\nvar _getOptionsFromElement = require(\"./getOptionsFromElement.js\");\n\nvar _getOptionsFromElement2 = _interopRequireDefault(_getOptionsFromElement);\n\nvar _renderers = require(\"../renderers\");\n\nvar _renderers2 = _interopRequireDefault(_renderers);\n\nvar _exceptions = require(\"../exceptions/exceptions.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Takes an element and returns an object with information about how\n// it should be rendered\n// This could also return an array with these objects\n// {\n// element: The element that the renderer should draw on\n// renderer: The name of the renderer\n// afterRender (optional): If something has to done after the renderer\n// completed, calls afterRender (function)\n// options (optional): Options that can be defined in the element\n// }\n\nfunction getRenderProperties(element) {\n\t// If the element is a string, query select call again\n\tif (typeof element === \"string\") {\n\t\treturn querySelectedRenderProperties(element);\n\t}\n\t// If element is array. Recursivly call with every object in the array\n\telse if (Array.isArray(element)) {\n\t\t\tvar returnArray = [];\n\t\t\tfor (var i = 0; i < element.length; i++) {\n\t\t\t\treturnArray.push(getRenderProperties(element[i]));\n\t\t\t}\n\t\t\treturn returnArray;\n\t\t}\n\t\t// If element, render on canvas and set the uri as src\n\t\telse if (typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLImageElement) {\n\t\t\t\treturn newCanvasRenderProperties(element);\n\t\t\t}\n\t\t\t// If SVG\n\t\t\telse if (element && element.nodeName && element.nodeName.toLowerCase() === 'svg' || typeof SVGElement !== 'undefined' && element instanceof SVGElement) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\telement: element,\n\t\t\t\t\t\toptions: (0, _getOptionsFromElement2.default)(element),\n\t\t\t\t\t\trenderer: _renderers2.default.SVGRenderer\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t// If canvas (in browser)\n\t\t\t\telse if (typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLCanvasElement) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\telement: element,\n\t\t\t\t\t\t\toptions: (0, _getOptionsFromElement2.default)(element),\n\t\t\t\t\t\t\trenderer: _renderers2.default.CanvasRenderer\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t// If canvas (in node)\n\t\t\t\t\telse if (element && element.getContext) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\telement: element,\n\t\t\t\t\t\t\t\trenderer: _renderers2.default.CanvasRenderer\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if (element && (typeof element === \"undefined\" ? \"undefined\" : _typeof(element)) === 'object' && !element.nodeName) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\telement: element,\n\t\t\t\t\t\t\t\trenderer: _renderers2.default.ObjectRenderer\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow new _exceptions.InvalidElementException();\n\t\t\t\t\t\t}\n}\n\nfunction querySelectedRenderProperties(string) {\n\tvar selector = document.querySelectorAll(string);\n\tif (selector.length === 0) {\n\t\treturn undefined;\n\t} else {\n\t\tvar returnArray = [];\n\t\tfor (var i = 0; i < selector.length; i++) {\n\t\t\treturnArray.push(getRenderProperties(selector[i]));\n\t\t}\n\t\treturn returnArray;\n\t}\n}\n\nfunction newCanvasRenderProperties(imgElement) {\n\tvar canvas = document.createElement('canvas');\n\treturn {\n\t\telement: canvas,\n\t\toptions: (0, _getOptionsFromElement2.default)(imgElement),\n\t\trenderer: _renderers2.default.CanvasRenderer,\n\t\tafterRender: function afterRender() {\n\t\t\timgElement.setAttribute(\"src\", canvas.toDataURL());\n\t\t}\n\t};\n}\n\nexports.default = getRenderProperties;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*eslint no-console: 0 */\n\nvar ErrorHandler = function () {\n\tfunction ErrorHandler(api) {\n\t\t_classCallCheck(this, ErrorHandler);\n\n\t\tthis.api = api;\n\t}\n\n\t_createClass(ErrorHandler, [{\n\t\tkey: \"handleCatch\",\n\t\tvalue: function handleCatch(e) {\n\t\t\t// If babel supported extending of Error in a correct way instanceof would be used here\n\t\t\tif (e.name === \"InvalidInputException\") {\n\t\t\t\tif (this.api._options.valid !== this.api._defaults.valid) {\n\t\t\t\t\tthis.api._options.valid(false);\n\t\t\t\t} else {\n\t\t\t\t\tthrow e.message;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow e;\n\t\t\t}\n\n\t\t\tthis.api.render = function () {};\n\t\t}\n\t}, {\n\t\tkey: \"wrapBarcodeCall\",\n\t\tvalue: function wrapBarcodeCall(func) {\n\t\t\ttry {\n\t\t\t\tvar result = func.apply(undefined, arguments);\n\t\t\t\tthis.api._options.valid(true);\n\t\t\t\treturn result;\n\t\t\t} catch (e) {\n\t\t\t\tthis.handleCatch(e);\n\n\t\t\t\treturn this.api;\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn ErrorHandler;\n}();\n\nexports.default = ErrorHandler;","'use strict';\n\nvar _barcodes = require('./barcodes/');\n\nvar _barcodes2 = _interopRequireDefault(_barcodes);\n\nvar _merge = require('./help/merge.js');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _linearizeEncodings = require('./help/linearizeEncodings.js');\n\nvar _linearizeEncodings2 = _interopRequireDefault(_linearizeEncodings);\n\nvar _fixOptions = require('./help/fixOptions.js');\n\nvar _fixOptions2 = _interopRequireDefault(_fixOptions);\n\nvar _getRenderProperties = require('./help/getRenderProperties.js');\n\nvar _getRenderProperties2 = _interopRequireDefault(_getRenderProperties);\n\nvar _optionsFromStrings = require('./help/optionsFromStrings.js');\n\nvar _optionsFromStrings2 = _interopRequireDefault(_optionsFromStrings);\n\nvar _ErrorHandler = require('./exceptions/ErrorHandler.js');\n\nvar _ErrorHandler2 = _interopRequireDefault(_ErrorHandler);\n\nvar _exceptions = require('./exceptions/exceptions.js');\n\nvar _defaults = require('./options/defaults.js');\n\nvar _defaults2 = _interopRequireDefault(_defaults);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// The protype of the object returned from the JsBarcode() call\n\n\n// Help functions\nvar API = function API() {};\n\n// The first call of the library API\n// Will return an object with all barcodes calls and the data that is used\n// by the renderers\n\n\n// Default values\n\n\n// Exceptions\n// Import all the barcodes\nvar JsBarcode = function JsBarcode(element, text, options) {\n\tvar api = new API();\n\n\tif (typeof element === \"undefined\") {\n\t\tthrow Error(\"No element to render on was provided.\");\n\t}\n\n\t// Variables that will be pased through the API calls\n\tapi._renderProperties = (0, _getRenderProperties2.default)(element);\n\tapi._encodings = [];\n\tapi._options = _defaults2.default;\n\tapi._errorHandler = new _ErrorHandler2.default(api);\n\n\t// If text is set, use the simple syntax (render the barcode directly)\n\tif (typeof text !== \"undefined\") {\n\t\toptions = options || {};\n\n\t\tif (!options.format) {\n\t\t\toptions.format = autoSelectBarcode();\n\t\t}\n\n\t\tapi.options(options)[options.format](text, options).render();\n\t}\n\n\treturn api;\n};\n\n// To make tests work TODO: remove\nJsBarcode.getModule = function (name) {\n\treturn _barcodes2.default[name];\n};\n\n// Register all barcodes\nfor (var name in _barcodes2.default) {\n\tif (_barcodes2.default.hasOwnProperty(name)) {\n\t\t// Security check if the propery is a prototype property\n\t\tregisterBarcode(_barcodes2.default, name);\n\t}\n}\nfunction registerBarcode(barcodes, name) {\n\tAPI.prototype[name] = API.prototype[name.toUpperCase()] = API.prototype[name.toLowerCase()] = function (text, options) {\n\t\tvar api = this;\n\t\treturn api._errorHandler.wrapBarcodeCall(function () {\n\t\t\t// Ensure text is options.text\n\t\t\toptions.text = typeof options.text === 'undefined' ? undefined : '' + options.text;\n\n\t\t\tvar newOptions = (0, _merge2.default)(api._options, options);\n\t\t\tnewOptions = (0, _optionsFromStrings2.default)(newOptions);\n\t\t\tvar Encoder = barcodes[name];\n\t\t\tvar encoded = encode(text, Encoder, newOptions);\n\t\t\tapi._encodings.push(encoded);\n\n\t\t\treturn api;\n\t\t});\n\t};\n}\n\n// encode() handles the Encoder call and builds the binary string to be rendered\nfunction encode(text, Encoder, options) {\n\t// Ensure that text is a string\n\ttext = \"\" + text;\n\n\tvar encoder = new Encoder(text, options);\n\n\t// If the input is not valid for the encoder, throw error.\n\t// If the valid callback option is set, call it instead of throwing error\n\tif (!encoder.valid()) {\n\t\tthrow new _exceptions.InvalidInputException(encoder.constructor.name, text);\n\t}\n\n\t// Make a request for the binary data (and other infromation) that should be rendered\n\tvar encoded = encoder.encode();\n\n\t// Encodings can be nestled like [[1-1, 1-2], 2, [3-1, 3-2]\n\t// Convert to [1-1, 1-2, 2, 3-1, 3-2]\n\tencoded = (0, _linearizeEncodings2.default)(encoded);\n\n\t// Merge\n\tfor (var i = 0; i < encoded.length; i++) {\n\t\tencoded[i].options = (0, _merge2.default)(options, encoded[i].options);\n\t}\n\n\treturn encoded;\n}\n\nfunction autoSelectBarcode() {\n\t// If CODE128 exists. Use it\n\tif (_barcodes2.default[\"CODE128\"]) {\n\t\treturn \"CODE128\";\n\t}\n\n\t// Else, take the first (probably only) barcode\n\treturn Object.keys(_barcodes2.default)[0];\n}\n\n// Sets global encoder options\n// Added to the api by the JsBarcode function\nAPI.prototype.options = function (options) {\n\tthis._options = (0, _merge2.default)(this._options, options);\n\treturn this;\n};\n\n// Will create a blank space (usually in between barcodes)\nAPI.prototype.blank = function (size) {\n\tvar zeroes = new Array(size + 1).join(\"0\");\n\tthis._encodings.push({ data: zeroes });\n\treturn this;\n};\n\n// Initialize JsBarcode on all HTML elements defined.\nAPI.prototype.init = function () {\n\t// Should do nothing if no elements where found\n\tif (!this._renderProperties) {\n\t\treturn;\n\t}\n\n\t// Make sure renderProperies is an array\n\tif (!Array.isArray(this._renderProperties)) {\n\t\tthis._renderProperties = [this._renderProperties];\n\t}\n\n\tvar renderProperty;\n\tfor (var i in this._renderProperties) {\n\t\trenderProperty = this._renderProperties[i];\n\t\tvar options = (0, _merge2.default)(this._options, renderProperty.options);\n\n\t\tif (options.format == \"auto\") {\n\t\t\toptions.format = autoSelectBarcode();\n\t\t}\n\n\t\tthis._errorHandler.wrapBarcodeCall(function () {\n\t\t\tvar text = options.value;\n\t\t\tvar Encoder = _barcodes2.default[options.format.toUpperCase()];\n\t\t\tvar encoded = encode(text, Encoder, options);\n\n\t\t\trender(renderProperty, encoded, options);\n\t\t});\n\t}\n};\n\n// The render API call. Calls the real render function.\nAPI.prototype.render = function () {\n\tif (!this._renderProperties) {\n\t\tthrow new _exceptions.NoElementException();\n\t}\n\n\tif (Array.isArray(this._renderProperties)) {\n\t\tfor (var i = 0; i < this._renderProperties.length; i++) {\n\t\t\trender(this._renderProperties[i], this._encodings, this._options);\n\t\t}\n\t} else {\n\t\trender(this._renderProperties, this._encodings, this._options);\n\t}\n\n\treturn this;\n};\n\nAPI.prototype._defaults = _defaults2.default;\n\n// Prepares the encodings and calls the renderer\nfunction render(renderProperties, encodings, options) {\n\tencodings = (0, _linearizeEncodings2.default)(encodings);\n\n\tfor (var i = 0; i < encodings.length; i++) {\n\t\tencodings[i].options = (0, _merge2.default)(options, encodings[i].options);\n\t\t(0, _fixOptions2.default)(encodings[i].options);\n\t}\n\n\t(0, _fixOptions2.default)(options);\n\n\tvar Renderer = renderProperties.renderer;\n\tvar renderer = new Renderer(renderProperties.element, encodings, options);\n\trenderer.render();\n\n\tif (renderProperties.afterRender) {\n\t\trenderProperties.afterRender();\n\t}\n}\n\n// Export to browser\nif (typeof window !== \"undefined\") {\n\twindow.JsBarcode = JsBarcode;\n}\n\n// Export to jQuery\n/*global jQuery */\nif (typeof jQuery !== 'undefined') {\n\tjQuery.fn.JsBarcode = function (content, options) {\n\t\tvar elementArray = [];\n\t\tjQuery(this).each(function () {\n\t\t\telementArray.push(this);\n\t\t});\n\t\treturn JsBarcode(elementArray, content, options);\n\t};\n}\n\n// Export to commonJS\nmodule.exports = JsBarcode;","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n let digit = 0\n\n while (data !== 0) {\n digit++\n data >>>= 1\n }\n\n return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n}\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","function BitBuffer () {\n this.buffer = []\n this.length = 0\n}\n\nBitBuffer.prototype = {\n\n get: function (index) {\n const bufIndex = Math.floor(index / 8)\n return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n },\n\n put: function (num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n }\n },\n\n getLengthInBits: function () {\n return this.length\n },\n\n putBit: function (bit) {\n const bufIndex = Math.floor(this.length / 8)\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0)\n }\n\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n }\n\n this.length++\n }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n if (!size || size < 1) {\n throw new Error('BitMatrix size must be defined and greater than 0')\n }\n\n this.size = size\n this.data = new Uint8Array(size * size)\n this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n const index = row * this.size + col\n this.data[index] = value\n if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n if (version === 1) return []\n\n const posCount = Math.floor(version / 7) + 2\n const size = getSymbolSize(version)\n const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n const positions = [size - 7] // Last coord is always (size - 7)\n\n for (let i = 1; i < posCount - 1; i++) {\n positions[i] = positions[i - 1] - intervals\n }\n\n positions.push(6) // First coord is always 6\n\n return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const coords = []\n const pos = exports.getRowColCoords(version)\n const posLength = pos.length\n\n for (let i = 0; i < posLength; i++) {\n for (let j = 0; j < posLength; j++) {\n // Skip if position is occupied by finder patterns\n if ((i === 0 && j === 0) || // top-left\n (i === 0 && j === posLength - 1) || // bottom-left\n (i === posLength - 1 && j === 0)) { // top-right\n continue\n }\n\n coords.push([pos[i], pos[j]])\n }\n }\n\n return coords\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const size = getSymbolSize(version)\n\n return [\n // top-left\n [0, 0],\n // top-right\n [size - FINDER_PATTERN_SIZE, 0],\n // bottom-left\n [0, size - FINDER_PATTERN_SIZE]\n ]\n}\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param {Number} mask Mask pattern\n * @return {Boolean} true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param {Number|String} value Mask pattern value\n * @return {Number} Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n const size = data.size\n let points = 0\n let sameCountCol = 0\n let sameCountRow = 0\n let lastCol = null\n let lastRow = null\n\n for (let row = 0; row < size; row++) {\n sameCountCol = sameCountRow = 0\n lastCol = lastRow = null\n\n for (let col = 0; col < size; col++) {\n let module = data.get(row, col)\n if (module === lastCol) {\n sameCountCol++\n } else {\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n lastCol = module\n sameCountCol = 1\n }\n\n module = data.get(col, row)\n if (module === lastRow) {\n sameCountRow++\n } else {\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n lastRow = module\n sameCountRow = 1\n }\n }\n\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n }\n\n return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n const size = data.size\n let points = 0\n\n for (let row = 0; row < size - 1; row++) {\n for (let col = 0; col < size - 1; col++) {\n const last = data.get(row, col) +\n data.get(row, col + 1) +\n data.get(row + 1, col) +\n data.get(row + 1, col + 1)\n\n if (last === 4 || last === 0) points++\n }\n }\n\n return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n const size = data.size\n let points = 0\n let bitsCol = 0\n let bitsRow = 0\n\n for (let row = 0; row < size; row++) {\n bitsCol = bitsRow = 0\n for (let col = 0; col < size; col++) {\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n }\n }\n\n return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n let darkCount = 0\n const modulesCount = data.data.length\n\n for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param {Number} maskPattern Pattern reference value\n * @param {Number} i Row\n * @param {Number} j Column\n * @return {Boolean} Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n switch (maskPattern) {\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n case exports.Patterns.PATTERN001: return i % 2 === 0\n case exports.Patterns.PATTERN010: return j % 3 === 0\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n default: throw new Error('bad maskPattern:' + maskPattern)\n }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param {Number} pattern Pattern reference number\n * @param {BitMatrix} data BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n const size = data.size\n\n for (let col = 0; col < size; col++) {\n for (let row = 0; row < size; row++) {\n if (data.isReserved(row, col)) continue\n data.xor(row, col, getMaskAt(pattern, row, col))\n }\n }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n const numPatterns = Object.keys(exports.Patterns).length\n let bestPattern = 0\n let lowerPenalty = Infinity\n\n for (let p = 0; p < numPatterns; p++) {\n setupFormatFunc(p)\n exports.applyMask(p, data)\n\n // Calculate penalty\n const penalty =\n exports.getPenaltyN1(data) +\n exports.getPenaltyN2(data) +\n exports.getPenaltyN3(data) +\n exports.getPenaltyN4(data)\n\n // Undo previously applied mask\n exports.applyMask(p, data)\n\n if (penalty < lowerPenalty) {\n lowerPenalty = penalty\n bestPattern = p\n }\n }\n\n return bestPattern\n}\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n let x = 1\n for (let i = 0; i < 255; i++) {\n EXP_TABLE[i] = x\n LOG_TABLE[x] = i\n\n x <<= 1 // multiply by 2\n\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n x ^= 0x11D\n }\n }\n\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n // stay inside the bounds (because we will mainly use this table for the multiplication of\n // two GF numbers, no more).\n // @see {@link mul}\n for (let i = 255; i < 512; i++) {\n EXP_TABLE[i] = EXP_TABLE[i - 255]\n }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n if (n < 1) throw new Error('log(' + n + ')')\n return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n if (x === 0 || y === 0) return 0\n\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n // @see {@link initTables}\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param {Uint8Array} p1 Polynomial\n * @param {Uint8Array} p2 Polynomial\n * @return {Uint8Array} Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n for (let i = 0; i < p1.length; i++) {\n for (let j = 0; j < p2.length; j++) {\n coeff[i + j] ^= GF.mul(p1[i], p2[j])\n }\n }\n\n return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param {Uint8Array} divident Polynomial\n * @param {Uint8Array} divisor Polynomial\n * @return {Uint8Array} Remainder\n */\nexports.mod = function mod (divident, divisor) {\n let result = new Uint8Array(divident)\n\n while ((result.length - divisor.length) >= 0) {\n const coeff = result[0]\n\n for (let i = 0; i < divisor.length; i++) {\n result[i] ^= GF.mul(divisor[i], coeff)\n }\n\n // remove all zeros from buffer head\n let offset = 0\n while (offset < result.length && result[offset] === 0) offset++\n result = result.slice(offset)\n }\n\n return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param {Number} degree Degree of the generator polynomial\n * @return {Uint8Array} Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n let poly = new Uint8Array([1])\n for (let i = 0; i < degree; i++) {\n poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n }\n\n return poly\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n this.genPoly = undefined\n this.degree = degree\n\n if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n // create an irreducible generator polynomial\n this.degree = degree\n this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param {Uint8Array} data Buffer containing input data\n * @return {Uint8Array} Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n if (!this.genPoly) {\n throw new Error('Encoder not initialized')\n }\n\n // Calculate EC for this data block\n // extends data size to data+genPoly size\n const paddedData = new Uint8Array(data.length + this.degree)\n paddedData.set(data)\n\n // The error correction codewords are the remainder after dividing the data codewords\n // by a generator polynomial\n const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n // return EC data blocks (last n byte, where n is the degree of genPoly)\n // If coefficients number in remainder are less than genPoly degree,\n // pad with 0s to the left to reach the needed number of coefficients\n const start = this.degree - remainder.length\n if (start > 0) {\n const buff = new Uint8Array(this.degree)\n buff.set(remainder, start)\n\n return buff\n }\n\n return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n}\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n // Character count indicator + mode indicator bits\n return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n let totalBits = 0\n\n segments.forEach(function (data) {\n const reservedBits = getReservedBitsCount(data.mode, version)\n totalBits += reservedBits + data.getBitsLength()\n })\n\n return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n const length = getTotalBitsFromDataArray(segments, currentVersion)\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param {Number|String} value QR Code version\n * @param {Number} defaultValue Fallback value\n * @return {Number} QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n if (VersionCheck.isValid(value)) {\n return parseInt(value, 10)\n }\n\n return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param {Number} version QR Code version (1-40)\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid QR Code version')\n }\n\n // Use Byte mode as default\n if (typeof mode === 'undefined') mode = Mode.BYTE\n\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n // Return max number of storable codewords\n switch (mode) {\n case Mode.NUMERIC:\n return Math.floor((usableBits / 10) * 3)\n\n case Mode.ALPHANUMERIC:\n return Math.floor((usableBits / 11) * 2)\n\n case Mode.KANJI:\n return Math.floor(usableBits / 13)\n\n case Mode.BYTE:\n default:\n return Math.floor(usableBits / 8)\n }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param {Segment} data Segment of data\n * @param {Number} [errorCorrectionLevel=H] Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n let seg\n\n const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n if (Array.isArray(data)) {\n if (data.length > 1) {\n return getBestVersionForMixedData(data, ecl)\n }\n\n if (data.length === 0) {\n return 1\n }\n\n seg = data[0]\n } else {\n seg = data\n }\n\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param {Number} version QR Code version\n * @return {Number} Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n if (!VersionCheck.isValid(version) || version < 7) {\n throw new Error('Invalid QR Code version')\n }\n\n let d = version << 12\n\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n }\n\n return (version << 12) | d\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Number} mask Mask pattern\n * @return {Number} Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n const data = ((errorCorrectionLevel.bit << 3) | mask)\n let d = data << 10\n\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n }\n\n // xor final data with mask pattern in order to ensure that\n // no combination of Error Correction Level and data mask pattern\n // will result in an all-zero data string\n return ((data << 10) | d) ^ G15_MASK\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n this.mode = Mode.NUMERIC\n this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n let i, group, value\n\n // The input data string is divided into groups of three digits,\n // and each group is converted to its 10-bit binary equivalent.\n for (i = 0; i + 3 <= this.data.length; i += 3) {\n group = this.data.substr(i, 3)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, 10)\n }\n\n // If the number of input digits is not an exact multiple of three,\n // the final one or two digits are converted to 4 or 7 bits respectively.\n const remainingNum = this.data.length - i\n if (remainingNum > 0) {\n group = this.data.substr(i)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, remainingNum * 3 + 1)\n }\n}\n\nmodule.exports = NumericData\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n this.mode = Mode.ALPHANUMERIC\n this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n let i\n\n // Input data characters are divided into groups of two characters\n // and encoded as 11-bit binary codes.\n for (i = 0; i + 2 <= this.data.length; i += 2) {\n // The character value of the first character is multiplied by 45\n let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n // The character value of the second digit is added to the product\n value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n // The sum is then stored as 11-bit binary number\n bitBuffer.put(value, 11)\n }\n\n // If the number of input data characters is not a multiple of two,\n // the character value of the final character is encoded as a 6-bit binary number.\n if (this.data.length % 2) {\n bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n }\n}\n\nmodule.exports = AlphanumericData\n","const Mode = require('./mode')\n\nfunction ByteData (data) {\n this.mode = Mode.BYTE\n if (typeof (data) === 'string') {\n this.data = new TextEncoder().encode(data)\n } else {\n this.data = new Uint8Array(data)\n }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n for (let i = 0, l = this.data.length; i < l; i++) {\n bitBuffer.put(this.data[i], 8)\n }\n}\n\nmodule.exports = ByteData\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n this.mode = Mode.KANJI\n this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n let i\n\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n // These byte values are shifted from the JIS X 0208 values.\n // JIS X 0208 gives details of the shift coded representation.\n for (i = 0; i < this.data.length; i++) {\n let value = Utils.toSJIS(this.data[i])\n\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n if (value >= 0x8140 && value <= 0x9FFC) {\n // Subtract 0x8140 from Shift JIS value\n value -= 0x8140\n\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\n } else if (value >= 0xE040 && value <= 0xEBBF) {\n // Subtract 0xC140 from Shift JIS value\n value -= 0xC140\n } else {\n throw new Error(\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\n 'Make sure your charset is UTF-8')\n }\n\n // Multiply most significant byte of result by 0xC0\n // and add least significant byte to product\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n // Convert result to a 13-bit binary string\n bitBuffer.put(value, 13)\n }\n}\n\nmodule.exports = KanjiData\n","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin <self@wyattbaldwin.com>\n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param {String} str Input string\n * @return {Number} Number of byte\n */\nfunction getStringByteLength (str) {\n return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param {Mode} mode Segment mode\n * @param {String} str String to process\n * @return {Array} Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n const segments = []\n let result\n\n while ((result = regex.exec(str)) !== null) {\n segments.push({\n data: result[0],\n index: result.index,\n mode: mode,\n length: result[0].length\n })\n }\n\n return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param {String} dataStr Input string\n * @return {Array} Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n let byteSegs\n let kanjiSegs\n\n if (Utils.isKanjiModeEnabled()) {\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n } else {\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n kanjiSegs = []\n }\n\n const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n return segs\n .sort(function (s1, s2) {\n return s1.index - s2.index\n })\n .map(function (obj) {\n return {\n data: obj.data,\n mode: obj.mode,\n length: obj.length\n }\n })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param {Number} length String length\n * @param {Mode} mode Segment mode\n * @return {Number} Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n switch (mode) {\n case Mode.NUMERIC:\n return NumericData.getBitsLength(length)\n case Mode.ALPHANUMERIC:\n return AlphanumericData.getBitsLength(length)\n case Mode.KANJI:\n return KanjiData.getBitsLength(length)\n case Mode.BYTE:\n return ByteData.getBitsLength(length)\n }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction mergeSegments (segs) {\n return segs.reduce(function (acc, curr) {\n const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n if (prevSeg && prevSeg.mode === curr.mode) {\n acc[acc.length - 1].data += curr.data\n return acc\n }\n\n acc.push(curr)\n return acc\n }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction buildNodes (segs) {\n const nodes = []\n for (let i = 0; i < segs.length; i++) {\n const seg = segs[i]\n\n switch (seg.mode) {\n case Mode.NUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.ALPHANUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.KANJI:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n break\n case Mode.BYTE:\n nodes.push([\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n }\n }\n\n return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param {Array} nodes Array of object with segments data\n * @param {Number} version QR Code version\n * @return {Object} Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n const table = {}\n const graph = { start: {} }\n let prevNodeIds = ['start']\n\n for (let i = 0; i < nodes.length; i++) {\n const nodeGroup = nodes[i]\n const currentNodeIds = []\n\n for (let j = 0; j < nodeGroup.length; j++) {\n const node = nodeGroup[j]\n const key = '' + i + j\n\n currentNodeIds.push(key)\n table[key] = { node: node, lastCount: 0 }\n graph[key] = {}\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n const prevNodeId = prevNodeIds[n]\n\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n graph[prevNodeId][key] =\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n table[prevNodeId].lastCount += node.length\n } else {\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n 4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n }\n }\n }\n\n prevNodeIds = currentNodeIds\n }\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n graph[prevNodeIds[n]].end = 0\n }\n\n return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param {String} data Input data\n * @param {Mode | String} modesHint Data mode\n * @return {Segment} Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n let mode\n const bestMode = Mode.getBestModeForData(data)\n\n mode = Mode.from(modesHint, bestMode)\n\n // Make sure data can be encoded\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n throw new Error('\"' + data + '\"' +\n ' cannot be encoded with mode ' + Mode.toString(mode) +\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n }\n\n // Use Mode.BYTE if Kanji support is disabled\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n mode = Mode.BYTE\n }\n\n switch (mode) {\n case Mode.NUMERIC:\n return new NumericData(data)\n\n case Mode.ALPHANUMERIC:\n return new AlphanumericData(data)\n\n case Mode.KANJI:\n return new KanjiData(data)\n\n case Mode.BYTE:\n return new ByteData(data)\n }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param {Array} array Array of objects with segments data\n * @return {Array} Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n return array.reduce(function (acc, seg) {\n if (typeof seg === 'string') {\n acc.push(buildSingleSegment(seg, null))\n } else if (seg.data) {\n acc.push(buildSingleSegment(seg.data, seg.mode))\n }\n\n return acc\n }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @return {Array} Array of segments\n */\nexports.fromString = function fromString (data, version) {\n const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n const nodes = buildNodes(segs)\n const graph = buildGraph(nodes, version)\n const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n const optimizedSegs = []\n for (let i = 1; i < path.length - 1; i++) {\n optimizedSegs.push(graph.table[path[i]].node)\n }\n\n return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param {string} data Input string\n * @return {Array} Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n return exports.fromArray(\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n )\n}\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n const size = matrix.size\n const pos = FinderPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -1; r <= 7; r++) {\n if (row + r <= -1 || size <= row + r) continue\n\n for (let c = -1; c <= 7; c++) {\n if (col + c <= -1 || size <= col + c) continue\n\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n const size = matrix.size\n\n for (let r = 8; r < size - 8; r++) {\n const value = r % 2 === 0\n matrix.set(r, 6, value, true)\n matrix.set(6, r, value, true)\n }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n const pos = AlignmentPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\n (r === 0 && c === 0)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n const size = matrix.size\n const bits = Version.getEncodedBits(version)\n let row, col, mod\n\n for (let i = 0; i < 18; i++) {\n row = Math.floor(i / 3)\n col = i % 3 + size - 8 - 3\n mod = ((bits >> i) & 1) === 1\n\n matrix.set(row, col, mod, true)\n matrix.set(col, row, mod, true)\n }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {Number} maskPattern Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n const size = matrix.size\n const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n let i, mod\n\n for (i = 0; i < 15; i++) {\n mod = ((bits >> i) & 1) === 1\n\n // vertical\n if (i < 6) {\n matrix.set(i, 8, mod, true)\n } else if (i < 8) {\n matrix.set(i + 1, 8, mod, true)\n } else {\n matrix.set(size - 15 + i, 8, mod, true)\n }\n\n // horizontal\n if (i < 8) {\n matrix.set(8, size - i - 1, mod, true)\n } else if (i < 9) {\n matrix.set(8, 15 - i - 1 + 1, mod, true)\n } else {\n matrix.set(8, 15 - i - 1, mod, true)\n }\n }\n\n // fixed module\n matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Uint8Array} data Data codewords\n */\nfunction setupData (matrix, data) {\n const size = matrix.size\n let inc = -1\n let row = size - 1\n let bitIndex = 7\n let byteIndex = 0\n\n for (let col = size - 1; col > 0; col -= 2) {\n if (col === 6) col--\n\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (!matrix.isReserved(row, col - c)) {\n let dark = false\n\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n }\n\n matrix.set(row, col - c, dark)\n bitIndex--\n\n if (bitIndex === -1) {\n byteIndex++\n bitIndex = 7\n }\n }\n }\n\n row += inc\n\n if (row < 0 || size <= row) {\n row -= inc\n inc = -inc\n break\n }\n }\n }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {ByteData} data Data input\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n // Prepare data buffer\n const buffer = new BitBuffer()\n\n segments.forEach(function (data) {\n // prefix data with mode indicator (4 bits)\n buffer.put(data.mode.bit, 4)\n\n // Prefix data with character count indicator.\n // The character count indicator is a string of bits that represents the\n // number of characters that are being encoded.\n // The character count indicator must be placed after the mode indicator\n // and must be a certain number of bits long, depending on the QR version\n // and data mode\n // @see {@link Mode.getCharCountIndicator}.\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n // add binary data sequence to buffer\n data.write(buffer)\n })\n\n // Calculate required number of bits\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n // Add a terminator.\n // If the bit string is shorter than the total number of required bits,\n // a terminator of up to four 0s must be added to the right side of the string.\n // If the bit string is more than four bits shorter than the required number of bits,\n // add four 0s to the end.\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n buffer.put(0, 4)\n }\n\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\n // are needed to reach the required number of bits.\n\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n // pad the string on the right with 0s to make the string's length a multiple of 8.\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(0)\n }\n\n // Add pad bytes if the string is still shorter than the total number of required bits.\n // Extend the buffer to fill the data capacity of the symbol corresponding to\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n // and 00010001 (0x11) alternately.\n const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n for (let i = 0; i < remainingByte; i++) {\n buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n }\n\n return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param {BitBuffer} bitBuffer Data to encode\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n // Total number of blocks\n const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n // Calculate how many blocks each group should contain\n const blocksInGroup2 = totalCodewords % ecTotalBlocks\n const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n // Number of EC codewords is the same for both groups\n const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n const rs = new ReedSolomonEncoder(ecCount)\n\n let offset = 0\n const dcData = new Array(ecTotalBlocks)\n const ecData = new Array(ecTotalBlocks)\n let maxDataSize = 0\n const buffer = new Uint8Array(bitBuffer.buffer)\n\n // Divide the buffer into the required number of blocks\n for (let b = 0; b < ecTotalBlocks; b++) {\n const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n // extract a block of data from buffer\n dcData[b] = buffer.slice(offset, offset + dataSize)\n\n // Calculate EC codewords for this data block\n ecData[b] = rs.encode(dcData[b])\n\n offset += dataSize\n maxDataSize = Math.max(maxDataSize, dataSize)\n }\n\n // Create final data\n // Interleave the data and error correction codewords from each block\n const data = new Uint8Array(totalCodewords)\n let index = 0\n let i, r\n\n // Add data codewords\n for (i = 0; i < maxDataSize; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n if (i < dcData[r].length) {\n data[index++] = dcData[r][i]\n }\n }\n }\n\n // Apped EC codewords\n for (i = 0; i < ecCount; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n data[index++] = ecData[r][i]\n }\n }\n\n return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param {MaskPattern} maskPattern Mask pattern\n * @return {Object} Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n let segments\n\n if (Array.isArray(data)) {\n segments = Segments.fromArray(data)\n } else if (typeof data === 'string') {\n let estimatedVersion = version\n\n if (!estimatedVersion) {\n const rawSegments = Segments.rawSplit(data)\n\n // Estimate best version that can contain raw splitted segments\n estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n }\n\n // Build optimized segments\n // If estimated version is undefined, try with the highest version\n segments = Segments.fromString(data, estimatedVersion || 40)\n } else {\n throw new Error('Invalid data')\n }\n\n // Get the min version that can contain data\n const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n // If no version is found, data cannot be stored\n if (!bestVersion) {\n throw new Error('The amount of data is too big to be stored in a QR Code')\n }\n\n // If not specified, use min version as default\n if (!version) {\n version = bestVersion\n\n // Check if the specified version can contain the data\n } else if (version < bestVersion) {\n throw new Error('\\n' +\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n )\n }\n\n const dataBits = createData(version, errorCorrectionLevel, segments)\n\n // Allocate matrix buffer\n const moduleCount = Utils.getSymbolSize(version)\n const modules = new BitMatrix(moduleCount)\n\n // Add function modules\n setupFinderPattern(modules, version)\n setupTimingPattern(modules)\n setupAlignmentPattern(modules, version)\n\n // Add temporary dummy bits for format info just to set them as reserved.\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n // since the masking operation must be performed only on the encoding region.\n // These blocks will be replaced with correct values later in code.\n setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n if (version >= 7) {\n setupVersionInfo(modules, version)\n }\n\n // Add data codewords\n setupData(modules, dataBits)\n\n if (isNaN(maskPattern)) {\n // Find best mask pattern\n maskPattern = MaskPattern.getBestMask(modules,\n setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n }\n\n // Apply mask pattern\n MaskPattern.applyMask(maskPattern, modules)\n\n // Replace format info bits with correct values\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n return {\n modules: modules,\n version: version,\n errorCorrectionLevel: errorCorrectionLevel,\n maskPattern: maskPattern,\n segments: segments\n }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data Input data\n * @param {Object} options Optional configurations\n * @param {Number} options.version QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n if (typeof data === 'undefined' || data === '') {\n throw new Error('No input text')\n }\n\n let errorCorrectionLevel = ECLevel.M\n let version\n let mask\n\n if (typeof options !== 'undefined') {\n // Use higher error correction level as default\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n version = Version.from(options.version)\n mask = MaskPattern.from(options.maskPattern)\n\n if (options.toSJISFunc) {\n Utils.setToSJISFunction(options.toSJISFunc)\n }\n }\n\n return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","function hex2rgba (hex) {\n if (typeof hex === 'number') {\n hex = hex.toString()\n }\n\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n let hexCode = hex.slice().replace('#', '').split('')\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }))\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F')\n\n const hexValue = parseInt(hexCode.join(''), 16)\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {}\n if (!options.color) options.color = {}\n\n const margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0\n ? 4\n : options.margin\n\n const width = options.width && options.width >= 21 ? options.width : undefined\n const scale = options.scale || 4\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n const scale = exports.getScale(qrSize, opts)\n return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n const size = qr.modules.size\n const data = qr.modules.data\n const scale = exports.getScale(size, opts)\n const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n const scaledMargin = opts.margin * scale\n const palette = [opts.color.light, opts.color.dark]\n\n for (let i = 0; i < symbolSize; i++) {\n for (let j = 0; j < symbolSize; j++) {\n let posDst = (i * symbolSize + j) * 4\n let pxColor = opts.color.light\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n const iSrc = Math.floor((i - scaledMargin) / scale)\n const jSrc = Math.floor((j - scaledMargin) / scale)\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n }\n\n imgData[posDst++] = pxColor.r\n imgData[posDst++] = pxColor.g\n imgData[posDst++] = pxColor.b\n imgData[posDst] = pxColor.a\n }\n }\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n if (!canvas.style) canvas.style = {}\n canvas.height = size\n canvas.width = size\n canvas.style.height = size + 'px'\n canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n try {\n return document.createElement('canvas')\n } catch (e) {\n throw new Error('You need to specify a canvas element')\n }\n}\n\nexports.render = function render (qrData, canvas, options) {\n let opts = options\n let canvasEl = canvas\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!canvas) {\n canvasEl = getCanvasElement()\n }\n\n opts = Utils.getOptions(opts)\n const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n const ctx = canvasEl.getContext('2d')\n const image = ctx.createImageData(size, size)\n Utils.qrToImageData(image.data, qrData, opts)\n\n clearCanvas(ctx, canvasEl, size)\n ctx.putImageData(image, 0, 0)\n\n return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n let opts = options\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!opts) opts = {}\n\n const canvasEl = exports.render(qrData, canvas, opts)\n\n const type = opts.type || 'image/png'\n const rendererOpts = opts.rendererOpts || {}\n\n return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n const alpha = color.a / 255\n const str = attrib + '=\"' + color.hex + '\"'\n\n return alpha < 1\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n : str\n}\n\nfunction svgCmd (cmd, x, y) {\n let str = cmd + x\n if (typeof y !== 'undefined') str += ' ' + y\n\n return str\n}\n\nfunction qrToPath (data, size, margin) {\n let path = ''\n let moveBy = 0\n let newRow = false\n let lineLength = 0\n\n for (let i = 0; i < data.length; i++) {\n const col = Math.floor(i % size)\n const row = Math.floor(i / size)\n\n if (!col && !newRow) newRow = true\n\n if (data[i]) {\n lineLength++\n\n if (!(i > 0 && col > 0 && data[i - 1])) {\n path += newRow\n ? svgCmd('M', col + margin, 0.5 + row + margin)\n : svgCmd('m', moveBy, 0)\n\n moveBy = 0\n newRow = false\n }\n\n if (!(col + 1 < size && data[i + 1])) {\n path += svgCmd('h', lineLength)\n lineLength = 0\n }\n } else {\n moveBy++\n }\n }\n\n return path\n}\n\nexports.render = function render (qrData, options, cb) {\n const opts = Utils.getOptions(options)\n const size = qrData.modules.size\n const data = qrData.modules.data\n const qrcodesize = size + opts.margin * 2\n\n const bg = !opts.color.light.a\n ? ''\n : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n const path =\n '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n if (typeof cb === 'function') {\n cb(null, svgTag)\n }\n\n return svgTag\n}\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n const args = [].slice.call(arguments, 1)\n const argsNum = args.length\n const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n if (!isLastArgCb && !canPromise()) {\n throw new Error('Callback required as last argument')\n }\n\n if (isLastArgCb) {\n if (argsNum < 2) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 2) {\n cb = text\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 3) {\n if (canvas.getContext && typeof cb === 'undefined') {\n cb = opts\n opts = undefined\n } else {\n cb = opts\n opts = text\n text = canvas\n canvas = undefined\n }\n }\n } else {\n if (argsNum < 1) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 1) {\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 2 && !canvas.getContext) {\n opts = text\n text = canvas\n canvas = undefined\n }\n\n return new Promise(function (resolve, reject) {\n try {\n const data = QRCode.create(text, opts)\n resolve(renderFunc(data, canvas, opts))\n } catch (e) {\n reject(e)\n }\n })\n }\n\n try {\n const data = QRCode.create(text, opts)\n cb(null, renderFunc(data, canvas, opts))\n } catch (e) {\n cb(e)\n }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n return SvgRenderer.render(data, opts)\n})\n","/**\n * Canvas 复用池\n * 避免频繁创建/销毁 canvas 的性能开销\n */\n\nimport JsBarcode from 'jsbarcode';\nimport QRCode from 'qrcode';\n\nclass CanvasPool {\n private pool: HTMLCanvasElement[] = [];\n private maxSize = 10; // 最多缓存 10 个 canvas\n\n /**\n * 获取一个 canvas(优先从池中复用)\n */\n acquire(): HTMLCanvasElement {\n return this.pool.pop() || document.createElement('canvas');\n }\n\n /**\n * 归还 canvas 到池中\n */\n release(canvas: HTMLCanvasElement): void {\n // 清理 canvas 状态\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n }\n\n // 池未满则归还\n if (this.pool.length < this.maxSize) {\n this.pool.push(canvas);\n }\n }\n\n /**\n * 生成条形码 Data URL\n * @param data 条码数据\n * @param options 条码配置选项\n * @returns PNG Data URL\n */\n generateBarcode(data: string, options?: any): string {\n const canvas = this.acquire();\n try {\n JsBarcode(canvas, data, {\n format: 'CODE128',\n width: 2,\n height: 50,\n displayValue: true,\n margin: 10,\n ...options\n });\n return canvas.toDataURL('image/png');\n } finally {\n this.release(canvas);\n }\n }\n\n /**\n * 生成二维码 Data URL(异步)\n * @param data 二维码数据\n * @param options 二维码配置选项\n * @returns PNG Data URL\n */\n async generateQRCode(data: string, options?: any): Promise<string> {\n const canvas = this.acquire();\n try {\n await QRCode.toCanvas(canvas, data, {\n width: 100,\n margin: 1,\n ...options\n });\n return canvas.toDataURL('image/png');\n } finally {\n this.release(canvas);\n }\n }\n}\n\n// 导出单例\nexport const canvasPool = new CanvasPool();\n","import {CellType, CellStyle, FormatType} from 'yh-report/types';\nimport dayjs from 'dayjs';\nimport {normalizeBorder, getBorderCss} from 'yh-report/utils/borderStyle';\nimport { canvasPool } from 'yh-report/libs/canvasPool';\n\n/** 单元格默认内边距(px),用户未自定义 padding 时各处统一使用 */\nconst DEFAULT_PADDING = 2;\n/**\n * td 默认内边距(px):设计态 td 依赖浏览器 UA 默认 padding:1px(未被全局 reset 清除),\n * 打印态/预览态在 reset 环境需显式设 1px 与设计态对齐,否则行高多 2px。\n */\nconst TD_DEFAULT_PADDING_HORIZONTAL = 2;\nconst TD_DEFAULT_PADDING_VERTICAL = 1;\n\n/** 渲染单元格样式 */\nexport function renderCellStyle(styleObj: CellStyle) {\n let styleAttr = '';\n Object.keys(styleObj).forEach((key) => {\n let value = styleObj[key];\n if (value) {\n switch (key) {\n case 'color':\n styleAttr += `color:${styleObj[key]};`;\n break;\n case 'backgroundColor':\n styleAttr += `background-color:${styleObj[key]};`;\n break;\n case 'fontWeight':\n styleAttr += `font-weight:${styleObj[key]};`;\n break;\n case 'fontSize':\n styleAttr += `font-size:${styleObj[key]}px;`;\n break;\n case 'textAlign':\n styleAttr += `text-align:${styleObj[key]};`;\n break;\n case 'verticalAlign':\n styleAttr += `vertical-align:${styleObj[key]};`;\n break;\n case 'fontFamily':\n styleAttr += `font-family:${styleObj[key]};`;\n break;\n case 'paddingTop':\n styleAttr += `padding-top:${styleObj[key]}px;`;\n break;\n case 'paddingRight':\n styleAttr += `padding-right:${styleObj[key]}px;`;\n break;\n case 'paddingBottom':\n styleAttr += `padding-bottom:${styleObj[key]}px;`;\n break;\n case 'paddingLeft':\n styleAttr += `padding-left:${styleObj[key]}px;`;\n break;\n default:\n break;\n }\n }\n });\n return styleAttr;\n}\n\n// #region 单元格内容格式化\n/** 数字格式化 */\nfunction formatNumber(value, {numberDecimal, numberUseGrouping} = {} as any) {\n const rounded = numberDecimal === 0 ? Math.round(value) : value.toFixed(numberDecimal);\n\n if (numberUseGrouping) {\n const parts = rounded.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n } else {\n return rounded;\n }\n}\n\n/** 货币格式化 */\nfunction formatCurrency(value, {numberDecimal, currencySymbol, numberUseGrouping} = {} as any) {\n const rounded = numberDecimal === 0 ? Math.round(value) : parseFloat(value.toFixed(numberDecimal));\n\n let [integerPart, decimalPart] = rounded.toString().split('.');\n\n if (numberUseGrouping) {\n integerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n let formatted = `${currencySymbol}${integerPart}`;\n if (numberDecimal > 0) {\n formatted += `.${decimalPart}`;\n }\n\n return formatted;\n}\n\n/** 百分号/千分号格式化 */\nfunction formatPercentage(value, {numberDecimal} = {} as any, isPromille = false) {\n const rounded = numberDecimal === 0 ? Math.round(value) : value.toFixed(numberDecimal);\n\n if (isPromille) {\n return `${rounded}‰`;\n } else {\n return `${rounded}%`;\n }\n}\n\n/** 科学计数法格式化 */\nfunction formatScientific(value, {scientificNotation = 'e', digits = 6} = {} as any) {\n // 生成科学计数法字符串并替换指数符号\n const sciStr = value.toExponential(digits);\n return sciStr.replace(/e/, scientificNotation);\n}\n\n/** 日期格式化 */\nfunction formatDatetime(value, {date = 'YYYY-MM-DD HH:mm:ss'} = {} as any) {\n let dateObj;\n\n if (typeof value === 'number') {\n // 处理数字时间戳(自动识别秒/毫秒)\n const timestamp = value < 10000000000 ? value * 1000 : value;\n dateObj = dayjs(timestamp);\n } else if (typeof value === 'string') {\n // 尝试转换为数字时间戳\n const numValue = Number(value);\n if (!isNaN(numValue)) {\n const timestamp = numValue < 10000000000 ? numValue * 1000 : numValue;\n dateObj = dayjs(timestamp);\n } else {\n // 按字符串解析日期\n dateObj = dayjs(value);\n }\n } else {\n return ''; // 非字符串/数字直接返回空字符串\n }\n\n return dateObj.isValid() ? dateObj.format(date) : '';\n}\n\n/**\n * 格式化单元格值\n * @param value - 要格式化的值\n * @param formatType - 格式化类型\n * @param formatOptions - 格式化选项\n */\nexport function formatCellValue(value: any, formatType: FormatType = FormatType.TEXT, formatOptions: any) {\n // 处理 null/undefined\n if (value == null || value == undefined) {\n return formatOptions?.defaultCellContent !== undefined ? formatOptions.defaultCellContent : '';\n }\n\n // 对于数值类型,预处理数字值\n let processedNumericValue: number | null = null;\n if ([FormatType.NUMBER, FormatType.CURRENCY, FormatType.PERCENT, FormatType.PROMILLE, FormatType.SCIENTIFIC].includes(formatType)) {\n let numericString: string = typeof value === 'string' ? value.replace(/,/g, '') : String(value);\n processedNumericValue = parseFloat(numericString);\n\n if (isNaN(processedNumericValue)) {\n processedNumericValue = 0;\n }\n\n // 对于0值的特殊处理\n if (processedNumericValue === 0 && formatOptions?.defaultCellContent !== undefined) {\n return formatOptions.defaultCellContent;\n }\n }\n\n switch (formatType) {\n case FormatType.NUMBER:\n return formatNumber(processedNumericValue!, formatOptions);\n case FormatType.CURRENCY:\n return formatCurrency(processedNumericValue!, formatOptions);\n case FormatType.PERCENT:\n // percent情况下乘以100\n return formatPercentage(processedNumericValue! * 100, formatOptions, false);\n case FormatType.PROMILLE:\n // promille情况下乘以1000\n return formatPercentage(processedNumericValue! * 1000, formatOptions, true);\n case FormatType.SCIENTIFIC:\n return formatScientific(processedNumericValue!, formatOptions);\n case FormatType.DATETIME:\n return formatDatetime(value, formatOptions);\n case FormatType.BARCODE:\n case FormatType.QRCODE:\n // 条形码/二维码:保留原始文本作为生成图片的内容源\n return value;\n default:\n if ((value === 0 || value === '0') && formatOptions?.defaultCellContent !== undefined) {\n return formatOptions.defaultCellContent;\n }\n return value;\n }\n}\n\nfunction renderColgroup(cols, tableBodyRef) {\n const colgroup = document.createElement('colgroup');\n let widthCount = 0;\n for (let i = 0; i < cols.length; i++) {\n const col = cols[i];\n if (col.isHidden) {\n continue;\n }\n const colEl = document.createElement('col');\n widthCount += col.size ?? 80;\n colEl.style.width = `${col.size ?? 80}px`;\n colgroup.appendChild(colEl);\n }\n if (tableBodyRef) {\n tableBodyRef.style.width = `${widthCount}px`;\n }\n return colgroup;\n}\n/** 渲染图片尺寸/缩放样式(type=IMAGE 用) */\nfunction renderImageStyle(imageOptions?: { width?: number; height?: number; fit?: 'contain' | 'cover' | 'fill' }): string {\n if (!imageOptions) return '';\n const parts: string[] = [];\n if (imageOptions.width !== undefined) parts.push(`width:${imageOptions.width}px`);\n if (imageOptions.height !== undefined) parts.push(`height:${imageOptions.height}px`);\n if (imageOptions.fit) parts.push(`object-fit:${imageOptions.fit}`);\n return parts.length ? parts.join(';') : '';\n}\nfunction renderCell(row, cell, themeColor?: string) {\n const td = document.createElement('td');\n td.setAttribute('data-cell-config', `${cell.row}-${cell.col}`);\n td.setAttribute('rowspan', cell.rowSpan);\n td.setAttribute('colspan', cell.colSpan);\n // allowContentOverflow:允许内容撑开行高时,td 用 min-height 让内容撑高\n const allowOverflow = cell.style?.allowContentOverflow === true;\n // td 用 border-box + height=size:padding/border 含在 height 内,行高精确等于 size。\n // 与设计态完全一致,避免行高偏差导致合并单元格脱离表格。\n td.style.boxSizing = 'border-box';\n td.style.position = 'relative';\n if (cell.rowSpan <= 1) {\n if (allowOverflow) {\n // 允许内容撑高:使用 min-height 而非固定 height\n td.style.minHeight = `${row.size ?? 25}px`;\n } else {\n td.style.height = `${row.size ?? 25}px`;\n }\n }\n const textAlignMap = {left: 'flex-start', center: 'center', right: 'flex-end'};\n const verticalAlignMap = {top: 'flex-start', center: 'center', bottom: 'flex-end'};\n const justifyContent = textAlignMap[cell.style?.textAlign] || 'center';\n // 垂直对齐:根据 verticalAlign 映射到 flex align-items(修复:原写死 center 导致 top/bottom 无效)\n const alignItems = verticalAlignMap[cell.style?.verticalAlign] || 'center';\n const contentDiv = document.createElement('div');\n if (allowOverflow) {\n // 内容可撑高:相对定位留在文档流中,溢出可见\n contentDiv.style.cssText = `overflow:visible;position:relative;display:flex;align-items:${alignItems};justify-content:${justifyContent};`;\n } else {\n // contentDiv 用 absolute 撑满 td:不参与撑高(height 在 td)、不撑破列宽(absolute 脱离流)\n contentDiv.style.cssText = `overflow:hidden;position:absolute;inset:0;display:flex;align-items:${alignItems};justify-content:${justifyContent};`;\n }\n let text = '';\n let isHtmlContent = false; // 标记是否已通过 innerHTML 设置内容(图片/条码等),避免后续被 innerText 覆盖\n let htmlContent = '';\n switch (cell.type) {\n case CellType.ICON:\n htmlContent = `<i class=\"iconfont ${cell.data}\"></i>`;\n isHtmlContent = true;\n break;\n case CellType.IMAGE: {\n const imgStyle = renderImageStyle(cell.imageOptions);\n // 限制在单元格内,避免撑破布局;用户通过 imageOptions 调试合适尺寸\n const constraint = 'max-width:100%;max-height:100%;object-fit:contain';\n htmlContent = `<img src=\"${cell.rawData ?? cell.data}\" alt=\"\" style=\"${constraint}${imgStyle ? ';' + imgStyle : ''}\">`;\n isHtmlContent = true;\n break;\n }\n case CellType.RICH: {\n // 富文本:cell.text 存 HTML 字符串,直接 innerHTML 渲染(普通报表 + 打印共用此分支)\n // 注意:cell.text 已由运行态插值替换过 ${KEY},此处直接渲染\n const richHtml = ![undefined, null, ''].includes(cell.text) ? String(cell.text) : (cell.formatType?.defaultCellContent || '');\n if (richHtml) {\n htmlContent = richHtml;\n isHtmlContent = true;\n }\n break;\n }\n default:\n text = ![undefined,null,\"\"].includes(cell.text) ? cell.text : cell.formatType?.defaultCellContent || \"\";\n break;\n }\n // 附加渲染:条形码/二维码(基于已计算出的 cell.text 生成图片)\n if (!isHtmlContent && cell.format === FormatType.BARCODE) {\n try {\n // 优先使用预生成的 Data URL,避免渲染时同步生成阻塞;barcode 同步生成可兜底\n const barcodeUrl = cell.barcodeUrl || canvasPool.generateBarcode(text, cell.barcodeOptions);\n if (barcodeUrl) {\n htmlContent = `<img src=\"${barcodeUrl}\" alt=\"barcode\" style=\"max-width:100%;max-height:100%;object-fit:contain\">`;\n isHtmlContent = true;\n }\n } catch (error) {\n console.error(`条形码生成失败 [${cell.row}:${cell.col}]:`, error);\n }\n } else if (!isHtmlContent && cell.format === FormatType.QRCODE) {\n // 二维码:依赖预生成的 cell.qrcodeData(renderCell 同步执行,无法 await 异步生成;由 preGenerateBarcodes 预先生成)\n const qrcodeData = cell.qrcodeData;\n if (qrcodeData) {\n htmlContent = `<img src=\"${qrcodeData}\" alt=\"qrcode\" style=\"max-width:100%;max-height:100%;object-fit:contain\">`;\n isHtmlContent = true;\n }\n }\n if (isHtmlContent) {\n contentDiv.innerHTML = htmlContent;\n } else {\n // flex 容器内裸文本节点不换行,包一层 span 并允许断词\n const span = document.createElement('span');\n span.style.cssText = 'word-break:break-word;overflow-wrap:anywhere;';\n span.innerText = text;\n contentDiv.appendChild(span);\n }\n const s = cell.style || {};\n const pt = s.paddingTop ?? TD_DEFAULT_PADDING_VERTICAL;\n const pr = s.paddingRight ?? TD_DEFAULT_PADDING_HORIZONTAL;\n const pb = s.paddingBottom ?? TD_DEFAULT_PADDING_VERTICAL;\n const pl = s.paddingLeft ?? TD_DEFAULT_PADDING_HORIZONTAL;\n contentDiv.style.paddingTop = `${pt}px`;\n contentDiv.style.paddingRight = `${pr}px`;\n contentDiv.style.paddingBottom = `${pb}px`;\n contentDiv.style.paddingLeft = `${pl}px`;\n td.appendChild(contentDiv);\n if (cell.style) {\n td.setAttribute('style', renderCellStyle(cell.style));\n if (cell.style.border) {\n const border = normalizeBorder(cell.style.border);\n if (border) {\n td.style.borderTop = getBorderCss(border.top, themeColor);\n td.style.borderRight = getBorderCss(border.right, themeColor);\n td.style.borderBottom = getBorderCss(border.bottom, themeColor);\n td.style.borderLeft = getBorderCss(border.left, themeColor);\n }\n }\n }\n td.style.position = 'relative';\n return td;\n}\nfunction renderCellPrintStyle(styleObj: CellStyle, themeColor?: string) {\n let styleAttr = '';\n Object.keys(styleObj).forEach((key) => {\n let value = styleObj[key];\n if (value) {\n switch (key) {\n case 'color':\n styleAttr += `color:${styleObj[key]};`;\n break;\n case 'backgroundColor':\n styleAttr += `background-color:${styleObj[key]};`;\n break;\n case 'fontWeight':\n styleAttr += `font-weight:${styleObj[key]};`;\n break;\n case 'fontSize':\n styleAttr += `font-size:${styleObj[key]}px;`;\n break;\n case 'textAlign':\n styleAttr += `text-align:${styleObj[key]};`;\n break;\n case 'verticalAlign':\n styleAttr += `vertical-align:${styleObj[key]};`;\n break;\n case 'fontFamily':\n styleAttr += `font-family:${styleObj[key]};`;\n break;\n case 'border':\n // 边框配置(BorderConfig | boolean),四边均输出以覆盖打印默认边框\n const borderCfg = normalizeBorder(styleObj.border);\n if (borderCfg) {\n styleAttr += `border-top:${getBorderCss(borderCfg.top, themeColor)};`;\n styleAttr += `border-right:${getBorderCss(borderCfg.right, themeColor)};`;\n styleAttr += `border-bottom:${getBorderCss(borderCfg.bottom, themeColor)};`;\n styleAttr += `border-left:${getBorderCss(borderCfg.left, themeColor)};`;\n }\n break;\n case 'paddingTop':\n styleAttr += `padding-top:${styleObj[key]}px;`;\n break;\n case 'paddingRight':\n styleAttr += `padding-right:${styleObj[key]}px;`;\n break;\n case 'paddingBottom':\n styleAttr += `padding-bottom:${styleObj[key]}px;`;\n break;\n case 'paddingLeft':\n styleAttr += `padding-left:${styleObj[key]}px;`;\n break;\n }\n }\n });\n return styleAttr;\n}\n\nexport function renderReportByDomForPrint(rowConfig, colConfig, config, themeColor?: string) {\n const tableContainer = document.createElement('div');\n const tableBody = document.createElement('table');\n tableContainer.className = 'yh-report-table-context print-render';\n\n tableContainer.appendChild(tableBody);\n const colgroup = renderColgroup(colConfig, tableBody);\n tableBody.appendChild(colgroup);\n\n let fixedHeight = 0;\n let fixedWidth = 0;\n const fragment = document.createDocumentFragment();\n for (let rowIndex = 0; rowIndex < rowConfig.length; rowIndex++) {\n const rowItem = rowConfig[rowIndex];\n if (rowItem.isHidden) continue;\n const tr = document.createElement('tr');\n if (rowItem.isFixed) {\n tr.style.top = `${fixedHeight - 1}px`;\n tr.classList.add('fixed-row');\n }\n fixedHeight += (rowItem.size ?? 25) - 1;\n tr.style.height = `${rowItem.size ?? 25}px`;\n fixedWidth = 0;\n for (let colIndex = 0; colIndex < colConfig.length; colIndex++) {\n const colItem = colConfig[colIndex];\n if (colItem.isHidden) continue;\n const cell = config[rowIndex][colIndex];\n if (rowItem && cell && (rowItem.size ?? 25) > 0) {\n const td = renderCell(rowItem, cell, themeColor);\n if (colItem.isFixed === true) {\n td.classList.add('fixed-td');\n td.style.left = `${fixedWidth - 1}px`;\n }\n fixedWidth += (colItem.size ?? 80) - 1;\n td.setAttribute('data-cell-data', `${rowIndex}-${colIndex}`);\n if (cell.rowSpan !== 0 && cell.colSpan !== 0) {\n if ([CellType.TEXT, CellType.FIELD, CellType.ICON, CellType.FUN, CellType.IMAGE, CellType.RICH].includes(cell.type)) {\n if (cell.style) {\n td.setAttribute('style', renderCellPrintStyle(cell.style, themeColor));\n }\n if (cell.style && cell.style.border === false) {\n td.classList.add('no-border');\n }\n // setAttribute 覆盖后补回 padding/position,与设计器口径一致。\n // setAttribute 覆盖后补回 padding/box-sizing/position/height。\n // td 用 border-box + height=size,行高精确等于 size,与设计态一致。\n // allowContentOverflow:允许内容撑高时,td 使用 min-height\n const allowOverflow = cell.style?.allowContentOverflow === true;\n const ps = cell.style || {};\n const ppt = ps.paddingTop ?? TD_DEFAULT_PADDING_VERTICAL;\n const ppr = ps.paddingRight ?? TD_DEFAULT_PADDING_HORIZONTAL;\n const ppb = ps.paddingBottom ?? TD_DEFAULT_PADDING_VERTICAL;\n const ppl = ps.paddingLeft ?? TD_DEFAULT_PADDING_HORIZONTAL;\n td.style.paddingTop = `${ppt}px`;\n td.style.paddingRight = `${ppr}px`;\n td.style.paddingBottom = `${ppb}px`;\n td.style.paddingLeft = `${ppl}px`;\n td.style.boxSizing = 'border-box';\n td.style.position = 'relative';\n // 补回行高(非合并单元格),被 setAttribute 覆盖\n if (cell.rowSpan <= 1) {\n if (allowOverflow) {\n td.style.minHeight = `${rowItem.size ?? 25}px`;\n } else {\n td.style.height = `${rowItem.size ?? 25}px`;\n }\n }\n }\n tr.appendChild(td);\n }\n }\n }\n fragment.appendChild(tr);\n }\n tableBody.appendChild(fragment);\n return tableContainer;\n}\n\nexport function renderReportByDom(rowConfig, colConfig, config, statementTableRef, hasLoop, themeColor?: string) {\n const tableContainer = document.createElement('div');\n const tableBody = document.createElement('table');\n tableContainer.className = 'yh-report-table-context';\n\n tableContainer.appendChild(tableBody);\n statementTableRef.value.appendChild(tableContainer);\n tableBody.innerHTML = '';\n const colgroup = renderColgroup(colConfig, tableBody);\n tableBody.appendChild(colgroup);\n let fixedHeight = 0;\n let fixedWidth = 0;\n\n const fragment = document.createDocumentFragment();\n // 合并单元格联动 hover 数据收集\n const mergeTds: HTMLTableCellElement[] = [];\n const mergeStarts: number[] = [];\n const mergeSpans: number[] = [];\n const trRefMap = new Map<number, number[]>();\n let domRowIndex = 0;\n\n for (let rowIndex = 0; rowIndex < rowConfig.length; rowIndex++) {\n const rowItem = rowConfig[rowIndex];\n if (rowItem.isHidden) {\n continue;\n }\n const tr = document.createElement('tr');\n tr.dataset.ri = String(domRowIndex);\n if (rowItem.isFixed) {\n tr.style.top = `${fixedHeight - 1}px`;\n tr.classList.add('fixed-row');\n }\n fixedHeight += (rowItem.size ?? 25) - 1;\n tr.style.height = `${rowItem.size ?? 25}px`;\n fixedWidth = 0;\n for (let colIndex = 0; colIndex < colConfig.length; colIndex++) {\n const colItem = colConfig[colIndex];\n\n if (colItem.isHidden) {\n continue;\n }\n const cell = config[rowIndex][colIndex];\n if (rowItem && cell && (rowItem.size ?? 25) > 0) {\n const td = renderCell(rowItem, cell, themeColor);\n // 点击排序入口单元格:标记属性供运行态事件委托定位,箭头方向由运行态 data-sort-dir 控制。\n // 只在查看态渲染函数处理,renderReportByDomForPrint 走独立循环,打印输出不受影响\n if (cell.clickSortField) {\n td.classList.add('click-sort-cell');\n td.setAttribute('data-click-sort-field', cell.clickSortField);\n td.setAttribute('data-click-sort-numeric', cell.clickSortNumeric ? '1' : '0');\n const arrow = document.createElement('span');\n arrow.className = 'click-sort-arrow';\n td.querySelector(':scope > div')?.appendChild(arrow);\n }\n if (colItem.isFixed === true) {\n td.classList.add('fixed-td');\n // renderCell 已设 inline position:relative,优先级高于 CSS 的 sticky,\n // 此处需用 sticky 覆盖,否则 left 变成相对偏移而非悬浮吸附\n td.style.position = 'sticky';\n td.style.left = `${fixedWidth - 1}px`;\n }\n fixedWidth += (colItem.size ?? 80) - 1;\n td.setAttribute('data-cell-data', `${rowIndex}-${colIndex}`);\n if (cell.rowSpan === 0 || cell.colSpan === 0) {\n } else {\n // border === false 时添加 no-border 类,覆盖 CSS 默认边框(与打印态逻辑一致)\n if (cell.style && cell.style.border === false) {\n td.classList.add('no-border');\n }\n tr.appendChild(td);\n if (cell.rowSpan > 1) {\n const mi = mergeTds.length;\n mergeTds.push(td);\n mergeStarts.push(domRowIndex);\n mergeSpans.push(cell.rowSpan);\n for (let i = 1; i < cell.rowSpan; i++) {\n const ri = domRowIndex + i;\n if (!trRefMap.has(ri)) trRefMap.set(ri, []);\n trRefMap.get(ri)!.push(mi);\n }\n }\n }\n }\n }\n fragment.appendChild(tr);\n domRowIndex++;\n }\n\n // 合并单元格联动 hover 事件委托\n if (mergeTds.length > 0) {\n let lastHoverIdx = -1;\n const clearHover = () => {\n if (lastHoverIdx >= 0) {\n trRefMap.get(lastHoverIdx)?.forEach(mi => mergeTds[mi].classList.remove('merge-hover'));\n }\n lastHoverIdx = -1;\n };\n tableBody.addEventListener('mouseover', (e) => {\n const tr = (e.target as HTMLElement).closest('tr');\n if (!tr) return;\n const idx = Number((tr as HTMLElement).dataset.ri);\n if (idx === lastHoverIdx) return;\n clearHover();\n lastHoverIdx = idx;\n trRefMap.get(idx)?.forEach(mi => mergeTds[mi].classList.add('merge-hover'));\n });\n tableBody.addEventListener('mouseleave', clearHover);\n }\n\n tableBody.appendChild(fragment);\n}\n\nexport function clearReportByDom(tableBodyRef) {\n tableBodyRef.innerHTML = '';\n}\n","/**\n * 触发一个事件\n * @param eventName 事件名称\n * @param data 触发事件时所带的数据\n */\nexport function trigger(eventName, data = {}) {\n let event = new CustomEvent(eventName, {\n detail: {\n ...data,\n },\n });\n window.document.body.dispatchEvent(event);\n}\n\n/**\n * 监听一个自定的DOM事件\n * @param eventName 事件名称\n * @param callback 回调函数\n */\nexport function on(eventName, callback = (data: any) => {}) {\n window.document.body.addEventListener(eventName, (e) => {\n callback(e.detail);\n });\n}\n","import jsep from 'jsep';\r\nimport Decimal from 'decimal.js';\r\nimport {Cell, CellType, ComputedType, FormatType} from 'yh-report/types';\r\nimport {formatCellValue} from 'yh-report/libs/renderByDom/index';\r\nimport {cloneDeep, get} from 'lodash-es';\r\nimport {trigger} from 'yh-report/libs/customEvent';\r\nimport {canvasPool} from 'yh-report/libs/canvasPool';\r\nimport dayjs from 'dayjs';\r\nimport 'dayjs/locale/zh-cn';\r\ndayjs.locale('zh-cn');\r\n\r\n// @ts-ignore\r\njsep.addBinaryOp('=', 10, (left, right) => {\r\n return left === right;\r\n});\r\n// @ts-ignore\r\njsep.addBinaryOp('<>', 10, (left, right) => {\r\n return left !== right;\r\n});\r\n// @ts-ignore\r\njsep.addBinaryOp('>', 10, (left, right) => {\r\n return left > right;\r\n});\r\n// @ts-ignore\r\njsep.addBinaryOp('<', 10, (left, right) => {\r\n return left < right;\r\n});\r\n// @ts-ignore\r\njsep.addBinaryOp('>=', 10, (left, right) => {\r\n return left >= right;\r\n});\r\n// @ts-ignore\r\njsep.addBinaryOp('<=', 10, (left, right) => {\r\n return left <= right;\r\n});\r\n\r\nlet innerConfig: Record<string, Cell[]> = {};\r\nlet needComputedCell = new Map<string, Cell>();\r\n\r\nconst StringFunRex = /\\$\\{([^\\}]+)\\}/g;\r\n\r\n/**\r\n * 公式插值正则:匹配 ${=FORMULA} 模式\r\n */\r\nconst FormulaRex = /\\$\\{=(.+?)\\}/g;\r\n\r\n/**\r\n * 计算 TEXT 模板中的公式表达式\r\n * 在第二阶段调用(innerConfig 已构建完成)\r\n * @param text - 包含 ${=FORMULA} 占位符的文本\r\n * @param dataIndex - 数据索引\r\n * @returns 公式计算后的文本\r\n */\r\nfunction evaluateTextFormulas(text: string, dataIndex?): string {\r\n return text.replace(FormulaRex, (match, formula) => {\r\n try {\r\n const {isError, result} = parseExpression(formula.trim(), true, dataIndex);\r\n return !isError && result !== undefined && result !== null ? String(result) : '';\r\n } catch {\r\n return match; // 解析失败保留原始字符串\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * 循环单元格,并处理其中的字符串插值,提取函数计算\r\n * @param config - 二维单元格数组,表示报表配置\r\n * @param objData - 对象数据,用于替换插值和计算\r\n */\r\nfunction changeConfig(config: Cell[][], objData) {\r\n // 遍历所有行\r\n for (let rowIndex = 0; rowIndex < config.length; rowIndex++) {\r\n const rowCells = config[rowIndex];\r\n // 遍历当前行的所有列\r\n for (let colIndex = 0; colIndex < rowCells.length; colIndex++) {\r\n const oldCell = rowCells[colIndex];\r\n let cell = cloneDeep(oldCell);\r\n if (cell) {\r\n let key = `${cell.row}:${cell.col}`;\r\n // 处理有效的单元格(colSpan和rowSpan都不为0,即未合并单元格)\r\n if (cell.colSpan !== 0 && cell.rowSpan !== 0) {\r\n let data = {\r\n ...objData,\r\n ...cell.colData,\r\n ...cell.rowData,\r\n INDEX: cell.index !== undefined ? cell.index + 1 : 0,\r\n };\r\n // 处理字段类型单元格的数据替换\r\n if (cell.type === CellType.FIELD && (cell.colData || cell.rowData || objData)) {\r\n if (cell.format === FormatType.STRING && cell.fun) {\r\n // 替换字符串中的插值变量\r\n cell.rawData = cell.fun.replace(StringFunRex, (match, key) => {\r\n key = key.toUpperCase();\r\n const val = get(data, key, match);\r\n return val === match ? '' : val;\r\n });\r\n } else if (cell.data && cell.data.startsWith('row:') && cell.rowData) {\r\n // 处理静态数据,从row数据中获取值\r\n let datakey = cell.data.replace('row:', '').toUpperCase();\r\n cell.rawData = get(cell.rowData, datakey);\r\n }\r\n }\r\n // 处理图片数据绑定(仅固定 URL/base64,不再支持数据字段绑定)\r\n if (cell.type === CellType.IMAGE && cell.data) {\r\n cell.rawData = cell.data;\r\n }\r\n // 处理函数类型单元格\r\n if (cell.type === CellType.FUN && cell.fun) {\r\n // 替换函数中的插值变量;缺失字段参照 Excel 当 0,使公式可正常求值\r\n cell.fun = cell.fun.replace(StringFunRex, (_match, key) => {\r\n const val = get(data, key.toUpperCase());\r\n // 空串、空数组([]/[null])等\"字符串化为空\"的值当 0,避免产生裸运算符(如 \"-\")导致解析失败\r\n return String(val ?? '').trim() === '' ? 0 : val;\r\n });\r\n if (cell.computedType === ComputedType.loopRow) {\r\n needComputedCell.set(`${key}:${cell.index}`, cell);\r\n } else if (cell.computedType === ComputedType.loopGroup && Array.isArray(cell.groupIndices) && cell.groupLevel !== undefined) {\r\n needComputedCell.set(`${key}:${cell.groupIndices[cell.groupLevel]}:${cell.groupLevel}`, cell);\r\n } else if (cell.colGroupIndex !== undefined && cell.colGroupIndex !== null) {\r\n // 交叉表列小计格:同一坐标下有多个裂变列实例,key 追加列组索引避免 Map 覆盖\r\n needComputedCell.set(`${key}:c${cell.colGroupIndex}`, cell);\r\n } else {\r\n needComputedCell.set(key, cell);\r\n }\r\n } else {\r\n // TEXT 模板处理:支持 ${KEY} 数据插值和 ${=FORMULA} 公式计算\r\n let skipFormat = false;\r\n if (cell.type === CellType.TEXT && cell.text && /\\$\\{/.test(cell.text)) {\r\n // 第一阶段:数据字段插值(${KEY})\r\n let processed = cell.text.replace(StringFunRex, (_match, key) => {\r\n key = key.toUpperCase();\r\n const val = get(data, key);\r\n return val !== undefined ? val : '';\r\n });\r\n cell.rawData = processed;\r\n // 检测是否有公式表达式(${=FORMULA}),有则延迟到第二阶段\r\n if (/\\$\\{=/.test(processed)) {\r\n needComputedCell.set(key, cell);\r\n skipFormat = true;\r\n }\r\n } else if (cell.type === CellType.RICH && cell.text && /\\$\\{/.test(cell.text)) {\r\n // 富文本:仅做 ${KEY} 数据字段插值(HTML 字符串内替换),不做公式计算和格式化\r\n cell.rawData = cell.text.replace(StringFunRex, (_match, key) => {\r\n key = key.toUpperCase();\r\n const val = get(data, key);\r\n return val !== undefined ? String(val) : '';\r\n });\r\n // 富文本不做 formatCellValue,直接用插值后的 HTML\r\n skipFormat = true;\r\n cell.text = cell.rawData;\r\n }\r\n if (cell.rawData === undefined) {\r\n cell.rawData = cell.text;\r\n }\r\n if (!skipFormat) {\r\n if (cell.format) {\r\n cell.text = formatCellValue(cell.rawData ?? cell.text ?? '', cell.format, cell.formatType);\r\n } else {\r\n cell.text = cell.rawData ?? cell.text ?? '';\r\n }\r\n }\r\n }\r\n if (cell.customRender) {\r\n try {\r\n const fun = new Function(\r\n 'cell',\r\n 'data',\r\n `let style = { ...cell.style };\r\n ${cell.customRender}\r\n cell.style = style;\r\n return cell;\r\n `\r\n );\r\n cell = fun.call(this, cell, data);\r\n } catch (error) {\r\n console.error('Custom render error:', error);\r\n }\r\n }\r\n }\r\n config[rowIndex][colIndex] = cell;\r\n if (!innerConfig[key]) {\r\n innerConfig[key] = [cell];\r\n } else {\r\n innerConfig[key].push(cell);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n// 公式中的单元格引用:范围(A1:A10)与单个单元格(Y8),列字母限 1~3 位\r\nconst RANGE_REF_RE = /([A-Za-z]{1,3}\\d+)\\s*:\\s*([A-Za-z]{1,3}\\d+)/g;\r\nconst SINGLE_REF_RE = /[A-Za-z]{1,3}\\d+/g;\r\nconst TEXT_FORMULA_RE = /\\$\\{=(.+?)\\}/g;\r\n\r\n/** 将范围引用(如 A1:B10)展开为逐个 \"row:col\" 坐标(0-based,行在前) */\r\nfunction expandRangeToRefs(startCell: string, endCell: string): string[] {\r\n const sc = startCell.match(/[A-Za-z]+/);\r\n const sr = startCell.match(/\\d+/);\r\n const ec = endCell.match(/[A-Za-z]+/);\r\n const er = endCell.match(/\\d+/);\r\n if (!sc || !sr || !ec || !er) return [];\r\n const startCol = columnToNumber(sc[0].toUpperCase());\r\n const endCol = columnToNumber(ec[0].toUpperCase());\r\n const startRow = parseInt(sr[0]) - 1;\r\n const endRow = parseInt(er[0]) - 1;\r\n const refs: string[] = [];\r\n for (let r = Math.min(startRow, endRow); r <= Math.max(startRow, endRow); r++) {\r\n for (let c = Math.min(startCol, endCol); c <= Math.max(startCol, endCol); c++) {\r\n refs.push(`${r}:${c}`);\r\n }\r\n }\r\n return refs;\r\n}\r\n\r\n/** 提取公式中所有单元格坐标引用,返回 \"row:col\"(0-based)列表,范围引用已展开 */\r\nfunction extractCellRefs(fun: string): string[] {\r\n if (!fun || typeof fun !== 'string') return [];\r\n const refs = new Set<string>();\r\n const consumed: Array<[number, number]> = [];\r\n let m: RegExpExecArray | null;\r\n RANGE_REF_RE.lastIndex = 0;\r\n while ((m = RANGE_REF_RE.exec(fun)) !== null) {\r\n consumed.push([m.index, m.index + m[0].length]);\r\n expandRangeToRefs(m[1], m[2]).forEach((r) => refs.add(r));\r\n }\r\n SINGLE_REF_RE.lastIndex = 0;\r\n while ((m = SINGLE_REF_RE.exec(fun)) !== null) {\r\n // 跳过已被范围引用消费过的区间\r\n if (consumed.some(([s, e]) => m!.index >= s && m!.index < e)) continue;\r\n const col = columnToNumber(m[0].match(/[A-Za-z]+/)![0].toUpperCase());\r\n const row = parseInt(m[0].match(/\\d+/)![0]) - 1;\r\n refs.add(`${row}:${col}`);\r\n }\r\n return Array.from(refs);\r\n}\r\n\r\n/**\r\n * 提取单元格依赖的所有单元格坐标:\r\n * - FUN 单元格:从 fun 公式提取\r\n * - TEXT 模板公式(${=...}):从 rawData 中的内联公式提取\r\n */\r\nfunction extractRefsForCell(cell: Cell): string[] {\r\n if (cell.type === CellType.TEXT) {\r\n const refs = new Set<string>();\r\n const text = String(cell.rawData ?? '');\r\n TEXT_FORMULA_RE.lastIndex = 0;\r\n let m: RegExpExecArray | null;\r\n while ((m = TEXT_FORMULA_RE.exec(text)) !== null) {\r\n extractCellRefs(m[1]).forEach((r) => refs.add(r));\r\n }\r\n return Array.from(refs);\r\n }\r\n return extractCellRefs(cell.fun);\r\n}\r\n\r\n/**\r\n * 对待计算单元格做拓扑排序,保证被引用的单元格先计算。\r\n * 仅在被引用单元格也属于待计算集合时建立依赖边;存在循环引用时按原顺序兜底追加,避免死锁。\r\n */\r\nfunction computeTopoOrder(\r\n needComputedCell: Map<string, Cell>,\r\n innerConfigMap: Record<string, Cell[]>\r\n): string[] {\r\n const keys = Array.from(needComputedCell.keys());\r\n if (keys.length <= 1) return keys;\r\n // \"row:col\" → 该坐标下所有待计算实例的 key(loop 行/列会产生多个实例)\r\n const posKeyToKeys = new Map<string, string[]>();\r\n for (const [k, cell] of needComputedCell) {\r\n const posKey = `${cell.row}:${cell.col}`;\r\n if (!posKeyToKeys.has(posKey)) posKeyToKeys.set(posKey, []);\r\n posKeyToKeys.get(posKey)!.push(k);\r\n }\r\n // 邻接表:adj[srcKey] = srcKey 依赖的 targetKey 集合(target 必须先算)\r\n const adj = new Map<string, Set<string>>();\r\n keys.forEach((k) => adj.set(k, new Set()));\r\n for (const [srcKey, cell] of needComputedCell) {\r\n const refs = extractRefsForCell(cell);\r\n for (const ref of refs) {\r\n if (!innerConfigMap[ref]) continue; // 引用的单元格不在本表\r\n const targetKeys = posKeyToKeys.get(ref);\r\n if (!targetKeys) continue; // 被引用单元格不在待计算集(数据已就绪),无需等待\r\n targetKeys.forEach((tk) => {\r\n if (tk !== srcKey) adj.get(srcKey)!.add(tk);\r\n });\r\n }\r\n }\r\n // Kahn 算法:入度 = 该 cell 依赖的待计算单元格数;入度 0 者按原 Map 顺序入队\r\n const inDegree = new Map<string, number>();\r\n keys.forEach((k) => inDegree.set(k, adj.get(k)!.size));\r\n const queue: string[] = [];\r\n keys.forEach((k) => {\r\n if (inDegree.get(k) === 0) queue.push(k);\r\n });\r\n const sorted: string[] = [];\r\n while (queue.length) {\r\n const cur = queue.shift()!;\r\n sorted.push(cur);\r\n adj.forEach((targets, src) => {\r\n if (targets.has(cur)) {\r\n const d = (inDegree.get(src) ?? 0) - 1;\r\n inDegree.set(src, d);\r\n if (d === 0) queue.push(src);\r\n }\r\n });\r\n }\r\n // 循环引用兜底:未入序节点按原顺序追加\r\n if (sorted.length < keys.length) {\r\n const sortedSet = new Set(sorted);\r\n const cyclic = keys.filter((k) => !sortedSet.has(k));\r\n console.warn('[jsep] 检测到可能的循环引用单元格,按原顺序计算:', cyclic);\r\n cyclic.forEach((k) => sorted.push(k));\r\n }\r\n return sorted;\r\n}\r\n\r\nexport function computeCell(config: Cell[][], objData, paramTableCells?: string[], tableIndex?: number) {\r\n changeConfig(config, objData);\r\n // 按依赖关系拓扑排序后再计算,避免引用尚未计算的单元格得到 0\r\n const sortedKeys = computeTopoOrder(needComputedCell, innerConfig);\r\n sortedKeys.forEach((key) => {\r\n const cell = needComputedCell.get(key);\r\n if (!cell) return;\r\n if (cell.type === CellType.FUN && cell.fun) {\r\n let dataIndex;\r\n if (cell.computedType === ComputedType.loopRow) {\r\n if (cell.isCrossAggregate && Array.isArray(cell.groupIndices) && cell.groupIndices.length > 0) {\r\n // 交叉行:按当前行组(末级)过滤裂变列实例聚合,而非按行优先序号取单个实例\r\n const groupLevel = cell.groupIndices.length - 1;\r\n dataIndex = `g-${cell.groupIndices[groupLevel]}-${groupLevel}`;\r\n } else {\r\n dataIndex = cell.index;\r\n }\r\n } else if (cell.computedType === ComputedType.loopGroup && Array.isArray(cell.groupIndices) && cell.groupLevel !== undefined) {\r\n dataIndex = `g-${cell.groupIndices[cell.groupLevel]}-${cell.groupLevel}`;\r\n } else if (cell.colGroupIndex !== undefined && cell.colGroupIndex !== null) {\r\n // 列小计格:按列组索引过滤实例聚合\r\n dataIndex = `c-${cell.colGroupIndex}`;\r\n }\r\n const {isError, result} = parseExpression(cell.fun, true, dataIndex);\r\n if (!isError) {\r\n cell.rawData = result;\r\n } else {\r\n console.warn(`[jsep] 公式计算失败 [${key}]:`, cell.fun);\r\n cell.rawData = cell.fun;\r\n }\r\n }\r\n // TEXT 模板公式计算(${=FORMULA})\r\n if (cell.type === CellType.TEXT && cell.rawData && /\\$\\{=/.test(String(cell.rawData))) {\r\n cell.rawData = evaluateTextFormulas(String(cell.rawData));\r\n }\r\n if (cell.format) {\r\n cell.text = formatCellValue(cell.rawData ?? '', cell.format, cell.formatType);\r\n } else {\r\n cell.text = cell.rawData ?? '';\r\n }\r\n });\r\n if (paramTableCells && paramTableCells.length > 0 && Object.keys(innerConfig).length > 0) {\r\n Object.entries(innerConfig).forEach(([key, cells]) => {\r\n let lookupKey = tableIndex !== undefined ? `${tableIndex}:${key}` : key;\r\n if (paramTableCells.includes(lookupKey)) {\r\n let [row, col] = key.split(':');\r\n let colStr = numberToColumn(parseInt(col) + 1);\r\n let vals = new Set();\r\n cells.forEach((cell) => {\r\n if (cell.text && cell.type === CellType.FIELD) {\r\n vals.add(cell.text);\r\n }\r\n });\r\n\r\n let options = Array.from(vals)\r\n .sort()\r\n .map((val) => {\r\n return {\r\n label: val,\r\n value: val,\r\n };\r\n });\r\n let cellCode = `${colStr}${parseInt(row) + 1}`;\r\n let eventName = tableIndex !== undefined ? `cell-change:${tableIndex}!${cellCode}` : `cell-change:${cellCode}`;\r\n trigger(eventName, options);\r\n }\r\n });\r\n }\r\n innerConfig = {};\r\n needComputedCell = new Map();\r\n}\r\n\r\n/**\r\n * 解析并执行表达式\r\n * @param expressionInput - 包含表达式的输入对象\r\n * @param outputDiv - 输出结果的DOM元素\r\n * @param parsedTreeOutput - 解析树输出的DOM元素\r\n */\r\nexport function parseExpression(\r\n expressionInput: string,\r\n needResult: boolean = false,\r\n dataIndex?: number\r\n): {\r\n isError: boolean;\r\n result: any;\r\n} {\r\n try {\r\n const expression = expressionInput.trim();\r\n\r\n if (!expression) {\r\n throw new Error('请输入一个表达式');\r\n }\r\n\r\n // 如果以等号开头,则去掉等号\r\n const cleanExpression = expression.startsWith('=') ? expression.slice(1) : expression;\r\n\r\n // 解析表达式(先把裸露单元格区域如 A1:A11 预处理为字符串字面量,使 jsep 能整体识别)\r\n try {\r\n const parsed = jsep(wrapBareRanges(cleanExpression));\r\n let result: any = null;\r\n if (needResult) result = evaluateExpression(parsed, dataIndex);\r\n return {\r\n isError: false,\r\n result,\r\n };\r\n } catch (error) {\r\n console.error(\"公式错误:\",cleanExpression)\r\n throw error\r\n }\r\n\r\n } catch (err) {\r\n console.error(err);\r\n return {\r\n isError: true,\r\n result: err.message,\r\n };\r\n }\r\n}\r\n\r\nfunction parseRange(value) {\r\n if (value === undefined || value === null) {\r\n return null;\r\n }\r\n const match = value.match(/^(['\"]?)([A-Z]+\\d+)(?::([A-Z]+\\d+))?\\1$/i);\r\n\r\n if (match) {\r\n const start = match[2].toUpperCase(); // 确保转为大写\r\n const end = match[3] ? match[3].toUpperCase() : start; // 没有第二个地址时使用第一个\r\n const isSingle = !match[3];\r\n if (isSingle) {\r\n return [start, start];\r\n } else {\r\n return [start, end];\r\n }\r\n }\r\n return null; // 格式不匹配\r\n}\r\n\r\n/**\r\n * 把裸露的单元格区域(如 A1:A11)预处理为带引号的字符串字面量,\r\n * 使 jsep 将其整体识别为字符串后交由 parseRange 解析。\r\n * - 已带引号的字符串字面量内部内容保持不变\r\n * - 单个单元格(无冒号)不受影响,仍走 Identifier 分支\r\n * - 列字母限 1~3 位(覆盖到 Excel 最大列 XFD),顺带排除标识符粘连\r\n */\r\nfunction wrapBareRanges(expr: string): string {\r\n return expr.replace(\r\n /(['\"])(?:\\\\.|(?!\\1).)*\\1|(^|[^A-Za-z0-9_'\"])([A-Za-z]{1,3}\\d+:[A-Za-z]{1,3}\\d+)(?![A-Za-z0-9_])/g,\r\n (m, quote, lead, range) => (quote ? m : `${lead}'${range}'`)\r\n );\r\n}\r\n\r\n/**\r\n * 提取调用表达式的完整函数名,支持命名空间形式(如 RANK.EQ)\r\n */\r\nfunction getCalleeName(callee: any): string {\r\n if (!callee) return '';\r\n if (callee.type === 'Identifier') return callee.name;\r\n if (callee.type === 'MemberExpression' && !callee.computed) {\r\n const objName = getCalleeName(callee.object);\r\n return objName ? `${objName}.${callee.property.name}` : '';\r\n }\r\n return '';\r\n}\r\n\r\n/**\r\n * 评估表达式节点\r\n * @param node - 待评估的AST节点\r\n * @returns 计算结果\r\n */\r\nfunction evaluateExpression(node: any, dataIndex?): any {\r\n if (!node) {\r\n throw new Error('空节点');\r\n }\r\n\r\n switch (node.type) {\r\n case 'Literal':\r\n if (typeof node.value === 'string') {\r\n const rangeMatch = parseRange(node.value);\r\n if (rangeMatch) {\r\n let [start, end] = rangeMatch;\r\n return getRangeValues(start, end, dataIndex); // 返回范围数组\r\n }\r\n }\r\n return node.value;\r\n\r\n case 'Identifier':\r\n // 检查是否是单元格引用\r\n let value = node.value;\r\n if (!value) {\r\n if (/[a-zA-Z]+\\d+/.test(node.name)) {\r\n value = node.name;\r\n }\r\n }\r\n if (!value) {\r\n return node.name;\r\n }\r\n const rangeMatch = parseRange(value);\r\n if (rangeMatch) {\r\n let [start, end] = rangeMatch;\r\n return getRangeValues(start, end, dataIndex);\r\n } else {\r\n return node.name;\r\n }\r\n\r\n case 'BinaryExpression':\r\n let left = evaluateExpression(node.left, dataIndex || 0);\r\n let right = evaluateExpression(node.right, dataIndex || 0);\r\n\r\n // 将 left 和 right 转换为数字,如果转换失败则默认为 0\r\n let leftNum = Number(left);\r\n let rightNum = Number(right);\r\n\r\n // 处理 NaN 情况,如果转换后为 NaN,则设为 0\r\n if (isNaN(leftNum)) leftNum = 0;\r\n if (isNaN(rightNum)) rightNum = 0;\r\n\r\n switch (node.operator) {\r\n case '+':\r\n // 算术运算用 Decimal 精确计算后转回 Number,消除浮点累积误差(如 292.6*3 = 877.8000000000001)\r\n return new Decimal(leftNum).plus(rightNum).toNumber();\r\n case '-':\r\n // 减法运算需要数字类型\r\n return new Decimal(leftNum).minus(rightNum).toNumber();\r\n case '*':\r\n // 乘法运算需要数字类型\r\n return new Decimal(leftNum).times(rightNum).toNumber();\r\n case '/':\r\n // 除法运算需要数字类型\r\n // 需要特别处理除零情况\r\n if (rightNum === 0) {\r\n return 0;\r\n }\r\n return new Decimal(leftNum).div(rightNum).toNumber();\r\n case '^':\r\n // 幂运算需要数字类型\r\n return Math.pow(leftNum, rightNum);\r\n case '=':\r\n // 相等比较可以是任意类型,但在这里我们将其视为数字比较\r\n return left === right ? 1 : 0;\r\n case '<>':\r\n // 不等比较可以是任意类型,但在这里我们将其视为数字比较\r\n return left !== right ? 1 : 0;\r\n case '>':\r\n // 大于比较需要数字类型\r\n return leftNum > rightNum ? 1 : 0;\r\n case '<':\r\n // 小于比较需要数字类型\r\n return leftNum < rightNum ? 1 : 0;\r\n case '>=':\r\n // 大于等于比较需要数字类型\r\n return leftNum >= rightNum ? 1 : 0;\r\n case '<=':\r\n // 小于等于比较需要数字类型\r\n return leftNum <= rightNum ? 1 : 0;\r\n default:\r\n throw new Error(`不支持的操作符: ${node.operator}`);\r\n }\r\n case 'UnaryExpression': {\r\n // 处理一元表达式,例如负数 -50\r\n const arg = evaluateExpression(node.argument, dataIndex || 0);\r\n let argNum = Number(arg);\r\n if (isNaN(argNum)) argNum = 0;\r\n switch (node.operator) {\r\n case '-':\r\n // 取负\r\n return -argNum;\r\n case '+':\r\n // 正号\r\n return argNum;\r\n default:\r\n throw new Error(`不支持的一元操作符: ${node.operator}`);\r\n }\r\n }\r\n case 'CallExpression':\r\n return evaluateFunction(getCalleeName(node.callee), node.arguments, dataIndex);\r\n\r\n case 'MemberExpression':\r\n // 处理范围引用如\"A1:B10\"\r\n if (node.computed && node.property && node.property.type === 'Literal') {\r\n const value = node.property.value;\r\n const rangeMatch = parseRange(value);\r\n if (rangeMatch) {\r\n let [start, end] = rangeMatch;\r\n return getRangeValues(start, end, dataIndex); // 返回范围数组\r\n }\r\n }\r\n\r\n // 处理普通单元格引用作为对象属性访问\r\n const objectVal = evaluateExpression(node.object, dataIndex);\r\n const propertyVal = node.computed ? evaluateExpression(node.property, dataIndex) : node.property.name;\r\n\r\n if (typeof objectVal === 'object' && objectVal !== null) {\r\n return objectVal[propertyVal];\r\n }\r\n\r\n throw new Error(`无法获取非对象值的属性: ${propertyVal}`);\r\n case 'Compound':\r\n const results: any[] = [];\r\n for (const expr of node.body) {\r\n results.push(evaluateExpression(expr, dataIndex));\r\n }\r\n return results.join(' ');\r\n default:\r\n throw new Error(`不支持的节点类型: ${node.type}`);\r\n }\r\n}\r\n\r\n/**\r\n * 获取范围内的所有单元格值\r\n * @param startCell - 区域开始单元格\r\n * @param endCell - 区域结束单元格\r\n * @returns 扁平化的单元格值数组\r\n */\r\nfunction getRangeValues(startCell: string, endCell: string, dataIndex?): any[] {\r\n let startCol = -1;\r\n const startABCMatch = startCell.match(/[A-Z]+/);\r\n if (startABCMatch) startCol = columnToNumber(startABCMatch[0]);\r\n let startRow = -1;\r\n const startNummatch = startCell.match(/\\d+/);\r\n if (startNummatch) startRow = parseInt(startNummatch[0]) - 1;\r\n let endCol = -1;\r\n const endABCMatch = endCell.match(/[A-Z]+/);\r\n if (endABCMatch) endCol = columnToNumber(endABCMatch[0]);\r\n let endRow = -1;\r\n const endNummatch = endCell.match(/\\d+/);\r\n if (endNummatch) endRow = parseInt(endNummatch[0]) - 1;\r\n\r\n let values: any[] | any = [];\r\n\r\n for (let row = startRow; row <= endRow; row++) {\r\n for (let col = startCol; col <= endCol; col++) {\r\n const cellRef = `${row}:${col}`;\r\n if (dataIndex !== undefined) {\r\n if (!isNaN(dataIndex)) {\r\n values = getCellValue(cellRef)[dataIndex].rawData;\r\n } else if (dataIndex.indexOf('g-') > -1) {\r\n let [key, groupIndex, groupLevel] = dataIndex.split('-');\r\n if (groupIndex) {\r\n groupIndex = parseInt(groupIndex);\r\n }\r\n if (groupLevel) {\r\n groupLevel = parseInt(groupLevel);\r\n }\r\n const cells = getCellValue(cellRef);\r\n const groupCells = cells.filter((item) => {\r\n return (item.groupIndices as number[])[groupLevel] === groupIndex;\r\n });\r\n values = groupCells.map((item) =>\r\n ![null, undefined, ''].includes(item.rawData) ? item.rawData : item.formatType?.defaultCellContent\r\n );\r\n } else if (dataIndex.indexOf('c-') > -1) {\r\n // 交叉表列小计:只聚合该裂变列上的实例\r\n const colGroupIndex = parseInt(dataIndex.split('-')[1]);\r\n const cells = getCellValue(cellRef);\r\n const colCells = cells.filter((item) => item.colGroupIndex === colGroupIndex);\r\n values = colCells.map((item) =>\r\n ![null, undefined, ''].includes(item.rawData) ? item.rawData : item.formatType?.defaultCellContent\r\n );\r\n }\r\n if (!values) {\r\n values = getCellValue(cellRef)[0].rawData;\r\n }\r\n } else {\r\n let data = getCellValue(cellRef).map((item) =>\r\n ![null, undefined, ''].includes(item.rawData) ? item.rawData : item.formatType?.defaultCellContent\r\n );\r\n values.push(...data);\r\n }\r\n }\r\n }\r\n\r\n return values;\r\n}\r\n\r\nconst funHandlers = {\r\n SUM(args) {\r\n // Decimal 累加消除浮点累积误差,结果转回 Number\r\n return args\r\n .flat()\r\n .reduce((sum, num) => {\r\n const val = parseFloat(num);\r\n return isNaN(val) ? sum : sum.plus(val);\r\n }, new Decimal(0))\r\n .toNumber();\r\n },\r\n AVG(args) {\r\n const flatArgs = args.flat();\r\n const numericArgs = flatArgs.map((num) => parseFloat(num)).filter((num) => !isNaN(num));\r\n return numericArgs.length > 0\r\n ? numericArgs.reduce((sum, num) => sum.plus(num), new Decimal(0)).div(numericArgs.length).toNumber()\r\n : 0;\r\n },\r\n MAX(args) {\r\n return Math.max(\r\n ...args\r\n .flat()\r\n .map(Number)\r\n .filter((n) => !isNaN(n))\r\n );\r\n },\r\n MIN(args) {\r\n return Math.min(\r\n ...args\r\n .flat()\r\n .map(Number)\r\n .filter((n) => !isNaN(n))\r\n );\r\n },\r\n COUNT(args) {\r\n return args.flat().length;\r\n },\r\n};\r\n/**\r\n * 函数执行器\r\n * @param funcName - 函数名称\r\n * @param args - 函数参数列表\r\n * @returns 计算结果\r\n */\r\nfunction evaluateFunction(funcName: string, args: any[], dataIndex): any {\r\n const evaluatedArgs = args.map((arg) => evaluateExpression(arg, dataIndex));\r\n\r\n switch (funcName.toUpperCase()) {\r\n case 'SUM':\r\n return funHandlers.SUM(evaluatedArgs);\r\n\r\n case 'AVERAGE':\r\n case 'AVG':\r\n return funHandlers.AVG(evaluatedArgs);\r\n\r\n case 'IF':\r\n if (evaluatedArgs.length !== 3) {\r\n throw new Error(`IF函数需要3个参数,但提供了${evaluatedArgs.length}个`);\r\n }\r\n return Boolean(evaluatedArgs[0]) ? evaluatedArgs[1] : evaluatedArgs[2];\r\n\r\n case 'NOW':\r\n return new Date().toLocaleString();\r\n\r\n case 'TODAY':\r\n const today = new Date();\r\n return `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;\r\n\r\n case 'MAX':\r\n return funHandlers.MAX(evaluatedArgs);\r\n\r\n case 'MIN':\r\n return funHandlers.MIN(evaluatedArgs);\r\n\r\n case 'COUNT':\r\n return funHandlers.COUNT(evaluatedArgs);\r\n\r\n case 'RANK':\r\n case 'RANK.EQ': {\r\n // RANK.EQ(number, ref, [order]):返回 number 在 ref 中的名次;order 省略或 0 为降序,非 0 为升序;并列取最优名次\r\n if (evaluatedArgs.length < 2) {\r\n throw new Error(`RANK.EQ函数至少需要2个参数,但提供了${evaluatedArgs.length}个`);\r\n }\r\n const num = parseFloat(evaluatedArgs[0]);\r\n const ref = [evaluatedArgs[1]].flat().map(Number).filter((n) => !isNaN(n));\r\n const order = Number(evaluatedArgs[2] ?? 0);\r\n const sorted = order === 0 ? [...ref].sort((a, b) => b - a) : [...ref].sort((a, b) => a - b);\r\n const idx = sorted.indexOf(num);\r\n return idx === -1 ? '#N/A' : idx + 1;\r\n }\r\n\r\n case 'SUMPRODUCT':\r\n if (evaluatedArgs.length < 2) {\r\n throw new Error(`SUMPRODUCT函数至少需要2个参数,但提供了${evaluatedArgs.length}个`);\r\n }\r\n\r\n const flatArrays = evaluatedArgs.map((arg) => (Array.isArray(arg) ? arg.flat() : [arg]));\r\n\r\n const minLength = Math.min(...flatArrays.map((arr) => arr.length));\r\n\r\n let sum = new Decimal(0);\r\n for (let i = 0; i < minLength; i++) {\r\n let product = new Decimal(1);\r\n for (const arr of flatArrays) {\r\n const val = parseFloat(arr[i]);\r\n product = product.times(isNaN(val) ? 0 : val);\r\n }\r\n sum = sum.plus(product);\r\n }\r\n return sum.toNumber();\r\n\r\n case 'CONCATENATE':\r\n case 'TEXTJOIN':\r\n return evaluatedArgs.map(String).join('');\r\n\r\n case 'AND':\r\n if (evaluatedArgs.length < 2) {\r\n throw new Error(`AND函数至少需要2个参数,但提供了${evaluatedArgs.length}个`);\r\n }\r\n return evaluatedArgs.every((arg) => Boolean(arg));\r\n\r\n case 'OR':\r\n if (evaluatedArgs.length < 2) {\r\n throw new Error(`OR函数至少需要2个参数,但提供了${evaluatedArgs.length}个`);\r\n }\r\n return evaluatedArgs.some((arg) => Boolean(arg));\r\n\r\n case 'YEAR':\r\n if (evaluatedArgs.length !== 1) {\r\n throw new Error(`YEAR函数需要1个参数,但提供了${evaluatedArgs.length}个`);\r\n }\r\n const yearDate = dayjs(evaluatedArgs[0]);\r\n return yearDate.isValid() ? yearDate.year() : null;\r\n\r\n case 'MONTH':\r\n if (evaluatedArgs.length !== 1) {\r\n throw new Error(`MONTH函数需要1个参数,但提供了${evaluatedArgs.length}个`);\r\n }\r\n const monthDate = dayjs(evaluatedArgs[0]);\r\n return monthDate.isValid() ? monthDate.month() + 1 : null; // dayjs 中月份从0开始,所以需要+1\r\n\r\n case 'DAY':\r\n if (evaluatedArgs.length !== 1) {\r\n throw new Error(`DAY函数需要1个参数,但提供了${evaluatedArgs.length}个`);\r\n }\r\n const dayDate = dayjs(evaluatedArgs[0]);\r\n return dayDate.isValid() ? dayDate.date() : null;\r\n\r\n case 'HOUR':\r\n if (evaluatedArgs.length !== 1) {\r\n throw new Error(`HOUR函数需要1个参数,但提供了${evaluatedArgs.length}个`);\r\n }\r\n const hourDate = dayjs(evaluatedArgs[0]);\r\n return hourDate.isValid() ? hourDate.hour() : null;\r\n\r\n case 'WEEK':\r\n if (evaluatedArgs.length !== 1) {\r\n throw new Error(`WEEK函数需要1个参数,但提供了${evaluatedArgs.length}个`);\r\n }\r\n const weekDate = dayjs(evaluatedArgs[0]);\r\n return weekDate.isValid() ? weekDate.day() : null;\r\n case 'RUNNING_SUM':\r\n case 'CUSUM':\r\n let cusumEvalValues = args.map((arg) => evaluateExpression(arg));\r\n cusumEvalValues = cusumEvalValues.map((item) => {\r\n return item.slice(0, dataIndex + 1);\r\n });\r\n return funHandlers.SUM(cusumEvalValues);\r\n case 'ALLSUM':\r\n const allsumEvalValues = args.map((arg) => evaluateExpression(arg));\r\n return funHandlers.SUM(allsumEvalValues);\r\n default:\r\n throw new Error(`不支持的函数: ${funcName}`);\r\n }\r\n}\r\n\r\n/**\r\n * 获取单个单元格的值\r\n * @param cellRef - 单元格引用 row(number):col(number)\r\n * @returns 单元格的值\r\n */\r\nfunction getCellValue(cellRef: string): Cell[] {\r\n try {\r\n return innerConfig[cellRef];\r\n } catch (e) {\r\n console.warn(`无法解析单元格: ${cellRef}`, e);\r\n }\r\n return [];\r\n}\r\n\r\n/**\r\n * 将列字母转换为数字(如A->1, B->2, Z->26, AA->27)\r\n * @param col - 列字母\r\n * @returns 对应的数字\r\n */\r\nexport function columnToNumber(col) {\r\n let num = 0;\r\n for (let i = 0; i < col.length; i++) {\r\n num = num * 26 + (col.charCodeAt(i) - 64);\r\n }\r\n return num - 1;\r\n}\r\n\r\n/**\r\n * 将列数字转换为字母(如1->A, 27->AA)\r\n * @param num - 列数字\r\n * @returns 对应的列字母\r\n */\r\nexport function numberToColumn(num: number): string {\r\n let letters = '';\r\n while (num > 0) {\r\n num--;\r\n letters = String.fromCharCode(65 + (num % 26)) + letters;\r\n num = Math.floor(num / 26);\r\n }\r\n return letters;\r\n}\r\n\r\n/**\r\n * 预生成二维码和条形码的 Data URL\r\n * 在 computeCell 之后调用,根据格式化后的 cell.text 批量生成图形码,避免渲染时阻塞。\r\n * 二维码结果存入 cell.qrcodeData,条形码结果存入 cell.barcodeUrl。\r\n * 触发条件:cell.format === BARCODE/QRCODE(附加渲染,内容源来自 text/field/fun 的计算结果)。\r\n * @param configs - 报表配置数组(支持多表格)\r\n */\r\nexport async function preGenerateBarcodes(configs: Array<{ config: Cell[][] }>): Promise<void> {\r\n const tasks: Promise<void>[] = [];\r\n\r\n for (const tableConfig of configs) {\r\n const config = tableConfig.config;\r\n\r\n for (let rowIndex = 0; rowIndex < config.length; rowIndex++) {\r\n const rowCells = config[rowIndex];\r\n if (!rowCells) continue;\r\n\r\n for (let colIndex = 0; colIndex < rowCells.length; colIndex++) {\r\n const cell = rowCells[colIndex];\r\n if (!cell) continue;\r\n\r\n // 内容源:优先 cell.text(已 computeCell),设计器模板态未计算时回退 cell.rawData\r\n const content = cell.text ?? cell.rawData;\r\n if (content === undefined || content === null || content === '') continue;\r\n\r\n if (cell.format === FormatType.QRCODE && !cell.qrcodeData) {\r\n const value = String(content);\r\n tasks.push(\r\n (async () => {\r\n try {\r\n cell.qrcodeData = await canvasPool.generateQRCode(value, cell.qrcodeOptions);\r\n } catch (error) {\r\n console.error(`二维码生成失败 [${cell.row}:${cell.col}]:`, error);\r\n cell.qrcodeData = '';\r\n }\r\n })()\r\n );\r\n }\r\n\r\n // 条形码同步生成,统一预生成到 barcodeUrl,渲染时直接使用\r\n if (cell.format === FormatType.BARCODE && !cell.barcodeUrl) {\r\n try {\r\n const value = String(content);\r\n cell.barcodeUrl = canvasPool.generateBarcode(value, cell.barcodeOptions);\r\n } catch (error) {\r\n console.error(`条形码生成失败 [${cell.row}:${cell.col}]:`, error);\r\n cell.barcodeUrl = '';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (tasks.length > 0) {\r\n await Promise.all(tasks);\r\n }\r\n}\r\n","import {Cell, CellType} from 'yh-report/types';\nimport {cloneDeep} from 'lodash-es';\nimport {findMaxLessThan, getGroupMinChildrenLength, separator, getSeparatorKey} from './index';\nimport {createGroupSortComparator} from '../util';\n\nexport default function (cols, loopCols, config, tableData) {\n loopCols.forEach((colItem) => {\n let colData = tableData[colItem.data];\n //#region 获取当前列的单元格\n let colCells: any = [];\n let groupIndexs: number[] = [];\n config.forEach((rowItems, rowIndex) => {\n let cell = rowItems[colItem.index];\n if (cell.type === CellType.FIELD && cell.data && cell.isGroup) {\n groupIndexs.push(rowIndex);\n }\n colCells.push(cell);\n });\n\n let groupData = {};\n groupIndexs.forEach((gIndex, index) => {\n const keyGroupIndex = getSeparatorKey('key', gIndex);\n if (!groupData[keyGroupIndex]) {\n groupData[keyGroupIndex] = new Set();\n }\n let gCell = colCells[gIndex];\n let key = gCell.data.replace('col:', '').toUpperCase();\n if (index === 0) {\n colData.forEach((data) => {\n if (key) {\n let text = data[key];\n if (!text) {\n text = '-';\n }\n const childGroupIndex = getSeparatorKey('child', gIndex, text);\n const dataGroupIndex = getSeparatorKey('data', text);\n if (!groupData[childGroupIndex]) {\n groupData[childGroupIndex] = [data];\n } else {\n groupData[childGroupIndex].push(data);\n }\n groupData[keyGroupIndex].add(text);\n groupData[text] = [text];\n groupData[dataGroupIndex] = [data];\n }\n });\n } else {\n let preGIndex = groupIndexs[index - 1];\n const preKeyGroupIndex = getSeparatorKey('key', preGIndex);\n let preKeys = Array.from(groupData[preKeyGroupIndex]) as string[];\n preKeys.forEach((preKey) => {\n const preChildGroupIndex = getSeparatorKey('child', preGIndex, preKey);\n let childDatas = groupData[preChildGroupIndex] || [];\n let newChildDatas = childDatas\n .map((data) => {\n if (key) {\n let text = data[key];\n if (!text) {\n text = '-';\n }\n let flag = false;\n const childGroupIndex = getSeparatorKey('child', gIndex, preKey, text);\n const currentkey = getSeparatorKey(preKey, text);\n const dataGroupIndex = getSeparatorKey('data', currentkey);\n if (!groupData[childGroupIndex]) {\n groupData[childGroupIndex] = [data];\n } else {\n groupData[childGroupIndex].push(data);\n }\n if (!groupData[dataGroupIndex]) {\n groupData[dataGroupIndex] = [data];\n } else {\n groupData[dataGroupIndex].push(data);\n }\n if (!groupData[keyGroupIndex].has(currentkey)) {\n flag = true;\n }\n groupData[keyGroupIndex].add(currentkey);\n groupData[currentkey] = groupData[preKey].concat([text]);\n if (flag) {\n return text;\n } else {\n return null;\n }\n }\n })\n .filter((item) => !!item);\n groupData[preChildGroupIndex] = newChildDatas;\n });\n }\n });\n // 分组值排序:任一级开启即触发,所有级统一采用首个开启级的配置(方向/规则一致),\n // 保证多级组合串字典序与父级分组对齐,避免错位\n const firstSortGIndex = groupIndexs.find((i) => colCells[i]?.isGroupSort);\n if (firstSortGIndex !== undefined) {\n const firstCell = colCells[firstSortGIndex];\n const opts = {order: firstCell.groupSortOrder, numeric: firstCell.groupSortNumeric};\n groupIndexs.forEach((gIndex) => {\n const keyGroupIndex = getSeparatorKey('key', gIndex);\n const arr = Array.from(groupData[keyGroupIndex]) as string[];\n if (arr.length > 1) arr.sort(createGroupSortComparator(opts));\n groupData[keyGroupIndex] = new Set(arr);\n });\n }\n //#endregion\n\n //#region 根据分组信息循环单元格和列配置\n let groupLen = 1;\n let maxGroupIndex = Math.max(...groupIndexs);\n let minGroupIndex = Math.min(...groupIndexs);\n const hasRowColCombine = colCells.some((cell) => cell.isRowColCombine);\n if (groupIndexs.length > 0) {\n const keyGroupIndex = getSeparatorKey('key', maxGroupIndex);\n if (hasRowColCombine) {\n groupLen = groupData[keyGroupIndex].size;\n } else {\n groupLen = Array.from(groupData[keyGroupIndex]).reduce((acc, item) => {\n const childGroupIndex = getSeparatorKey('child', maxGroupIndex, item);\n let data = groupData[childGroupIndex];\n return acc + data.length;\n }, 0) as number;\n }\n } else {\n groupLen = colData.length;\n }\n for (let rowIndex = 0; rowIndex < colCells.length; rowIndex++) {\n const cell = colCells[rowIndex];\n const insertIndex = cols.findIndex((item) => item.index === colItem.index);\n if (rowIndex === 0) {\n const newColItem = {\n ...colItem,\n loop: false,\n };\n const newCols = Array.from({length: groupLen}, () => cloneDeep(newColItem));\n cols.splice(insertIndex, 1, ...newCols);\n }\n let rows = config[cell.row];\n if (rows && Array.isArray(rows)) {\n let newCells: Cell[] = [];\n if (groupIndexs.includes(rowIndex)) {\n const keyGroupIndex = getSeparatorKey('key', cell.row);\n let keys = Array.from(groupData[keyGroupIndex]) as string[];\n keys.forEach((key, index) => {\n const childrenLen = hasRowColCombine && rowIndex === maxGroupIndex ? 1 : getGroupMinChildrenLength(groupData, key, maxGroupIndex, hasRowColCombine, groupIndexs);\n const texts = groupData[key];\n const text = texts[texts.length - 1];\n const dataGroupIndex = getSeparatorKey('data', key);\n const data = groupData[dataGroupIndex];\n\n let newCell = {\n ...cell,\n text,\n colSpan: childrenLen,\n colData: data,\n };\n newCells.push(newCell);\n if (childrenLen > 1) {\n let fillCell = {\n ...cell,\n text,\n type: '',\n colSpan: 0,\n rowSpan: 0,\n };\n for (let i = 0; i < childrenLen - 1; i++) {\n newCells.push(fillCell);\n }\n }\n });\n rows.splice(cell.col, 1, ...newCells);\n } else {\n if (rowIndex > minGroupIndex && rowIndex < maxGroupIndex) {\n let parentIndex = findMaxLessThan(groupIndexs, rowIndex);\n if (parentIndex !== null) {\n let newRows = config[parentIndex].slice(colItem.index, colItem.index + groupLen);\n newRows = newRows.map((item) => {\n let colData = item.colData;\n if (Array.isArray(colData)) {\n colData = colData[0];\n }\n return {\n ...cell,\n colData,\n colSpan: item.colSpan,\n rowSpan: item.rowSpan,\n };\n });\n\n rows.splice(colItem.index, 1, ...newRows);\n continue;\n }\n }\n if (cell.data) {\n const maxKeyGroupIndex = getSeparatorKey('key', maxGroupIndex);\n let laskGroupKeys: string[] = groupData[maxKeyGroupIndex] ? Array.from(groupData[maxKeyGroupIndex]) : [];\n let dataKey = cell.data.replace('col:', '').toUpperCase();\n if (cell.isRowColCombine) {\n let combineKeys = groupIndexs.map((index) => {\n let cell = colCells[index];\n return cell.data.replace('col:', '').toUpperCase();\n });\n let newCells: Cell[] = [];\n laskGroupKeys.forEach((key, index) => {\n let newCell = {\n ...cell,\n combineKeys,\n combineValues: groupData[key],\n colGroupIndex: index,\n };\n newCells.push(newCell);\n });\n rows.splice(cell.col, 1, ...newCells);\n } else {\n if (laskGroupKeys.length) {\n laskGroupKeys.forEach((groupKey, index) => {\n let newCells: Cell[] = [];\n const dataGroupIndex = getSeparatorKey('data', groupKey);\n let datas = groupData[dataGroupIndex];\n datas.forEach((data) => {\n let newCell = {\n ...cell,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (data[dataKey] !== undefined) {\n newCell.rawData = data[dataKey];\n newCell.colData = data;\n } else {\n newCell.rawData = '';\n }\n newCells.push(newCell);\n });\n rows.splice(cell.col, 1, ...newCells);\n });\n } else {\n let newCells: Cell[] = [];\n colData.forEach((data) => {\n let newCell = {\n ...cell,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (data[dataKey] !== undefined) {\n newCell.rawData = data[dataKey];\n newCell.colData = data;\n } else {\n newCell.rawData = '';\n }\n newCells.push(newCell);\n });\n rows.splice(cell.col, 1, ...newCells);\n }\n }\n } else if (cell.type === CellType.FUN && hasRowColCombine && cell.colSpan !== 0) {\n // 交叉表:静态函数格按裂变列复制为独立格,各带 colGroupIndex,供公式按列分组聚合(列小计)\n let funCells: Cell[] = [];\n for (let i = 0; i < groupLen; i++) {\n funCells.push({\n ...cell,\n colData: colData[0],\n colGroupIndex: i,\n });\n }\n rows.splice(cell.col, 1, ...funCells);\n } else {\n const newCell = {\n ...cell,\n colData: colData[0],\n };\n if (cell.colSpan === 0 && cell.mergeTarget && cell.mergeTarget.length === 2 && cell.row === cell.mergeTarget[0]) {\n let [mergeRow, mergeCol] = cell.mergeTarget;\n\n let targetCell = config\n .reduce((acc, item) => {\n return acc.concat(item);\n }, [])\n .filter((item) => {\n return item.row === mergeRow && item.col === mergeCol;\n })[0];\n if (targetCell) {\n targetCell.colSpan += groupLen - 1;\n }\n } else if (!Array.isArray(cell.mergeTarget) || cell.mergeTarget.length !== 2) {\n newCell.colSpan = groupLen;\n }\n const fillCell = {\n ...cell,\n colSpan: 0,\n rowSpan: 0,\n };\n\n let fillCells = Array.from({length: groupLen - 1}, () => cloneDeep(fillCell));\n rows.splice(cell.col, 1, newCell, ...fillCells);\n }\n }\n }\n }\n //#endregion\n });\n}\n","import {Cell, CellType, ComputedType, Head} from 'yh-report/types';\nimport {cloneDeep} from 'lodash-es';\nimport {getGroupMinChildrenLength, transpose, separator, getSeparatorKey, aggregateMergedValues} from './index';\nimport {createGroupSortComparator} from '../util';\n\n/**\n * 转换分组数据文本格式,将 [key] 格式转换为 - 格式\n * @param text - 原始文本\n * @returns 转换后的文本\n */\nfunction formatGroupText(text: string): string {\n if (text && text.startsWith('[') && text.endsWith(']')) {\n return '-';\n }\n return text;\n}\n\n/**\n * 合并同一列中相邻且具有相同值的单元格\n * @param {Cell[][]} newConfig - 二维单元格数组\n * @returns {Cell[][]} 处理后的二维单元格数组\n */\nfunction mergeSameCells(newConfig: Cell[][]): Cell[][] {\n // 遍历每一列\n if (!newConfig || !newConfig.length) return newConfig;\n\n // 创建 newConfig 的深拷贝,避免直接修改原数组\n const result = newConfig.map((row) => [...row]);\n\n // 预先识别需要处理的列类型\n const colsToProcess: {\n isMergeSameCells: number[];\n linkedMergeCell: {colIndex: number; linkedColIndex: number}[];\n } = {\n isMergeSameCells: [],\n linkedMergeCell: [],\n };\n\n // 只检查第一行来确定哪些列需要处理,避免在主循环中重复检查\n if (result[0]) {\n result[0].forEach((cell, colIndex) => {\n if (cell && cell.isMergeSameCells) {\n colsToProcess.isMergeSameCells.push(colIndex);\n }\n if (cell && cell.linkedMergeCell && cell.linkedColIndex !== undefined && !isNaN(cell.linkedColIndex)) {\n colsToProcess.linkedMergeCell.push({\n colIndex,\n linkedColIndex: cell.linkedColIndex,\n });\n }\n });\n }\n\n // 处理 isMergeSameCells 逻辑\n colsToProcess.isMergeSameCells.forEach((colIndex) => {\n // 遍历每一行\n for (let rowIndex = 0; rowIndex < result.length; rowIndex++) {\n const cell = result[rowIndex][colIndex];\n\n // 检查当前单元格是否存在且需要合并相同值\n if (cell && cell.isMergeSameCells) {\n // 从当前行开始向下查找相同值的单元格\n let mergeStart = rowIndex;\n let mergeCount = 1;\n\n // 查找连续具有相同值的单元格\n while (mergeStart + mergeCount < result.length && result[mergeStart + mergeCount][colIndex] && shouldMergeCells(cell, result[mergeStart + mergeCount][colIndex])) {\n mergeCount++;\n }\n\n // 如果找到多个相同值的单元格,则合并它们\n if (mergeCount > 1) {\n // 设置第一个单元格的 rowSpan\n result[mergeStart][colIndex].rowSpan = mergeCount;\n\n // 删除其他单元格(除了第一个)\n for (let i = 1; i < mergeCount; i++) {\n const targetRow = mergeStart + i;\n // 将单元格标记为合并单元格的一部分\n result[targetRow][colIndex] = {\n ...result[targetRow][colIndex],\n type: CellType.TEXT, // 空类型表示这是一个被合并的单元格\n colSpan: 0,\n rowSpan: 0,\n mergeTarget: [mergeStart, colIndex], // 指向合并的起始单元格\n };\n }\n\n // 跳过已经处理过的行\n rowIndex = mergeStart + mergeCount - 1;\n }\n }\n }\n });\n\n // 处理 linkedMergeCell 和 linkedColIndex 逻辑\n colsToProcess.linkedMergeCell.forEach(({colIndex, linkedColIndex}) => {\n // 遍历每个单元格\n for (let rowIndex = 0; rowIndex < result.length; rowIndex++) {\n const cell = result[rowIndex][colIndex];\n\n // 确保指定的列索引在有效范围内\n if (linkedColIndex < result[rowIndex].length) {\n // 获取关联的单元格\n const linkedCell = result[rowIndex][linkedColIndex];\n\n // 检查关联的单元格是否设置了 isMergeSameCells 为 true\n if (linkedCell && (linkedCell.isMergeSameCells || linkedCell.isGroup)) {\n // 查找该关联列中的合并起始单元格\n let mergeStartRow = rowIndex;\n // 如果关联单元格是合并目标,则找到真正的起始单元格\n if (linkedCell.mergeTarget) {\n mergeStartRow = linkedCell.mergeTarget[0];\n }\n\n // 获取起始单元格的 rowSpan 值\n const linkedCellRowSpan = result[mergeStartRow][linkedColIndex].rowSpan || 1;\n\n // 收集所有需要合并的单元格的值\n const valuesToMerge: any[] = [];\n for (let i = 0; i < linkedCellRowSpan; i++) {\n const currentRow = mergeStartRow + i;\n if (result[currentRow] && result[currentRow][colIndex]) {\n valuesToMerge.push(result[currentRow][colIndex].rawData);\n }\n }\n\n // 根据配置处理合并值\n const mergedValue = aggregateMergedValues(valuesToMerge, cell.mergedValueAggregation);\n\n // 设置当前单元格的合并属性\n result[rowIndex][colIndex] = {\n ...cell,\n rowSpan: linkedCellRowSpan,\n colSpan: 1,\n rawData: mergedValue, // 使用处理后的合并值\n };\n\n // 如果当前单元格不是合并起始单元格,则设置 mergeTarget\n if (mergeStartRow !== rowIndex) {\n result[rowIndex][colIndex] = {\n ...result[rowIndex][colIndex],\n type: CellType.TEXT, // 空类型表示这是一个被合并的单元格\n colSpan: 0,\n rowSpan: 0,\n mergeTarget: [mergeStartRow, colIndex], // 指向合并的起始单元格\n rawData: mergedValue, // 使用处理后的合并值\n };\n }\n }\n }\n }\n });\n\n return result;\n}\n\n/**\n * 判断两个单元格是否应该合并\n * @param {Cell} cell1 - 第一个单元格\n * @param {Cell} cell2 - 第二个单元格\n * @returns {boolean} 是否应该合并\n */\nfunction shouldMergeCells(cell1: Cell, cell2: Cell): boolean {\n // 检查两个单元格的文本值是否相同\n // 同时确保两个单元格都需要合并相同值\n return cell1.rawData === cell2.rawData && !!cell1.isMergeSameCells && !!cell2.isMergeSameCells;\n}\n\n/**\n * 找到分组索引\n * @param rowCells\n * @returns\n */\nfunction findGroupIndexs(rowCells: Cell[]) {\n const groupIndexs: number[] = [];\n rowCells.forEach((cell) => {\n if (cell.type === CellType.FIELD && cell.data && cell.isGroup) {\n groupIndexs.push(cell.col);\n }\n });\n\n return groupIndexs;\n}\n\n/**\n * 获取分组数据\n * @param groupIndexs\n * @param rowCells\n * @param rowData\n * @returns\n */\nfunction getGroupData(groupIndexs: number[], rowCells: Cell[], rowData: any[]) {\n let groupData = {};\n groupIndexs.forEach((gIndex, index) => {\n const keyGroupIndex = getSeparatorKey('key', gIndex);\n if (!groupData[keyGroupIndex]) {\n groupData[keyGroupIndex] = new Set();\n }\n let gCell = rowCells[gIndex];\n let key = gCell.data.replace('row:', '').toUpperCase();\n if (index === 0) {\n rowData.forEach((data) => {\n if (key) {\n let text = data[key];\n if (!text) {\n text = '[' + key + ']';\n }\n const childGroupIndex = getSeparatorKey('child', gIndex, text);\n const dataGroupIndex = getSeparatorKey('data', text);\n if (!groupData[childGroupIndex]) {\n groupData[childGroupIndex] = [data];\n } else {\n groupData[childGroupIndex].push(data);\n }\n groupData[keyGroupIndex].add(text);\n groupData[text] = [text];\n groupData[dataGroupIndex] = [data];\n }\n });\n } else {\n let preGIndex = groupIndexs[index - 1];\n const preKeyGroupIndex = getSeparatorKey('key', preGIndex);\n let preKeys = Array.from(groupData[preKeyGroupIndex]) as string[];\n preKeys.forEach((preKey) => {\n const preChildGroupIndex = getSeparatorKey('child', preGIndex, preKey);\n let childDatas = groupData[preChildGroupIndex] || [];\n let newChildDatas = childDatas\n .map((data) => {\n if (key) {\n let text = data[key];\n if (!text) {\n text = '[' + key + ']';\n }\n let flag = false;\n const childGroupIndex = getSeparatorKey('child', gIndex, preKey, text);\n const currentkey = getSeparatorKey(preKey, text);\n const dataGroupIndex = getSeparatorKey('data', currentkey);\n if (!groupData[childGroupIndex]) {\n groupData[childGroupIndex] = [data];\n } else {\n groupData[childGroupIndex].push(data);\n }\n if (!groupData[dataGroupIndex]) {\n groupData[dataGroupIndex] = [data];\n } else {\n groupData[dataGroupIndex].push(data);\n }\n if (!groupData[keyGroupIndex].has(currentkey)) {\n flag = true;\n }\n groupData[keyGroupIndex].add(currentkey);\n groupData[currentkey] = groupData[preKey].concat([text]);\n if (flag) {\n return text;\n } else {\n return null;\n }\n }\n })\n .filter((item) => !!item);\n groupData[preChildGroupIndex] = newChildDatas;\n });\n }\n });\n // 分组值排序:任一级开启即触发,所有级统一采用首个开启级的配置(方向/规则一致),\n // 保证多级组合串字典序与父级分组对齐,避免错位\n const firstSortGIndex = groupIndexs.find((i) => rowCells[i]?.isGroupSort);\n if (firstSortGIndex !== undefined) {\n const firstCell = rowCells[firstSortGIndex];\n const opts = {order: firstCell.groupSortOrder, numeric: firstCell.groupSortNumeric};\n groupIndexs.forEach((gIndex) => {\n const keyGroupIndex = getSeparatorKey('key', gIndex);\n const arr = Array.from(groupData[keyGroupIndex]) as string[];\n if (arr.length > 1) arr.sort(createGroupSortComparator(opts));\n groupData[keyGroupIndex] = new Set(arr);\n });\n }\n return groupData;\n}\n\n/**\n * 分析分组结构\n * @param rowCells\n * @param groupIndexs\n * @param rowData\n * @param groupData\n * @returns\n */\nfunction analyzeGroupStructure(rowCells: Cell[], groupIndexs: number[], rowData: any[], groupData: any) {\n let groupLen = 1;\n const rccCell = rowCells.find((cell) => cell.isRowColCombine);\n const hasRowColCombine = rccCell !== undefined;\n const gclCell = rowCells.find((cell) => cell.isGroupColumnLoop);\n const hasGroupColumnLoop = gclCell !== undefined;\n const maxGroupIndex = rccCell ? Math.max(...groupIndexs.filter((index) => index < rccCell.col)) : Math.max(...groupIndexs);\n if (groupIndexs.length > 0) {\n if (hasRowColCombine) {\n const keyGroupIndex = getSeparatorKey('key', maxGroupIndex);\n groupLen = groupData[keyGroupIndex].size;\n } else {\n let childLen = groupIndexs.map((index) => {\n const keyGroupIndex = getSeparatorKey('key', index);\n return Array.from(groupData[keyGroupIndex]).reduce((acc, item) => {\n const childGroupIndex = getSeparatorKey('child', index, item);\n let data = groupData[childGroupIndex];\n return acc + (data?.length || 0);\n }, 0) as number;\n });\n groupLen = Math.max(...childLen);\n }\n } else {\n groupLen = rowData.length;\n }\n\n return {\n groupLen,\n hasRowColCombine,\n hasGroupColumnLoop,\n maxGroupIndex,\n };\n}\n\nfunction generateRowStructure(rowCells: Cell[], groupIndexs: number[], rowData: any[], groupData: any, groupLen: number, hasRowColCombine: boolean, hasGroupColumnLoop: boolean, maxGroupIndex: number, rows, config) {\n const rowBaseCols = Array.from({length: rowCells.length}, () => [] as Cell[]);\n const loopGroupRows: Map<string, {row: Head; cells: Cell[]; removeCount: number}> = new Map();\n let addLoopGroupRows: number = -1;\n // 分组列循环信息对象,包含最大计数和对应的单元格位置信息\n let groupColumnLoopData: {\n /** 最大循环次数 */\n count: number;\n /** 当前开启分组列循环的单元格所在行索引 */\n row: number;\n /** 当前开启分组列循环的单元格所在列索引 */\n index: number;\n } | null = null;\n\n // 收集所有需要扩展的列循环信息,避免在 forEach 中修改数组\n const columnLoopExpansionInfos: Array<{\n colIndex: number;\n maxCount: number;\n cell: Cell;\n groupColumnLoopItems: any[][];\n dataKey: string | undefined;\n }> = [];\n\n const rowAddedForIndex: boolean[] = new Array(groupLen).fill(false);\n\n // 开始横向循环单元格,并将每个单元格对应列的数据都放进一个数组中方便后期转换。\n rowCells.forEach((cell, colIndex) => {\n let newCells = rowBaseCols[colIndex];\n //#region 分组\n if (groupIndexs.includes(cell.col)) {\n const keyGroupIndex = getSeparatorKey('key', cell.col);\n let keys = Array.from(groupData[keyGroupIndex]) as string[];\n let loopRowIndex = addLoopGroupRows;\n const groupLevel = groupIndexs.indexOf(cell.col);\n keys.forEach((key, groupIndex) => {\n // 根据不同场景计算 childrenLen:\n // 1. 交叉单元格模式(hasRowColCombine):最大分组列的非分组项设置为 1(不跨行)\n // 2. 其他情况:根据分组数据结构计算最小子节点长度\n let childrenLen;\n if (colIndex === maxGroupIndex && (hasRowColCombine || hasGroupColumnLoop)) {\n // 交叉单元格模式下,最大分组列的非分组项设置为 1\n childrenLen = 1;\n } else {\n // 默认情况:根据分组数据结构计算\n childrenLen = getGroupMinChildrenLength(groupData, key, maxGroupIndex, hasGroupColumnLoop, hasRowColCombine);\n }\n const texts = groupData[key];\n const text = texts[texts.length - 1];\n const dataGroupIndex = getSeparatorKey('data', key);\n const data = groupData[dataGroupIndex];\n\n // 合并列首行单元格\n let newCell: Cell = {\n ...cell,\n text: '',\n index: groupIndex,\n rowSpan: childrenLen,\n rawData: formatGroupText(text),\n groupLevel: groupLevel,\n groupIndices: groupIndex,\n groupChildIndex: 0,\n computedType: ComputedType.loopRow,\n };\n newCells.push(newCell);\n\n // 合并列后续单元格填充空单元格\n let fillCell: Cell = {\n ...cell,\n text: '',\n rawData: formatGroupText(text),\n colSpan: 0,\n rowSpan: 0,\n groupLevel: groupLevel,\n groupIndices: groupIndex,\n computedType: ComputedType.loopRow,\n mergeTarget: [newCell.row, newCell.col] as [number, number],\n };\n for (let i = 0; i < childrenLen - 1; i++) {\n let newFillCell: Cell = cloneDeep(fillCell);\n newFillCell.index = loopRowIndex + i + 1;\n newFillCell.groupChildIndex = i + 1;\n newCells.push(newFillCell);\n }\n rowAddedForIndex[colIndex] = true;\n loopRowIndex += childrenLen;\n if (newCell.loopGroupRowIndex !== undefined && newCell.loopGroupRowIndex !== '' && !isNaN(newCell.loopGroupRowIndex as number)) {\n let groupRowItem: Head = cloneDeep(rows[newCell.loopGroupRowIndex]);\n let groupCellsItem: Cell[] = cloneDeep(config[newCell.loopGroupRowIndex]).map((item) => {\n if (item.type === CellType.FUN && item.fun) {\n item.groupIndices = groupIndex;\n item.groupLevel = groupLevel;\n item.computedType = ComputedType.loopGroup;\n }\n return item;\n });\n let removeCount = 0;\n if (groupLevel >= 0) {\n let currentLevel = groupLevel;\n while (currentLevel >= 0) {\n let preGroupColIndex = groupIndexs[currentLevel];\n let preCol = rowBaseCols[preGroupColIndex];\n let preCell = preCol[loopRowIndex];\n if (preCell && preCell.groupIndices !== undefined && !isNaN(preCell.groupIndices as number)) {\n removeCount = removeCount + (preCell.groupIndices as number);\n }\n currentLevel--;\n }\n }\n loopGroupRows.set(`${groupIndex}:${groupLevel}:${loopRowIndex}`, {\n row: groupRowItem,\n cells: groupCellsItem,\n removeCount,\n });\n }\n });\n //#endregion\n } else {\n if (cell.data || cell.type === CellType.FUN) {\n // 非合并列循环\n let dataKey = cell.data ? cell.data.replace('row:', '').toUpperCase() : undefined;\n if (cell.isRowColCombine) {\n // 交叉单元格\n const maxKeyGroupIndex = getSeparatorKey('key', maxGroupIndex);\n let laskGroupKeys: string[] = groupData[maxKeyGroupIndex] ? Array.from(groupData[maxKeyGroupIndex]) : [];\n if (laskGroupKeys.length) {\n laskGroupKeys.forEach((groupKey, index) => {\n const childGroupIndex = getSeparatorKey('child', maxGroupIndex, groupKey);\n let datas = groupData[childGroupIndex];\n let kvs = cell.combineKeys\n ? cell.combineKeys.map((key, index) => {\n const val = cell.combineValues ? cell.combineValues[index] : undefined;\n return {\n key,\n val,\n };\n })\n : [];\n const result = datas.filter((data) => {\n return kvs.every((kv) => {\n return data[kv.key] === kv.val;\n });\n });\n\n let newCell = {\n ...cell,\n index: index,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (result && result.length) {\n const allValues = result.map((r) => (dataKey ? r[dataKey] : undefined));\n newCell.rawData = cell.mergedValueAggregation\n ? aggregateMergedValues(allValues, cell.mergedValueAggregation)\n : result[0][dataKey];\n newCell.rowData = result[0];\n } else {\n newCell.rawData = '';\n newCell.rowData = {};\n }\n newCells.push(newCell);\n });\n } else {\n rowData.forEach((data, dataIndex) => {\n let kvs = cell.combineKeys\n ? cell.combineKeys.map((key, index) => {\n const val = cell.combineValues ? cell.combineValues[index] : undefined;\n return {\n key,\n val,\n };\n })\n : [];\n\n let isMatch = kvs.every((kv) => {\n return data[kv.key] === kv.val;\n });\n let newCell = {\n ...cell,\n index: dataIndex,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (isMatch) {\n newCell.rawData = dataKey ? data[dataKey] : '';\n newCell.rowData = data;\n } else {\n newCell.rawData = '';\n newCell.rowData = data;\n }\n if (newCell.type === CellType.FUN && newCell.fun) {\n newCell.computedType = ComputedType.loopRow;\n }\n newCells.push(newCell);\n });\n }\n } else {\n // 非交叉列循环\n // 根据分组结构处理数据对齐\n if (groupIndexs.length === 0) {\n // 没有分组列的情况下,直接循环原始数据\n rowData.forEach((data, dataIndex) => {\n let newCell = {\n index: dataIndex,\n ...cell,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (dataKey && data[dataKey] !== undefined) {\n newCell.rawData = data[dataKey];\n } else {\n newCell.rawData = '';\n }\n newCell.rowData = data;\n newCell.computedType = ComputedType.loopRow;\n newCells.push(newCell);\n });\n } else {\n // 存在分组列的情况下,根据分组结构处理数据\n const maxKeyGroupIndex = getSeparatorKey('key', maxGroupIndex);\n let lastGroupKeys: string[] = groupData[maxKeyGroupIndex] ? Array.from(groupData[maxKeyGroupIndex]) : [];\n\n if (lastGroupKeys.length === 0) {\n // 没有找到分组数据,fallback到原来的方式\n rowData.forEach((data, dataIndex) => {\n let newCell = {\n index: dataIndex,\n ...cell,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (dataKey && data[dataKey] !== undefined) {\n newCell.rawData = data[dataKey];\n } else {\n newCell.rawData = '';\n }\n newCell.rowData = data;\n newCell.computedType = ComputedType.loopRow;\n newCells.push(newCell);\n });\n return;\n }\n\n const groupColumnLoopItems = [];\n\n // 根据最后一级分组来组织数据\n lastGroupKeys.forEach((groupKey, index) => {\n if (hasGroupColumnLoop) {\n // 分组循环列先收集数据\n const dataGroupIndex = getSeparatorKey('child', maxGroupIndex, groupKey);\n let groupItems = groupData[dataGroupIndex] || [];\n groupColumnLoopItems.push(groupItems);\n } else {\n const dataGroupIndex = getSeparatorKey('child', maxGroupIndex, groupKey);\n let groupItems = groupData[dataGroupIndex] || [];\n // 交叉表模式下每个分组键只取首条数据,与分组列/isRowColCombine列的行约定(1键=1行)对齐\n // 避免普通数据列过度展开导致 transpose 截断、只显示首行数据\n const itemsToIterate = hasRowColCombine ? groupItems.slice(0, 1) : groupItems;\n if (groupItems.length > 0) {\n itemsToIterate.forEach((dataItem) => {\n let newCell = {\n index: index,\n ...cell,\n // 交叉表:函数格按当前行组聚合裂变列实例(供 jsep 按 groupIndices 过滤取值)\n isCrossAggregate: hasRowColCombine,\n };\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (dataKey && dataItem && dataItem[dataKey] !== undefined) {\n newCell.rawData = dataItem[dataKey];\n } else {\n newCell.rawData = '';\n }\n newCell.rowData = dataItem;\n newCell.computedType = ComputedType.loopRow;\n newCells.push(newCell);\n });\n } else {\n newCells.push({\n index: 0,\n ...cell,\n isCrossAggregate: hasRowColCombine,\n });\n }\n }\n });\n // 分组循环列执行逻辑\n if (hasGroupColumnLoop) {\n const maxCount = Math.max(...groupColumnLoopItems.map((item) => item.length));\n\n // 初始化分组列循环信息对象\n if (!groupColumnLoopData) {\n groupColumnLoopData = {\n count: maxCount,\n row: cell.row,\n index: colIndex,\n };\n }\n\n // 收集扩展信息,不在 forEach 内部执行 splice\n const expansionInfo = {\n colIndex,\n maxCount,\n groupColumnLoopItems,\n dataKey: cell.data ? cell.data.replace('row:', '').toUpperCase() : undefined,\n cell,\n };\n columnLoopExpansionInfos.push(expansionInfo);\n }\n }\n }\n } else {\n // 非数据列\n const shouldMerge = cell.isMergeInLoop !== false;\n if (!shouldMerge) {\n if ((hasRowColCombine || hasGroupColumnLoop) && groupIndexs.length > 0) {\n const maxKeyGroupIndex = getSeparatorKey('key', maxGroupIndex);\n let lastGroupKeys: string[] = groupData[maxKeyGroupIndex] ? Array.from(groupData[maxKeyGroupIndex]) : [];\n lastGroupKeys.forEach((groupKey, groupIndex) => {\n const dataGroupIndex = getSeparatorKey('data', groupKey);\n const groupItemData = groupData[dataGroupIndex];\n newCells.push({\n index: groupIndex,\n ...cell,\n computedType: ComputedType.loopRow,\n rowSpan: 1,\n colSpan: 1,\n rowData: groupItemData ? groupItemData[0] : undefined,\n });\n });\n } else if (groupIndexs.length > 0) {\n for (let i = 0; i < groupLen; i++) {\n newCells.push({\n index: i,\n ...cell,\n computedType: ComputedType.loopRow,\n rowSpan: 1,\n colSpan: 1,\n rowData: rowData[i],\n });\n }\n } else {\n rowData.forEach((data, dataIndex) => {\n newCells.push({\n index: dataIndex,\n ...cell,\n computedType: ComputedType.loopRow,\n rowSpan: 1,\n colSpan: 1,\n rowData: data,\n });\n });\n }\n } else {\n const newCell = {\n ...cell,\n rowData: rowData[0],\n index: 0,\n };\n if (cell.rowSpan === 0 && cell.mergeTarget && cell.mergeTarget.length === 2) {\n let [mergeRow, mergeCol] = cell.mergeTarget;\n let targetCell = config\n .reduce((acc, item) => {\n return acc.concat(item);\n }, [])\n .filter((item) => {\n return item.row === mergeRow && item.col === mergeCol;\n })[0];\n if (targetCell) {\n targetCell.rowSpan += groupLen - 1;\n }\n } else {\n newCell.rowSpan += groupLen - 1;\n }\n const fillCell = {\n ...cell,\n colSpan: 0,\n rowSpan: 0,\n mergeTarget: [newCell.row, newCell.col] as [number, number],\n };\n delete newCell.isRowColCombine;\n let fillCells = Array.from({length: groupLen - 1}, () => cloneDeep(fillCell));\n newCells.push(newCell, ...fillCells);\n }\n }\n }\n });\n\n // 在 forEach 外部执行分组列循环扩展,避免在 forEach 中修改数组\n if (hasGroupColumnLoop && columnLoopExpansionInfos.length > 0) {\n columnLoopExpansionInfos.forEach(({colIndex, maxCount, cell, groupColumnLoopItems, dataKey}) => {\n for (let loopIndex = 0; loopIndex < maxCount; loopIndex++) {\n const newCells: Cell[] = [];\n\n // 遍历每个分组项,构建当前 loopIndex 行的单元格\n groupColumnLoopItems.forEach((groupItems, groupIndex) => {\n const dataItem = groupItems[loopIndex];\n let newCell: Cell = {\n index: groupIndex,\n ...cell,\n };\n\n delete newCell.combineKeys;\n delete newCell.combineValues;\n delete newCell.isRowColCombine;\n\n if (dataKey && dataItem && dataItem[dataKey] !== undefined) {\n newCell.rawData = dataItem[dataKey];\n newCell.rowData = dataItem;\n } else {\n newCell.rawData = '';\n newCell.rowData = dataItem || {};\n }\n\n newCell.computedType = ComputedType.loopRow;\n newCells.push(newCell);\n });\n\n // 第一次循环(loopIndex = 0):替换 rowBaseCols[colIndex] 位置的原始元素\n if (loopIndex === 0) {\n rowBaseCols[colIndex] = newCells;\n } else {\n // 后续循环(loopIndex > 0):在 rowBaseCols[colIndex + loopIndex] 位置插入,让数组增长\n rowBaseCols.splice(colIndex + loopIndex, 0, newCells);\n }\n }\n });\n }\n\n return {\n rowBaseCols,\n loopGroupRows,\n groupColumnLoopData,\n };\n}\n\nexport default function (rows, loopRows, config, cols, tableData) {\n for (let i = 0; i < loopRows.length; i++) {\n let rowItem = loopRows[i];\n let rowData = tableData[rowItem.data];\n if (!rowData || !rowData.length) {\n continue;\n }\n let rowIndex = rows.findIndex((item) => item.index === rowItem.index);\n let rowCells = config[rowIndex];\n let groupIndexs: number[] = findGroupIndexs(rowCells);\n let groupData = getGroupData(groupIndexs, rowCells, rowData);\n\n const {groupLen, hasRowColCombine, hasGroupColumnLoop, maxGroupIndex} = analyzeGroupStructure(rowCells, groupIndexs, rowData, groupData);\n if (hasRowColCombine && hasGroupColumnLoop) {\n throw new Error('不能同时设置交叉和分组列循环');\n }\n\n const newRowItem = {\n ...rowItem,\n loop: false,\n };\n\n const newRows: Head[] = [];\n\n const {rowBaseCols, loopGroupRows, groupColumnLoopData} = generateRowStructure(rowCells, groupIndexs, rowData, groupData, groupLen, hasRowColCombine, hasGroupColumnLoop, maxGroupIndex, rows, config);\n\n let newConfig = transpose(rowBaseCols);\n newConfig.forEach(() => {\n newRows.push(cloneDeep(newRowItem));\n });\n // 将 分组计算行插入到配置中\n loopGroupRows.forEach(({row, cells, removeCount}, key) => {\n let [groupIndices, groupLevel, loopCurrentRowIndex] = key.split(':').map((item) => parseInt(item));\n\n row.isLoopGroupComputed = false;\n const currentRowIndex = loopCurrentRowIndex + removeCount;\n let oldCells = newConfig[currentRowIndex];\n cells = cells.map((item, loopCurrentCellIndex) => {\n let oldCell = oldCells[loopCurrentCellIndex];\n if (loopCurrentCellIndex < groupLevel) {\n let targetRowIndices: number[] = [];\n newConfig.forEach((row, rowIndex) => {\n if (rowIndex <= currentRowIndex) {\n row.forEach((cell, colIndex) => {\n if (colIndex === loopCurrentCellIndex && cell.rowSpan >= 1 && ['', 'field'].includes(cell.type)) {\n targetRowIndices.push(rowIndex);\n }\n });\n }\n });\n let targetRowIndex = Math.max(...targetRowIndices);\n let targetCell = newConfig[targetRowIndex][loopCurrentCellIndex];\n if (targetCell) {\n targetCell.rowSpan += 1;\n item.mergeTarget = [targetCell.row, targetCell.col];\n }\n item.rowSpan = 0;\n item.colSpan = 0;\n } else if (!!oldCell && oldCell.type === CellType.TEXT) {\n let targetCell = newConfig[0][loopCurrentCellIndex];\n targetCell.rowSpan += 1;\n item.rowSpan = 0;\n item.colSpan = 0;\n item.mergeTarget = [targetCell.row, targetCell.col];\n }\n if (item.type === CellType.FUN && item.fun) {\n item.computedType = ComputedType.loopGroup;\n }\n item.isGroup = !!oldCell? !!oldCell.isGroup : false;\n item.groupIndices = !!oldCell? oldCell.groupIndices : false;\n item.linkedMergeCell = !!oldCell ? !!oldCell.linkedMergeCell: false;\n item.linkedColIndex = !!oldCell ? oldCell.linkedColIndex : {rowSpan: 1, colSpan: 1};\n item.isLoopGroupComputedCell = true;\n return item;\n });\n const insertIndex = currentRowIndex + 1;\n newRows.splice(insertIndex, 0, row);\n newConfig.splice(insertIndex, 0, cells);\n });\n\n // 添加处理相同值单元格合并的逻辑\n newConfig = mergeSameCells(newConfig);\n\n // 收集同一行的分组索引,并同步到所有单元格中,方便函数计算区分分组数据来源\n newConfig.forEach((row, index) => {\n let groupIndices: number[] = [];\n row.forEach((cell) => {\n // 检查 cell 是否存在,避免因数组长度不一导致的 undefined 错误\n if (cell && cell.groupIndices !== undefined && !isNaN(cell.groupIndices as number)) {\n groupIndices.push(cell.groupIndices as number);\n }\n });\n if (groupIndices.length > 0) {\n row.forEach((cell) => {\n // 检查 cell 是否存在后再赋值\n if (cell) {\n cell.groupIndices = groupIndices;\n }\n });\n }\n });\n rows.splice(rowIndex, 1, ...newRows);\n config.splice(rowIndex, 1, ...newConfig);\n\n // 根据 groupColumnLoopData 对 cols、config 中与 newConfig 无关的行进行扩展\n if (groupColumnLoopData) {\n const {index, count} = groupColumnLoopData;\n\n // cols 扩展逻辑:克隆 index 个 col 配置,从 index 位置开始重复填充 count 个\n const col = cols[index];\n const clonedCols = [];\n for (let i = 0; i < count; i++) {\n clonedCols.push(cloneDeep(col));\n }\n // 从 index 位置开始替换,不保留原本的对象\n cols.splice(index, 1, ...clonedCols);\n\n // 处理 newConfig 之前的行\n for (let i = 0; i < rowIndex; i++) {\n const row = config[i];\n const cellsToInsert = [];\n for (let j = 0; j < count; j++) {\n const clonedCell = cloneDeep(row[index]);\n // 如果是第一次填充(第一个),colSpan 设置为 count\n if (j === 0) {\n clonedCell.colSpan = count;\n } else {\n // 其他填充的 colSpan 设置为 0\n clonedCell.colSpan = 0;\n // 设置 mergeTarget 指向第一个单元格\n clonedCell.mergeTarget = [clonedCell.row, index];\n }\n cellsToInsert.push(clonedCell);\n }\n // 从 index 位置开始替换,不保留原本的对象\n row.splice(index, row.length - index, ...cellsToInsert);\n }\n\n // 处理 newConfig 之后的行\n const unrelatedRowStart = rowIndex + newConfig.length;\n for (let i = unrelatedRowStart; i < config.length; i++) {\n const row = config[i];\n const cellsToInsert = [];\n for (let j = 0; j < count; j++) {\n const clonedCell = cloneDeep(row[index]);\n // 如果是第一次填充(第一个),colSpan 设置为 count\n if (j === 0) {\n clonedCell.colSpan = count;\n } else {\n // 其他填充的 colSpan 设置为 0\n clonedCell.colSpan = 0;\n // 设置 mergeTarget 指向第一个单元格\n clonedCell.mergeTarget = [clonedCell.row, index];\n }\n cellsToInsert.push(clonedCell);\n }\n // 从 index 位置开始替换,不保留原本的对象\n row.splice(index, row.length - index, ...cellsToInsert);\n }\n }\n }\n // 清除循环分组关联的计算行\n let loopGroupRowIndices: number[] = [];\n for (let i = 0; i < rows.length; i++) {\n const element = rows[i];\n if (element.isLoopGroupComputed) {\n loopGroupRowIndices.push(i);\n }\n }\n loopGroupRowIndices.reverse().forEach((index) => {\n rows.splice(index, 1);\n config.splice(index, 1);\n });\n}\n","import {Head, Cell} from 'yh-report/types';\n\nexport default function (config: Head[], tableData: Record<string, any>, type: string, cells: Cell[][]) {\n const loopItem = config.reduce((acc, item) => {\n if (item.loop) {\n acc.push(item);\n return acc;\n } else {\n if (type === 'row') {\n if (item.dataIndex === undefined || item.dataIndex === null) item.dataIndex = 0;\n }\n }\n\n if (!item.data) return acc;\n\n const data = tableData[item.data];\n if (!data) return acc;\n\n let processedData: any;\n if (item.dataIndex !== undefined && !isNaN(item.dataIndex)) {\n if (Array.isArray(data) && item.dataIndex >= 0 && item.dataIndex < data.length) {\n processedData = data[item.dataIndex];\n } else {\n processedData = undefined; // 明确处理无效索引情况\n }\n } else {\n // 判断 data 是一个对象\n if (typeof data === 'object' && data !== null) {\n processedData = data;\n } else {\n return acc;\n }\n }\n if (processedData) {\n // 避免直接修改原始item.data\n item = {...item, data: processedData};\n\n if (type === 'row' && item.index !== undefined && item.index >= 0 && item.index < cells.length) {\n const targetRows = cells[item.index];\n const rowCount = targetRows.length;\n for (let i = 0; i < rowCount; i++) {\n const cell = targetRows[i];\n if (cell.data) {\n cell.rowData = item.data;\n }\n }\n } else if (type === 'col' && item.index !== undefined && item.index >= 0) {\n const cellCount = cells.length;\n for (let i = 0; i < cellCount; i++) {\n const row = cells[i];\n if (item.index < row.length) {\n const cell = row[item.index];\n if (cell.data) {\n cell.colData = item.data;\n }\n }\n }\n }\n }\n\n return acc;\n }, [] as Head[]);\n\n return loopItem;\n}\n","import loopGroupCols from './loopGroupCols';\nimport loopGroupRows from './loopGroupRows';\nimport getLoopItem from './getLoopItem';\nimport {StatementDataSource} from 'yh-report/types';\n\n/** 行列转换 */\nfunction transpose(matrix) {\n const rows = matrix.length;\n const cols = matrix[0].length;\n const transposed: any[] = [];\n\n for (let j = 0; j < cols; j++) {\n transposed[j] = [];\n for (let i = 0; i < rows; i++) {\n transposed[j][i] = matrix[i][j];\n }\n }\n\n return transposed;\n}\n\nfunction getGroupMinChildrenLength(groupData, key, maxGroupIndex, hasGroupColumnLoop, hasRowColCombine) {\n if(hasGroupColumnLoop || hasRowColCombine) {\n return Array.from(groupData[getSeparatorKey('key',maxGroupIndex)]).filter(k => (k as string).indexOf(key) > -1).length\n } else {\n let keyTree = groupData[key];\n let lastChildrenKey = getSeparatorKey('child', maxGroupIndex, ...keyTree);\n let minChildrenLength = Object.keys(groupData)\n .filter((key) => {\n return key === lastChildrenKey || key.indexOf(`${lastChildrenKey}${separator}`) > -1;\n })\n .map((key) => groupData[key])\n .reduce((acc, item) => {\n return acc + item.length;\n }, 0);\n \n return minChildrenLength;\n }\n}\n\nfunction findMaxLessThan(arr, num) {\n const lessThanNum = arr.filter((n) => n < num);\n\n if (lessThanNum.length === 0) {\n return null;\n }\n\n return Math.max(...lessThanNum);\n}\n\nconst separator = '\\x01';\n\nfunction getSeparatorKey(...args: any[]): string {\n return args.join(separator);\n}\n\n/** 合并值聚合 */\nfunction aggregateMergedValues(\n values: any[],\n method?: 'first' | 'firstValid' | 'firstNumber' | 'min' | 'max' | 'avg' | 'sum'\n): any {\n if (!method) return values[0];\n switch (method) {\n case 'first':\n return values[0];\n case 'min': {\n const valid = values.filter((v) => v !== null && v !== undefined && !isNaN(v));\n return valid.length > 0 ? Math.min(...valid.map(Number)) : '';\n }\n case 'max': {\n const valid = values.filter((v) => v !== null && v !== undefined && !isNaN(v));\n return valid.length > 0 ? Math.max(...valid.map(Number)) : '';\n }\n case 'avg': {\n const valid = values.filter((v) => v !== null && v !== undefined && !isNaN(v));\n return valid.length > 0 ? valid.reduce((s, v) => s + Number(v), 0) / valid.length : '';\n }\n case 'sum': {\n const valid = values.filter((v) => v !== null && v !== undefined && !isNaN(v));\n return valid.length > 0 ? valid.reduce((s, v) => s + Number(v), 0) : '';\n }\n case 'firstValid': {\n const found = values.find((v) => v !== null && v !== undefined && v !== '');\n return found !== undefined ? found : '';\n }\n case 'firstNumber': {\n const found = values.find((v) => !isNaN(Number(v)) && Number(v) !== 0);\n return found !== undefined ? Number(found) : 0;\n }\n default:\n return values[0];\n }\n}\n\nexport {loopGroupCols, loopGroupRows, getLoopItem, transpose, getGroupMinChildrenLength, findMaxLessThan, separator, getSeparatorKey, aggregateMergedValues};\n","import dayjs from 'dayjs';\nimport {StatementDataSource} from 'yh-report/types';\n\nexport function transformArrayToObject(tableData, dataSources: StatementDataSource[]) {\n const result: any = {};\n\n // 先复制 tableData 中的所有数据到结果对象\n Object.keys(tableData).forEach((key) => {\n result[key] = tableData[key];\n });\n\n dataSources.forEach((dataSource) => {\n if (dataSource.toObject && dataSource.key && dataSource.toObjectSetting && Array.isArray(dataSource.toObjectSetting)) {\n const url = dataSource.url?.toUpperCase();\n if (!url) return;\n let sourceData = tableData[dataSource.key];\n if (Array.isArray(sourceData)) {\n // 保留数组以支持下标访问,同时作为嵌套结构的容器\n if (!result[url]) result[url] = sourceData;\n\n for (const item of sourceData) {\n let currentLevel = result[url];\n\n // 遍历格式数组构建嵌套结构\n for (let i = 0; i < dataSource.toObjectSetting.length; i++) {\n const format = dataSource.toObjectSetting[i];\n const field = format.field.toUpperCase();\n const value = item[field];\n\n if (value === undefined) continue;\n\n // 格式化值\n let formattedValue;\n switch (format.format) {\n case 'text':\n formattedValue = formatText(value, format.formatType);\n break;\n case 'number':\n formattedValue = formatNumber(value, format.formatType);\n break;\n case 'datetime':\n formattedValue = formatDateTime(value, format.formatType);\n break;\n default:\n formattedValue = value;\n }\n\n // 统一转大写作为 key:与访问侧(${KEY} 会 toUpperCase)对齐,避免大小写不一致导致 get 取不到\n const objKey = String(formattedValue).toUpperCase();\n\n // 构建嵌套结构\n if (i < dataSource.toObjectSetting.length - 1) {\n if (!currentLevel[objKey]) {\n currentLevel[objKey] = {};\n }\n currentLevel = currentLevel[objKey];\n } else {\n // 最后一层存储完整对象\n currentLevel[objKey] = item;\n }\n }\n }\n }\n }\n if (!dataSource.toObject && dataSource.key && dataSource.url) {\n result[dataSource.url.toUpperCase()] = tableData[dataSource.key];\n }\n });\n return result;\n}\n\n// 格式化文本\nfunction formatText(value, formatType) {\n const start = formatType.start ?? -1;\n const end = formatType.end ?? -1;\n\n let str = String(value);\n if (start !== -1 && end !== -1) {\n str = str.substring(start, end);\n } else if (start !== -1) {\n str = str.substring(start);\n } else if (end !== -1) {\n str = str.substring(0, end);\n }\n return str.replace('.', '-');\n}\n\n// 格式化数字\nfunction formatNumber(value, formatType) {\n let num = Number(value);\n if (formatType.decimal) {\n num = parseFloat(num.toFixed(parseInt(formatType.decimal)));\n }\n return num;\n}\n\n// 格式化日期时间\nfunction formatDateTime(value, formatType) {\n try {\n return dayjs(value).format(formatType.dateTimeFormat);\n } catch (e) {\n console.error('Dayjs not available, returning raw value');\n return value;\n }\n}\n","import {\n ReportConfig,\n StatementDataSource,\n statementTableConfig,\n} from 'yh-report/types';\nimport {cloneDeep} from 'lodash-es';\nimport {computeCell, preGenerateBarcodes} from 'yh-report/libs/jsep';\nimport {\n getLoopItem,\n loopGroupCols,\n loopGroupRows,\n} from 'yh-report/libs/generateReportRenderCfg';\nimport {transformArrayToObject} from 'yh-report/libs/generateReportRenderCfg/transformArrayToObject';\n\n/**\n * 渲染单个 tableConfig 为 ReportConfig(行列循环展开 + 单元格计算)。\n * 不含 DOM 渲染,纯数据结构产出。从 reportViewItem.renderOneTableConfig 抽出。\n *\n * 注意:computeCell 依赖模块级状态(jsep.ts),不可并发调用,必须串行 await。\n */\nasync function renderOneTableConfig(\n tableConfigItem: statementTableConfig,\n tableData: any,\n sources: StatementDataSource[],\n paramTableCells: string[]\n): Promise<ReportConfig> {\n let {rowConfig, colConfig, config} = cloneDeep(tableConfigItem);\n let loopCols = getLoopItem(colConfig, tableData, 'col', config);\n let loopRows = getLoopItem(rowConfig, tableData, 'row', config);\n if (loopCols.length) {\n loopGroupCols(colConfig, loopCols, config, tableData);\n }\n if (loopRows.length) {\n loopGroupRows(rowConfig, loopRows, config, colConfig, tableData);\n }\n const objData = transformArrayToObject(tableData, sources);\n computeCell(config, objData, paramTableCells);\n // 预生成二维码和条形码\n await preGenerateBarcodes([{config}]);\n return {config, rowConfig, colConfig} as ReportConfig;\n}\n\n/**\n * 渲染报表配置为 ReportConfig[] 或 ReportConfig[][]。\n *\n * - 不传 loopSourceKey:普通渲染,返回 ReportConfig[](每个 tableConfig 一份)\n * - 传 loopSourceKey:循环表格,按 tableData[loopSourceKey] 每条数据渲染一份完整报表,返回 ReportConfig[][]\n * 份内每份都把当前条数据铺平到 tableData 顶层(与原 renderBatch 行为一致)\n *\n * 从 reportViewItem.renderReport / renderBatch / renderOneTableConfig 抽出。\n * 不含 DOM 渲染、宽度自适应。串行 await(避免 computeCell 模块级状态并发隐患)。\n *\n * @param tableConfig 报表表格配置数组(props.config.tableConfig)\n * @param tableData 归集后的数据对象(toUpdateData 的返回值)\n * @param sources 数据源(props.config.data.source),给 transformArrayToObject\n * @param paramTableCells 参数单元格上下文(reportViewItem 的 paramTableCells,可为 [])\n * @param loopSourceKey 循环表格数据源 key,传则走循环表格分支\n */\nexport async function renderReportToConfigs(\n tableConfig: statementTableConfig[],\n tableData: Record<string, any>,\n sources: StatementDataSource[],\n paramTableCells: string[] = [],\n loopSourceKey?: string\n): Promise<ReportConfig[] | ReportConfig[][]> {\n // 循环表格:按 loopSourceKey 数组的每条数据渲染一份完整报表\n if (loopSourceKey) {\n const items = tableData[loopSourceKey];\n if (!Array.isArray(items) || items.length === 0) {\n return [];\n }\n const batchConfigs: ReportConfig[][] = [];\n for (const oneItem of items) {\n const oneData = {...tableData, ...oneItem};\n const configs: ReportConfig[] = [];\n for (const item of tableConfig) {\n const reportConfig = await renderOneTableConfig(item, oneData, sources, paramTableCells);\n configs.push(reportConfig);\n }\n batchConfigs.push(configs);\n }\n return batchConfigs;\n }\n\n // 普通渲染:每个 tableConfig 一份\n const configs: ReportConfig[] = [];\n for (const item of tableConfig) {\n const reportConfig = await renderOneTableConfig(item, tableData, sources, paramTableCells);\n configs.push(reportConfig);\n }\n return configs;\n}\n","import type {PrintConfig, PrintAreaConfig, WatermarkConfig} from 'yh-report/types';\n\n/** 设计器标尺列宽度(px) */\nexport const RULER_COL_WIDTH = 101;\n\n/** mm 转 px 的转换系数(96 DPI) */\nexport const MM_TO_PX_RATIO = 96 / 25.4;\n\nlet _measuredRatio: number | null = MM_TO_PX_RATIO;\n\nexport function measureMmToPxRatio(): number {\n if (_measuredRatio != null) return _measuredRatio;\n const div = document.createElement('div');\n div.style.cssText = 'position:absolute;left:-9999px;top:-9999px;visibility:hidden;width:10mm;height:10mm;';\n document.body.appendChild(div);\n const rect = div.getBoundingClientRect();\n document.body.removeChild(div);\n _measuredRatio = rect.width / 10;\n return _measuredRatio;\n}\n\nexport function mmToPx(mm: number): number {\n return Math.round(mm * measureMmToPxRatio());\n}\n\n// /** mm 转换为 px(96 DPI) */\n// export function mmToPx(mm: number): number {\n// return Math.round(mm * MM_TO_PX_RATIO);\n// }\n\n/** px 转换为 mm(96 DPI) */\nexport function pxToMm(px: number): number {\n return px / measureMmToPxRatio();\n}\n\n/** 打印内容宽度(px) */\nexport function getPrintContentWidthPx(config: PrintConfig): number {\n return mmToPx(config.width - config.marginLeft - config.marginRight);\n}\n\n/** 打印内容高度(px),无高度返回 null */\nexport function getPrintContentHeightPx(config: PrintConfig): number | null {\n if (config.height == null) return null;\n return mmToPx(config.height - config.marginTop - config.marginBottom);\n}\n\nexport function getPrintContentWidthPxMeasured(config: PrintConfig): number {\n return mmToPx(config.width - config.marginLeft - config.marginRight);\n}\n\nexport function getPrintContentHeightPxMeasured(config: PrintConfig): number | null {\n if (config.height == null) return null;\n return mmToPx(config.height - config.marginTop - config.marginBottom);\n}\n\n/** 默认页眉配置 */\nexport const DEFAULT_PRINT_HEADER: PrintAreaConfig = {\n enabled: false,\n height: 10,\n content: '{title}',\n showPageNumber: false,\n};\n\n/** 默认页脚配置 */\nexport const DEFAULT_PRINT_FOOTER: PrintAreaConfig = {\n enabled: false,\n height: 8,\n content: '',\n showPageNumber: true,\n};\n\n/** 默认水印配置 */\nexport const DEFAULT_PRINT_WATERMARK: WatermarkConfig = {\n enabled: false,\n text: '水印',\n fontSize: 24,\n rotate: -30,\n opacity: 0.1,\n};\n\n/** 默认打印配置 */\nexport const DEFAULT_PRINT_CONFIG: PrintConfig = {\n enabled: false,\n width: 210,\n height: 297,\n marginTop: 10,\n marginBottom: 10,\n marginLeft: 10,\n marginRight: 10,\n header: { ...DEFAULT_PRINT_HEADER },\n footer: { ...DEFAULT_PRINT_FOOTER },\n watermark: { ...DEFAULT_PRINT_WATERMARK },\n};\n","import type {Cell, Head, PrintConfig, PrintAreaConfig, WatermarkConfig, ReportConfig, Options} from 'yh-report/types';\nimport {cloneDeep} from 'lodash-es';\nimport {mmToPx, getPrintContentWidthPx, getPrintContentHeightPx} from 'yh-report/libs/constants';\nimport {renderReportByDomForPrint} from 'yh-report/libs/renderByDom';\nimport {getThemeColors} from 'yh-report/libs/colors';\n\nexport interface PrintPage {\n type: 'report' | 'chart';\n dom: HTMLElement;\n heightPx: number;\n}\n\nexport function createPrintTableStyles(): HTMLStyleElement {\n const style = document.createElement('style');\n style.setAttribute('data-print-table', '');\n style.textContent = getPrintTableStylesString();\n return style;\n}\n\nfunction getPrintTableStylesString(): string {\n return `\n .print-render {\n overflow: visible;\n }\n .print-render table {\n table-layout: fixed;\n border-collapse: collapse;\n font-family: Arial, sans-serif;\n font-size: 12px;\n color: #333;\n /* 背景透明,让置底的水印透上来 */\n background-color: transparent;\n }\n .print-render table tr td {\n min-height: 20px;\n text-align: center;\n overflow: hidden;\n border: 0.5px solid #333;\n /* td border-box + height=size,行高精确等于 size(inline style 覆盖此默认值) */\n box-sizing: border-box;\n padding: 1px;\n background-color: transparent;\n }\n .print-render table tr:nth-child(even) td {\n background-color: transparent;\n }\n .print-render table tr td.fixed-td {\n background-color: transparent;\n }\n .print-render table tr td.no-border {\n border: 0;\n }\n .print-render table tr.fixed-row td {\n font-weight: bold;\n background-color: transparent;\n }\n .print-area {\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n }\n .print-area-content {\n width: 100%;\n min-height: 100%;\n box-sizing: border-box;\n }\n .print-watermark-layer {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n overflow: hidden;\n pointer-events: none;\n /* 水印置底,表格背景透明让水印透上来,文字完全不受影响 */\n z-index: 0;\n }\n .print-watermark-item {\n position: absolute;\n white-space: nowrap;\n user-select: none;\n }\n .print-page-wrapper {\n position: relative;\n width: 100%;\n }\n .print-page-wrapper > .print-render,\n .print-page-wrapper > .print-area {\n position: relative;\n z-index: 1;\n }\n `;\n}\n\nfunction getFixedRows(rowConfig: Head[]): {row: Head; index: number}[] {\n const result: {row: Head; index: number}[] = [];\n for (let i = 0; i < rowConfig.length; i++) {\n if (rowConfig[i].isFixed && !rowConfig[i].isHidden) {\n result.push({row: rowConfig[i], index: i});\n }\n }\n return result;\n}\n\nfunction fixedRowsHeight(fixedRows: {row: Head}[]): number {\n return fixedRows.reduce((sum, r) => sum + r.row.size, 0);\n}\n\nfunction getMaxRowSpanFrom(config: Cell[][], startRow: number, rowsInPage: number[]): number {\n let maxEnd = startRow;\n for (const ri of rowsInPage) {\n for (let ci = 0; ci < config[ri].length; ci++) {\n const cell = config[ri][ci];\n if (cell && cell.rowSpan > 1) {\n const endRow = cell.row + cell.rowSpan;\n if (cell.row < startRow + rowsInPage.length && endRow > startRow + rowsInPage.length) {\n maxEnd = Math.max(maxEnd, endRow);\n }\n }\n }\n }\n return maxEnd;\n}\n\nexport interface ReportSplitState {\n rowConfig: Head[];\n colConfig: Head[];\n config: Cell[][];\n fixedRows: {row: Head; index: number}[];\n fixedHeight: number;\n visibleRows: number[];\n currentRowIdx: number;\n /** 边框缺省颜色(主题色) */\n themeColor?: string;\n /** 每页预留高度(固定表头 + 页眉 + 页脚,px) */\n reservedHeight: number;\n /** 页眉配置(每页前置,可选) */\n header?: PrintAreaConfig;\n /** 页脚配置(每页后置,可选) */\n footer?: PrintAreaConfig;\n /** 水印配置(每页背景,可选) */\n watermark?: WatermarkConfig;\n /** 当前页码(用于占位符替换,从 1 开始) */\n pageNumber: number;\n /** 总页数(两趟流程第二趟回填) */\n totalPages: number;\n /** 报表标题(用于 {title} 占位符) */\n title?: string;\n}\n\nexport function createReportSplitState(\n reportConfig: ReportConfig,\n themeColor?: string,\n options?: {\n header?: PrintAreaConfig;\n footer?: PrintAreaConfig;\n watermark?: WatermarkConfig;\n title?: string;\n }\n): ReportSplitState {\n const {rowConfig, colConfig, config} = cloneDeep(reportConfig);\n const fixedRows = getFixedRows(rowConfig);\n const fixedHeight = fixedRowsHeight(fixedRows);\n const visibleRows: number[] = [];\n for (let i = 0; i < rowConfig.length; i++) {\n if (!rowConfig[i].isHidden) visibleRows.push(i);\n }\n const headerHeight = options?.header?.enabled ? mmToPx(options.header.height) : 0;\n const footerHeight = options?.footer?.enabled ? mmToPx(options.footer.height) : 0;\n const reservedHeight = fixedHeight + headerHeight + footerHeight;\n return {\n rowConfig,\n colConfig,\n config,\n fixedRows,\n fixedHeight,\n visibleRows,\n currentRowIdx: 0,\n themeColor,\n reservedHeight,\n header: options?.header,\n footer: options?.footer,\n watermark: options?.watermark,\n pageNumber: 0,\n totalPages: 0,\n title: options?.title,\n };\n}\n\n/** 替换页眉页脚内容中的占位符 */\nfunction replaceAreaPlaceholders(\n content: string,\n ctx: {page: number; total: number; title?: string}\n): string {\n const date = new Date();\n const dateStr = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n return content\n .replace(/\\{page\\}/g, String(ctx.page))\n .replace(/\\{total\\}/g, String(ctx.total))\n .replace(/\\{date\\}/g, dateStr)\n .replace(/\\{title\\}/g, ctx.title ?? '');\n}\n\n/** 渲染页眉/页脚 DOM */\nfunction renderPrintArea(\n area: PrintAreaConfig,\n ctx: {page: number; total: number; title?: string},\n align: 'left' | 'center' | 'right' = 'center'\n): HTMLElement {\n const wrapper = document.createElement('div');\n wrapper.className = 'print-area';\n wrapper.style.height = `${mmToPx(area.height)}px`;\n\n const inner = document.createElement('div');\n inner.className = 'print-area-content';\n inner.style.display = 'flex';\n inner.style.alignItems = 'center';\n inner.style.justifyContent = align === 'left' ? 'flex-start' : align === 'right' ? 'flex-end' : 'center';\n inner.style.fontSize = '12px';\n inner.style.color = '#333';\n\n let html = replaceAreaPlaceholders(area.content, ctx);\n if (area.showPageNumber) {\n const pageStr = ctx.total > 0 ? `第 ${ctx.page} 页 / 共 ${ctx.total} 页` : `第 ${ctx.page} 页`;\n html = html ? `${html} ${pageStr}` : pageStr;\n }\n inner.innerHTML = html;\n wrapper.appendChild(inner);\n return wrapper;\n}\n\n/** 渲染水印背景层(不占正文高度,绝对定位铺满父级) */\nfunction renderWatermarkLayer(wm: WatermarkConfig, containerWidthPx: number, containerHeightPx: number): HTMLElement {\n const layer = document.createElement('div');\n layer.className = 'print-watermark-layer';\n\n // 平铺水印:按字号估算单个水印尺寸,网格排布\n const fontSize = wm.fontSize;\n const itemW = wm.text.length * fontSize * 0.6 + fontSize * 2;\n const itemH = fontSize * 2;\n const cols = Math.max(1, Math.ceil(containerWidthPx / itemW));\n const rows = Math.max(1, Math.ceil(containerHeightPx / itemH));\n\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n const item = document.createElement('div');\n item.className = 'print-watermark-item';\n item.textContent = wm.text;\n item.style.fontSize = `${fontSize}px`;\n item.style.color = '#000';\n item.style.opacity = String(wm.opacity);\n item.style.transform = `rotate(${wm.rotate}deg)`;\n // 偶数行错位,避免规整网格\n const offsetX = r % 2 === 0 ? 0 : itemW / 2;\n item.style.left = `${c * itemW + offsetX}px`;\n item.style.top = `${r * itemH}px`;\n layer.appendChild(item);\n }\n }\n return layer;\n}\n\n/** 构建单页 DOM(含水印 + 页眉 + 固定表头 + 正文 + 页脚) */\nfunction buildPageDom(state: ReportSplitState, pageRows: number[], contentWidthPx: number, pageHeightPx: number): HTMLElement {\n const {rowConfig, colConfig, config, fixedRows, watermark, header, footer, pageNumber, totalPages, title} = state;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'print-page-wrapper';\n\n // 水印层(绝对定位铺满,不占高度)\n if (watermark?.enabled) {\n wrapper.appendChild(renderWatermarkLayer(watermark, contentWidthPx, pageHeightPx));\n }\n\n // 页眉\n if (header?.enabled) {\n wrapper.appendChild(renderPrintArea(header, {page: pageNumber, total: totalPages, title}, 'center'));\n }\n\n // 表格(固定表头 + 正文)\n const pageRowConfig: Head[] = [];\n const pageConfig: Cell[][] = [];\n for (const fixedRow of fixedRows) {\n pageRowConfig.push({...fixedRow.row});\n pageConfig.push(cloneDeep(config[fixedRow.index]));\n }\n for (const ri of pageRows) {\n if (rowConfig[ri].isFixed) continue;\n pageRowConfig.push({...rowConfig[ri]});\n pageConfig.push(cloneDeep(config[ri]));\n }\n const tableDom = renderReportByDomForPrint(pageRowConfig, colConfig, pageConfig, state.themeColor);\n wrapper.appendChild(tableDom);\n\n // 页脚\n if (footer?.enabled) {\n wrapper.appendChild(renderPrintArea(footer, {page: pageNumber, total: totalPages, title}, 'center'));\n }\n\n return wrapper;\n}\n\n/**\n * 切分下一页。\n * availableHeight 为「单页可用高度(已扣除上下边距)」,内部统一再减 reservedHeight(固定表头+页眉+页脚)。\n */\nexport function splitNextReportPage(\n state: ReportSplitState,\n availableHeight: number,\n contentWidthPx: number,\n pageHeightPx: number,\n force: boolean = false\n): {dom: HTMLElement; height: number} | null {\n const {rowConfig, config, reservedHeight, visibleRows} = state;\n\n if (state.currentRowIdx >= visibleRows.length) return null;\n\n // 正文可用高度 = 页面可用高度 - 预留高度(固定表头/页眉/页脚)\n const bodyAvailable = availableHeight - reservedHeight;\n\n const firstRowSize = rowConfig[visibleRows[state.currentRowIdx]].size;\n if (!force && firstRowSize > bodyAvailable) return null;\n\n let accumulated = 0;\n let pageRows: number[] = [];\n let rowIdx = state.currentRowIdx;\n\n while (rowIdx < visibleRows.length) {\n const ri = visibleRows[rowIdx];\n // td border-box + height=size,行高精确等于 size\n const rowH = rowConfig[ri].size;\n if (accumulated + rowH > bodyAvailable && pageRows.length > 0) break;\n pageRows.push(ri);\n accumulated += rowH;\n rowIdx++;\n }\n\n // 合并单元格跨页补行\n const maxEnd = getMaxRowSpanFrom(config, pageRows[0], pageRows);\n while (maxEnd > pageRows[pageRows.length - 1] + 1 && rowIdx < visibleRows.length) {\n const ri = visibleRows[rowIdx];\n pageRows.push(ri);\n accumulated += rowConfig[ri].size;\n rowIdx++;\n }\n\n // 页码递增(占位符使用)\n state.pageNumber += 1;\n const dom = buildPageDom(state, pageRows, contentWidthPx, pageHeightPx);\n state.currentRowIdx = rowIdx;\n return {dom, height: accumulated};\n}\n\n/**\n * 计算打印分页线位置(纯计算,无 DOM 副作用)。\n * 复用 createReportSplitState 的 reservedHeight + splitNextReportPage 的行高累加逻辑,\n * 但跳过 buildPageDom/measureDomHeight,用作设计态参考线。\n *\n * @param reportConfig 报表配置\n * @param availableHeight 单页可用高度(px,已扣除上下边距)\n * @param printConfig 打印配置(用于取页眉/页脚高度参与 reservedHeight)\n * @returns 每页最后一行的「原始行号」数组(即分页线落在哪一行之后)\n */\nexport function computePageBreaks(\n reportConfig: ReportConfig,\n availableHeight: number,\n printConfig?: PrintConfig\n): number[] {\n const state = createReportSplitState(reportConfig, undefined, {\n header: printConfig?.header,\n footer: printConfig?.footer,\n });\n const {rowConfig, reservedHeight, visibleRows, config} = state;\n\n const bodyAvailable = availableHeight - reservedHeight;\n const breakRows: number[] = [];\n let idx = 0;\n\n while (idx < visibleRows.length) {\n let accumulated = 0;\n let pageRows: number[] = [];\n\n while (idx < visibleRows.length) {\n const ri = visibleRows[idx];\n // td border-box + height=size,行高精确等于 size,与 splitNextReportPage 口径一致\n const rowH = rowConfig[ri].size;\n if (accumulated + rowH > bodyAvailable && pageRows.length > 0) break;\n pageRows.push(ri);\n accumulated += rowH;\n idx++;\n }\n\n // 合并单元格跨页补行\n const maxEnd = getMaxRowSpanFrom(config, pageRows[0], pageRows);\n while (maxEnd > pageRows[pageRows.length - 1] + 1 && idx < visibleRows.length) {\n const ri = visibleRows[idx];\n pageRows.push(ri);\n accumulated += rowConfig[ri].size;\n idx++;\n }\n\n breakRows.push(pageRows[pageRows.length - 1]);\n }\n\n return breakRows;\n}\n\n/** 把单报表切多页(含两趟流程:先统计总页数,再回填占位符) */\nexport function splitReportToPages(\n reportConfig: ReportConfig,\n printConfig: PrintConfig,\n themeColor?: string,\n title?: string\n): HTMLElement[] {\n const pageHeightPx = getPrintContentHeightPx(printConfig)!;\n const contentWidthPx = getPrintContentWidthPx(printConfig);\n\n // 第一趟:先切一遍得到总页数(占位符 totalPages=0,不影响行切分逻辑)\n const probeState = createReportSplitState(reportConfig, themeColor, {\n header: printConfig.header,\n footer: printConfig.footer,\n watermark: printConfig.watermark,\n title,\n });\n let totalPages = 0;\n while (probeState.currentRowIdx < probeState.visibleRows.length) {\n const result = splitNextReportPage(probeState, pageHeightPx, contentWidthPx, pageHeightPx);\n if (!result) {\n totalPages += 1;\n break;\n }\n totalPages += 1;\n }\n\n // 第二趟:重置 state,回填 totalPages,重新切分(占位符正确)\n const state = createReportSplitState(reportConfig, themeColor, {\n header: printConfig.header,\n footer: printConfig.footer,\n watermark: printConfig.watermark,\n title,\n });\n state.totalPages = totalPages;\n\n const pages: HTMLElement[] = [];\n while (state.currentRowIdx < state.visibleRows.length) {\n const result = splitNextReportPage(state, pageHeightPx, contentWidthPx, pageHeightPx);\n if (!result) {\n // 兜底:单行超高,整表渲染\n const {rowConfig, colConfig, config} = state;\n pages.push(buildPageDom({...state, pageNumber: state.pageNumber + 1}, state.visibleRows, contentWidthPx, pageHeightPx));\n break;\n }\n pages.push(result.dom);\n }\n\n return pages;\n}\n\n/**\n * 离屏测量 DOM 高度。\n * @param dom 待测 DOM\n * @param widthPx 渲染宽度(必须传入,否则无宽度约束下表格列宽塌缩、文本换行,实测高度虚高,导致分页误切)\n */\nexport function measureDomHeight(dom: HTMLElement, widthPx?: number): number {\n const container = document.createElement('div');\n container.style.cssText = 'position:absolute;left:-9999px;top:-9999px;visibility:hidden;';\n if (widthPx != null) {\n container.style.width = `${widthPx}px`;\n }\n container.appendChild(dom);\n document.body.appendChild(container);\n // 用 getBoundingClientRect 取亚像素精度,避免 scrollHeight 整数 round 在多页累积时偏移\n const height = Math.round(container.getBoundingClientRect().height);\n document.body.removeChild(container);\n return height;\n}\n\nexport function buildPrintPages(\n configs: Options[],\n tableConfigs: Map<number, ReportConfig[]>,\n printConfig: PrintConfig\n): PrintPage[][] {\n const allPages: PrintPage[][] = [];\n\n for (let i = 0; i < configs.length; i++) {\n const option = configs[i];\n if (option.type === 'report') {\n const tcList = tableConfigs.get(i);\n if (!tcList || tcList.length === 0) continue;\n for (const tc of tcList) {\n const themeColor = getThemeColors(option.theme || 'none').border;\n const pages = splitReportToPages(tc, printConfig, themeColor);\n const contentWidthPx = getPrintContentWidthPx(printConfig);\n const printPages: PrintPage[] = pages.map((dom) => ({\n type: 'report' as const,\n dom,\n heightPx: measureDomHeight(dom, contentWidthPx),\n }));\n allPages.push(printPages);\n }\n } else if (option.type === 'label') {\n continue;\n }\n // chart 类型:打印模式不再支持,跳过\n }\n\n return allPages;\n}\n\nexport interface BuildPrintDocumentOptions {\n pages: {type: string; dom: HTMLElement}[][];\n printConfig: PrintConfig;\n contentWidthPx: number;\n}\n\nexport function buildPrintDocumentHTML(options: BuildPrintDocumentOptions): string {\n const {pages, printConfig, contentWidthPx} = options;\n const pc = printConfig;\n\n const pageWidthPx = mmToPx(pc.width);\n const pageHeightMm = pc.height ? `${pc.height}mm` : 'auto';\n const pageHeightPx = pc.height ? mmToPx(pc.height) : 'auto';\n\n const pagesHTML = pages.map((pageItems) => {\n const itemsHTML = pageItems.map((item) => {\n const serializer = new XMLSerializer();\n const domHTML = serializer.serializeToString(item.dom);\n return `<div class=\"print-page-content\" style=\"width:${contentWidthPx}px\">${domHTML}</div>`;\n }).join('');\n\n return `<div class=\"print-page\" style=\"width:${pageWidthPx}px;min-width:${pageWidthPx}px;${pc.height ? `height:${pageHeightPx}px;min-height:${pageHeightPx}px;` : ''}padding:${mmToPx(pc.marginTop)}px ${mmToPx(pc.marginRight)}px ${mmToPx(pc.marginBottom)}px ${mmToPx(pc.marginLeft)}px;box-sizing:border-box\">${itemsHTML}</div>`;\n }).join('');\n\n return `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>打印预览</title>\n<style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { background: #e8e8e8; font-family: Arial, sans-serif; }\n .print-container { display: flex; flex-direction: column; align-items: center; gap: 20px; padding: 20px; }\n .print-page { background: white; box-shadow: 0 2px 8px rgba(0,0,0,0.15); flex-shrink: 0; display: flex; flex-direction: column; align-items: center; overflow: hidden; }\n .print-page-content { overflow: hidden; position: relative; }\n ${getPrintTableStylesString()}\n .print-page-content img { max-width: 100%; }\n @page {\n size: ${pc.width}mm ${pageHeightMm};\n margin: 0;\n }\n @media print {\n body { background: none; }\n .print-container { gap: 0; padding: 0; }\n .print-page { box-shadow: none; page-break-after: always; page-break-inside: avoid; margin: 0; }\n .print-page:last-child { page-break-after: auto; }\n .print-page-content { overflow: visible; }\n }\n</style>\n</head>\n<body>\n<div class=\"print-container\">${pagesHTML}</div>\n</body>\n</html>`;\n}\n","import type {\n Options,\n StatementOption,\n StatementData,\n StatementDataSource,\n statementTableConfig,\n ReportConfig,\n PrintConfig,\n} from 'yh-report/types';\nimport {getConfig} from '../api/form';\nimport {buildPrintParamsFromConfig} from 'yh-report/libs/printParams';\nimport {fetchReportData, toUpdateData} from 'yh-report/libs/fetchReportData';\nimport {getProcessData} from 'yh-report/libs/index';\nimport {renderReportToConfigs} from 'yh-report/libs/renderReportToConfigs';\nimport {\n createReportSplitState,\n splitNextReportPage,\n buildPrintDocumentHTML,\n type ReportSplitState,\n} from 'yh-report/libs/printRenderer';\nimport {renderReportByDomForPrint} from 'yh-report/libs/renderByDom';\nimport {\n DEFAULT_PRINT_CONFIG,\n mmToPx,\n getPrintContentWidthPx,\n getPrintContentHeightPx,\n} from 'yh-report/libs/constants';\nimport {getThemeColors} from 'yh-report/libs/colors';\n\n/** 浏览器打印参数(覆盖报表配置里的 printConfig,可选) */\nexport interface PrintByBrowserOptions {\n printConfig?: Partial<PrintConfig>;\n}\n\n/** 分页编排中的待处理项:原始报表配置(带主题色)/ 图片块(base64) / 强制分页符 */\ntype PendingItem =\n | {kind: 'report'; reportConfig: ReportConfig; themeColor?: string}\n | {kind: 'image'; src: string; width: number; height: number}\n | {kind: 'break'};\n\n/** 合并导出项:报表渲染配置块 / 图片块(chart、label 截图) */\nexport interface BrowserPrintItem {\n type: 'report' | 'image';\n reportConfig?: ReportConfig;\n themeColor?: string;\n src?: string;\n width?: number;\n height?: number;\n}\n\ninterface PageItem {\n type: string;\n dom: HTMLElement;\n}\n\n/**\n * 浏览器原生打印报表(不依赖 WS 打印客户端)。\n *\n * @param id 报表ID\n * @param params 数据源筛选参数 {参数名: 值},缺省用报表默认值\n * @param options 额外选项,printConfig 可覆盖报表配置里的打印设置\n *\n * @example\n * await printReportByBrowser('123456', {STARTDATE: '2026-07-01'});\n */\nexport async function printReportByBrowser(\n id: string,\n params?: Record<string, any>,\n options?: PrintByBrowserOptions\n): Promise<void> {\n // 1. 按 id 查报表配置\n const statement = await getConfig(id);\n\n // 2. 打印配置(默认值 ← 报表配置 ← 调用方覆盖)\n const printConfig: PrintConfig = {\n ...DEFAULT_PRINT_CONFIG,\n ...(statement.printConfig || {}),\n ...(options?.printConfig || {}),\n };\n\n // 3. 逐 report 子项拉数据 + 渲染 ReportConfig,收集 pendingItems\n const pendingItems = await buildPendingItems(statement.id, statement.remoteOptions || [], params || {});\n\n // 4. 分页编排(内部统一按 printConfig 注入页眉/页脚/水印)\n const pages = paginate(pendingItems, printConfig, statement.name);\n\n // 5. 生成完整 HTML\n const contentWidthPx = getPrintContentWidthPx(printConfig);\n const html = buildPrintDocumentHTML({pages, printConfig, contentWidthPx});\n\n // 6. 隐藏 iframe 调起浏览器打印\n printHTMLViaIframe(html);\n}\n\n/**\n * 遍历 remoteOptions,对每个 report 类型子项自行拉数据 + 渲染生成 ReportConfig。\n * 循环表格(loopTable)按数据源每条渲染一份,份间插入强制分页符。\n * 范式对齐 PrintPreviewDialog.silentRenderAll,确保渲染结果一致。\n */\nasync function buildPendingItems(\n id: string,\n configs: Options[],\n params: Record<string, any>\n): Promise<PendingItem[]> {\n const pendingItems: PendingItem[] = [];\n\n for (let i = 0; i < configs.length; i++) {\n const option = configs[i];\n if (option.type !== 'report') continue;\n\n const reportOption = option as StatementOption;\n const data: StatementData | undefined = reportOption.data;\n const tableConfig: statementTableConfig[] | undefined = reportOption.tableConfig;\n if (!data || !tableConfig || !data.source) continue;\n\n // ① 查询参数(调用方传入优先,缺省用报表默认值)\n const queryParams = buildPrintParamsFromConfig(reportOption, params);\n\n // ② 拉数据(全量,不分页)\n const {resData} = await fetchReportData(\n {id, data, tableConfig},\n queryParams,\n {pageSize: 5000, pageIndex: 1, total: 0, isPagination: !!data.pagination},\n true\n );\n let tableData = toUpdateData(resData);\n\n // ③ 数据处理脚本\n if (data.processData) {\n tableData = await getProcessData(data.processData, tableData, queryParams, {\n pageSize: 5000,\n pageIndex: 1,\n total: 0,\n });\n }\n\n // ④ 渲染 ReportConfig(普通 / 循环表格)\n const sources: StatementDataSource[] = data.source;\n const themeColor = getThemeColors(reportOption.theme || 'none').border;\n const loopSource = sources.find((s) => s.loopTable);\n\n if (loopSource && loopSource.key) {\n const batchConfigs = (await renderReportToConfigs(\n tableConfig,\n tableData,\n sources,\n [],\n loopSource.key\n )) as ReportConfig[][];\n for (let idx = 0; idx < batchConfigs.length; idx++) {\n if (idx > 0) pendingItems.push({kind: 'break'});\n for (const tc of batchConfigs[idx]) {\n pendingItems.push({kind: 'report', reportConfig: tc, themeColor});\n }\n }\n } else {\n const reportConfigs = (await renderReportToConfigs(\n tableConfig,\n tableData,\n sources,\n []\n )) as ReportConfig[];\n for (const tc of reportConfigs) {\n pendingItems.push({kind: 'report', reportConfig: tc, themeColor});\n }\n }\n }\n\n return pendingItems;\n}\n\n/**\n * 分页编排:把 pendingItems 切成多页 DOM。\n *\n * 逻辑移植自 PrintPreviewDialog 的 hasPagedPrint / flushPage / tryFillActiveReports:\n * - 有页高(printConfig.height)时按页高切分,报表可跨页续接;\n * - 无页高时整张报表渲染进单页,份间用空白分隔(marginTop+marginBottom 撑高)。\n */\nfunction paginate(\n pendingItems: PendingItem[],\n printConfig: PrintConfig,\n title?: string\n): PageItem[][] {\n const pageHeightPx = getPrintContentHeightPx(printConfig);\n const hasPagedPrint = pageHeightPx != null;\n const contentWidthPx = getPrintContentWidthPx(printConfig);\n\n // 分页状态公共入参:页眉/页脚/水印/标题随调用方 printConfig 生效\n const splitStateOptions = {\n header: printConfig.header,\n footer: printConfig.footer,\n watermark: printConfig.watermark,\n title,\n };\n\n const allPages: {items: PageItem[]}[] = [];\n let currentPageItems: PageItem[] = [];\n let currentPageHeight = 0;\n const activeReports: ReportSplitState[] = [];\n\n function flushPage() {\n if (currentPageItems.length > 0) {\n allPages.push({items: currentPageItems});\n currentPageItems = [];\n currentPageHeight = 0;\n }\n }\n\n function tryFillActiveReports() {\n if (!hasPagedPrint) return;\n while (activeReports.length > 0) {\n const report = activeReports[0];\n const remaining = pageHeightPx! - currentPageHeight;\n if (remaining <= 0) {\n if (currentPageItems.length === 0) break;\n flushPage();\n continue;\n }\n\n let result = splitNextReportPage(report, remaining, contentWidthPx, pageHeightPx!);\n if (!result) {\n if (currentPageItems.length > 0) {\n flushPage();\n continue;\n }\n result = splitNextReportPage(report, remaining, contentWidthPx, pageHeightPx!, true);\n }\n\n currentPageItems.push({type: 'report', dom: result.dom});\n currentPageHeight += result.height;\n\n if (report.currentRowIdx >= report.visibleRows.length) {\n activeReports.shift();\n }\n }\n }\n\n if (!hasPagedPrint) {\n const spacerHeight = mmToPx(printConfig.marginTop + printConfig.marginBottom);\n const pageItems: PageItem[] = [];\n for (const item of pendingItems) {\n if (item.kind === 'break') {\n const spacer = document.createElement('div');\n spacer.style.height = `${spacerHeight}px`;\n pageItems.push({type: 'spacer', dom: spacer});\n continue;\n }\n if (item.kind === 'image') {\n pageItems.push({type: 'image', dom: createImageDom(item.src, item.width, item.height)});\n continue;\n }\n // 无页高:单页整表渲染,不走分页\n const {rowConfig, colConfig, config} = item.reportConfig;\n const dom = renderReportByDomForPrint(rowConfig, colConfig, config, item.themeColor);\n pageItems.push({type: 'report', dom});\n }\n allPages.push({items: pageItems});\n } else {\n for (const item of pendingItems) {\n if (item.kind === 'break') {\n flushPage();\n continue;\n }\n // 图片块不可分割:放不下就换页,超页高等比缩放到页高\n if (item.kind === 'image') {\n let imgWidth = item.width;\n let imgHeight = item.height;\n if (imgHeight > pageHeightPx!) {\n const scale = pageHeightPx! / imgHeight;\n imgWidth = Math.round(imgWidth * scale);\n imgHeight = pageHeightPx!;\n }\n if (imgHeight > pageHeightPx! - currentPageHeight && currentPageItems.length > 0) {\n flushPage();\n }\n currentPageItems.push({type: 'image', dom: createImageDom(item.src, imgWidth, imgHeight)});\n currentPageHeight += imgHeight;\n continue;\n }\n const report = createReportSplitState(item.reportConfig, item.themeColor, splitStateOptions);\n tryFillActiveReports();\n\n const remaining = pageHeightPx! - currentPageHeight;\n const firstResult = splitNextReportPage(report, remaining, contentWidthPx, pageHeightPx!);\n\n if (firstResult) {\n currentPageItems.push({type: 'report', dom: firstResult.dom});\n currentPageHeight += firstResult.height;\n\n if (report.currentRowIdx < report.visibleRows.length) {\n activeReports.push(report);\n }\n } else {\n if (currentPageItems.length > 0) {\n flushPage();\n }\n activeReports.push(report);\n }\n }\n\n tryFillActiveReports();\n flushPage();\n }\n\n return allPages.map((p) => p.items);\n}\n\n/**\n * 隐藏 iframe 写入 HTML 并调起浏览器打印对话框。\n * 范式抄自 PrintPreviewDialog.handlePrint:离屏 iframe → write(html) → print() → 移除。\n */\nfunction printHTMLViaIframe(html: string): void {\n const iframe = document.createElement('iframe');\n iframe.style.position = 'fixed';\n iframe.style.left = '-9999px';\n iframe.style.top = '-9999px';\n iframe.style.width = '0';\n iframe.style.height = '0';\n iframe.style.border = 'none';\n document.body.appendChild(iframe);\n\n const doc = iframe.contentDocument!;\n doc.open();\n doc.write(html);\n doc.close();\n\n iframe.onload = () => {\n iframe.contentWindow!.print();\n setTimeout(() => {\n iframe.remove();\n }, 500);\n };\n}\n\n/** 图片打印块 DOM */\nfunction createImageDom(src: string, width: number, height: number): HTMLElement {\n const img = document.createElement('img');\n img.src = src;\n img.style.width = `${width}px`;\n img.style.height = `${height}px`;\n return img;\n}\n\n/**\n * 合并导出为 PDF:报表渲染块与图片块(chart、label 截图)按画布顺序混排分页,\n * 走浏览器打印对话框(浏览器里\"另存为 PDF\"落文件)。\n *\n * @param items 有序导出项(报表 ReportConfig 块 / 图片 base64 块)\n * @param printConfig 打印配置(页宽高、边距、页眉页脚、水印)\n * @param title 文档标题(默认值时随页眉生效)\n */\nexport function exportReportByBrowser(\n items: BrowserPrintItem[],\n printConfig: PrintConfig,\n title?: string\n): void {\n const pendingItems: PendingItem[] = [];\n items.forEach((item, idx) => {\n if (idx > 0) pendingItems.push({kind: 'break'});\n if (item.type === 'report' && item.reportConfig) {\n pendingItems.push({kind: 'report', reportConfig: item.reportConfig, themeColor: item.themeColor});\n } else if (item.type === 'image' && item.src) {\n pendingItems.push({kind: 'image', src: item.src, width: item.width || 600, height: item.height || 400});\n }\n });\n const pages = paginate(pendingItems, printConfig, title);\n const contentWidthPx = getPrintContentWidthPx(printConfig);\n const html = buildPrintDocumentHTML({pages, printConfig, contentWidthPx});\n printHTMLViaIframe(html);\n}\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));","import dayjs from 'dayjs';\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear';\nimport {DataParamDateTypes} from 'yh-report/types';\n\n// 季度取值(startOf/endOf('quarter'))依赖该插件\ndayjs.extend(quarterOfYear);\n\n/** 日期范围类型(ElDatePicker 的 *range 视图) */\nexport const DATE_RANGE_TYPES: string[] = [\n DataParamDateTypes.DATERANGE,\n DataParamDateTypes.DATETIMERANGE,\n DataParamDateTypes.MONTHRANGE,\n DataParamDateTypes.YEARRANGE,\n];\n\n/** 月/年范围:选择的是周期,查询值需扩展为该周期起止 */\nexport const DATE_RANGE_PERIOD_UNIT: Record<string, string> = {\n [DataParamDateTypes.MONTHRANGE]: 'month',\n [DataParamDateTypes.YEARRANGE]: 'year',\n};\n\n/** 各日期视图的显示格式 */\nexport const DATE_VIEW_FORMAT: Record<string, string> = {\n [DataParamDateTypes.QUARTER]: 'YYYY[Q]Q',\n [DataParamDateTypes.MONTHRANGE]: 'YYYY-MM',\n [DataParamDateTypes.YEARRANGE]: 'YYYY',\n};\n\n/** 班次时间段:开始/结束为相对当天 0 点的偏移分钟数(负数=前一天,超 1440=次日) */\nexport interface ShiftSegment {\n /** 班次名称 */\n label: string;\n /** 开始偏移分钟数(-2879~2879) */\n startMinutes: number;\n /** 结束偏移分钟数(-2879~2879) */\n endMinutes: number;\n}\n\nconst SHIFT_TIME_RE = /^\\d{1,2}(?::\\d{1,2})?$/;\n\n/** '-4:00'、'8:00'、'+8:00'(相对当天 0 点的偏移时分)→ 分钟数,无效返回 null */\nexport function parseShiftOffset(text?: string): number | null {\n if (!text) return null;\n const raw = text.trim();\n if (!SHIFT_TIME_RE.test(raw.replace(/^[+-]/, ''))) return null;\n const [hours, minutes] = raw.replace(/^[+-]/, '').split(':').map(Number);\n if (hours > 47 || minutes > 59) return null;\n return (raw.startsWith('-') ? -1 : 1) * (hours * 60 + (minutes || 0));\n}\n\n/** 偏移分钟 → 前一天/当天/次日 n 时(如 -240 → 前一天 20:00) */\nexport function formatShiftOffset(minutes: number): string {\n if (minutes < 0) return `前一天 ${offsetMinutesToText(minutes + 1440)}`;\n if (minutes >= 1440) return `次日 ${offsetMinutesToText(minutes - 1440)}`;\n return `当天 ${offsetMinutesToText(minutes)}`;\n}\n\n/** 分钟数 → HH:mm 文本 */\nfunction offsetMinutesToText(minutes: number): string {\n return `${String(Math.floor(minutes / 60)).padStart(2, '0')}:${String(minutes % 60).padStart(2, '0')}`;\n}\n\n/**\n * 解析班次配置:'名称|开始|结束' 逗号分隔;开始/结束均为相对当天 0 点的正负时分\n * 如 晚班|-4:00|8:00(前一天20点 ~ 当天8点)、早班|8:00|20:00;无效段忽略\n */\nexport function parseShiftConfig(config?: string): ShiftSegment[] {\n if (!config) return [];\n const parts = config.split(',').map((part) => part.trim()).filter(Boolean);\n const segments: ShiftSegment[] = [];\n parts.forEach((part, index) => {\n const fields = part.split('|').map((field) => field.trim());\n if (fields.length !== 3) return;\n const [label, startText, endText] = fields;\n const startMinutes = parseShiftOffset(startText);\n const endMinutes = parseShiftOffset(endText);\n // 起止缺失或结束为 0 的段无意义,丢弃\n if (startMinutes === null || !endMinutes) return;\n let name = label;\n if (!name) {\n name = parts.length === 2 ? (index === 0 ? '早班' : '晚班') : parts.length === 3 ? ['早班', '中班', '晚班'][index] : `班次${index + 1}`;\n }\n segments.push({label: name, startMinutes, endMinutes});\n });\n return segments;\n}\n\nexport function getDateRanges() {\n const dateFormat = 'YYYY-MM-DD HH:mm:ss';\n\n // 当前日期相关\n const today = dayjs();\n\n // 今日\n const thisDayStart = today.startOf('day').format(dateFormat);\n const thisDayEnd = today.endOf('day').format(dateFormat);\n\n // 本周\n const thisWeekStart = today.startOf('week').format(dateFormat);\n const thisWeekEnd = today.endOf('week').format(dateFormat);\n\n // 本月 / 上月\n const thisMonthStart = today.startOf('month').format(dateFormat);\n const thisMonthEnd = today.endOf('month').format(dateFormat);\n const lastMonthStart = today.subtract(1, 'month').startOf('month').format(dateFormat);\n const lastMonthEnd = today.subtract(1, 'month').endOf('month').format(dateFormat);\n\n // 本季度 / 上季度\n const thisQuarterStart = today.startOf('quarter').format(dateFormat);\n const thisQuarterEnd = today.endOf('quarter').format(dateFormat);\n const lastQuarterStart = today.subtract(1, 'quarter').startOf('quarter').format(dateFormat);\n const lastQuarterEnd = today.subtract(1, 'quarter').endOf('quarter').format(dateFormat);\n\n // 本年 / 去年\n const thisYearStart = today.startOf('year').format(dateFormat);\n const thisYearEnd = today.endOf('year').format(dateFormat);\n const lastYearStart = today.subtract(1, 'year').startOf('year').format(dateFormat);\n const lastYearEnd = today.subtract(1, 'year').endOf('year').format(dateFormat);\n\n // 当前时间\n const now = today.format(dateFormat);\n\n // 过去时间段\n const twoDay = today.subtract(2, 'day').format(dateFormat);\n const threeDay = today.subtract(3, 'day').format(dateFormat);\n const sevenDay = today.subtract(7, 'day').format(dateFormat);\n const fifteenDay = today.subtract(15, 'day').format(dateFormat);\n const thirtyDay = today.subtract(30, 'day').format(dateFormat);\n const twoWeek = today.subtract(2, 'week').startOf('week').format(dateFormat);\n const twoMonth = today.subtract(2, 'month').format(dateFormat);\n const threeMonth = today.subtract(3, 'month').format(dateFormat);\n const sixMonth = today.subtract(6, 'month').format(dateFormat);\n const oneYear = today.subtract(1, 'year').startOf('year').format(dateFormat);\n const twoYear = today.subtract(2, 'year').startOf('year').format(dateFormat);\n const threeYear = today.subtract(3, 'year').format(dateFormat);\n const fiveYear = today.subtract(5, 'year').format(dateFormat);\n\n return {\n dateFormat,\n thisDayStart,\n thisDayEnd,\n thisWeekStart,\n thisWeekEnd,\n thisMonthStart,\n thisMonthEnd,\n lastMonthStart,\n lastMonthEnd,\n thisQuarterStart,\n thisQuarterEnd,\n lastQuarterStart,\n lastQuarterEnd,\n thisYearStart,\n thisYearEnd,\n lastYearStart,\n lastYearEnd,\n now,\n twoDay,\n threeDay,\n sevenDay,\n fifteenDay,\n thirtyDay,\n twoWeek,\n twoMonth,\n threeMonth,\n sixMonth,\n oneYear,\n twoYear,\n threeYear,\n fiveYear,\n };\n}\n\n/**\n * 根据数据类型,获取表单配置\n */\nexport function componentTransition(dataType, dateType = 'date') {\n let componentName = 'ElInput';\n let placeholerPrefix = '筛选';\n let type = '';\n switch (dataType) {\n case 'STRING':\n componentName = 'ElInput';\n placeholerPrefix = '筛选';\n type = 'text';\n break;\n case 'LIST':\n componentName = 'ElSelect';\n placeholerPrefix = '请选择';\n break;\n case 'TABLE':\n componentName = 'ElSelect';\n placeholerPrefix = '请选择';\n break;\n case 'TREE':\n componentName = 'ElTreeSelect';\n placeholerPrefix = '请选择';\n break;\n case 'EDITOR':\n componentName = 'ElInput';\n placeholerPrefix = '筛选';\n type = 'textarea';\n break;\n case 'BOOL':\n componentName = 'ElSwitch';\n placeholerPrefix = '请选择';\n break;\n case 'LONG':\n componentName = 'ElInput';\n type = 'number';\n placeholerPrefix = '筛选';\n break;\n case 'PLONG':\n componentName = 'ElInput';\n type = 'number';\n placeholerPrefix = '筛选';\n break;\n case 'DOUBLE':\n componentName = 'ElInput';\n type = 'number';\n placeholerPrefix = '筛选';\n break;\n case 'DATE':\n case 'DATETIME':\n componentName = 'ElDatePicker';\n placeholerPrefix = '请选择';\n type = dateType;\n break;\n case 'TIME':\n componentName = 'ElTimePicker';\n placeholerPrefix = '请选择';\n type = 'time';\n break;\n case 'TEXT':\n componentName = 'ElInput';\n placeholerPrefix = '筛选';\n type = 'text';\n break;\n case 'COLOR':\n componentName = 'ElColorPicker';\n placeholerPrefix = '请选择';\n break;\n default:\n componentName = 'ElInput';\n placeholerPrefix = '筛选';\n type = 'text';\n break;\n }\n return {componentName, placeholerPrefix, type};\n}\n","<template>\n <div class=\"yh-report-view-conditions\">\n <el-form inline>\n <el-form-item\n v-for=\"item in paramsConfig\"\n v-bind=\"getFormItemProps(item)\"\n v-show=\"item.isShow\">\n <component\n :is=\"item.formItemType\"\n v-bind=\"getFormItemContentProps(item)\"\n :style=\"{width: `${item.elWidth}px`}\"\n v-if=\"item.formItemType === 'ElSelect'\">\n <el-option\n v-for=\"option in item.optionData\"\n :key=\"option.value\"\n :label=\"option.label\"\n :value=\"option.value\"></el-option>\n </component>\n <component\n :is=\"item.formItemType\"\n :style=\"{width: `${item.elWidth}px`}\"\n v-bind=\"getFormItemContentProps(item)\"\n v-else></component>\n <el-select\n v-if=\"item.formItemType === 'ElDatePicker' && item.type === 'date' && item.shiftSegments?.length\"\n class=\"shift-select\"\n clearable\n :model-value=\"item.shiftValue\"\n :placeholder=\"rct('全部班次')\"\n @change=\"(val) => shiftChangeHandler(val, item)\">\n <el-option\n value=\"\"\n :label=\"rct('全部班次')\"></el-option>\n <el-option\n v-for=\"(seg, index) in item.shiftSegments\"\n :key=\"index\"\n :value=\"String(index)\"\n :label=\"seg.label\"></el-option>\n </el-select>\n </el-form-item>\n </el-form>\n <slot name=\"search\"></slot>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {nextTick, onMounted, ref, watch, computed, reactive, triggerRef} from 'vue';\nimport {useRoute} from 'vue-router';\nimport {rct} from \"../../index\";\nimport {ElForm, ElFormItem, ElInput, ElSelect, ElOption, ElTreeSelect, ElSwitch, ElInputNumber, ElDatePicker, ElTimePicker, ElColorPicker} from 'element-plus';\nimport dayjs from 'dayjs';\nimport {getDateRanges, componentTransition, DATE_RANGE_TYPES, DATE_RANGE_PERIOD_UNIT, DATE_VIEW_FORMAT, parseShiftConfig, formatShiftOffset, type ShiftSegment} from 'yh-report/libs/conditions';\n// @ts-ignore\nimport axios from '@/libs/api.request.js';\nimport {DataParam, DataSourceColumnDataType, DataParamDateTypes, StatementData} from 'yh-report/types';\nimport {cloneDeep, get, range} from 'lodash-es';\nimport {on} from 'yh-report/libs/customEvent';\nimport {createGroupSortComparator} from 'yh-report/libs/util';\n\ninterface conditionDataParams extends DataParam {\n optionData?: {label: string; value: any}[];\n /** 远程搜索请求进行中标记 */\n selectorLoading?: boolean;\n placeholder: string;\n value: any;\n formItemType: string;\n /** 日视图班次段(shifts 配置解析结果) */\n shiftSegments?: ShiftSegment[];\n /** 选中班次下标文本,''=全部班次 */\n shiftValue?: string;\n}\n\ninterface Param {\n name: string;\n value: any;\n type: string;\n isNull: boolean;\n}\n\nconst props = defineProps<{\n config: DataParam[];\n data: StatementData;\n}>();\n\nconst emits = defineEmits<{\n (e: 'change', val: any);\n (e: 'addCell', val: string);\n}>();\n\nconst route = useRoute();\n\nconst {dateFormat, thisDayStart, thisDayEnd, thisWeekStart, thisWeekEnd, thisMonthStart, thisMonthEnd, lastMonthStart, lastMonthEnd, thisQuarterStart, lastQuarterStart, thisYearStart, thisYearEnd, lastYearStart, lastYearEnd, now, twoDay, threeDay, sevenDay, fifteenDay, thirtyDay, twoWeek, twoMonth, threeMonth, sixMonth, oneYear, twoYear, threeYear, fiveYear} = getDateRanges();\n\nconst params = ref<Param[]>([]);\nconst paramsConfig = ref<conditionDataParams[]>([]);\nconst paramsConfigObj = computed<Record<string, conditionDataParams>>(() => {\n let obj = reactive<Record<string, conditionDataParams>>({});\n paramsConfig.value.forEach((item) => {\n obj[item.columnName] = item;\n });\n return obj;\n});\nlet initChange = false;\n\nwatch(\n () => props.config,\n () => {\n config2pc();\n },\n {\n immediate: true,\n deep: true,\n }\n);\n// 优化后的代码结构示例\nfunction config2pc() {\n initChange = false;\n\n let pc: conditionDataParams[] = [];\n params.value = [];\n const selectorPromises: Promise<void>[] = []; // 收集所有异步请求\n\n if (props.config && props.config.length) {\n for (let i = 0; i < props.config.length; i++) {\n const config = cloneDeep(props.config[i]);\n let {dataType, dateType, type, selectorId, remoteSearch, cellIndex, cellIndexSort, cellIndexSortOrder, cellIndexSortNumeric, name, columnName, defaultValue, isNull} = config;\n let isDate = [DataSourceColumnDataType.DATE, DataSourceColumnDataType.DATETIME].includes(dataType);\n const {componentName, placeholerPrefix, type: ElementType} = componentTransition(dataType, dateType);\n\n let param: conditionDataParams = {\n ...config,\n elWidth: config.elWidth || 210,\n formItemType: componentName,\n placeholder: rct(placeholerPrefix + name || columnName),\n type: ElementType || '',\n optionData: [],\n value: '',\n shiftSegments: [],\n shiftValue: '',\n };\n // 仅日视图解析班次配置\n param.shiftSegments = dateType === DataParamDateTypes.DATE ? parseShiftConfig(config.shifts) : [];\n param.value = getDefaultValue(param, isDate);\n\n // 处理默认值\n params.value.push({\n name: columnName,\n value: param.value,\n type,\n isNull,\n });\n\n // 处理选项数据:customOptions 非空时优先,不再走后端选择器/单元格\n if (config.customOptions) {\n param.optionData = config.customOptions\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean)\n .map((item) => ({label: item, value: item}));\n } else if (selectorId) {\n // 远程搜索模式默认拉取部分数据(remote: true),不阻塞首次查询;普通模式拉全量供本地过滤\n const promise = fetchSelectorData(selectorId, param, '', remoteSearch);\n if (!remoteSearch) {\n selectorPromises.push(promise); // 收集Promise\n }\n } else if (cellIndex) {\n emits('addCell', cellIndex);\n on(`cell-change:${cellIndex}`, (val: any) => {\n val = Object.values(val);\n if (val && Array.isArray(val) && val.length) {\n if (cellIndexSort) {\n const cmp = createGroupSortComparator({order: cellIndexSortOrder, numeric: cellIndexSortNumeric});\n val.sort((a, b) => cmp(a.label, b.label));\n }\n param.optionData = val;\n triggerRef(paramsConfig);\n }\n });\n }\n\n pc.push(param);\n\n // 处理范围查询\n if (type === 'LT_GT_EQ' && !isDate) {\n addRangeEndParam(param, pc, placeholerPrefix, type);\n }\n }\n }\n\n paramsConfig.value = pc;\n\n // URL 上未在查询参数配置中声明的参数不生成查询控件,直接透传给数据源\n // (打印模式无参数配置界面,依赖 URL 传参,必须透传)\n appendExtraQueryParams();\n\n // 等待所有异步请求完成后触发\n nextTick(async () => {\n // 等待所有选择器数据加载完成(无论成功或失败)\n if (selectorPromises.length > 0) {\n await Promise.allSettled(selectorPromises);\n }\n\n // 所有异步任务完成后,判断是否触发changeValue\n if (!initChange) {\n changeValue();\n }\n });\n}\n\n// 追加 URL 中未在查询参数配置中声明的透传参数:不生成查询控件,仅随请求发给数据源\nfunction appendExtraQueryParams() {\n Object.entries(route.query).forEach(([name, value]) => {\n if (!name || value === null || value === undefined || value === '') return;\n const valueStr = Array.isArray(value) ? value.join(',') : value;\n const existIndex = params.value.findIndex((item) => item.name === name);\n if (existIndex > -1) {\n // 范围查询自动生成的 end_ 参数默认取 defaultValue,URL 有值时优先,并同步到\"结束\"控件显示\n if (name.indexOf('end_') === 0) {\n params.value[existIndex].value = valueStr;\n const endItem = paramsConfig.value.find((item) => item.columnName === name);\n if (endItem) {\n endItem.value = valueStr;\n }\n }\n return;\n }\n params.value.push({name, value: valueStr, type: 'EQ', isNull: false});\n });\n}\n\n// 提取默认值处理逻辑\nfunction getDefaultValue(param, isDate) {\n let {dataType, dateType, defaultValue, startTime, endTime, columnName} = param;\n let paramValue = defaultValue || '';\n\n if (isDate && defaultValue) {\n if (dateType) {\n param.type = dateType;\n }\n let isRange = dateType && DATE_RANGE_TYPES.includes(dateType);\n\n if (isRange) {\n paramValue = getRangeDefaultValue(defaultValue, startTime, endTime);\n } else {\n paramValue = getSingleDateDefaultValue(dateType, defaultValue, startTime);\n }\n } else if ([DataSourceColumnDataType.LIST, DataSourceColumnDataType.TABLE].includes(dataType)) {\n if (Array.isArray(paramValue)) {\n return paramValue;\n }\n if (route.query[columnName]) {\n let queryVal = route.query[columnName];\n paramValue = Array.isArray(queryVal) ? queryVal : String(queryVal).split(',');\n } else if (typeof paramValue === 'string' && paramValue) {\n paramValue = paramValue.split(',');\n } else {\n paramValue = [];\n }\n } else {\n if (route.query[columnName]) {\n paramValue = route.query[columnName];\n }\n }\n\n return paramValue;\n}\n\n// 提取范围默认值处理\nfunction getRangeDefaultValue(defaultValue, startTime, endTime) {\n const rangeDefaults = {\n thisDay: [thisDayStart, thisDayEnd],\n thisMonth: [thisMonthStart, thisMonthEnd],\n lastMonth: [lastMonthStart, lastMonthEnd],\n thisYear: [thisYearStart, thisYearEnd],\n lastYear: [lastYearStart, lastYearEnd],\n now: [thisDayStart, now],\n twoDay: [twoDay, now],\n threeDay: [threeDay, now],\n sevenDay: [sevenDay, now],\n fifteenDay: [fifteenDay, now],\n thirtyDay: [thirtyDay, now],\n threeMonth: [threeMonth, now],\n sixMonth: [sixMonth, now],\n oneYear: [oneYear, now],\n twoYear: [twoYear, now],\n threeYear: [threeYear, now],\n fiveYear: [fiveYear, now],\n };\n let rangeDefaultValue = rangeDefaults[defaultValue] || [thisDayStart, thisDayEnd];\n if (startTime) {\n rangeDefaultValue[0] = dateTimeChange(rangeDefaultValue[0], startTime, dateFormat);\n }\n if (endTime) {\n rangeDefaultValue[1] = dateTimeChange(rangeDefaultValue[1], endTime, dateFormat);\n }\n return rangeDefaultValue;\n}\n\n// 提取单个日期默认值处理\nfunction getSingleDateDefaultValue(dateType, defaultValue, startTime) {\n const singleDefualts = {\n thisYear: thisYearStart,\n twoYear: twoYear,\n threeYear: threeYear,\n fiveYear: fiveYear,\n thisMonth: thisMonthStart,\n twoMonth: twoMonth,\n threeMonth: threeMonth,\n sixMonth: sixMonth,\n thisWeek: thisWeekStart,\n twoWeek: twoWeek,\n thisQuarter: thisQuarterStart,\n lastQuarter: lastQuarterStart,\n now: now,\n thisDay: thisDayStart,\n twoDay: twoDay,\n threeDay: threeDay,\n sevenDay: sevenDay,\n fifteenDay: fifteenDay,\n thirtyDay: thirtyDay,\n };\n\n let singleDefualtValue = singleDefualts[defaultValue];\n if (!singleDefualtValue) {\n let dateTypeStart = dayjs().startOf(dateType);\n if (dateTypeStart.isValid()) {\n singleDefualtValue = dateTypeStart.format(dateFormat);\n } else {\n singleDefualtValue = now;\n }\n }\n if (startTime) {\n singleDefualtValue = dateTimeChange(singleDefualtValue, startTime, dateFormat);\n }\n return singleDefualtValue;\n}\n\n// 提取选项数据获取逻辑(f_value 为空取默认数据;remote 为 true 时接口仅返回部分数据,配合远程搜索)\nfunction fetchSelectorData(selectorId, param, fValue = '', remote = false): Promise<void> {\n return axios\n .request({\n url: '/sysSelector/list',\n method: 'POST',\n data: {id: selectorId, f_value: fValue, remote},\n })\n .then((data) => {\n if (data.data && Array.isArray(data.data.data)) {\n param.optionData = data.data.data.map(({NAME, VALUE}) => {\n return {\n label: NAME,\n value: VALUE,\n };\n });\n triggerRef(paramsConfig);\n }\n })\n .catch((error) => {\n console.warn(`选择器 ${selectorId} 数据加载失败:`, error);\n param.optionData = [];\n });\n}\n\n// 远程搜索:按关键字拉取选项(f_value 中英文匹配名称)\nfunction searchSelectorOptions(query: string, item: conditionDataParams) {\n if (!item.selectorId) return;\n item.selectorLoading = true;\n axios\n .request({\n url: '/sysSelector/list',\n method: 'POST',\n data: {id: item.selectorId, f_value: query, remote: true},\n })\n .then((data) => {\n if (data.data && Array.isArray(data.data.data)) {\n item.optionData = data.data.data.map(({NAME, VALUE}) => ({\n label: NAME,\n value: VALUE,\n }));\n }\n })\n .finally(() => {\n item.selectorLoading = false;\n triggerRef(paramsConfig);\n });\n}\n\n// 提取范围查询结束字段处理逻辑\nfunction addRangeEndParam(param, pc, placeholerPrefix, filterType) {\n const {columnName, defaultValue, isNull} = param;\n\n param.placeholder = rct(placeholerPrefix + '开始');\n const endParam = cloneDeep(param);\n endParam.name = '-';\n endParam.columnName = `end_${columnName}`;\n endParam.placeholder = rct(placeholerPrefix + '结束');\n let endParamValue = defaultValue || '';\n\n params.value.push({\n name: `end_${columnName}`,\n value: endParamValue,\n type: filterType,\n isNull,\n });\n\n if (param.selectorId) {\n fetchSelectorData(param.selectorId, endParam, '', !!param.remoteSearch);\n }\n\n pc.push(endParam);\n}\n\nfunction getFormItemProps(item) {\n return {\n label: rct(item.name),\n required: item.isNull,\n style: item.columnName.indexOf('end_') > -1 ? {marginLeft: '-22px'} : {},\n };\n}\n\nfunction getFormItemContentProps(item) {\n const props: any = {\n modelValue: item.value,\n type: item.type,\n clearable: true,\n placeholder: item.placeholder,\n 'onUpdate:modelValue': (value) => valueChangeHandler(value, item),\n };\n\n if (item.formItemType === 'ElDatePicker') {\n props['value-format'] = dateFormat;\n // 范围视图:双视图时左右面板不关联(可分别切换年月);配置单视图时只显示一个面板\n if (DATE_RANGE_TYPES.includes(item.type)) {\n props.unlinkPanels = true;\n props.singlePanel = !!item.singlePanel;\n }\n // 季度及月/年/季度范围的显示格式(周期类选择只显示到粒度,不带日)\n if (DATE_VIEW_FORMAT[item.type]) {\n props.format = DATE_VIEW_FORMAT[item.type];\n }\n }\n\n if (['ElInput'].includes(item.formItemType)) {\n props.onBlur = () => changeHandler(item, 'blur');\n props.onKeyup = (e) => {\n if (e.key === 'Enter') {\n changeHandler(item, 'enter');\n }\n };\n }\n if (['ElSelect'].includes(item.formItemType)) {\n props.multiple = true;\n props.collapseTags = true;\n props.filterable = true;\n // 开启远程搜索的选项ID下拉:关键字交由 sysSelector/list 过滤\n if (item.remoteSearch && item.selectorId) {\n props.remote = true;\n props.remoteMethod = (query: string) => searchSelectorOptions(query, item);\n props.loading = item.selectorLoading;\n }\n }\n return props;\n}\n\nfunction valueChangeHandler(val, param) {\n let index = params.value.findIndex((item) => {\n return item.name === param.columnName;\n });\n param.value = val;\n params.value[index].value = val;\n if (['ElSelect', 'ElTreeSelect', 'ElSwitch', 'ElDatePicker', 'ElTimePicker', 'ElColorPicker'].includes(param.formItemType)) {\n if (!props.data.searchOnBlur) {\n return false;\n }\n initChange = true;\n changeValue();\n }\n}\n\nfunction changeHandler(item, type) {\n if (['ElInput', 'ElInputNumber'].includes(item.formItemType)) {\n if (type === 'blur' && !props.data.searchOnBlur) {\n return false;\n }\n initChange = true;\n changeValue();\n }\n}\n\n/** 班次切换:记录选中段,沿用日期控件的查询触发时机 */\nfunction shiftChangeHandler(val: string, param: conditionDataParams) {\n param.shiftValue = val || '';\n if (!props.data.searchOnBlur) {\n return false;\n }\n initChange = true;\n changeValue();\n}\n\nfunction dateTimeChange(val, time, format) {\n if (time && val) {\n let timeChanges = time.split(',').map((item) => {\n let index = item.match(/[-+]/).index;\n let count = Number(item.substring(index));\n let type = item.substring(0, index);\n return {\n count,\n type,\n };\n });\n let $val = dayjs(val);\n if ($val.isValid()) {\n timeChanges.forEach(({count, type}) => {\n $val = $val.add(count, type);\n });\n val = $val.format(format);\n }\n }\n return val;\n}\n\nfunction changeValue() {\n let paramsVal = cloneDeep(params.value);\n paramsVal.forEach(({name, value, type, isNull}, index) => {\n let param = paramsConfigObj.value[name];\n // 透传参数不在查询参数配置中,无 dataType/dateType,仅做数组转字符串\n if (!param) {\n if (Array.isArray(value)) {\n paramsVal[index].value = value.join(',');\n }\n return;\n }\n let isDate = [DataSourceColumnDataType.DATE, DataSourceColumnDataType.DATETIME].includes(param.dataType);\n if (isDate && value) {\n let isRagen = param.dateType && DATE_RANGE_TYPES.includes(param.dateType);\n if (isRagen && value && value.length === 2) {\n let [startVal, endVal] = value;\n // 月/年/季度范围选择的是周期,扩展为该周期起止,保证结束值包含整个周期(如选中月为该月末)\n const periodUnit = DATE_RANGE_PERIOD_UNIT[param.dateType];\n if (periodUnit) {\n const $start = dayjs(startVal);\n const $end = dayjs(endVal);\n if ($start.isValid()) {\n startVal = $start.startOf(periodUnit).format(dateFormat);\n }\n if ($end.isValid()) {\n endVal = $end.endOf(periodUnit).format(dateFormat);\n }\n }\n paramsVal[index].value = startVal;\n\n let endColumnName = `end_${param.columnName}`;\n // URL 透传的 end_ 参数优先,已存在时不再追加拆分值\n if (!paramsVal.some((item) => item.name === endColumnName)) {\n paramsVal.push({\n name: endColumnName,\n value: endVal,\n type: type,\n isNull: isNull,\n });\n }\n } else {\n let $val = dayjs(value);\n if ($val.isValid() && param.dateType) {\n // 日视图选中具体班次:按班次起止合成(跨天班次以选中日期为班次结束日:选 1 号 + 晚班20:00-08:00 查询 31 号 20:00 ~ 1 号 08:00)\n const shiftIndex = param.shiftValue ? Number(param.shiftValue) : -1;\n const seg = param.dateType === DataParamDateTypes.DATE ? (param.shiftSegments || [])[shiftIndex] : undefined;\n if (seg) {\n const day = $val.startOf('day');\n // 开始以当天 0 点为基准;结束可超 24 点(dayjs add 自然落到次日),选中日即班次开始日\n paramsVal[index].value = day.add(seg.startMinutes, 'minute').format(dateFormat);\n\n let endColumnName = `end_${param.columnName}`;\n // URL 透传的 end_ 参数优先,已存在时不再追加拆分值\n if (!paramsVal.some((item) => item.name === endColumnName)) {\n paramsVal.push({\n name: endColumnName,\n value: day.add(seg.endMinutes, 'minute').format(dateFormat),\n type: type,\n isNull: isNull,\n });\n }\n } else {\n // @ts-ignore\n let startVal = $val.startOf(param.dateType).format(dateFormat);\n paramsVal[index].value = dateTimeChange(startVal, param.startTime, dateFormat);\n\n // @ts-ignore\n let endVal = $val.endOf(param.dateType).format(dateFormat);\n let endColumnName = `end_${param.columnName}`;\n // URL 透传的 end_ 参数优先,已存在时不再追加拆分值\n if (!paramsVal.some((item) => item.name === endColumnName)) {\n paramsVal.push({\n name: endColumnName,\n value: dateTimeChange(endVal, param.endTime, dateFormat),\n type: type,\n isNull: isNull,\n });\n }\n }\n }\n }\n } else if (Array.isArray(value)) {\n paramsVal[index].value = value.join(',');\n }\n });\n emits('change', paramsVal);\n}\n\ndefineExpose({\n changeValue,\n});\nonMounted(() => {});\n</script>\n<style lang=\"scss\">\n.yh-report-view-conditions {\n display: flex;\n .el-form {\n flex: 1;\n }\n .el-form-item {\n margin-right: 8px;\n margin-bottom: 8px;\n }\n .el-select.shift-select {\n width: 150px;\n margin-left: 4px;\n }\n}\n</style>\n","/** 数据行真实字段键解析:行数据键未必全大写(静态数据、个别数据源),按首行样例做大小写不敏感匹配 */\nfunction resolveFieldKey(rows: any[], field: string): string {\n const sample = rows.find((row) => row && typeof row === 'object');\n if (!sample) return field;\n if (field in sample) return field;\n const hit = Object.keys(sample).find((key) => key.toUpperCase() === field.toUpperCase());\n return hit || field;\n}\n\n/** 按字段对数据行排序,返回新数组不改动原数组。\n * 默认(numeric=false)按 unicode 字符串序(与分组排序一致,ISO 格式日期串天然兼容);\n * numeric=true 按 parseFloat 数值比较。空值与无法解析的值恒排末尾,不随方向翻转(同 Excel) */\nexport function sortRowsByField(\n rows: any[],\n field: string,\n order: 'asc' | 'desc',\n numeric = false\n): any[] {\n const key = resolveFieldKey(rows, field);\n const dir = order === 'desc' ? -1 : 1;\n return [...rows].sort((a, b) => {\n const va = a?.[key];\n const vb = b?.[key];\n const emptyA = va === undefined || va === null || va === '';\n const emptyB = vb === undefined || vb === null || vb === '';\n if (emptyA || emptyB) return emptyA && emptyB ? 0 : emptyA ? 1 : -1;\n let compare: number;\n if (numeric) {\n const na = parseFloat(va);\n const nb = parseFloat(vb);\n // 无法解析视为 +Infinity 排末尾,保证排序稳定(对齐分组排序语义)\n const fa = isNaN(na) ? Number.POSITIVE_INFINITY : na;\n const fb = isNaN(nb) ? Number.POSITIVE_INFINITY : nb;\n compare = fa - fb;\n } else {\n compare = String(va).localeCompare(String(vb), 'zh-CN');\n }\n return compare * dir;\n });\n}\n","<template>\n <div\n class=\"yh-report-view-container\"\n :style=\"style\">\n <report-conditions\n v-show=\"!isPrintMode\"\n :config=\"props.config.params\"\n :data=\"props.config.data\"\n ref=\"conditionsRef\"\n @add-cell=\"paramTableCellHandler\"\n @change=\"changeParams\">\n <template #search>\n <el-button\n type=\"primary\"\n v-if=\"hasDisplayParams\"\n @click=\"searchHandler\">\n {{ rct('搜索') }}\n </el-button>\n <el-button\n text\n type=\"primary\"\n @click=\"exportHandler\">\n {{ rct(exportTips) }}\n </el-button>\n <el-button\n v-if=\"isPagination\"\n text\n type=\"primary\"\n @click=\"exportAllHandler\">\n {{ rct(exportTips) }}{{ rct('全部') }}\n </el-button>\n </template>\n </report-conditions>\n <div\n v-loading=\"tableLoading\"\n class=\"yh-report-table-container\"\n ref=\"statementTableRef\">\n <table ref=\"tableBodyRef\"></table>\n </div>\n <el-pagination\n v-show=\"!isPrintMode\"\n v-if=\"isPagination\"\n v-model:pageSize=\"pagination.pageSize\"\n v-model:current-page=\"pagination.pageIndex\"\n :page-sizes=\"pagination.pageSizes\"\n :total=\"pagination.total\"\n layout=\"total, jumper, prev, pager, next, sizes\"></el-pagination>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import ReportConditions from './reportConditions.vue';\n import {\n ref,\n computed,\n onMounted,\n reactive,\n watch,\n render,\n shallowRef,\n nextTick,\n shallowReactive,\n inject,\n } from 'vue';\n import type {Ref} from 'vue';\n import {\n CellType,\n FormatType,\n Head,\n StatementOption,\n Cell,\n ReportConfig,\n PrintConfig,\n statementTableConfig,\n } from 'yh-report/types';\n import {cloneDeep, create, has} from 'lodash-es';\n import {rct} from 'yh-report';\n import {ElMessage, ElMessageBox} from 'element-plus';\n import dayjs from 'dayjs';\n import {SourceDataParam, dataParam, getDateSourceData} from 'yh-report/api/dataSource';\n import {getProcessData} from 'yh-report/libs/index';\n import {getErrorMessage} from 'yh-report/libs/util';\n import {columnToNumber, computeCell, numberToColumn, preGenerateBarcodes} from 'yh-report/libs/jsep';\n import {sortRowsByField} from 'yh-report/libs/clickSort';\n import {getLoopItem, loopGroupCols, loopGroupRows} from 'yh-report/libs/generateReportRenderCfg';\n import {transformArrayToObject} from 'yh-report/libs/generateReportRenderCfg/transformArrayToObject';\n import {collectCellQueryConditions} from 'yh-report/libs/collectCellQueryConditions';\n import {clearReportByDom, renderReportByDom} from 'yh-report/libs/renderByDom';\n import {downloadReport, exportReport, sendReport} from 'yh-report/libs/export';\n import {getThemeColors} from 'yh-report/libs/colors';\n import {mmToPx, pxToMm} from 'yh-report/libs/constants';\n\n const props = defineProps<{\n config: StatementOption;\n id: string;\n name: string;\n index: number;\n length: number;\n }>();\n\n const emits = defineEmits(['updateData', 'report-error']);\n\n const isPrintMode = inject<Ref<boolean>>(\n 'isPrintMode',\n computed(() => false)\n );\n const printConfigRef = inject<Ref<PrintConfig>>('printConfig', undefined);\n\n const conditionsRef = ref();\n const statementTableRef = ref();\n const tableBodyRef = ref<HTMLElement>();\n /** 点击排序状态:单字段互斥;order 三态循环 无→升→降→无(同 Excel) */\n let clickSortState: {key: string; field: string; order: 'asc' | 'desc' | 'none'; numeric: boolean} | null = null;\n /** 最近一次渲染的数据缓存,点击排序直接复用,不重新请求接口 */\n let cachedRawData: Record<string, any> | null = null;\n /** 原始顺序数据备份:排序总是从此重建,支持还原为默认顺序 */\n let originalRawData: Record<string, any> | null = null;\n const tableConfig = shallowRef<ReportConfig[]>([]);\n const batchTableConfigs = shallowRef<ReportConfig[][]>([]);\n\n const style = computed(() => {\n if (isPrintMode.value && printConfigRef?.value) {\n const pc = printConfigRef.value;\n const contentWidth = mmToPx(pc.width);\n return {\n width: `${contentWidth}px`,\n padding: `${props.index === 0 ? mmToPx(pc.marginTop) : 0}px ${mmToPx(pc.marginLeft)}px ${props.index === props.length - 1 ? mmToPx(pc.marginBottom) : 0}px ${mmToPx(pc.marginLeft)}px`,\n };\n }\n return {\n width:\n props.config.widthType === '%'\n ? `calc(${props.config.width}% - 10px)`\n : `${props.config.width - 10}px`,\n height: props.config.fullHeight ? 'calc(100% - 8px)' : `${props.config.height}px`,\n };\n });\n\n const theme = computed(() => {\n let colors = getThemeColors(props.config.theme || 'none');\n return colors;\n });\n\n // #region 分页及筛选参数相关逻辑\n const isPagination = computed(() => {\n if (props.config && props.config.data) {\n return !!props.config.data.pagination;\n } else {\n return false;\n }\n });\n\n const hasParams = computed(() => {\n return (\n props.config.params && Array.isArray(props.config.params) && props.config.params.length > 0\n );\n });\n const hasDisplayParams = computed(() => {\n return (\n props.config.params &&\n Array.isArray(props.config.params) &&\n props.config.params.filter((item) => item.isShow).length > 0\n );\n });\n\n const pagination = reactive({\n pageSize: 100,\n pageSizes: [10, 20, 50, 100, 200, 10000],\n pageIndex: 1,\n total: 0,\n });\n\n const params = ref<dataParam[]>([]);\n\n const paramTableCells = ref<string[]>([]);\n\n const paramTableCellHandler = (val) => {\n let tableIdx = 0;\n let cellVal = val;\n if (val.includes('!')) {\n let parts = val.split('!');\n tableIdx = parseInt(parts[0]);\n cellVal = parts[1];\n }\n let abc = cellVal.match(/[A-Z]+/)[0];\n let num = cellVal.match(/\\d+/)[0] - 1;\n let col = columnToNumber(abc);\n let numIndex = `${tableIdx}:${num}:${col}`;\n if (!paramTableCells.value.includes(numIndex)) {\n paramTableCells.value.push(numIndex);\n }\n };\n\n function changeParams(val) {\n if (isFirst && props.config.data.autoQuery === false) {\n isFirst = false;\n return false;\n }\n params.value = val;\n pagination.pageIndex = 1;\n renderHandler();\n }\n\n /** 是否完成报表初次加载 */\n let inited = false;\n let isFirst = true;\n watch(\n () => [pagination.pageSize, pagination.pageIndex],\n (val, oldVal) => {\n if (val && oldVal) {\n let [newPageSize, newPageIndex] = val;\n let [oldPageSize, oldPageIndex] = val;\n if (newPageSize !== oldPageSize) {\n pagination.pageIndex = 1;\n }\n if (inited) {\n renderHandler();\n }\n }\n },\n {\n immediate: true,\n deep: true,\n }\n );\n\n function searchHandler() {\n conditionsRef.value?.changeValue();\n }\n\n const isSend = computed(() => {\n return props.config.exportMethod === 'send' && window.opener;\n });\n\n const exportTips = computed(() => {\n if (isSend.value) {\n return '保存';\n } else {\n return '导出';\n }\n });\n\n async function exportHandler() {\n if (tableConfig.value && tableConfig.value.length) {\n let data = await exportReport(\n tableConfig.value,\n props.name,\n 'excel',\n props.config.theme,\n props.config.subReprotIndex\n );\n if (data === null) {\n await ElMessageBox.alert('表格导出失败');\n return;\n }\n if (props.config.exportMethod === 'send' && window.opener) {\n sendReport(data);\n } else {\n downloadReport(data, props.name, 'excel');\n }\n } else {\n ElMessage.success('配置未完成!');\n }\n }\n\n /** 装配导出配置:取数→处理→循环展开→单元格计算→条码预生成;无可导数据返回 null(合并导出与单表导出共用) */\n async function buildExportConfigs(): Promise<ReportConfig[] | null> {\n if (!(props.config && tableBodyRef.value && props.config.data.source)) return null;\n let resData: any[] = [];\n try {\n resData = await getRemoteData(true);\n } catch (error) {\n // 数据源接口报错:中止导出,错误信息交给父组件用 Alert 展示\n emits('report-error', {\n index: props.index,\n message: getErrorMessage(error),\n });\n return null;\n }\n let rawData = toUpdateData(resData);\n if (props.config.data.processData) {\n rawData = await getProcessData(props.config.data.processData, rawData, params.value, pagination);\n }\n // 导出跟随当前点击排序视角;只排导出数据,不覆盖视图缓存(导出是全量数据)\n if (clickSortState && clickSortState.order !== 'none') {\n const rows = rawData[clickSortState.key];\n if (Array.isArray(rows)) {\n rawData[clickSortState.key] = sortRowsByField(rows, clickSortState.field, clickSortState.order, clickSortState.numeric);\n }\n }\n let tableConfs: ReportConfig[] = [];\n const tableConfigs: Array<{config: any[][]}> = [];\n\n for (let tableIdx = 0; tableIdx < props.config.tableConfig.length; tableIdx++) {\n const item = props.config.tableConfig[tableIdx];\n let hasLoop = false;\n let {rowConfig, colConfig, config} = cloneDeep(item);\n let loopCols = getLoopItem(colConfig, rawData, 'col', config);\n let loopRows = getLoopItem(rowConfig, rawData, 'row', config);\n if (loopCols.length) {\n hasLoop = true;\n loopGroupCols(colConfig, loopCols, config, rawData);\n }\n if (loopRows.length) {\n hasLoop = true;\n loopGroupRows(rowConfig, loopRows, config, colConfig, rawData);\n }\n const objData = transformArrayToObject(rawData, props.config.data.source);\n computeCell(config, objData, undefined, tableIdx);\n tableConfs.push({\n config,\n rowConfig,\n colConfig,\n });\n tableConfigs.push({config});\n }\n\n // 预生成所有二维码和条形码\n await preGenerateBarcodes(tableConfigs);\n return tableConfs.length ? tableConfs : null;\n }\n\n async function exportAllHandler() {\n const tableConfs = await buildExportConfigs();\n if (!tableConfs) {\n ElMessage.warning('当前报表没有可导出的数据');\n return;\n }\n let data = await exportReport(tableConfs, props.name, 'excel', props.config.theme, props.config.subReprotIndex);\n if (data === null) {\n await ElMessageBox.alert('表格导出失败');\n return;\n }\n if (props.config.exportMethod === 'send' && window.opener) {\n sendReport(data);\n } else {\n downloadReport(data, props.name, 'excel');\n }\n }\n // #endregion\n\n const tableLoading = ref(false);\n const multipleTable = ref(false);\n\n async function renderOneTableConfig(tableConfigItem: statementTableConfig, tableData: any) {\n let hasLoop = false;\n let {rowConfig, colConfig, config} = cloneDeep(tableConfigItem);\n let loopCols = getLoopItem(colConfig, tableData, 'col', config);\n let loopRows = getLoopItem(rowConfig, tableData, 'row', config);\n if (loopCols.length) {\n hasLoop = true;\n loopGroupCols(colConfig, loopCols, config, tableData);\n }\n if (loopRows.length) {\n hasLoop = true;\n loopGroupRows(rowConfig, loopRows, config, colConfig, tableData);\n }\n const objData = transformArrayToObject(tableData, props.config.data.source);\n computeCell(config, objData, paramTableCells.value);\n // 预生成二维码和条形码\n await preGenerateBarcodes([{config}]);\n return {\n reportConfig: {config, rowConfig, colConfig} as ReportConfig,\n hasLoop,\n };\n }\n\n async function renderBatch(tableData, batchKey: string) {\n const items = tableData[batchKey];\n if (!Array.isArray(items) || items.length === 0) return;\n\n batchTableConfigs.value = [];\n statementTableRef.value.innerHTML = '';\n\n for (const oneItem of items) {\n // 批量标签:循环源覆写为当前单条,避免 loopGroupRows 按全量数据展开出 N-1 个合并空行\n const oneData = {...tableData, ...oneItem, [batchKey]: [oneItem]};\n const configs: ReportConfig[] = [];\n for (const item of props.config.tableConfig) {\n const {reportConfig, hasLoop} = await renderOneTableConfig(item, oneData);\n configs.push(reportConfig);\n renderReportByDom(\n reportConfig.rowConfig,\n reportConfig.colConfig,\n reportConfig.config,\n statementTableRef,\n hasLoop,\n theme.value.border\n );\n }\n batchTableConfigs.value.push(configs);\n }\n }\n\n async function renderReport(tableData) {\n if (props.config && tableBodyRef.value) {\n console.time('renderReport');\n tableConfig.value = [];\n multipleTable.value = !!props.config.tableConfig;\n if (multipleTable.value) {\n // !新的逻辑都在这里全部都走多表格逻辑\n statementTableRef.value.innerHTML = '';\n const tableConfigs: Array<{config: any[][], rowConfig: any, colConfig: any, hasLoop: boolean}> = [];\n\n for (let tableIdx = 0; tableIdx < props.config.tableConfig.length; tableIdx++) {\n const item = props.config.tableConfig[tableIdx];\n let hasLoop = false;\n let {rowConfig, colConfig, config} = cloneDeep(item);\n let loopCols = getLoopItem(colConfig, tableData, 'col', config);\n let loopRows = getLoopItem(rowConfig, tableData, 'row', config);\n if (loopCols.length) {\n hasLoop = true;\n loopGroupCols(colConfig, loopCols, config, tableData);\n }\n if (loopRows.length) {\n hasLoop = true;\n loopGroupRows(rowConfig, loopRows, config, colConfig, tableData);\n }\n // 判断并执行是否需要将数据转换为对象\n const objData = transformArrayToObject(tableData, props.config.data.source);\n // 计算单元格的函数与字符串模板\n computeCell(config, objData, paramTableCells.value, tableIdx);\n\n tableConfigs.push({config, rowConfig, colConfig, hasLoop});\n tableConfig.value.push({\n config,\n rowConfig,\n colConfig,\n });\n }\n\n // 预生成所有二维码(异步)\n await preGenerateBarcodes(tableConfigs);\n\n // 渲染所有表格\n tableConfigs.forEach((tableConf) => {\n renderReportByDom(tableConf.rowConfig, tableConf.colConfig, tableConf.config, statementTableRef, tableConf.hasLoop, theme.value.border);\n });\n\n console.timeEnd('renderReport');\n nextTick(() => {\n const contexts = statementTableRef.value.querySelectorAll('.yh-report-table-context');\n let maxWidth = 0;\n contexts.forEach((ctx) => {\n const tbl = ctx.querySelector('table');\n if (tbl) {\n // 用 colgroup 各 <col> 宽度累加作为自然宽度基准\n // table-layout:fixed 下 scrollWidth 返回已渲染宽,取不到真实需求宽\n // 循环列数变化时,累加值会随之改变,保证总宽动态跟随\n const cols = tbl.querySelectorAll('colgroup col');\n const colSum = Array.from(cols).reduce(\n (s, c) => s + parseInt(c.style.width || '80', 10),\n 0\n );\n maxWidth = Math.max(maxWidth, colSum);\n }\n });\n if (maxWidth > 0) {\n // 宽度不足容器时填充到容器宽度,恢复宽度自适应\n // 注意:clientWidth 含 padding,需减去左右 padding 得到 table 可用宽度,避免溢出产生横向滚动条\n const container = statementTableRef.value;\n let containerWidth = 0;\n if (container) {\n const cs = getComputedStyle(container);\n containerWidth =\n container.clientWidth -\n parseFloat(cs.paddingLeft || '0') -\n parseFloat(cs.paddingRight || '0');\n }\n if (containerWidth > 0) {\n maxWidth = Math.max(maxWidth, containerWidth);\n }\n contexts.forEach((ctx) => {\n const tbl = ctx.querySelector('table');\n if (tbl) {\n // table-layout:fixed 下 <col> 是固定像素,需同步按比例放大,\n // 否则 table 被拉宽但 td 仍按原 col 宽度渲染,右侧留白\n const cols = tbl.querySelectorAll('colgroup col');\n const colSum = Array.from(cols).reduce(\n (s, c) => s + parseInt(c.style.width || '80', 10),\n 0\n );\n if (colSum > 0 && colSum < maxWidth) {\n const scale = maxWidth / colSum;\n cols.forEach((c) => {\n const w = parseInt(c.style.width || '80', 10);\n c.style.width = `${Math.round(w * scale)}px`;\n });\n // scale 放大了 <col> 宽度,fixed-td 的 sticky left 是渲染时基于原始 size 累加的,\n // 需按新列宽重新累加,否则横向吸附位置与实际列宽错位\n const newWidths = Array.from(cols).map((c) =>\n parseInt(c.style.width || '80', 10)\n );\n tbl.querySelectorAll('tr').forEach((tr) => {\n let acc = 0;\n let colIdx = 0;\n Array.from(tr.children).forEach((td) => {\n if ((td as HTMLElement).classList.contains('fixed-td')) {\n (td as HTMLElement).style.left = `${acc - 1}px`;\n }\n if (colIdx < newWidths.length) {\n acc += newWidths[colIdx] - 1;\n colIdx++;\n }\n });\n });\n }\n tbl.style.width = `${maxWidth}px`;\n tbl.style.minWidth = `${maxWidth}px`;\n }\n });\n }\n });\n } else {\n // !这里是兼容代码,这个判断分支不要改动\n let hasLoop = false;\n // @ts-ignore\n let {rowConfig, colConfig, config} = cloneDeep(props.config);\n let loopCols = getLoopItem(colConfig, tableData, 'col', config);\n let loopRows = getLoopItem(rowConfig, tableData, 'row', config);\n if (loopCols.length) {\n hasLoop = true;\n loopGroupCols(colConfig, loopCols, config, tableData);\n }\n if (loopRows.length) {\n hasLoop = true;\n loopGroupRows(rowConfig, loopRows, config, colConfig, tableData);\n }\n const objData = transformArrayToObject(tableData, props.config.data.source);\n computeCell(config, objData, paramTableCells.value);\n // 预生成二维码和条形码\n await preGenerateBarcodes([{config}]);\n tableConfig.value.push({\n config,\n rowConfig,\n colConfig,\n });\n renderReportByDom(rowConfig, colConfig, config, tableBodyRef.value, hasLoop, theme.value.border);\n console.timeEnd('renderReport');\n }\n }\n }\n\n function checkParams() {\n let flag = 0;\n let names: any = [];\n let needRequired = {};\n props.config.params.forEach((item) => {\n if (item.isNull) {\n needRequired[item.columnName] = item;\n }\n });\n\n params.value.forEach((item) => {\n if (item.name && needRequired[item.name] && !item.value) {\n names.push(needRequired[item.name].name);\n flag++;\n }\n });\n if (flag > 0 && Object.keys(needRequired).length > 0) {\n ElMessage.warning({\n message: `请填写必填项:${names.join(',')}`,\n grouping: true,\n });\n return false;\n } else {\n return true;\n }\n }\n\n async function renderHandler() {\n isFirst = false;\n // 打印模式跳过必填校验:打印场景参数常来自 query 或默认值,必填项可能缺失,不应拦截数据请求\n let checked = isPrintMode.value || checkParams();\n if (checked) {\n tableLoading.value = true;\n try {\n // 打印模式拉全量数据(不分页),避免只渲染当前页\n let remoteData = await getRemoteData(isPrintMode.value);\n let rawData = toUpdateData(remoteData);\n if (props.config.data.processData) {\n rawData = await getProcessData(\n props.config.data.processData,\n rawData,\n params.value,\n pagination\n );\n }\n // 缓存渲染数据供点击排序复用(不重新请求);cachedRawData 浅拷贝与原始备份分离,支持还原默认顺序\n originalRawData = rawData;\n cachedRawData = {...rawData};\n applyActiveSort();\n rawData = cachedRawData!;\n const loopSource = props.config.data.source?.find((s) => s.loopTable);\n if (loopSource && loopSource.key) {\n await renderBatch(rawData, loopSource.key);\n } else {\n await renderReport(rawData);\n }\n nextTick(updateSortIndicators);\n } catch (error) {\n // 数据源接口报错:停止渲染,报表块保持空白,错误信息交给父组件用 Alert 展示\n console.error('数据源请求失败:', error);\n emits('report-error', {\n index: props.index,\n message: getErrorMessage(error),\n });\n clearReportByDom(statementTableRef);\n } finally {\n tableLoading.value = false;\n inited = true;\n }\n } else {\n clearReportByDom(statementTableRef);\n }\n }\n\n /** 将当前点击排序状态应用到数据缓存:排序总是从原始顺序重建(参数重查后恢复排序视角) */\n function applyActiveSort() {\n if (!cachedRawData || !originalRawData || !clickSortState) return;\n const original = originalRawData[clickSortState.key];\n if (!Array.isArray(original)) return;\n if (clickSortState.order === 'none') {\n cachedRawData[clickSortState.key] = original;\n } else {\n cachedRawData[clickSortState.key] = sortRowsByField(original, clickSortState.field, clickSortState.order, clickSortState.numeric);\n }\n }\n\n /** 点击排序入口:切方向/换字段 → 内存重排 → 重渲染(循环表格走 renderBatch) */\n async function onTableClick(e: MouseEvent) {\n const td = (e.target as HTMLElement).closest('td.click-sort-cell');\n if (!td) return;\n // 存储格式 'KEY.FIELD',用首个 '.' 分割,避免字段名含点时被误切\n const raw = td.getAttribute('data-click-sort-field') || '';\n const dot = raw.indexOf('.');\n if (dot < 1) return;\n const key = raw.slice(0, dot).toUpperCase();\n const field = raw.slice(dot + 1).toUpperCase();\n if (!key || !field || !cachedRawData) return;\n const numeric = td.getAttribute('data-click-sort-numeric') === '1';\n if (clickSortState && clickSortState.key === key && clickSortState.field === field) {\n // 三态循环:升 → 降 → 无(还原默认顺序)→ 升\n clickSortState.order = clickSortState.order === 'asc' ? 'desc' : clickSortState.order === 'desc' ? 'none' : 'asc';\n } else {\n clickSortState = {key, field, order: 'asc', numeric};\n }\n applyActiveSort();\n const loopSource = props.config.data.source?.find((s) => s.loopTable);\n if (loopSource && loopSource.key) {\n await renderBatch(cachedRawData, loopSource.key);\n } else {\n await renderReport(cachedRawData);\n }\n nextTick(updateSortIndicators);\n }\n\n /** 渲染后同步箭头方向指示:无排序/非活动字段显示中性箭头 */\n function updateSortIndicators() {\n statementTableRef.value?.querySelectorAll('td.click-sort-cell').forEach((td) => {\n const raw = td.getAttribute('data-click-sort-field')?.toUpperCase() || '';\n const active = clickSortState && raw === `${clickSortState.key}.${clickSortState.field}`;\n const dir = active && clickSortState!.order !== 'none' ? clickSortState!.order : '';\n (td as HTMLElement).dataset.sortDir = dir;\n });\n }\n\n onMounted(() => {\n // 事件委托挂容器:innerHTML 重建不影响监听,单表/多表/循环渲染共用\n statementTableRef.value?.addEventListener('click', onTableClick);\n });\n\n /** 将数据更新同步到外部,方便其他组件共享当前报表的数据 */\n function toUpdateData(remoteData) {\n let rData = {};\n if (!Array.isArray(remoteData)) {\n remoteData = [remoteData];\n }\n remoteData.forEach(({key, data}) => {\n if (key !== 'PARAM') {\n let d = data.filter((item) => item);\n rData[key] = d;\n } else {\n rData[key] = data;\n }\n });\n emits('updateData', {\n key: props.config.id,\n data: rData,\n });\n return rData;\n }\n\n async function getRemoteData(isAll = false) {\n if (props.config.data.source) {\n let reqData: SourceDataParam = {\n id: props.id,\n };\n if (hasParams.value) {\n reqData.params = cloneDeep(params.value);\n }\n // 按 source 分组收集 cell 插值查询条件(值来自 cell 配置,配置态即确定)\n const cellConditionsBySource = collectCellQueryConditions(\n props.config.tableConfig,\n props.config.data.source\n );\n if (isPagination.value) {\n if (!isAll) {\n reqData.pageSize = pagination.pageSize;\n reqData.pageNumber = pagination.pageIndex;\n } else {\n reqData.pageSize = pagination.total;\n reqData.pageNumber = 1;\n }\n } else {\n reqData.pageSize = pagination.pageSize;\n reqData.pageNumber = 1;\n }\n let resData: any[] = [];\n let paramData: any = {};\n params.value.forEach(({name, value}) => {\n if (name) {\n paramData[name.toUpperCase()] = value;\n }\n });\n resData.push({key: 'PARAM', data: paramData});\n for (let i = 0; i < props.config.data.source.length; i++) {\n const {key, url} = props.config.data.source[i];\n if (url) {\n // 仅追加该 source 的 cell 插值条件,避免跨数据源串扰\n const sourceCellConds = cellConditionsBySource.get(url.toUpperCase());\n const sourceReqData = sourceCellConds?.length\n ? {...reqData, params: [...(reqData.params || []), ...sourceCellConds]}\n : reqData;\n const res = await getDateSourceData(url, sourceReqData);\n resData.push({key, data: res.data});\n if (isPagination.value) {\n pagination.total = res.count || res.data.length;\n }\n }\n }\n return resData;\n } else {\n return [];\n }\n }\n\n function initHandler() {\n if (props.config.data.pageSize !== undefined) {\n pagination.pageSize = !isNaN(props.config.data.pageSize)\n ? props.config.data.pageSize\n : props.config.data.pagination\n ? 10\n : 5000;\n }\n if (props.config.data.pagination) {\n if (props.config.data.pageSizes !== undefined) {\n let pageSizes = props.config.data.pageSizes.split(',').map((item) => parseInt(item));\n pagination.pageSizes = Array.isArray(pageSizes) ? pageSizes : [10, 20, 50, 100, 200];\n }\n }\n }\n initHandler();\n\n defineExpose({\n tableConfig,\n batchTableConfigs,\n statementTableRef,\n /** 拉数据 + 渲染(供父组件主动调用,如打印按钮触发) */\n renderHandler,\n /** 装配导出配置(供父组件合并导出调用) */\n buildExportConfigs,\n });\n</script>\n\n<style lang=\"scss\">\n .yh-report-viewer-wrapper {\n .yh-report-view-container {\n .yh-report-table-container {\n --b: v-bind(theme.border);\n --bg: v-bind(theme.background);\n --bge: v-bind(theme.evenBackground);\n --bgf: v-bind(theme.fixedBackground);\n --bgfe: v-bind(theme.fixedEvenBackground);\n --bgh: v-bind(theme.hoverBackground);\n --a: v-bind(theme.activeColor);\n flex: 1;\n overflow: auto;\n position: relative;\n display: flex;\n flex-direction: column;\n scrollbar-color: auto;\n scrollbar-width: auto;\n padding-right: 4px;\n &::-webkit-scrollbar {\n width: 4px;\n height: 4px;\n }\n &::-webkit-scrollbar-track {\n background-color: var(--bgfe);\n }\n &::-webkit-scrollbar-thumb {\n border-radius: 0;\n }\n $tableBorder: 1px solid var(--b);\n .yh-report-table-context {\n position: relative;\n overflow: visible;\n }\n table {\n table-layout: fixed;\n min-width: 100%;\n border-collapse: collapse;\n background-color: var(--bg);\n font-family: Arial, sans-serif;\n font-size: 14px;\n color: #333;\n\n // 点击排序入口单元格:可点击 + 箭头指示(⇅ 无排序 / ↑ 升序 / ↓ 降序)\n td.click-sort-cell {\n cursor: pointer;\n user-select: none;\n .click-sort-arrow::before {\n content: '⇅';\n margin-left: 2px;\n font-size: 12px;\n opacity: 0.45;\n }\n &[data-sort-dir='asc'] .click-sort-arrow::before {\n content: '↑';\n opacity: 1;\n }\n &[data-sort-dir='desc'] .click-sort-arrow::before {\n content: '↓';\n opacity: 1;\n }\n }\n\n tr {\n td {\n min-height: 25px;\n text-align: center;\n overflow: hidden;\n border: $tableBorder;\n box-sizing: border-box;\n transition: background-color 0.3s;\n &.fixed-td {\n position: sticky;\n z-index: 10;\n background-color: var(--bgf);\n }\n &.merge-hover {\n background-color: var(--a) !important;\n }\n &.no-border {\n border: 0;\n }\n }\n\n &:nth-child(even) td {\n background-color: var(--bge);\n &.fixed-td {\n position: sticky;\n z-index: 10;\n background-color: var(--bgfe);\n }\n }\n\n &:hover td {\n background-color: var(--a) !important;\n }\n &.fixed-row {\n position: sticky;\n z-index: 20;\n td {\n background-color: var(--bgf);\n }\n &:nth-child(even) td {\n background-color: var(--bgfe);\n }\n }\n }\n }\n .yh-report-table-context + .yh-report-table-context {\n table {\n border-top: 0;\n }\n table tr:first-child td {\n border-top: 0;\n }\n }\n .yh-report-table-context:not(:last-child) {\n table tr:last-child td {\n border-bottom: 0;\n }\n }\n }\n }\n }\n\n .print-mode {\n .yh-report-viewer-wrapper {\n .yh-report-view-container {\n .yh-report-table-container {\n min-height: 100px;\n }\n }\n }\n }\n</style>\n","import {cloneDeep} from 'lodash-es';\nimport {getDateSourceData} from 'yh-report/api/dataSource';\nimport {setXAxisData, setYAxisData} from 'yh-report/libs/chartReportDefaultOption';\nimport dayjs from 'dayjs';\n\nexport const chartsOption = {\n line: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Line',\n },\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n name: '天',\n type: 'category',\n boundaryGap: false,\n data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],\n },\n yAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Email',\n type: 'line',\n stack: 'Total',\n data: [120, 132, 101, 134, 90, 230, 210],\n },\n {\n name: 'Union',\n type: 'line',\n stack: 'Total',\n data: [220, 182, 191, 234, 290, 330, 310],\n },\n {\n name: 'Video',\n type: 'line',\n stack: 'Total',\n data: [150, 232, 201, 154, 190, 330, 410],\n },\n ],\n },\n rowBar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Bar',\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow',\n },\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n yAxis: {\n name: '天',\n type: 'category',\n axisTick: {\n alignWithLabel: true,\n },\n data: ['2012', '2013', '2014', '2015', '2016'],\n },\n xAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Forest',\n type: 'bar',\n barGap: 0,\n emphasis: {\n focus: 'series',\n },\n data: [320, 332, 301, 334, 390],\n },\n {\n name: 'Steppe',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [220, 182, 191, 234, 290],\n },\n {\n name: 'Desert',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [150, 232, 201, 154, 190],\n },\n ],\n },\n bar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Bar',\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow',\n },\n },\n legend: {\n top: '8%',\n },\n grid: {\n left: '3%',\n right: '9%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n name: '天',\n type: 'category',\n axisTick: {\n alignWithLabel: true,\n },\n data: ['2012', '2013', '2014', '2015', '2016'],\n },\n yAxis: {\n name: '值',\n type: 'value',\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: 'Forest',\n type: 'bar',\n barGap: 0,\n emphasis: {\n focus: 'series',\n },\n data: [320, 332, 301, 334, 390],\n },\n {\n name: 'Steppe',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [220, 182, 191, 234, 290],\n },\n {\n name: 'Desert',\n type: 'bar',\n emphasis: {\n focus: 'series',\n },\n data: [150, 232, 201, 154, 190],\n },\n ],\n },\n pie: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Pie',\n },\n tooltip: {\n trigger: 'item',\n },\n legend: {\n top: '8%',\n },\n xAxis: {\n show: false,\n },\n yAxis: {\n show: false,\n },\n series: [\n {\n name: 'Access From',\n type: 'pie',\n radius: '50%',\n top: '10%',\n data: [\n {value: 1048, name: 'Search'},\n {value: 735, name: 'Direct'},\n {value: 580, name: 'Email'},\n {value: 484, name: 'Union'},\n {value: 300, name: 'Video'},\n ],\n labelLine: {\n show: true,\n },\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)',\n },\n },\n },\n ],\n },\n scatter: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Scatter',\n },\n tooltip: {},\n legend: {\n top: '8%',\n data: ['1990', '2015'],\n },\n grid: {\n left: '5%',\n right: '5%',\n top: '20%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n splitLine: {\n lineStyle: {\n type: 'dashed',\n },\n },\n },\n yAxis: {\n splitLine: {\n lineStyle: {\n type: 'dashed',\n },\n },\n scale: true,\n },\n dataZoom: [\n {\n type: 'inside',\n start: 0,\n end: 100,\n },\n ],\n series: [\n {\n name: '1990',\n data: [\n [1516, 68],\n [13670, 74.7],\n [28599, 75],\n [29476, 77.1],\n [31476, 75.4],\n [28666, 78.1],\n [1777, 57.7],\n [29550, 79.1],\n [2076, 67.9],\n [12087, 72],\n [24021, 75.4],\n [43296, 76.8],\n [10088, 70.8],\n [19349, 69.6],\n [10670, 67.3],\n [26424, 75.7],\n [37062, 75.4],\n ],\n type: 'scatter',\n symbolSize: 20,\n emphasis: {\n focus: 'series',\n label: {\n show: true,\n position: 'top',\n },\n },\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.2)',\n shadowOffsetY: 5,\n },\n },\n {\n name: '2015',\n data: [\n [13334, 76.9],\n [21291, 78.5],\n [38923, 80.8],\n [37599, 81.9],\n [44053, 81.1],\n [42182, 82.8],\n [5903, 66.8],\n [36162, 83.5],\n [1390, 71.4],\n [34644, 80.7],\n [34186, 80.6],\n [64304, 81.6],\n [24787, 77.3],\n [23038, 73.13],\n [19360, 76.5],\n [38225, 81.4],\n [53354, 79.1],\n ],\n type: 'scatter',\n symbolSize: 20,\n emphasis: {\n focus: 'series',\n label: {\n show: true,\n position: 'top',\n },\n },\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.2)',\n shadowOffsetY: 5,\n },\n },\n ],\n },\n radar: {\n backgroundColor: '#fff',\n title: {\n text: 'Title Radar',\n },\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n top: '8%',\n data: ['Budget', 'Spending'],\n },\n radar: {\n indicator: [{name: 'Sales'}, {name: 'Administration'}, {name: 'Technology'}, {name: 'Customer'}, {name: 'Development'}, {name: 'Marketing'}],\n radius: 80,\n },\n series: [\n {\n name: 'Radar',\n type: 'radar',\n tooltip: {\n trigger: 'item',\n },\n areaStyle: {},\n data: [\n {\n value: [4200, 3000, 20000, 35000, 50000, 18000],\n name: 'Budget',\n },\n {\n value: [5000, 14000, 28000, 26000, 42000, 21000],\n name: 'Spending',\n },\n ],\n },\n ],\n },\n};\n\nexport const chartsTypeList = ['line', 'rowBar', 'bar', 'scatter', 'treemap', 'label'];\n\nexport const getChartData = async (chartData, outData, id) => {\n const {\n data: {source},\n toolTipData,\n seriesData,\n xAisData,\n yAisData,\n type,\n } = chartData;\n let datas: any = {\n ...outData,\n };\n for (let i = 0; i < source.length; i++) {\n const {key, url} = source[i];\n const data = (await getDateSourceData(url, {id})).data;\n datas[key] = data;\n }\n if (Object.keys(datas).length === 0) {\n return false;\n }\n if (chartsTypeList.includes(type)) {\n if (xAisData) {\n const fun = new Function('allData', xAisData);\n chartData.option.xAxis.data = fun(datas);\n } else {\n chartData.option = setXAxisData(chartData, datas);\n }\n if (yAisData) {\n const fun = new Function('allData', yAisData);\n const yData = fun(datas);\n chartData.option.yAxis.data = yData;\n }\n }\n if (seriesData) {\n const fun = (function (dayjs, cloneDeep) {\n const tools = {\n dayjs,\n cloneDeep,\n };\n if (tools) {\n }\n return eval(\n `(allData, series, yDataId, option) => {\n ${seriesData}\n return {\n series,\n option\n };\n }`\n );\n })(dayjs, cloneDeep);\n const {series, option} = fun(datas, chartData.option.series, chartData.option.yDataId, chartData.option);\n option.series = series;\n chartData.option = option;\n } else {\n chartData.option = setYAxisData(chartData, datas);\n }\n if (toolTipData) {\n const tooltip = {\n ...chartData.option.tooltip,\n formatter: eval(`(params) => {\n ${toolTipData}\n }`),\n };\n chartData.option.tooltip = tooltip;\n }\n};\n","<template>\n <div\n ref=\"chartRef\"\n v-loading=\"loading\"\n :element-loading-text=\"rct('正在加载数据......')\"\n class=\"chart chart-common\"></div>\n</template>\n\n<script setup>\nimport {ref, computed, watch, onMounted, onUnmounted, nextTick, render} from 'vue';\nimport * as echarts from 'echarts';\nimport {getChartData} from 'yh-report/api/chartsOption';\nimport {cloneDeep} from 'lodash-es';\nimport {rct} from 'yh-report';\nimport {renderItem} from 'yh-report/libs/chartReportDefaultOption';\nimport colors from 'yh-report/libs/colors';\n\nconst props = defineProps({\n chartData: {\n type: Object,\n require: true,\n },\n isView: {\n type: Boolean,\n default: false,\n },\n id: {\n type: String,\n },\n});\n\nconst chartRef = ref();\nconst outData = ref(null);\nlet commonChart = null;\n\nwatch(\n () => props.chartData.option,\n (val) => {\n if (commonChart) {\n commonChart.setOption(val, {\n notMerge: true,\n });\n }\n },\n {deep: true}\n);\n\nwatch(\n () => props.chartData.isSuspend,\n (val) => {\n if (val) {\n resize();\n }\n },\n {deep: true}\n);\n\nconst loading = ref(false);\n\nconst setOutData = (data) => {\n outData.value = data;\n if (data && Object.keys(data).length > 0) {\n const chartData = cloneDeep(props.chartData);\n insertDataToCfg(chartData);\n }\n};\nconst insertDataToCfg = async (chartData) => {\n if (props.isView) {\n await getChartData(chartData, outData.value, props.id);\n }\n if (chartData.type === 'label') {\n chartData.option.series.forEach((item) => {\n item.renderItem = renderItem;\n });\n }\n chartData.option.colors = colors;\n commonChart.setOption(chartData.option);\n loading.value = false;\n};\nconst init = async () => {\n loading.value = true;\n commonChart = echarts.init(chartRef.value);\n let chartData = cloneDeep(props.chartData);\n if (chartData) {\n await insertDataToCfg(chartData);\n }\n};\n\nconst resize = () => {\n nextTick(() => {\n commonChart.resize();\n });\n};\n\nconst getChartImage = () => {\n if (!commonChart) return null;\n return commonChart.getDataURL({\n type: 'png',\n pixelRatio: 3,\n backgroundColor: '#fff',\n });\n};\n\ndefineExpose({\n setOutData,\n getChartImage,\n});\n\nonMounted(() => {\n init();\n window.addEventListener('resize', resize);\n});\nonUnmounted(() => {\n window.removeEventListener('resize', resize);\n});\n</script>\n\n<style lang=\"scss\" scoped>\n.chart-common {\n width: 100%;\n height: 100%;\n}\n</style>\n","<template>\n <div\n class=\"yh-report-view-container chart-view-item\"\n :style=\"suspendStyle\">\n <chart-item\n is-view\n ref=\"chartItemRef\"\n :id=\"id\"\n :chart-data=\"props.config\"></chart-item>\n <div\n v-if=\"isPrintMode\"\n class=\"chart-print-mask\">\n <span>仅展示,打印时会忽略</span>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {computed, watch, ref, inject} from 'vue';\nimport type {Ref} from 'vue';\nimport {ChartOption, PrintConfig} from 'yh-report/types';\nimport chartItem from './chartItem.vue';\nimport {mmToPx} from 'yh-report/libs/constants';\n\nconst props = defineProps<{\n index: number;\n config: ChartOption;\n outData?: any;\n id: string;\n}>();\n\nconst isPrintMode = inject<Ref<boolean>>('isPrintMode', computed(() => false));\nconst printConfigRef = inject<Ref<PrintConfig>>('printConfig', undefined);\n\nconst chartItemRef = ref();\n\nwatch(\n () => props.outData,\n (val) => {\n console.log('chart-view-item:', val);\n },\n {deep: true}\n);\n\nconst suspendStyle = computed(() => {\n if (isPrintMode.value && printConfigRef?.value) {\n const pc = printConfigRef.value;\n const contentWidth = mmToPx(pc.width);\n const origWidth = props.config.widthUnit === '%' ? contentWidth : props.config.width;\n const scale = contentWidth / origWidth;\n return {\n width: `${contentWidth}px`,\n padding: `${props.index === 0?mmToPx(pc.marginTop):0}px ${mmToPx(pc.marginLeft)}px ${props.index === props.length - 1?mmToPx(pc.marginBottom):0}px ${mmToPx(pc.marginLeft)}px`,\n height: `${Math.round(props.config.height * scale)}px`,\n };\n }\n let widthUnit = props.config.widthUnit || 'px';\n let heightUnit = props.config.heightUnit || 'px';\n if (props.config.isSuspend) {\n let style: any = {\n position: 'absolute',\n left: props.config.left + 'px',\n top: props.config.top + 'px',\n zIndex: 100,\n\n height: props.config.height + heightUnit,\n };\n if (widthUnit === '%') {\n style.width = `calc( ${props.config.width}${widthUnit} - 10px)`;\n } else {\n // @ts-ignore\n style.width = `${props.config.width - 10}${widthUnit}`;\n }\n\n return style;\n } else {\n let style: any = {\n height: props.config.height + heightUnit,\n };\n if (widthUnit === '%') {\n style.width = `calc( ${props.config.width}${widthUnit} - 10px)`;\n } else {\n // @ts-ignore\n style.width = `${props.config.width - 10}${widthUnit}`;\n }\n\n return style;\n }\n});\n\nconst setOutData = (outData) => {\n chartItemRef.value?.setOutData(outData);\n};\n\nconst getChartImage = (): string | null => {\n return chartItemRef.value?.getChartImage() ?? null;\n};\n\ndefineExpose({\n setOutData,\n getChartImage,\n});\n</script>\n<style lang=\"scss\">\n.chart-print-mask {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n\n span {\n color: #fff;\n font-size: 14px;\n padding: 8px 16px;\n background: rgba(0, 0, 0, 0.6);\n border-radius: 4px;\n }\n}\n</style>\n","<template>\n <div\n ref=\"rootRef\"\n v-loading=\"loading\"\n :element-loading-text=\"rct('正在加载数据......')\"\n :class=\"`yh-report-view-container yh-statement-label-item${!isSingle ? ' not-single' : ''}`\"\n :style=\"singleStyle\">\n <template v-if=\"isSingle\">\n <div class=\"yh-report-label-item-label\">\n {{ single.label }}\n </div>\n <div class=\"yh-report-label-item-value\">\n {{ single.value }}\n </div>\n </template>\n <template v-else>\n <div\n class=\"yh-report-label-item-children\"\n v-for=\"(item, index) in list\">\n <div class=\"yh-report-label-item-label\">\n {{ item.label }}\n </div>\n <div class=\"yh-report-label-item-value\">\n {{ item.value }}\n </div>\n </div>\n </template>\n <div\n v-if=\"isPrintMode\"\n class=\"label-print-mask\">\n <span>仅展示,打印时会忽略</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {ref, computed, watch, onMounted, inject} from 'vue';\nimport type {Ref} from 'vue';\nimport {cloneDeep, get} from 'lodash-es';\nimport {rct} from 'yh-report';\nimport {getDateSourceData} from 'yh-report/api/dataSource';\nimport {getErrorMessage} from 'yh-report/libs/util';\nimport {LabelOption, PrintConfig} from 'yh-report/types';\nimport colors from 'yh-report/libs/colors';\nimport {mmToPx} from 'yh-report/libs/constants';\n\nconst props = defineProps<{\n config: LabelOption;\n id: string;\n index: number;\n}>();\n\nconst emits = defineEmits(['report-error']);\n\ninterface LabelData {\n label: string;\n value: string;\n}\n\nconst isPrintMode = inject<Ref<boolean>>('isPrintMode', computed(() => false));\nconst printConfigRef = inject<Ref<PrintConfig>>('printConfig', undefined);\n\nconst colorObj = computed<any>(() => {\n let obj = {};\n colors.forEach((item, index) => {\n obj[`color${index}`] = item;\n });\n return obj;\n});\n\nconst loading = ref(false);\nconst rootRef = ref<HTMLElement>();\nconst list = ref<LabelData[]>([]);\nconst isSingle = computed(() => {\n return list.value.length === 1;\n});\n\nconst single = computed(() => {\n let first = list.value[0];\n return first;\n});\n\nconst singleStyle = computed(() => {\n if (isSingle.value) {\n return {\n backgroundColor: props.config.singleColor || colors[0],\n };\n } else {\n return {};\n }\n});\n\nconst width = computed(() => {\n if (isPrintMode.value && printConfigRef?.value) {\n const pc = printConfigRef.value;\n return `${mmToPx(pc.width - pc.marginLeft - pc.marginRight)}px`;\n }\n if (props.config) {\n let widthUnit = props.config.widthUnit || 'px';\n if (widthUnit === '%') {\n return `calc( ${props.config.width}${widthUnit} - 10px)`;\n } else {\n // @ts-ignore\n return `${props.config.width - 10}${widthUnit}`;\n }\n } else {\n return '100%';\n }\n});\n\nconst height = computed(() => {\n if (props.config) {\n return `${props.config.height}px`;\n } else {\n return `10px`;\n }\n});\n\nconst setOutData = async (data) => {\n if (data && Object.keys(data).length > 0) {\n const option = cloneDeep(props.config);\n await getData(option, data);\n }\n};\n\nconst computedFun = {\n SUM(datas) {\n const numericDatas = datas.map((d) => Number(d)).filter((d) => !isNaN(d));\n return numericDatas.reduce((acc, val) => acc + val, 0);\n },\n AVG(datas) {\n const numericDatas = datas.map((d) => Number(d)).filter((d) => !isNaN(d));\n return numericDatas.length ? computedFun.SUM(numericDatas) / numericDatas.length : 0;\n },\n MAX(datas) {\n const numericDatas = datas.map((d) => Number(d)).filter((d) => !isNaN(d));\n return numericDatas.length ? Math.max(...numericDatas) : 0;\n },\n MIN(datas) {\n const numericDatas = datas.map((d) => Number(d)).filter((d) => !isNaN(d));\n return numericDatas.length ? Math.min(...numericDatas) : 0;\n },\n COUNT(datas) {\n return datas.length;\n },\n};\n\nconst getData = async (option: LabelOption, outData?) => {\n const {\n data: {source},\n notSingle,\n keyIds,\n dataIds,\n groupBy,\n orderBy,\n cutLength,\n singleComputed,\n singleKey,\n singleData,\n } = option;\n let datas: any = {};\n if (outData) {\n datas = {\n ...outData,\n };\n }\n for (let i = 0; i < source.length; i++) {\n const {key, url} = source[i]!!;\n try {\n const data = (await getDateSourceData(url!!, {id: props.id})).data;\n datas[key!!] = data;\n } catch (error) {\n // 数据源接口报错:停止渲染,标签块保持空白,错误信息交给父组件用 Alert 展示\n emits('report-error', {\n index: props.index,\n message: getErrorMessage(error),\n });\n loading.value = false;\n return false;\n }\n }\n if (Object.keys(datas).length === 0) {\n loading.value = false;\n return false;\n }\n list.value = [];\n if (notSingle) {\n if (keyIds.length < 2 || dataIds.length < 2) {\n loading.value = false;\n return false;\n }\n let keyKey = '';\n let keyCol = '';\n if (keyIds.length > 2) {\n keyKey = keyIds.splice(0, 2).join('.');\n keyCol = keyIds.at(0)!!;\n } else {\n keyKey = keyIds.at(0)!!;\n keyCol = keyIds.at(1)!!;\n }\n let keyData = get(datas, keyKey);\n if (!keyData) {\n loading.value = false;\n return false;\n }\n let keyVals = keyData.map((item) => item[keyCol]);\n let dataKey = '';\n let dataCol = '';\n if (dataIds.length > 2) {\n dataKey = dataIds.splice(0, 2).join('.');\n dataCol = dataIds.at(0)!!;\n } else {\n dataKey = dataIds.at(0)!!;\n dataCol = dataIds.at(1)!!;\n }\n let dataVals: LabelData[] = [];\n let dataObj = {};\n let dataData = get(datas, dataKey);\n if (!dataData) {\n loading.value = false;\n return false;\n }\n dataData.map((item) => {\n let kv = item[keyCol];\n let dv = item[dataCol];\n if (groupBy) {\n if (kv && keyVals.includes(kv)) {\n if (!dataObj[kv]) {\n dataObj[kv] = [dv];\n } else {\n dataObj[kv].push(dv);\n }\n }\n } else {\n if (kv && keyVals.includes(kv)) {\n dataVals.push({\n label: kv,\n value: dv,\n });\n }\n }\n });\n\n if (groupBy) {\n dataVals = Object.keys(dataObj).map((key) => {\n let datas = dataObj[key];\n return {\n label: key,\n value: computedFun.SUM(datas),\n };\n });\n }\n switch (orderBy) {\n case 'DESC':\n break;\n case 'ASC':\n break;\n }\n if (!isNaN(cutLength) && cutLength > 0) {\n dataVals = dataVals.splice(0, cutLength);\n }\n list.value = dataVals;\n } else {\n if (!singleData || singleData.length === 0) {\n loading.value = false;\n return false;\n }\n let datakey = '';\n let dataCol = '';\n if (singleData.length > 2) {\n datakey = singleData.splice(0, 2).join('.');\n dataCol = singleData.at(0)!!;\n } else {\n datakey = singleData.at(0)!!;\n dataCol = singleData.at(1)!!;\n }\n let dataData = get(datas, datakey);\n if (!dataData) {\n loading.value = false;\n return false;\n }\n let dataVals = dataData.map((item: any) => item[dataCol]);\n if (singleComputed) {\n dataVals = computedFun[singleComputed](dataVals);\n }\n list.value.push({\n label: singleKey,\n value: dataVals,\n });\n }\n loading.value = false;\n};\nconst init = async () => {\n loading.value = true;\n let option = cloneDeep(props.config);\n if (option) {\n getData(option);\n }\n};\n\ndefineExpose({\n setOutData,\n getLabelImage,\n});\n\nonMounted(() => {\n init();\n});\n\n/** canvas 绘制 label 色块(合并导出用):2 倍缩放保证清晰度,返回 base64 与实际尺寸 */\nfunction getLabelImage(): {base64: string; width: number; height: number} | null {\n if (!list.value.length) return null;\n const width = Math.max(rootRef.value?.offsetWidth || props.config.width || 200, 100);\n const height = props.config.height || 100;\n const scale = 2;\n const canvas = document.createElement('canvas');\n canvas.width = Math.round(width * scale);\n canvas.height = Math.round(height * scale);\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n ctx.scale(scale, scale);\n\n const items = list.value;\n const colWidth = width / items.length;\n const labelSize = 14;\n const valueSize = Math.max(Math.round(height / 3.5), 12);\n items.forEach((item, index) => {\n const x = index * colWidth;\n ctx.fillStyle = isSingle.value ? props.config.singleColor || colors[0] : colors[index % colors.length];\n ctx.fillRect(x, 0, colWidth, height);\n ctx.fillStyle = '#fff';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'top';\n ctx.font = `${labelSize}px sans-serif`;\n ctx.fillText(String(item.label ?? ''), x + colWidth / 2, height * 0.08, colWidth - 8);\n ctx.font = `bold ${valueSize}px sans-serif`;\n ctx.fillText(String(item.value ?? ''), x + colWidth / 2, height * 0.28, colWidth - 8);\n });\n return {base64: canvas.toDataURL('image/png'), width, height};\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.yh-report-label-item {\n --w: v-bind(width);\n --h: v-bind(height);\n width: var(--w);\n height: var(--h);\n overflow: hidden;\n text-align: center;\n color: #fff;\n padding: 0 !important;\n position: relative;\n &.not-single {\n display: flex;\n flex-direction: row;\n }\n .yh-report-label-item-children {\n flex: 1;\n height: var(--h);\n &:nth-child(1) {\n background-color: v-bind('colorObj.color0');\n }\n &:nth-child(2) {\n background-color: v-bind('colorObj.color1');\n }\n &:nth-child(3) {\n background-color: v-bind('colorObj.color2');\n }\n &:nth-child(4) {\n background-color: v-bind('colorObj.color3');\n }\n &:nth-child(5) {\n background-color: v-bind('colorObj.color4');\n }\n &:nth-child(6) {\n background-color: v-bind('colorObj.color5');\n }\n &:nth-child(7) {\n background-color: v-bind('colorObj.color6');\n }\n &:nth-child(8) {\n background-color: v-bind('colorObj.color7');\n }\n &:nth-child(9) {\n background-color: v-bind('colorObj.color8');\n }\n }\n .yh-report-label-item-label {\n line-height: calc(var(--h) / 4);\n font-size: 14px;\n padding-top: 4px;\n }\n\n .yh-report-label-item-value {\n line-height: calc(var(--h) * 3 / 4);\n font-size: calc(var(--h) / 3.5);\n padding-bottom: 6px;\n }\n}\n\n.label-print-mask {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n\n span {\n color: #fff;\n font-size: 14px;\n padding: 8px 16px;\n background: rgba(0, 0, 0, 0.6);\n border-radius: 4px;\n white-space: nowrap;\n }\n}\n</style>\n","<template>\n <el-dialog\n fullscreen\n :model-value=\"props.visible\"\n @close=\"handleClose\"\n class=\"print-preview-dialog\"\n title=\"打印预览\">\n <div class=\"print-preview-toolbar\">\n <el-button @click=\"handleClose\">关闭</el-button>\n <el-button\n type=\"primary\"\n :loading=\"printing\"\n @click=\"handlePrint\">\n 打印\n </el-button>\n </div>\n <div\n class=\"print-preview-scroll\"\n ref=\"scrollRef\">\n <div class=\"print-preview-pages\">\n <div\n v-for=\"(page, pIdx) in pages\"\n :key=\"pIdx\"\n class=\"print-preview-page\"\n :style=\"pageStyle\">\n <div\n class=\"print-preview-page-content\"\n ref=\"pageRefs\"\n :style=\"contentStyle\"></div>\n </div>\n </div>\n </div>\n </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport {ref, computed, watch, nextTick, onBeforeUnmount} from 'vue';\nimport {ElDialog, ElButton, ElLoading} from 'element-plus';\nimport type {PrintConfig, Options, ReportConfig} from 'yh-report/types';\nimport {\n getPrintContentWidthPxMeasured,\n getPrintContentHeightPxMeasured,\n mmToPx,\n} from 'yh-report/libs/constants';\nimport {\n splitNextReportPage,\n createReportSplitState,\n buildPrintDocumentHTML,\n type ReportSplitState,\n} from 'yh-report/libs/printRenderer';\nimport {renderReportByDomForPrint} from 'yh-report/libs/renderByDom';\nimport {preGenerateBarcodes} from 'yh-report/libs/jsep';\nimport {getThemeColors} from 'yh-report/libs/colors';\nimport {fetchReportData, toUpdateData} from 'yh-report/libs/fetchReportData';\nimport {renderReportToConfigs} from 'yh-report/libs/renderReportToConfigs';\nimport {getProcessData} from 'yh-report/libs/index';\nimport {buildPrintParamsFromConfig} from 'yh-report/libs/printParams';\nimport type {StatementOption, StatementDataSource, StatementData, statementTableConfig} from 'yh-report/types';\nimport {useRoute} from 'vue-router';\n\nconst props = defineProps<{\n visible: boolean;\n configs: Options[];\n printConfig: PrintConfig;\n statementName?: string;\n tableConfigs?: Map<number, ReportConfig[]>;\n batchTableConfigs?: Map<number, ReportConfig[][]>;\n /** 静默渲染:打开时内部自行拉数据+渲染生成 ReportConfig(设计器/Electron 无头场景)。\n * 为 false 时直接消费外部传入的已渲染 tableConfigs/batchTableConfigs(运行态)。 */\n silentRender?: boolean;\n /** 自动打印:渲染+分页完成后自动触发 print()(Electron 无头/一键打印)。 */\n autoPrint?: boolean;\n /** 静默渲染时拉取全量数据,不分页(打印场景默认 true) */\n fetchAll?: boolean;\n /** 报表配置 id,静默渲染拉数据时传给后端(设计器/Electron 场景需传,运行态预渲染不需要) */\n reportId?: string;\n}>();\n\nconst emits = defineEmits<{\n (e: 'update:visible', val: boolean);\n}>();\n\nconst scrollRef = ref<HTMLElement>();\nconst pageRefs = ref<HTMLElement[]>([]);\nconst pages = ref<{type: string; dom: HTMLElement}[][]>([]);\nconst pageDoms = ref<HTMLElement[]>([]);\nconst printing = ref(false);\nconst route = useRoute();\n\n/** 静默渲染产出的已渲染配置(silentRender=true 时由内部填充,优先于 props 传入) */\nconst innerTableConfigs = ref<Map<number, ReportConfig[]>>(new Map());\nconst innerBatchTableConfigs = ref<Map<number, ReportConfig[][]>>(new Map());\n\n/** 取生效的 tableConfigs:静默渲染产出优先,否则用 props 传入 */\nfunction getEffectiveTableConfigs(): Map<number, ReportConfig[]> {\n if (innerTableConfigs.value.size > 0) return innerTableConfigs.value;\n return props.tableConfigs || new Map();\n}\nfunction getEffectiveBatchTableConfigs(): Map<number, ReportConfig[][]> {\n if (innerBatchTableConfigs.value.size > 0) return innerBatchTableConfigs.value;\n return props.batchTableConfigs || new Map();\n}\n\nconst pageStyle = computed(() => {\n const pc = props.printConfig;\n return {\n width: `${pc.width}mm`,\n height: pc.height ? `${pc.height}mm` : 'auto',\n minWidth: `${pc.width}mm`,\n padding: `${pc.marginTop}mm ${pc.marginRight}mm ${pc.marginBottom}mm ${pc.marginLeft}mm`,\n };\n});\n\nconst contentStyle = computed(() => {\n const pc = props.printConfig;\n return {\n width: `${mmToPx(pc.width - pc.marginLeft - pc.marginRight)}px`,\n minHeight: pc.height ? `${mmToPx(pc.height - pc.marginTop - pc.marginBottom)}px` : 'auto',\n };\n});\n\nfunction handleClose() {\n emits('update:visible', false);\n}\n\nfunction handlePrint() {\n printing.value = true;\n\n const contentWidthPx = getPrintContentWidthPxMeasured(props.printConfig);\n const html = buildPrintDocumentHTML({\n pages: pages.value,\n printConfig: props.printConfig,\n contentWidthPx,\n });\n\n const iframe = document.createElement('iframe');\n iframe.style.position = 'fixed';\n iframe.style.left = '-9999px';\n iframe.style.top = '-9999px';\n iframe.style.width = '0';\n iframe.style.height = '0';\n iframe.style.border = 'none';\n document.body.appendChild(iframe);\n\n const doc = iframe.contentDocument!;\n doc.open();\n doc.write(html);\n doc.close();\n\n iframe.onload = () => {\n iframe.contentWindow!.print();\n setTimeout(() => {\n iframe.remove();\n printing.value = false;\n }, 500);\n };\n}\n\nwatch(\n () => props.visible,\n async (val) => {\n if (!val) return;\n const loadingInstance = ElLoading.service({\n target: scrollRef.value,\n text: '正在生成打印预览...',\n });\n await nextTick();\n\n try {\n // 静默渲染:打开时内部自行拉数据+渲染生成 ReportConfig(设计器/Electron 无头场景)\n if (props.silentRender) {\n await silentRenderAll();\n }\n\n // 自动打印:渲染+分页完成后自动触发 print()\n const shouldAutoPrint = !!props.autoPrint;\n const pageHeightPx = getPrintContentHeightPxMeasured(props.printConfig);\n const hasPagedPrint = pageHeightPx != null;\n const contentWidthPx = getPrintContentWidthPxMeasured(props.printConfig);\n\n interface PageItem {\n type: string;\n dom: HTMLElement;\n }\n\n interface PendingReport {\n state: ReportSplitState;\n }\n\n type PendingItem =\n | {kind: 'report'; pending: PendingReport}\n | {kind: 'break'};\n\n const pendingItems: PendingItem[] = [];\n\n for (let i = 0; i < props.configs.length; i++) {\n const option = props.configs[i];\n\n if (option.type === 'report') {\n const tcList = getEffectiveTableConfigs().get(i);\n if (tcList && tcList.length > 0) {\n for (const tc of tcList) {\n const state = createReportSplitState(\n tc,\n getThemeColors(option.theme || 'none').border,\n {\n header: props.printConfig.header,\n footer: props.printConfig.footer,\n watermark: props.printConfig.watermark,\n title: props.statementName,\n }\n );\n // 预生成二维码/条形码(运行态已生成会跳过;设计器模板态未预生成,此处补上)\n await preGenerateBarcodes([{config: state.config}]);\n pendingItems.push({kind: 'report', pending: {state}});\n }\n }\n const batchTcList = getEffectiveBatchTableConfigs().get(i);\n if (batchTcList && batchTcList.length > 0) {\n // 用 for...of 正确 await,避免 forEach 异步竞态导致二维码/条形码未生成完毕\n for (let idx = 0; idx < batchTcList.length; idx++) {\n const tcGroup = batchTcList[idx];\n if (idx > 0) pendingItems.push({kind: 'break'});\n for (const tc of tcGroup) {\n const state = createReportSplitState(\n tc,\n getThemeColors(option.theme || 'none').border,\n {\n header: props.printConfig.header,\n footer: props.printConfig.footer,\n watermark: props.printConfig.watermark,\n title: props.statementName,\n }\n );\n // 预生成二维码/条形码\n await preGenerateBarcodes([{config: state.config}]);\n pendingItems.push({kind: 'report', pending: {state}});\n }\n }\n }\n } else if (option.type === 'label') {\n continue;\n }\n // chart 类型:打印模式不再支持,跳过\n }\n\n const allPages: {items: PageItem[]}[] = [];\n let currentPageItems: PageItem[] = [];\n let currentPageHeight = 0;\n const activeReports: PendingReport[] = [];\n\n function flushPage() {\n if (currentPageItems.length > 0) {\n allPages.push({items: currentPageItems});\n currentPageItems = [];\n currentPageHeight = 0;\n }\n }\n\n function tryFillActiveReports() {\n if (!hasPagedPrint) return;\n while (activeReports.length > 0) {\n const report = activeReports[0];\n const remaining = pageHeightPx - currentPageHeight;\n if (remaining <= 0) {\n if (currentPageItems.length === 0) break;\n flushPage();\n continue;\n }\n\n let result = splitNextReportPage(report.state, remaining, contentWidthPx, pageHeightPx!);\n if (!result) {\n if (currentPageItems.length > 0) {\n flushPage();\n continue;\n }\n result = splitNextReportPage(report.state, remaining, contentWidthPx, pageHeightPx!, true);\n }\n\n currentPageItems.push({type: 'report', dom: result.dom});\n currentPageHeight += result.height;\n\n if (report.state.currentRowIdx >= report.state.visibleRows.length) {\n activeReports.shift();\n }\n }\n }\n\n if (!hasPagedPrint) {\n const pc = props.printConfig;\n const spacerHeight = mmToPx(pc.marginTop + pc.marginBottom);\n const pageItems: PageItem[] = [];\n for (const item of pendingItems) {\n if (item.kind === 'break') {\n const spacer = document.createElement('div');\n spacer.style.height = `${spacerHeight}px`;\n pageItems.push({type: 'spacer', dom: spacer});\n continue;\n }\n if (item.kind === 'report') {\n const {state} = item.pending;\n const {rowConfig, colConfig, config} = state;\n const dom = renderReportByDomForPrint(rowConfig, colConfig, config, state.themeColor);\n pageItems.push({type: 'report', dom});\n }\n }\n allPages.push({items: pageItems});\n } else {\n for (const item of pendingItems) {\n if (item.kind === 'break') {\n flushPage();\n continue;\n }\n if (item.kind === 'report') {\n const report = item.pending;\n tryFillActiveReports();\n\n const remaining = pageHeightPx! - currentPageHeight;\n const firstResult = splitNextReportPage(report.state, remaining, contentWidthPx, pageHeightPx!);\n\n if (firstResult) {\n currentPageItems.push({type: 'report', dom: firstResult.dom});\n currentPageHeight += firstResult.height;\n\n if (report.state.currentRowIdx < report.state.visibleRows.length) {\n activeReports.push(report);\n }\n } else {\n if (currentPageItems.length > 0) {\n flushPage();\n }\n activeReports.push(report);\n }\n }\n }\n\n tryFillActiveReports();\n flushPage();\n }\n\n pages.value = allPages.map((p) => p.items);\n\n await nextTick();\n\n pageDoms.value.forEach((d) => d.remove());\n pageDoms.value = [];\n\n const refs = pageRefs.value;\n for (let pIdx = 0; pIdx < refs.length && pIdx < allPages.length; pIdx++) {\n const container = refs[pIdx];\n container.innerHTML = '';\n\n const pageItems = allPages[pIdx].items;\n for (const item of pageItems) {\n const cloned = item.dom.cloneNode(true) as HTMLElement;\n container.appendChild(cloned);\n pageDoms.value.push(cloned);\n }\n }\n\n // 自动打印:分页 + DOM 就绪后触发,打印完关闭弹窗\n if (shouldAutoPrint) {\n await nextTick();\n handlePrint();\n // 打印对话框关闭后再关弹窗(handlePrint 内 iframe 已藏,这里仅关闭预览)\n setTimeout(() => {\n emits('update:visible', false);\n }, 1000);\n }\n } finally {\n loadingInstance.close();\n }\n }\n);\n\n/**\n * 静默渲染:遍历 configs,对 report 类型自行拉数据 + 渲染生成 ReportConfig,\n * 填充 innerTableConfigs / innerBatchTableConfigs。\n * 设计器点打印、Electron 无头打印走此路,不依赖 reportViewItem 实例。\n */\nasync function silentRenderAll() {\n innerTableConfigs.value = new Map();\n innerBatchTableConfigs.value = new Map();\n const fetchAll = props.fetchAll !== false; // 默认拉全量\n\n for (let i = 0; i < props.configs.length; i++) {\n const option = props.configs[i];\n if (option.type !== 'report') continue;\n\n const reportOption = option as StatementOption;\n const data: StatementData | undefined = reportOption.data;\n const tableConfig: statementTableConfig[] | undefined = reportOption.tableConfig;\n if (!data || !tableConfig || !data.source) continue;\n\n // ① 准备查询参数(query 优先,缺省用默认值)\n const params = buildPrintParamsFromConfig(reportOption, route.query);\n\n // ② 拉数据(全量,不分页)\n const {resData} = await fetchReportData(\n {id: props.reportId ?? '', data, tableConfig},\n params,\n {pageSize: 5000, pageIndex: 1, total: 0, isPagination: !!data.pagination},\n fetchAll\n );\n let tableData = toUpdateData(resData);\n\n // ③ 数据处理脚本\n if (data.processData) {\n tableData = await getProcessData(data.processData, tableData, params, {\n pageSize: 5000,\n pageIndex: 1,\n total: 0,\n });\n }\n\n // ④ 渲染生成 ReportConfig\n const sources: StatementDataSource[] = data.source;\n const loopSource = sources.find((s) => s.loopTable);\n if (loopSource && loopSource.key) {\n const batchConfigs = (await renderReportToConfigs(\n tableConfig,\n tableData,\n sources,\n [],\n loopSource.key\n )) as ReportConfig[][];\n innerBatchTableConfigs.value.set(i, batchConfigs);\n } else {\n const configs = (await renderReportToConfigs(\n tableConfig,\n tableData,\n sources,\n []\n )) as ReportConfig[];\n innerTableConfigs.value.set(i, configs);\n }\n }\n}\n\nonBeforeUnmount(() => {\n pageDoms.value.forEach((d) => d.remove());\n});\n</script>\n\n<style lang=\"scss\">\n.print-preview-dialog.el-dialog {\n display: flex;\n flex-direction: column;\n padding: 0;\n\n .el-dialog__header {\n display: none;\n }\n\n .el-dialog__body {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n padding: 0;\n }\n}\n\n.print-preview-toolbar {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding: 8px 16px;\n border-bottom: 1px solid var(--el-border-color-lighter);\n gap: 8px;\n flex-shrink: 0;\n}\n\n.print-preview-scroll {\n flex: 1;\n overflow: auto;\n background-color: #e8e8e8;\n padding: 20px;\n}\n\n.print-preview-pages {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 20px;\n}\n\n.print-preview-page {\n background: white;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n flex-shrink: 0;\n display: flex;\n justify-content: center;\n align-items: flex-start;\n overflow: hidden;\n box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.print-preview-page-content {\n box-sizing: border-box;\n overflow: hidden;\n position: relative;\n\n /* 与打印 iframe(getPrintTableStylesString)保持一致,保证预览即所得 */\n .print-render {\n overflow: visible;\n }\n .print-render table {\n table-layout: fixed;\n border-collapse: collapse;\n font-family: Arial, sans-serif;\n font-size: 12px;\n color: #333;\n /* 背景透明,让置底的水印透上来 */\n background-color: transparent;\n }\n .print-render table tr td {\n min-height: 20px;\n text-align: center;\n overflow: hidden;\n border: 0.5px solid #333;\n /* td border-box + height=size,行高精确等于 size(inline style 覆盖此默认值) */\n box-sizing: border-box;\n padding: 1px;\n /* 背景透明,避免遮住水印 */\n background-color: transparent;\n }\n .print-render table tr:nth-child(even) td {\n background-color: transparent;\n }\n .print-render table tr td.fixed-td {\n background-color: transparent;\n }\n .print-render table tr td.no-border {\n border: 0;\n }\n .print-render table tr.fixed-row td {\n font-weight: bold;\n background-color: transparent;\n }\n\n /* 单页包裹层:承载水印 + 页眉 + 表格 + 页脚 */\n .print-page-wrapper {\n position: relative;\n width: 100%;\n }\n .print-page-wrapper > .print-render,\n .print-page-wrapper > .print-area {\n position: relative;\n z-index: 1;\n }\n\n /* 页眉/页脚 */\n .print-area {\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n }\n .print-area-content {\n width: 100%;\n min-height: 100%;\n box-sizing: border-box;\n }\n\n /* 水印背景层:绝对定位铺满父级,不占正文高度。\n 水印置底(z-index:0),表格背景透明让水印透上来,文字完全不受影响 */\n .print-watermark-layer {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n overflow: hidden;\n pointer-events: none;\n z-index: 0;\n }\n .print-watermark-item {\n position: absolute;\n white-space: nowrap;\n user-select: none;\n }\n}\n\n\n</style>\n","<template>\n <div\n class=\"yh-report-table-title\">{{ statementName }}</div>\n\n <div class=\"yh-report-merge-export-actions\">\n <el-dropdown trigger=\"click\" @command=\"mergeExportHandler\">\n <el-button type=\"primary\" size=\"small\">\n 导出报表\n <el-icon class=\"el-icon--right\"><i class=\"iconfont icon-xiala\"></i></el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"excel\">Excel(表格+图表+指标卡)</el-dropdown-item>\n <el-dropdown-item command=\"pdf\">PDF(表格+图表+指标卡)</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n\n <div class=\"yh-report-print-actions\" v-if=\"isPrintMode\">\n <el-button\n type=\"primary\"\n size=\"small\"\n @click=\"openPrintPreview\">\n 打印预览\n </el-button>\n </div>\n <section\n v-if=\"configError\"\n class=\"yh-report-error-result\">\n <el-result\n icon=\"error\"\n title=\"报表加载失败\"\n :sub-title=\"configError\" />\n </section>\n <section\n v-else\n class=\"yh-report-viewer-wrapper\"\n :class=\"{ 'print-mode': isPrintMode }\"\n :style=\"printModeCSSVars\"\n ref=\"viewWrapper\"\n v-loading=\"detailLoading\">\n <el-alert\n v-for=\"err in dataSourceErrors\"\n :key=\"err.key\"\n class=\"yh-report-data-source-error\"\n type=\"error\"\n show-icon\n :closable=\"true\"\n :title=\"err.message\"\n @close=\"removeError(err)\" />\n <template v-for=\"(config, index) in configs\">\n <report-view-item\n :is-print-mode=\"isPrintMode\"\n v-if=\"config.type === 'report'\"\n ref=\"reportViewItemRefs\"\n :index=\"index\"\n :length=\"configs.length\"\n :id=\"id\"\n :name=\"statementName\"\n :config=\"config\"\n @update-data=\"handleUpdateData\"\n @report-error=\"handleReportError\"></report-view-item>\n <label-item\n v-else-if=\"config.type === 'label'\"\n :ref=\"(el) => setChartAndLabelRef(el, index)\"\n :index=\"index\"\n :length=\"configs.length\"\n :id=\"id\"\n :config=\"config\"\n @report-error=\"handleReportError\"></label-item>\n <chart-view-item\n v-else\n :ref=\"(el) => setChartAndLabelRef(el, index)\"\n :config=\"config\"\n :id=\"id\"\n :index=\"index\"\n :length=\"configs.length\"></chart-view-item>\n </template>\n <div\n class=\"back-top\"\n v-show=\"showBackTop\">\n <i class=\"iconfont icon-backtop\"></i>\n </div>\n </section>\n <print-preview-dialog\n v-model:visible=\"printPreviewVisible\"\n :configs=\"configs\"\n :print-config=\"printConfig\"\n :statement-name=\"statementName\"\n :table-configs=\"runTableConfigs\"\n :batch-table-configs=\"runBatchTableConfigs\"></print-preview-dialog>\n</template>\n<script setup lang=\"ts\">\nimport {onMounted, ref, reactive, watch, computed, provide, nextTick} from 'vue';\nimport {ElButton, ElAlert, ElResult, ElDropdown, ElDropdownMenu, ElDropdownItem, ElIcon, ElMessage} from 'element-plus';\nimport {rct} from 'yh-report';\nimport {getConfig} from 'yh-report/api/form';\nimport {getErrorMessage} from 'yh-report/libs/util';\nimport {exportReportMerged, type MergeExportItem} from 'yh-report/libs/export/exportExcel';\nimport {downloadReport} from 'yh-report/libs/export';\nimport {exportReportByBrowser, type BrowserPrintItem} from 'yh-report/libs/printByBrowser';\nimport {getThemeColors} from 'yh-report/libs/colors';\nimport reportViewItem from './view-item/reportViewItem.vue';\nimport chartViewItem from './view-item/chartViewItem.vue';\nimport labelItem from './view-item/labelItem.vue';\nimport printPreviewDialog from './PrintPreviewDialog.vue';\nimport type {PrintConfig, ReportConfig, ChartOption, LabelOption} from 'yh-report/types';\nimport {DEFAULT_PRINT_CONFIG, mmToPx} from 'yh-report/libs/constants';\n\nconst props = withDefaults(\n defineProps<{\n id: string;\n }>(),\n {}\n);\n\nconst emits = defineEmits(['updateData']);\n\nconst statementScrollbar = ref();\nconst detailLoading = ref(false);\nconst statementName = ref('');\n\n/** 报表配置接口错误信息,非空时整页展示 el-result */\nconst configError = ref('');\n/** 子组件上报的数据源接口错误列表,用 el-alert 展示在预览区顶部 */\nconst dataSourceErrors = ref<Array<{key: number; message: string}>>([]);\n\n/** 报表容器的Ref引用 */\nconst viewWrapper = ref<HTMLElement>();\n/** 所有图表/label 视图组件 ref(v-for 中 ref 用函数式按画布索引收集) */\nconst chartAndLabelRefs = ref<any[]>([]);\n\nconst configs = ref<any[]>([]);\nconst printConfig = ref<PrintConfig>({ ...DEFAULT_PRINT_CONFIG });\nconst outData = {};\n\nconst isPrintMode = computed(() => !!printConfig.value?.enabled);\n\nprovide('printConfig', printConfig);\nprovide('isPrintMode', isPrintMode);\n\nconst printModeCSSVars = computed(() => {\n if (!isPrintMode.value) return {};\n const pc = printConfig.value;\n const contentWidthPx = mmToPx(pc.width - pc.marginLeft - pc.marginRight);\n return {\n '--print-content-width': `${contentWidthPx}px`,\n };\n});\n\nwatch(\n () => props.id,\n (id) => {\n getDetail(id);\n }\n);\n\nfunction getDetail(id) {\n if (id) {\n configError.value = '';\n dataSourceErrors.value = [];\n detailLoading.value = true;\n getConfig(id)\n .then(async (data) => {\n let {name, remoteOptions, printConfig: remotePrintConfig} = data;\n statementName.value = name;\n configs.value = remoteOptions;\n if (remotePrintConfig) {\n printConfig.value = { ...DEFAULT_PRINT_CONFIG, ...remotePrintConfig };\n }\n })\n .catch((error) => {\n // 报表配置接口报错:整页展示错误,避免预览区空白\n console.error('获取报表配置失败:', error);\n configError.value = getErrorMessage(error);\n })\n .finally(() => {\n detailLoading.value = false;\n });\n } else {\n configError.value = '报表ID不能为空';\n }\n}\n\n/** 收集子组件上报的数据源接口错误,用 Alert 展示在预览区顶部 */\nfunction handleReportError({index, message}) {\n if (!dataSourceErrors.value.some((e) => e.key === index)) {\n dataSourceErrors.value.push({key: index, message});\n }\n}\n\nfunction removeError(err) {\n const idx = dataSourceErrors.value.indexOf(err);\n if (idx > -1) {\n dataSourceErrors.value.splice(idx, 1);\n }\n}\n\nconst showBackTop = ref(false);\n\nfunction backTop() {\n statementScrollbar.value.scrollTo(0, 0);\n}\n\nfunction scrollHandler({scrollTop}) {\n let offset = statementScrollbar.value.wrapRef.offsetHeight;\n let top = scrollTop;\n if (top > offset / 2) {\n showBackTop.value = true;\n } else {\n showBackTop.value = false;\n }\n}\n\nfunction handleUpdateData(data) {\n outData[data.key] = data.data;\n chartAndLabelRefs.value.forEach((item) => {\n item?.setOutData?.(outData);\n });\n}\n\n/** 收集图表/label 视图 ref(v-for 中 ref 用函数式收集,卸载传 null 剔除) */\nfunction setChartAndLabelRef(el: any, index: number) {\n if (el) {\n chartAndLabelRefs.value[index] = el;\n } else {\n delete chartAndLabelRefs.value[index];\n }\n}\n\n/**\n * 合并导出:按画布顺序遍历配置,report 走 buildExportConfigs 装配,\n * chart 用 getChartImage 截图,label 用 getLabelImage canvas 绘制,拼成有序导出项。\n */\nasync function collectExportItems() {\n const reportRefs = reportViewItemRefs.value || [];\n let reportIdx = 0;\n const mergeItems: MergeExportItem[] = [];\n const printItems: BrowserPrintItem[] = [];\n for (let idx = 0; idx < configs.value.length; idx++) {\n const config = configs.value[idx];\n if (config.type === 'report') {\n // reportViewItemRefs 只收集 report 类型,按出现顺序递增取\n const target = reportRefs[reportIdx];\n reportIdx += 1;\n if (!target?.buildExportConfigs) continue;\n const tableConfs: ReportConfig[] | null = await target.buildExportConfigs();\n if (!tableConfs) continue;\n const themeColor = getThemeColors(config.theme || 'none').border;\n mergeItems.push({type: 'report', reportConfig: tableConfs, subReportIndex: config.subReprotIndex || 0});\n tableConfs.forEach((tc) => printItems.push({type: 'report', reportConfig: tc, themeColor}));\n } else {\n const viewRef = chartAndLabelRefs.value[idx];\n if (!viewRef) continue;\n let image: {base64: string; width: number; height: number} | null = null;\n if (config.type === 'label') {\n image = viewRef.getLabelImage?.() || null;\n } else {\n const src = viewRef.getChartImage?.();\n if (src) {\n image = {base64: src, width: (config as ChartOption).width || 600, height: (config as ChartOption).height || 400};\n }\n }\n if (image) {\n mergeItems.push({type: 'image', image});\n printItems.push({type: 'image', src: image.base64, width: image.width, height: image.height});\n }\n }\n }\n return {mergeItems, printItems};\n}\n\n/** 合并导出入口:excel 走 exceljs 单 sheet 混排;pdf 走浏览器打印(另存为 PDF) */\nasync function mergeExportHandler(command: string) {\n detailLoading.value = true;\n try {\n const {mergeItems, printItems} = await collectExportItems();\n if (!mergeItems.length) {\n ElMessage.warning('当前报表没有可导出的内容');\n return;\n }\n if (command === 'excel') {\n const buffer = await exportReportMerged(mergeItems, statementName.value || '报表导出', 'gray');\n if (buffer) {\n downloadReport(buffer, statementName.value || '报表导出', 'excel');\n }\n } else if (command === 'pdf') {\n exportReportByBrowser(printItems, printConfig.value, statementName.value);\n }\n } finally {\n detailLoading.value = false;\n }\n}\n\nconst printPreviewVisible = ref(false);\nconst runTableConfigs = ref<Map<number, ReportConfig[]>>(new Map());\nconst runBatchTableConfigs = ref<Map<number, ReportConfig[][]>>(new Map());\nconst reportViewItemRefs = ref<InstanceType<typeof reportViewItem>[]>([]);\n\nasync function openPrintPreview() {\n // 先拉数据 + 渲染所有报表,确保打印预览弹窗打开时有数据\n if (reportViewItemRefs.value) {\n const renderTasks = reportViewItemRefs.value\n .filter((item: any) => item && typeof item.renderHandler === 'function')\n .map((item: any) => item.renderHandler());\n if (renderTasks.length > 0) {\n detailLoading.value = true;\n await Promise.all(renderTasks);\n detailLoading.value = false;\n }\n }\n\n const tcMap = new Map<number, ReportConfig[]>();\n const batchTcMap = new Map<number, ReportConfig[][]>();\n\n if (reportViewItemRefs.value) {\n for (let idx = 0; idx < configs.value.length; idx++) {\n if (configs.value[idx].type === 'report') {\n const matched = reportViewItemRefs.value.find((_: any, i: number) => {\n const reportItems = configs.value.filter((c: any) => c.type === 'report');\n return reportItems[i] === configs.value[idx];\n });\n if (matched) {\n if (configs.value[idx].data?.source?.some((s: any) => s.loopTable)) {\n if (matched.batchTableConfigs) {\n // 打印模式限制:每批只保留第一个 tableConfig\n batchTcMap.set(\n idx,\n matched.batchTableConfigs.map((group: ReportConfig[]) => (group.length > 0 ? [group[0]] : []))\n );\n }\n } else if (matched.tableConfig) {\n // 打印模式限制:只保留第一个 tableConfig\n tcMap.set(idx, matched.tableConfig.length > 0 ? [matched.tableConfig[0]] : []);\n }\n }\n }\n }\n }\n\n runTableConfigs.value = tcMap;\n runBatchTableConfigs.value = batchTcMap;\n printPreviewVisible.value = true;\n}\n\nonMounted(() => {\n getDetail(props.id);\n});\n</script>\n<style lang=\"scss\">\n.yh-report-error-result {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.yh-report-data-source-error {\n width: 100%;\n margin-left: 8px;\n margin-bottom: 8px;\n}\n\n.yh-report-viewer-wrapper {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n align-content: flex-start;\n position: relative;\n overflow: auto;\n scrollbar-width: auto;\n scrollbar-color: auto;\n box-sizing: border-box;\n padding: 8px 8px 8px 0px;\n\n &.print-mode {\n flex-direction: column;\n flex-wrap: nowrap;\n align-items: center;\n overflow-x: hidden;\n overflow-y: auto;\n\n .yh-report-view-container {\n width: var(--print-content-width);\n margin-left: 0;\n margin-bottom: 0px;\n }\n }\n\n .yh-report-view-container {\n background-color: #fff;\n padding: 8px 8px;\n box-sizing: border-box;\n margin-left: 8px;\n margin-bottom: 8px;\n display: flex;\n flex-direction: column;\n &.chart-view-item {\n padding: 0;\n }\n .yh-report-conditions {\n position: relative;\n z-index: 100;\n display: flex;\n padding-bottom: 8px;\n .el-form {\n flex: 1;\n }\n .el-form-item {\n margin-bottom: 8px;\n }\n }\n .el-pagination {\n padding-top: 8px;\n box-sizing: border-box;\n justify-content: flex-end;\n }\n }\n}\n\n.yh-report-print-actions {\n position: fixed;\n right: 30px;\n bottom: 30px;\n z-index: 10;\n}\n\n.yh-report-merge-export-actions {\n position: fixed;\n right: 30px;\n top: 20px;\n z-index: 10;\n}\n</style>\n","import {ref, computed} from 'vue';\nimport type {\n PrinterInfoDTO,\n PrintReportData,\n PrintResult,\n ClientMessage,\n ServerMessage,\n} from 'yh-report/libs/printerProtocol';\n\n/** localStorage 存 WS 地址的 key */\nexport const PRINTER_URL_KEY = 'yh-printer-url';\n/** 默认打印服务地址 */\nexport const DEFAULT_PRINTER_URL = 'ws://127.0.0.1:17891';\n/** 打印机列表轮询间隔(ms) */\nconst POLL_INTERVAL = 10_000;\n/** 单次请求超时(ms) */\nconst REQUEST_TIMEOUT = 15_000;\n/** 重连最大间隔(ms) */\nconst MAX_RECONNECT_DELAY = 30_000;\n/** 最大重试次数 */\nconst MAX_RETRY_COUNT = 5;\n\ntype Status = 'disconnected' | 'connecting' | 'connected' | 'retry_stopped';\ntype StatusListener = (status: Status) => void;\ntype PrintersListener = (printers: PrinterInfoDTO[]) => void;\ntype SelectListener = (printerName: string | null) => void;\n\n/** 读取持久化的打印服务地址 */\nexport function getStoredPrinterUrl(): string {\n try {\n return localStorage.getItem(PRINTER_URL_KEY) || DEFAULT_PRINTER_URL;\n } catch {\n return DEFAULT_PRINTER_URL;\n }\n}\n\n/** 持久化打印服务地址 */\nexport function setStoredPrinterUrl(url: string): void {\n try {\n localStorage.setItem(PRINTER_URL_KEY, url);\n } catch {\n /* 忽略隐私模式等异常 */\n }\n}\n\n/**\n * 打印服务客户端(模块级单例)。\n *\n * 管理唯一一条 WebSocket 连接,提供请求-响应配对、自动重连、打印机列表轮询。\n * Header 组件与业务调用共享同一实例(同一连接、同一份打印机列表、同一选中打印机)。\n */\nexport class PrinterClient {\n // ===== 响应式状态(供 Composable 直接暴露) =====\n /** 连接状态 */\n readonly status = ref<Status>('disconnected');\n /** 打印机列表 */\n readonly printers = ref<PrinterInfoDTO[]>([]);\n /** 当前选中的打印机 name(Header 下拉选的,业务 print 不传 printerName 时用它) */\n readonly selectedPrinter = ref<string | null>(null);\n /** 是否正在打印中(业务 print 流程中) */\n readonly printing = ref(false);\n\n // ===== 内部状态 =====\n private ws: WebSocket | null = null;\n private url = '';\n private manualClosed = false;\n private reconnectTimer: any = null;\n private reconnectDelay = 1000;\n private retryCount = 0;\n private pollTimer: any = null;\n private seq = 0;\n private pending = new Map<string, {resolve: (v: any) => void; timer: any}>();\n private statusListeners = new Set<StatusListener>();\n private printersListeners = new Set<PrintersListener>();\n private selectListeners = new Set<SelectListener>();\n\n /** 当前服务地址 */\n getUrl(): string {\n return this.url;\n }\n\n /** 订阅连接状态变化 */\n onStatus(fn: StatusListener): () => void {\n this.statusListeners.add(fn);\n return () => this.statusListeners.delete(fn);\n }\n\n /** 订阅打印机列表变化 */\n onPrintersChange(fn: PrintersListener): () => void {\n this.printersListeners.add(fn);\n return () => this.printersListeners.delete(fn);\n }\n\n /** 订阅选中打印机变化 */\n onSelectChange(fn: SelectListener): () => void {\n this.selectListeners.add(fn);\n return () => this.selectListeners.delete(fn);\n }\n\n /** 设置选中打印机(Header 下拉选时调) */\n setSelectedPrinter(name: string | null): void {\n this.selectedPrinter.value = name;\n this.selectListeners.forEach((fn) => fn(name));\n }\n\n /** 连接到打印服务。不传 url 则用 localStorage 持久化的地址 */\n connect(url?: string): void {\n this.url = url || getStoredPrinterUrl();\n this.manualClosed = false;\n this.clearReconnect();\n this.retryCount = 0;\n this.openSocket();\n }\n\n /** 断开连接(手动,不再自动重连) */\n disconnect(): void {\n this.manualClosed = true;\n this.clearReconnect();\n this.stopPolling();\n if (this.ws) {\n this.ws.onclose = null;\n this.ws.onerror = null;\n this.ws.onmessage = null;\n this.ws.close();\n this.ws = null;\n }\n // 手动断开不会触发 onclose,主动让在途请求失败,避免它们等满 15s 超时\n this.failAllPending('连接已关闭');\n this.setStatus('retry_stopped');\n }\n\n /** 切换服务地址并重连 */\n setUrl(url: string): void {\n setStoredPrinterUrl(url);\n this.disconnect();\n this.connect(url);\n }\n\n /** 手动重新连接(重置重试计数器) */\n manualReconnect(): void {\n this.retryCount = 0;\n this.clearReconnect();\n this.openSocket();\n }\n\n /** 获取打印机列表 */\n async getPrinters(): Promise<PrinterInfoDTO[]> {\n const res = await this.request<{printers: PrinterInfoDTO[]}>({type: 'getPrinters'});\n const list = res?.printers || [];\n this.updatePrinters(list);\n return list;\n }\n\n /** 打印报表 */\n async printReport(data: PrintReportData): Promise<PrintResult> {\n const res = await this.request<PrintResult>({type: 'printReport', data});\n return res;\n }\n\n // ===== 内部实现 =====\n\n private openSocket(): void {\n this.setStatus('connecting');\n let ws: WebSocket;\n try {\n ws = new WebSocket(this.url);\n } catch {\n this.scheduleReconnect();\n return;\n }\n this.ws = ws;\n\n ws.onopen = () => {\n this.reconnectDelay = 1000;\n this.retryCount = 0;\n this.setStatus('connected');\n // 连接成功立即拉一次打印机列表 + 开启轮询\n this.getPrinters().catch(() => {});\n this.startPolling();\n };\n\n ws.onmessage = (ev) => this.onMessage(ev);\n\n ws.onclose = () => {\n this.stopPolling();\n this.failAllPending('连接已关闭');\n if (!this.manualClosed) {\n this.scheduleReconnect();\n } else {\n this.setStatus('disconnected');\n }\n };\n\n ws.onerror = () => {\n // 错误后通常会触发 onclose,重连由 close 处理\n };\n }\n\n private onMessage(ev: MessageEvent): void {\n let msg: ServerMessage;\n try {\n msg = JSON.parse(ev.data);\n } catch {\n return;\n }\n if (!msg || !msg.id) return;\n\n const entry = this.pending.get(msg.id);\n if (!entry) return;\n this.pending.delete(msg.id);\n clearTimeout(entry.timer);\n\n if (msg.type === 'printers') {\n entry.resolve(msg.data);\n } else if (msg.type === 'printResult') {\n entry.resolve(msg.data);\n }\n }\n\n /** 发送请求并等待响应(按 id 配对,带超时) */\n private request<T = any>(payload: Omit<ClientMessage, 'id'>): Promise<T> {\n return new Promise((resolve, reject) => {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n reject(new Error('打印服务未连接'));\n return;\n }\n const id = String(++this.seq);\n const timer = setTimeout(() => {\n if (this.pending.has(id)) {\n this.pending.delete(id);\n reject(new Error('请求超时'));\n }\n }, REQUEST_TIMEOUT);\n\n this.pending.set(id, {resolve: resolve as (v: any) => void, timer});\n this.ws.send(JSON.stringify({...payload, id}));\n });\n }\n\n /** 指数退避重连 */\n private scheduleReconnect(): void {\n this.clearReconnect();\n this.retryCount++;\n \n // 超过最大重试次数,停止重连\n if (this.retryCount > MAX_RETRY_COUNT) {\n this.setStatus('retry_stopped');\n return;\n }\n \n this.setStatus('disconnected');\n this.reconnectTimer = setTimeout(() => {\n this.reconnectDelay = Math.min(this.reconnectDelay * 2, MAX_RECONNECT_DELAY);\n this.openSocket();\n }, this.reconnectDelay);\n }\n\n private clearReconnect(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n this.reconnectDelay = 1000;\n }\n\n /** 定时轮询打印机列表,变化才回调 */\n private startPolling(): void {\n this.stopPolling();\n this.pollTimer = setInterval(() => {\n this.getPrinters().catch(() => {});\n }, POLL_INTERVAL);\n }\n\n private stopPolling(): void {\n if (this.pollTimer) {\n clearInterval(this.pollTimer);\n this.pollTimer = null;\n }\n }\n\n private setStatus(s: Status): void {\n this.status.value = s;\n this.statusListeners.forEach((fn) => fn(s));\n }\n\n private updatePrinters(list: PrinterInfoDTO[]): void {\n const oldList = this.printers.value;\n // name 集合是否变化(决定是否要重算选中打印机)\n const oldKeys = oldList.map((p) => p.name).join(',');\n const newKeys = list.map((p) => p.name).join(',');\n const nameChanged = oldKeys !== newKeys || oldList.length !== list.length;\n\n this.printers.value = list;\n\n // name 集合变化时才重算选中打印机(状态变化不需要)\n if (nameChanged) {\n if (this.selectedPrinter.value && !list.some((p) => p.name === this.selectedPrinter.value)) {\n // 选中打印机已被移除,回退到默认或第一个\n const def = list.find((p) => p.isDefault) || list[0];\n this.setSelectedPrinter(def ? def.name : null);\n } else if (!this.selectedPrinter.value && list.length > 0) {\n // 首次拉到列表,自动选中默认打印机\n const def = list.find((p) => p.isDefault) || list[0];\n this.setSelectedPrinter(def.name);\n }\n }\n // 无论 name 变化还是状态变化,都通知订阅方(状态变化对 UI 同样有意义)\n this.printersListeners.forEach((fn) => fn(list));\n }\n\n /** 连接断开时让所有在途请求失败 */\n private failAllPending(reason: string): void {\n this.pending.forEach((entry) => {\n clearTimeout(entry.timer);\n entry.resolve({success: false, error: 'INTERNAL', message: reason});\n });\n this.pending.clear();\n }\n}\n\n/** 模块级单例:Header 组件与业务调用共享同一连接 */\nexport const printerClient = new PrinterClient();\n\n/** 下拉选项计算属性(供 Composable 复用) */\nexport const printerOptions = computed(() =>\n printerClient.printers.value.map((p) => ({\n label: p.displayName || p.name,\n value: p.name,\n }))\n);\n","import {getConfig, getList, type ConfigStatement} from 'yh-report/api/form';\nimport {\n fetchReportData,\n toUpdateData,\n type FetchReportDataPagination,\n} from 'yh-report/libs/fetchReportData';\nimport {buildPrintParamsFromConfig} from 'yh-report/libs/printParams';\nimport {getProcessData} from 'yh-report/libs/index';\nimport {DEFAULT_PRINT_CONFIG} from 'yh-report/libs/constants';\nimport type {\n Options,\n StatementOption,\n StatementData,\n statementTableConfig,\n PrintConfig,\n} from 'yh-report/types';\n\n/** 返回给业务方的配置结构(对应打印客户端 printReport.data 的 options/printConfig/statementName) */\nexport interface ReportForPrintConfig {\n id: string;\n name: string;\n remoteOptions: Options[];\n printConfig: PrintConfig;\n}\n\n/** 返回给业务方的数据结构(打印客户端 printReport.data.tableData 直接用) */\nexport type ReportForPrintTableData = Record<string, any>;\n\n/** fetchReportForPrint 的返回值 */\nexport interface ReportForPrintResult {\n config: ReportForPrintConfig;\n tableData: ReportForPrintTableData;\n}\n\n/** 分页参数(业务方可选传入) */\nexport interface ReportForPrintPagination {\n pageSize?: number;\n pageIndex?: number;\n isPagination?: boolean;\n}\n\n/**\n * 按报表ID查询数据 + 配置,供业务方转发给打印客户端(yh-printer-service)打印。\n *\n * 本方法只查数据与配置,不做渲染、不打印——渲染和打印由打印客户端负责。\n * 内部复用 fetchReportData + toUpdateData + getProcessData,与 PrintPreviewDialog 静默渲染范式一致。\n *\n * @param id 报表ID(Statement.id)\n * @param params 数据源筛选参数,{参数名: 值} 形态(如 {STARTDATE: '2026-07-01'})。\n * 优先级高于报表默认参数;缺省时用 buildPrintParamsFromConfig 取报表配置默认值。\n * @param pagination 分页参数,可选。默认全量(pageSize: 5000,不分页)。\n * @returns {config, tableData}\n * - config:报表配置(id/name/remoteOptions/printConfig)\n * - tableData:已归集的数据 {数据源key: 数组, PARAM: {大写参数名: 值}}\n *\n * @example\n * // 业务方调用\n * const {config, tableData} = await fetchReportForPrint('123456', {STARTDATE: '2026-07-01'});\n */\nexport async function fetchReportForPrint(\n id: string,\n params?: Record<string, any>,\n pagination?: ReportForPrintPagination\n): Promise<ReportForPrintResult> {\n // 1. 按 id 查配置\n const statement = await getConfig(id);\n\n // 2. printConfig 兜底默认值(与 designStoreFactory / reportRun 范式一致)\n const printConfig: PrintConfig = {...DEFAULT_PRINT_CONFIG, ...(statement.printConfig || {})};\n\n // 3. 遍历 remoteOptions,对 report 类型项拉数据并归集\n // 多个 report 子项的数据合并进同一 tableData(key 一般不冲突;冲突后者覆盖)\n const tableData: ReportForPrintTableData = {};\n const isPagination = !!(pagination?.isPagination);\n const pageSize = pagination?.pageSize ?? 5000;\n const pageIndex = pagination?.pageIndex ?? 1;\n\n for (const option of statement.remoteOptions || []) {\n if (option.type !== 'report') {\n // label / chart 类型跳过(与 silentRenderAll 一致)\n continue;\n }\n const reportOption = option as StatementOption;\n const data: StatementData | undefined = reportOption.data;\n const tableConfig: statementTableConfig[] | undefined = reportOption.tableConfig;\n if (!data || !tableConfig || !data.source) {\n continue;\n }\n\n // ① 构建查询参数(业务方传入的 params 优先,缺省用报表默认值)\n const dataParams = buildPrintParamsFromConfig(reportOption, params || {});\n\n // ② 拉数据(非分页场景传 isAll=true 拉全量)\n const pageState: FetchReportDataPagination = {\n pageSize,\n pageIndex,\n total: 0,\n isPagination,\n };\n const {resData} = await fetchReportData(\n {id: statement.id, data, tableConfig},\n dataParams,\n pageState,\n !isPagination\n );\n let oneTableData = toUpdateData(resData);\n\n // ③ 数据处理脚本(与 silentRenderAll 一致)\n if (data.processData) {\n oneTableData = await getProcessData(data.processData, oneTableData, dataParams, {\n pageSize,\n pageIndex,\n total: 0,\n });\n }\n\n // ④ 合并进总 tableData\n Object.assign(tableData, oneTableData);\n }\n\n return {\n config: {\n id: statement.id,\n name: statement.name,\n remoteOptions: statement.remoteOptions || [],\n printConfig,\n },\n tableData,\n };\n}\n","import {computed} from 'vue';\nimport {ElMessage} from 'element-plus';\nimport {\n printerClient,\n printerOptions,\n getStoredPrinterUrl,\n} from 'yh-report/libs/printerClient';\nimport {fetchReportForPrint} from 'yh-report/libs/fetchReportForPrint';\nimport type {PrintResult} from 'yh-report/libs/printerProtocol';\nimport type {ReportForPrintPagination} from 'yh-report/libs/fetchReportForPrint';\n\n/** 确保单例 client 已连接(首次调用时自动连接) */\nlet connected = false;\nfunction ensureConnected(): void {\n if (connected) return;\n connected = true;\n printerClient.connect();\n}\n\n/**\n * 打印服务客户端 Composable。\n *\n * 返回模块级单例 client 的响应式状态,所有调用方共享同一条 WS 连接、\n * 同一份打印机列表、同一个选中的打印机。\n *\n * 用法:\n * ```ts\n * const {status, printers, printerOptions, selectedPrinter, printing, print} = usePrinterClient();\n * // 打印:查数据 + 渲染 + 打印 一行搞定\n * await print('123456', {STARTDATE: '2026-07-01'}, undefined, 1);\n * // printerName 传 undefined → 用 Header 组件里选中的打印机\n * ```\n */\nexport function usePrinterClient() {\n ensureConnected();\n\n const status = computed(() => printerClient.status.value);\n const printers = computed(() => printerClient.printers.value);\n const selectedPrinter = computed({\n get: () => printerClient.selectedPrinter.value,\n set: (v: string | null) => printerClient.setSelectedPrinter(v),\n });\n const printing = computed(() => printerClient.printing.value);\n const url = computed(() => printerClient.getUrl());\n\n /** 刷新打印机列表 */\n async function refreshPrinters() {\n try {\n return await printerClient.getPrinters();\n } catch {\n return [];\n }\n }\n\n /** 切换服务地址并重连 */\n function setPrinterUrl(newUrl: string) {\n printerClient.setUrl(newUrl);\n }\n\n /**\n * 打印报表(查数据 + 渲染 + 打印 全流程封装)。\n *\n * @param id 报表ID\n * @param params 数据源筛选参数 {参数名: 值}\n * @param printerName 指定打印机;传 undefined 用 Header 选中的,再兜底默认打印机\n * @param copies 份数,默认 1\n * @param pagination 分页参数,默认全量\n * @returns 打印结果;失败会弹 ElMessage 并 reject\n */\n async function print(\n id: string,\n params?: Record<string, any>,\n printerName?: string,\n copies = 1,\n pagination?: ReportForPrintPagination\n ): Promise<PrintResult> {\n if (printerClient.status.value !== 'connected') {\n ElMessage.error('打印服务未连接');\n throw new Error('打印服务未连接');\n }\n\n printerClient.printing.value = true;\n try {\n // 1. 查数据 + 配置(复用 fetchReportForPrint)\n const {config, tableData} = await fetchReportForPrint(id, params, pagination);\n\n // 2. 确定打印机:显式传入 > Header 选中 > 默认打印机\n let target = printerName || printerClient.selectedPrinter.value;\n if (!target) {\n const def = printerClient.printers.value.find((p) => p.isDefault) || printerClient.printers.value[0];\n target = def?.name;\n }\n if (!target) {\n ElMessage.error('未找到可用打印机');\n throw new Error('未找到可用打印机');\n }\n\n // 3. 发送给打印服务\n // 从 printConfig 派生纸张尺寸(mm),height 缺省兜底 297mm(A4 纵向)\n const pc = config.printConfig;\n const pageSize =\n pc && typeof pc.width === 'number'\n ? {widthMm: pc.width, heightMm: typeof pc.height === 'number' ? pc.height : 297}\n : undefined;\n const result = await printerClient.printReport({\n options: config.remoteOptions,\n printConfig: config.printConfig,\n statementName: config.name,\n tableData,\n printerName: target,\n copies,\n pageSize,\n });\n\n if (result.success) {\n ElMessage.success(`打印已发送:${target},共 ${result.copies || copies} 份`);\n } else {\n ElMessage.error(result.message || '打印失败');\n }\n return result;\n } finally {\n printerClient.printing.value = false;\n }\n }\n\n return {\n /** 连接状态:disconnected / connecting / connected */\n status,\n /** 打印机列表 */\n printers,\n /** 打印机下拉选项 [{label, value}] */\n printerOptions,\n /** 当前选中的打印机 name(可读写) */\n selectedPrinter,\n /** 是否打印中 */\n printing,\n /** 当前服务地址 */\n url,\n /** 刷新打印机列表 */\n refreshPrinters,\n /** 切换服务地址 */\n setPrinterUrl,\n /** 打印报表(查数据+打印全流程) */\n print,\n /** 原始 client(需要调底层 printReport 时用) */\n client: printerClient,\n };\n}\n","<template>\n <el-popover\n placement=\"bottom\"\n popper-class=\"yh-printer-popover\"\n :width=\"280\"\n trigger=\"hover\">\n <template #reference>\n <div class=\"header-bar-button printer-header-button\" :title=\"statusTitle\">\n <YhIcon fontFamily=\"yhicon\" prefix=\"yh-\" name=\"printer1\"></YhIcon>\n <span class=\"status-dot\" :class=\"statusClass\"></span>\n </div>\n </template>\n\n <div class=\"user-actions\">\n <!-- 连接状态 + 服务地址 -->\n <div class=\"printer-status-row\">\n <span class=\"status-dot\" :class=\"statusClass\"></span>\n <span class=\"status-text\">{{ statusText }}</span>\n </div>\n\n <div class=\"printer-url-row\">\n <el-input\n v-model=\"urlInput\"\n size=\"small\"\n placeholder=\"ws://127.0.0.1:17891\"\n @keyup.enter=\"saveUrl\">\n <template #append>\n <el-button size=\"small\" @click=\"saveUrl\">连接</el-button>\n </template>\n </el-input>\n </div>\n\n <el-divider content-position=\"left\">打印机</el-divider>\n\n <template v-if=\"printers.length === 0\">\n <div class=\"printer-empty\">{{ status === 'connected' ? '未检测到打印机' : '连接后显示打印机列表' }}</div>\n </template>\n <template v-else>\n <div\n v-for=\"p in printers\"\n :key=\"p.name\"\n class=\"action-item printer-item\"\n @click=\"selectedPrinter = p.name\">\n <span class=\"printer-radio\" :class=\"{active: selectedPrinter === p.name}\"></span>\n <span class=\"printer-name\">{{ p.displayName }}</span>\n <span class=\"printer-state\" :class=\"`state-${p.statusText}`\">{{ p.statusText }}</span>\n <span v-if=\"p.isDefault\" class=\"printer-default\">默认</span>\n </div>\n </template>\n\n <el-divider content-position=\"left\">操作</el-divider>\n\n <div\n v-if=\"status === 'retry_stopped'\"\n class=\"action-item\"\n :class=\"{disabled: testing}\"\n @click=\"manualReconnect\">\n {{ testing ? '重连中...' : '重新连接' }}\n </div>\n\n <div\n class=\"action-item\"\n :class=\"{disabled: status !== 'connected' || !selectedPrinter || testing}\"\n @click=\"printTestPage\">\n {{ testing ? '打印中...' : '打印测试页' }}\n </div>\n </div>\n </el-popover>\n</template>\n\n<script setup>\n import {ref, computed} from 'vue';\n import {ElMessage} from 'element-plus';\n import {usePrinterClient} from 'yh-report/libs/usePrinterClient';\n import {getStoredPrinterUrl} from 'yh-report/libs/printerClient';\n import {defaultCell, defaultRow, defaultCol} from 'yh-report/libs/validateAndCompleteOptions';\n\n const {status, printers, selectedPrinter, client} = usePrinterClient();\n\n // 服务地址输入框,初始用持久化的地址\n const urlInput = ref(getStoredPrinterUrl());\n const testing = ref(false);\n\n const statusClass = computed(() => ({\n connected: 'dot-success',\n connecting: 'dot-warning',\n disconnected: 'dot-danger',\n retry_stopped: 'dot-danger',\n })[status.value]);\n\n const statusText = computed(\n () => ({\n connected: '已连接',\n connecting: '连接中',\n disconnected: '未连接',\n retry_stopped: '连接失败,请手动重连',\n })[status.value]\n );\n\n const statusTitle = computed(() => {\n const tip = statusText.value;\n const sel = selectedPrinter.value ? ` · ${selectedPrinter.value}` : '';\n return `${tip}${sel}`;\n });\n\n function saveUrl() {\n const u = urlInput.value.trim();\n if (!u) {\n ElMessage.warning('请输入服务地址');\n return;\n }\n client.setUrl(u);\n ElMessage.success('正在连接:' + u);\n }\n\n function manualReconnect() {\n client.manualReconnect();\n ElMessage.info('正在重新连接...');\n }\n\n async function printTestPage() {\n if (status.value !== 'connected') {\n ElMessage.warning('打印服务未连接');\n return;\n }\n if (!selectedPrinter.value) {\n ElMessage.warning('请先选择打印机');\n return;\n }\n testing.value = true;\n try {\n // 构造最小报表配置走标准渲染链路(不依赖后端报表),验证连接与打印机\n const options = buildTestOptions();\n const res = await client.printReport({\n options,\n printConfig: {},\n statementName: '打印测试页',\n tableData: {},\n printerName: selectedPrinter.value,\n copies: 1,\n });\n if (res.success) {\n ElMessage.success('测试页已发送');\n } else {\n ElMessage.error(res.message || '测试页打印失败');\n }\n } catch (e) {\n ElMessage.error(e?.message || '测试页打印失败');\n } finally {\n testing.value = false;\n }\n }\n\n // 构造一个 4 行 1 列的最小报表配置(静态文本,走标准渲染链路)\n function buildTestOptions() {\n const now = new Date().toLocaleString();\n const lines = [\n '打印测试页',\n `打印机:${selectedPrinter.value}`,\n `时间:${now}`,\n '如能正常打印,说明连接与打印机配置正确',\n ];\n const rows = lines.map((text, i) => {\n const cell = {...defaultCell, text, row: i + 1, col: 1};\n cell.style = {...cell.style, fontWeight: i === 0 ? 'bold' : 'normal'};\n return [cell];\n });\n return [\n {\n id: 'test-page',\n type: 'report',\n widthType: 'px',\n width: 400,\n fullHeight: false,\n height: 200,\n seriesEnable: false,\n seriesHeadText: '',\n theme: 'none',\n params: [],\n tableConfig: [\n {\n config: rows,\n // rowConfig 行数必须与 config 行数一致,否则渲染只出前几行\n rowConfig: Array.from({length: lines.length}, () => ({...defaultRow})),\n colConfig: [{...defaultCol, size: 400}],\n },\n ],\n data: {source: []},\n },\n ];\n }\n</script>\n\n<style scoped>\n .printer-header-button {\n position: relative;\n }\n .status-dot {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-left: 4px;\n }\n .dot-success {\n background: #67c23a;\n }\n .dot-warning {\n background: #e6a23c;\n }\n .dot-danger {\n background: #f56c6c;\n }\n</style>\n\n<style lang=\"scss\">\n /* 弹层内布局(无 scoped,与 newLanguage 的 yh-user-popover 同策略:依赖全局 .user-actions/.action-item) */\n .yh-printer-popover.el-popper {\n padding: 5px 0;\n }\n .printer-status-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n }\n .printer-status-row .status-text {\n font-weight: 600;\n }\n .printer-url-row {\n padding: 4px 12px 8px;\n }\n .printer-item {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .printer-radio {\n width: 12px;\n height: 12px;\n border: 2px solid #c0c4cc;\n border-radius: 50%;\n flex-shrink: 0;\n }\n .printer-radio.active {\n border-color: var(--el-color-primary);\n background: var(--el-color-primary);\n box-shadow: inset 0 0 0 2px #fff;\n }\n .printer-name {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .printer-state {\n font-size: 11px;\n padding: 1px 5px;\n border-radius: 3px;\n color: #909399;\n background: #f4f4f5;\n }\n .printer-state.state-空闲 {\n color: #67c23a;\n background: #f0f9eb;\n }\n .printer-state.state-打印中 {\n color: #e6a23c;\n background: #fdf6ec;\n }\n .printer-default {\n font-size: 11px;\n color: var(--el-color-primary);\n }\n .printer-empty {\n padding: 16px 12px;\n text-align: center;\n color: #909399;\n font-size: 13px;\n }\n .action-item.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }\n</style>\n","import {Router} from 'vue-router';\nimport {Pinia} from 'pinia';\nimport {defineComponent, h, markRaw} from 'vue';\nimport 'yh-report/statementDesign.scss';\nimport statementRun from 'yh-report/component/reportRun.vue';\nimport PrinterHeaderButton from 'yh-report/component/PrinterHeaderButton.vue';\nimport {getConfig} from 'yh-report/api/form';\nimport {fetchReportForPrint} from 'yh-report/libs/fetchReportForPrint';\nimport {usePrinterClient} from 'yh-report/libs/usePrinterClient';\nimport {PrinterClient} from 'yh-report/libs/printerClient';\nimport {printReportByBrowser} from 'yh-report/libs/printByBrowser';\n\n// 全局 ct 函数,默认原样返回\nlet rct: (str: string) => string = (str) => str;\n\nexport {rct};\nexport {fetchReportForPrint};\nexport {usePrinterClient};\nexport {PrinterClient};\nexport {printReportByBrowser};\nexport type {ReportForPrintResult, ReportForPrintConfig, ReportForPrintPagination} from 'yh-report/libs/fetchReportForPrint';\nexport type {PrintByBrowserOptions} from 'yh-report/libs/printByBrowser';\n\nexport const silenceExport = async (id) => {\n let {name, remoteOptions: configs} = await getConfig(id);\n for (let i = 0; i < configs.length; i++) {\n const config = configs[i];\n if (config.type === 'report') {\n } else {\n continue;\n }\n }\n};\n\nasync function registerRoute(isAdmin, router) {\n if (isAdmin) {\n router.addRoute('Index', {\n path: 'statement/list',\n name: '报表列表',\n meta: {\n id: 'Statement',\n title: '报表列表',\n icon: 'iconfont icon-s-grid',\n },\n component: () => import('yh-report/StatementList.vue'),\n });\n router.addRoute('Index', {\n path: 'statement/design/:id',\n name: '报表设计',\n meta: {\n id: 'StatementDesign',\n title: '报表设计',\n icon: 'iconfont icon-s-grid',\n },\n component: () => import('yh-report/StatementDesign.vue'),\n });\n router.addRoute('Index', {\n path: 'statement/detail/:id',\n name: '后台报表查看',\n meta: {\n id: 'StatementDetail',\n title: '后台报表查看',\n icon: 'iconfont icon-s-grid',\n },\n component: () => import('yh-report/StatementDetail.vue'),\n });\n }\n router.addRoute({\n path: '/statementdetail/:id',\n name: '报表查看',\n meta: {\n id: 'StatementDetail',\n title: '报表查看',\n icon: 'iconfont icon-s-grid',\n isWhite: true,\n },\n props: true,\n component: () => import('yh-report/StatementDetail.vue'),\n });\n\n if (router.hasRoute('Index')) {\n router.addRoute('Index', {\n path: 'innerStatementdetail/:id',\n name: '系统内报表查看',\n meta: {\n id: 'InnerStatementdetail',\n title: '系统内报表查看',\n icon: 'iconfont icon-s-grid',\n noPadding: true,\n },\n props: true,\n component: () => import('yh-report/StatementDetail.vue'),\n });\n }\n}\n\nexport default {\n async install(\n app,\n config?: {\n router?: Router | undefined;\n pinia?: Pinia;\n isAdmin?: boolean;\n printEnabled?: boolean;\n /** 打印服务(WebSocket)地址;默认 ws://127.0.0.1:17891 直连本机;服务端打印(集中部署)填 nginx 反代的 ws 地址 */\n printerUrl?: string;\n }\n ) {\n\n // 开启 printEnabled 时 provide/挂载打印能力,key 对齐 yh-hiprint(两库为替代关系不共存,\n // 子组件 inject 代码可在两库间通用):\n // - $hiprint 浏览器打印\n // - $silentHiprint / $serverPrint 打印服务打印(客户端直连或服务端 nginx 反代,由 printerUrl 决定;\n // install 即建立常驻 WS 连接,失败自动重连)\n // 未开启的项目不注入任何打印能力,可自行接入第三方打印方案\n if(config?.printEnabled) {\n const {print, setPrinterUrl} = usePrinterClient();\n if (config.printerUrl) {\n setPrinterUrl(config.printerUrl);\n }\n app.provide('$silentHiprint', print);\n app.provide('$serverPrint', print);\n app.provide('$hiprint', printReportByBrowser);\n app.config.globalProperties.$hiprint = printReportByBrowser;\n app.config.globalProperties.$silentHiprint = print;\n app.config.globalProperties.$serverPrint = print;\n }\n\n const isNew = app.config.globalProperties.$isNew;\n if (isNew) {\n const {\n $T: ct,\n $addInitTask: addInitTask,\n $addAdminMenu: addAdminMenu,\n $router: router,\n $clientStore: clientStore,\n $slotsStore: slotsStore,\n } = app.config.globalProperties;\n if (ct) {\n rct = ct;\n }\n addAdminMenu({\n id: 'report',\n name: '报表管理',\n iconPath: 'table',\n url: '/admin/statement/list',\n menuType: 'WINDOW',\n });\n addInitTask(async () => {\n if (!router || !router.hasRoute('Index')) return;\n registerRoute(clientStore.isAdmin, router);\n });\n // 注册打印机组件到 Header 右侧插槽(与 yh-i18n 注册 newLanguage 同范式)\n if (slotsStore && config?.printEnabled) {\n slotsStore.registerSlot({\n location: 'HEADER_RIGHT',\n component: markRaw(PrinterHeaderButton),\n });\n }\n } else {\n let {router, isAdmin = false} = config;\n registerRoute(isAdmin, router);\n console.info(\n `%cyh-report %cVer 2.4.112`,\n 'color:#409EFF;font-size: 22px;font-weight:bolder;text-shadow: 2px 2px 4px #84c1ff;',\n 'color:#fff;font-size: 12px;background-color:#409EFF;padding:2px 4px;border-radius:3px;'\n );\n }\n },\n};\n\nlet dynamicReportIndex = 0;\nexport function dynamicReportView(name) {\n dynamicReportIndex++;\n return async () => {\n return Promise.resolve(\n defineComponent({\n name: name || `report${dynamicReportIndex}`,\n data() {\n return {\n id: '',\n };\n },\n activated() {\n document.querySelector('.main-container')?.classList.add('statement-design-main');\n },\n deactivated() {\n document.querySelector('.main-container')?.classList.remove('statement-design-main');\n },\n render(e) {\n return h('section', {class: 'statement-detail-container'}, [\n h(statementRun, {id: this.id}),\n ]);\n },\n mounted() {\n this.id = this.$route.fullPath.replace('/innerStatementdetail/', '');\n },\n })\n );\n };\n}\n"],"names":["DataParamDateTypes","CellType","FormatType","ComputedType","DataSourceColumnDataType","option","completedOption","tableConfig","batchRender","sources","_a","s","id","type","data","otherOptionProps","dId","dType","dTableConfig","dData","dOtherOptionProps","completeOption","key","_","index","rowLength","colLength","row","rowIndex","item","colIndex","rowIndexOffset","newRow","col","colors","params","api","dataIndex","value","name","str","containerWidth","containerHeight","color","itemCount","spacing","rectHeight","rectWidth","borderRadius","xPos","yPos","selectedChart","sourceData","chartConfigForm","localData","xKey","dataSet","xData","yData","yKey","dataObj","el","xVal","yVal","a","b","val","serieCopy","i","serie","codes","listForm","res","info","code","description","config","chartConfig","remoteOptions","remotePrintConfig","optionsArr","form","textArea","flag","error","msg","_b","_d","_c","_f","_e","_h","_g","options","order","numeric","locale","compare","na","nb","va","vb","table","cell","rowHead","source","colHead","loopTableSource","hexColor","hex","g","amount","r","theme","borderEdge","defaultColor","style","border","minRow","maxRow","minCol","maxCol","mode","isTopEdge","isBottomEdge","isLeftEdge","isRightEdge","side","activeCells","operation","c","selectedSet","changeMap","edge","upsertNeighbor","newEdge","entry","isNone","newBorder","nbCell","useThousandsSeparator","decimalPlaces","integerPart","decimalPart","reportConfig","maxLenTableIndex","maxColLen","subReportIndex","columns","cells","sc","scc","src","subCells","subColumns","maxCells","maxColumns","subColLen","loading","workbook","sheet","excelBuffer","items","firstReport","currentRow","idx","base64","width","height","imageId","placeholderRows","startRow","mergeConfs","rowCount","rc","ri","colConfig","rowConfig","rowConf","hiddenColIndexes","rowCells","rowData","currentCell","colSpan","rowSpan","format","formatType","fontStyle","themeColor","buildBorder","fillColorStr","align","mergeRow","mergeCol","mergeRowEnd","mergeColEnd","numberUseGrouping","numberDecimal","conf","channelName","handler","channel","event","sendData","blob","downloadA","t","e","module","this","n","u","o","f","h","d","l","$","y","M","m","v","D","p","S","w","O","k","query","result","columnName","defaultValue","dataType","dateType","isNull","isDate","q","valueStr","existIndex","startTime","endTime","fmt","today","range","start","time","$val","count","datasourceId","url","urlMap","conds","setting","collected","process","inner","parts","urlCollected","visit","rows","paramMap","set","paramName","pagination","isAll","hasParams","reqData","cellConditionsBySource","resData","paramData","total","sourceCellConds","sourceReqData","remoteData","rData","require$$0","callback","first","env","jsep","plugins","plugin","op_name","precedence","isRightAssociative","char","literal_name","literal_value","expr","obj","ch","op_val","message","node","nodes","untilICode","ch_i","to_check","tc_len","biop","prec","stack","biop_info","left","right","cur_biop","comparePrev","prev","argument","optional","number","chCode","startIndex","quote","closed","termination","args","separator_count","arg","prop","test","consequent","alternate","newTest","x","min","max","Ctor","j","xdL","ydL","xd","yd","xs","ys","pr","rm","rep","sd","t3","t3plusx","len","one","cosh2_x","d8","sinh2_x","d5","d16","d20","wpr","xsd","halfPi","px","x2","base","isBase10","denominator","inf","num","guard","xe","xLTy","carry","z","rL","dp","maxD","d0","d1","d2","n0","n1","yn","ws","indexOfLastWord","repeating","di","rd","baseIn","baseOut","arr","arrL","strL","cos2x","multiplyInteger","temp","aL","bL","subtract","cmp","logBase","more","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","sign","isTruncated","digits","roundUp","xdi","out","isExp","zs","pow","sum","c0","numerator","x1","divisor","isFloat","sin2_x","isHyperbolic","isNeg","pi","useDefaults","ps","Decimal","Barcode_1","_classCallCheck","instance","Constructor","Barcode","CODE39_1","_createClass","defineProperties","target","props","descriptor","protoProps","staticProps","_Barcode2","_Barcode3","_interopRequireDefault","_possibleConstructorReturn","self","call","_inherits","subClass","superClass","_Barcode","CODE39","character","characterValue","checksum","constants","CODE128_1","_constants","require$$1","CODE128","_this","bytes","startSet","encodingResult","isEAN128","charCode","pos","nextCode","nextSet","enc","weight","matchSetALength","string","matchSetBLength","matchSetC","isA","ranges","untilC","chars","cMatch","length","newString","cLength","match","_CODE2","_CODE3","_CODE","CODE128AUTO","CODE128A_1","CODE128A","CODE128B_1","CODE128B","CODE128C_1","CODE128C","require$$2","require$$3","encode","structure","separator","encoded","last","EAN_1","_encoder","_encoder2","EAN","from","to","textOptions","guardOptions","EAN13_1","_get","get","object","property","receiver","desc","parent","getter","_EAN2","_EAN3","_EAN","EAN13","EAN8_1","EAN8","EAN5_1","EAN5","EAN2_1","EAN2","UPC_1","UPC","UPCE_1","_UPC","UPCE","numberSystem","checkDigit","parity","middleDigits","lastUpcE","expansion","digitIndex","require$$4","require$$5","ITF_1","ITF","_this2","pair","second","ITF14_1","_ITF2","_ITF3","_ITF","ITF14","MSI_1","MSI","ret","digit","bin","weights","MSI10_1","_MSI2","_MSI3","_checksums","_MSI","MSI10","MSI11_1","MSI11","MSI1010_1","MSI1010","MSI1110_1","MSI1110","pharmacode_1","pharmacode","codabar_1","codabar","encodings","CODE93_1","CODE93","symbols","csumC","csumK","symbol","symbolValue","maxWeight","csum","CODE93FullASCII_1","CODE93FullASCII","GenericBarcode_1","GenericBarcode","require$$6","require$$7","require$$8","old","replaceObj","linearizeEncodings_1","linearEncodings","nextLevel","fixOptions_1","optionsFromStrings_1","intOptions","intOption","defaults_1","valid","getOptionsFromElement_1","_optionsFromStrings","_optionsFromStrings2","_defaults","_defaults2","element","_merge","_merge2","encoding","textWidth","barcodeWidth","barcodeOptions","context","totalWidth","maxHeight","ctx","measureTextResult","size","canvas","_shared","CanvasRenderer","encodingOptions","binary","yFrom","font","SVGRenderer","svg","currentX","group","barWidth","textElem","rect","ObjectRenderer","_Error","InvalidInputException","symbology","input","_Error2","InvalidElementException","_Error3","NoElementException","_this3","getRenderProperties_1","_exceptions","returnArray","selector","imgElement","ErrorHandler_1","ErrorHandler","func","API","JsBarcode","text","barcodes","newOptions","Encoder","encoder","zeroes","renderProperty","renderProperties","Renderer","renderer","content","elementArray","canPromise","utils","getSymbolSize","version","getSymbolTotalCodewords","setToSJISFunction","toSJIS","kanji","exports","fromString","level","BitBuffer","bufIndex","bit","BitMatrix","reserved","posCount","intervals","positions","coords","posLength","getPositions","PenaltyScores","mask","points","sameCountCol","sameCountRow","lastCol","lastRow","bitsCol","bitsRow","darkCount","modulesCount","getMaskAt","maskPattern","pattern","setupFormatFunc","numPatterns","bestPattern","lowerPenalty","penalty","ECLevel","getBlocksCount","errorCorrectionLevel","getTotalCodewordsCount","initTables","log","exp","mul","GF","p1","p2","coeff","divident","offset","degree","poly","ReedSolomonEncoder","initialize","paddedData","remainder","buff","isValid","testKanji","testNumeric","testAlphanumeric","VersionCheck","Regex","dataStr","Utils","ECCode","Mode","G18","G18_BCH","getBestVersionForDataLength","currentVersion","getReservedBitsCount","getTotalBitsFromDataArray","segments","totalBits","reservedBits","getBestVersionForMixedData","totalCodewords","ecTotalCodewords","dataTotalCodewordsBits","usableBits","seg","ecl","getEncodedBits","getBitsLength","getLength","write","bitBuffer","remainingNum","dijkstra","graph","predecessors","costs","open","closest","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","opts","T","cost","NumericData","AlphanumericData","ByteData","KanjiData","getStringByteLength","getSegments","regex","getSegmentsFromString","numSegs","alphaNumSegs","byteSegs","kanjiSegs","s1","s2","getSegmentBitsLength","mergeSegments","segs","acc","curr","prevSeg","buildNodes","buildGraph","prevNodeIds","nodeGroup","currentNodeIds","prevNodeId","buildSingleSegment","modesHint","bestMode","array","path","optimizedSegs","require$$9","require$$10","require$$11","require$$12","matrix","bits","mod","inc","bitIndex","byteIndex","dark","buffer","remainingByte","dataTotalCodewords","ecTotalBlocks","blocksInGroup2","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","rs","dcData","ecData","maxDataSize","dataSize","estimatedVersion","rawSegments","bestVersion","dataBits","moduleCount","modules","create","hex2rgba","hexCode","hexValue","margin","scale","qrSize","imgData","qr","symbolSize","scaledMargin","palette","posDst","pxColor","iSrc","jSrc","clearCanvas","getCanvasElement","qrData","canvasEl","image","rendererOpts","attrib","alpha","cmd","moveBy","lineLength","render","cb","qrcodesize","bg","viewBox","svgTag","renderFunc","argsNum","isLastArgCb","resolve","reject","__publicField","QRCode","styleObj","styleAttr","formatNumber","rounded","currencySymbol","formatted","isPromille","scientificNotation","date","dateObj","timestamp","numValue","formatOptions","processedNumericValue","numericString","cols","tableBodyRef","colgroup","widthCount","colEl","imageOptions","td","allowOverflow","textAlignMap","verticalAlignMap","justifyContent","alignItems","contentDiv","isHtmlContent","htmlContent","imgStyle","richHtml","barcodeUrl","qrcodeData","span","pt","pb","pl","borderCfg","tableContainer","tableBody","fixedHeight","fixedWidth","fragment","rowItem","tr","colItem","ppt","ppr","ppb","ppl","statementTableRef","hasLoop","mergeTds","mergeSpans","trRefMap","domRowIndex","arrow","mi","lastHoverIdx","clearHover","eventName","formula","isError","objData","oldCell","datakey","_match","skipFormat","processed","startCell","endCell","sr","ec","er","startCol","endCol","endRow","refs","fun","consumed","needComputedCell","innerConfigMap","keys","posKeyToKeys","posKey","adj","srcKey","ref","targetKeys","tk","inDegree","queue","sorted","cur","targets","sortedSet","cyclic","paramTableCells","tableIndex","groupLevel","lookupKey","colStr","vals","cellCode","expressionInput","needResult","expression","cleanExpression","parsed","err","end","lead","callee","objName","rangeMatch","leftNum","rightNum","argNum","objectVal","propertyVal","results","startABCMatch","startNummatch","endABCMatch","endNummatch","values","cellRef","groupIndex","colGroupIndex","numericArgs","funcName","evaluatedArgs","flatArrays","minLength","product","yearDate","monthDate","dayDate","hourDate","weekDate","cusumEvalValues","allsumEvalValues","letters","configs","tasks","loopCols","tableData","colData","colCells","groupIndexs","rowItems","groupData","gIndex","keyGroupIndex","childGroupIndex","dataGroupIndex","preGIndex","preKeyGroupIndex","preKey","preChildGroupIndex","newChildDatas","currentkey","firstSortGIndex","firstCell","groupLen","maxGroupIndex","minGroupIndex","hasRowColCombine","insertIndex","newColItem","newCols","newCells","childrenLen","texts","newCell","fillCell","parentIndex","newRows","maxKeyGroupIndex","laskGroupKeys","dataKey","combineKeys","groupKey","funCells","targetCell","fillCells","newConfig","colsToProcess","mergeStart","mergeCount","targetRow","linkedColIndex","linkedCell","mergeStartRow","linkedCellRowSpan","valuesToMerge","mergedValue","cell1","cell2","rccCell","hasGroupColumnLoop","childLen","rowBaseCols","loopGroupRows","addLoopGroupRows","groupColumnLoopData","columnLoopExpansionInfos","rowAddedForIndex","loopRowIndex","newFillCell","groupRowItem","groupCellsItem","removeCount","currentLevel","preGroupColIndex","preCell","datas","kvs","kv","allValues","isMatch","lastGroupKeys","groupColumnLoopItems","groupItems","itemsToIterate","dataItem","maxCount","expansionInfo","groupItemData","loopIndex","loopRows","newRowItem","groupIndices","loopCurrentRowIndex","currentRowIndex","oldCells","loopCurrentCellIndex","targetRowIndices","targetRowIndex","clonedCols","cellsToInsert","clonedCell","unrelatedRowStart","loopGroupRowIndices","processedData","targetRows","cellCount","transposed","keyTree","lastChildrenKey","lessThanNum","method","found","dataSources","dataSource","field","formattedValue","objKey","tableConfigItem","loopSourceKey","batchConfigs","oneItem","oneData","mm","fixedRows","rowsInPage","maxEnd","ci","visibleRows","headerHeight","footerHeight","reservedHeight","dateStr","area","wrapper","html","pageStr","wm","containerWidthPx","containerHeightPx","layer","fontSize","itemW","itemH","offsetX","state","pageRows","contentWidthPx","pageHeightPx","watermark","header","footer","pageNumber","totalPages","title","pageRowConfig","pageConfig","fixedRow","tableDom","availableHeight","force","bodyAvailable","firstRowSize","accumulated","rowIdx","rowH","dom","pages","printConfig","pc","pageWidthPx","pageHeightMm","pagesHTML","pageItems","itemsHTML","domHTML","statement","pendingItems","reportOption","queryParams","loopSource","tc","reportConfigs","hasPagedPrint","splitStateOptions","allPages","currentPageItems","currentPageHeight","activeReports","flushPage","tryFillActiveReports","report","remaining","imgWidth","imgHeight","firstResult","spacerHeight","spacer","iframe","doc","img","raw","hours","minutes","part","fields","label","startText","endText","startMinutes","endMinutes","dateFormat","thisDayStart","thisDayEnd","thisWeekStart","thisWeekEnd","thisMonthStart","thisMonthEnd","lastMonthStart","lastMonthEnd","thisQuarterStart","thisQuarterEnd","lastQuarterStart","lastQuarterEnd","thisYearStart","thisYearEnd","lastYearStart","lastYearEnd","now","twoDay","threeDay","sevenDay","fifteenDay","thirtyDay","twoWeek","twoMonth","threeMonth","sixMonth","oneYear","twoYear","threeYear","fiveYear","componentName","placeholerPrefix","__props","emits","__emit","route","paramsConfig","paramsConfigObj","initChange","config2pc","selectorPromises","selectorId","remoteSearch","cellIndex","cellIndexSort","cellIndexSortOrder","cellIndexSortNumeric","ElementType","param","getDefaultValue","promise","fetchSelectorData","addRangeEndParam","appendExtraQueryParams","changeValue","endItem","paramValue","getRangeDefaultValue","getSingleDateDefaultValue","queryVal","rangeDefaultValue","dateTimeChange","singleDefualtValue","dateTypeStart","fValue","remote","NAME","VALUE","searchSelectorOptions","filterType","endParam","endParamValue","getFormItemProps","getFormItemContentProps","valueChangeHandler","changeHandler","shiftChangeHandler","timeChanges","paramsVal","startVal","endVal","periodUnit","$start","$end","endColumnName","shiftIndex","day","__expose","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","_Fragment","_renderList","_withDirectives","_createBlock","_mergeProps","_resolveDynamicComponent","_vShow","_renderSlot","_ctx","sample","dir","emptyA","emptyB","fa","fb","isPrintMode","printConfigRef","conditionsRef","clickSortState","cachedRawData","originalRawData","batchTableConfigs","isPagination","hasDisplayParams","paramTableCellHandler","tableIdx","cellVal","abc","numIndex","changeParams","isFirst","renderHandler","inited","oldVal","newPageSize","newPageIndex","oldPageSize","oldPageIndex","searchHandler","isSend","exportTips","exportHandler","buildExportConfigs","getRemoteData","rawData","toUpdateData","tableConfs","tableConfigs","exportAllHandler","tableLoading","multipleTable","renderOneTableConfig","renderBatch","batchKey","renderReport","tableConf","contexts","maxWidth","tbl","colSum","container","cs","newWidths","colIdx","checkParams","names","needRequired","applyActiveSort","updateSortIndicators","original","onTableClick","dot","initHandler","pageSizes","ReportConditions","_component_el_button","_createTextVNode","_toDisplayString","_createElementVNode","_component_el_pagination","_cache","$event","chartRef","outData","commonChart","resize","setOutData","chartData","insertDataToCfg","init","chartItemRef","contentWidth","origWidth","widthUnit","heightUnit","suspendStyle","_createCommentVNode","colorObj","rootRef","list","isSingle","single","singleStyle","getData","computedFun","numericDatas","notSingle","keyIds","dataIds","groupBy","orderBy","cutLength","singleComputed","singleKey","singleData","keyKey","keyCol","keyData","keyVals","dataCol","dataVals","dataData","dv","getLabelImage","colWidth","labelSize","valueSize","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","scrollRef","pageRefs","pageDoms","printing","innerTableConfigs","innerBatchTableConfigs","getEffectiveTableConfigs","getEffectiveBatchTableConfigs","pageStyle","contentStyle","handleClose","handlePrint","loadingInstance","silentRenderAll","shouldAutoPrint","tcList","batchTcList","tcGroup","pIdx","cloned","fetchAll","page","detailLoading","statementName","configError","dataSourceErrors","viewWrapper","chartAndLabelRefs","printModeCSSVars","getDetail","handleReportError","removeError","showBackTop","handleUpdateData","setChartAndLabelRef","collectExportItems","reportRefs","reportViewItemRefs","reportIdx","mergeItems","printItems","viewRef","mergeExportHandler","command","printPreviewVisible","runTableConfigs","runBatchTableConfigs","openPrintPreview","renderTasks","tcMap","batchTcMap","matched","_normalizeClass","reportViewItem","chartViewItem","printPreviewDialog","fn","ev","payload","timer","oldList","oldKeys","newKeys","nameChanged","def","reason","pageSize","pageIndex","dataParams","pageState","oneTableData","status","printers","selectedPrinter","refreshPrinters","setPrinterUrl","newUrl","print","printerName","copies","client","urlInput","testing","statusClass","statusText","statusTitle","tip","sel","saveUrl","manualReconnect","printTestPage","buildTestOptions","lines","_component_el_popover","_component_YhIcon","_component_el_input","_component_el_divider","isAdmin","router","app","ct","addInitTask","addAdminMenu","clientStore","slotsStore","statementRun"],"mappings":"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AAA,EAEtB;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACT;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EACV;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EACV;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EACV;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EACX;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EACX;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EACX;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EACX;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EACX;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EACX;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EACX;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EACX;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EACX;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACZ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACZ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACZ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACZ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACZ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACZ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;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","x_google_ignoreList":[10,15,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,114]}
|