kordoc 4.17.0 → 4.17.2

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.
Files changed (143) hide show
  1. package/README.md +6 -3
  2. package/dist/{-PRAKO6M4.js → -2UA2JHVA.js} +11 -11
  3. package/dist/{chunk-I5DJOP62.js → chunk-2XHXABCX.js} +2 -2
  4. package/dist/{chunk-4XVNQAK5.js → chunk-3N272C5L.js} +244 -115
  5. package/dist/chunk-3N272C5L.js.map +1 -0
  6. package/dist/{chunk-6RGGYQQC.js → chunk-4HRJISJF.js} +3 -3
  7. package/dist/{chunk-WN6OD2CQ.js → chunk-4TSYMJDL.js} +243 -114
  8. package/dist/chunk-4TSYMJDL.js.map +1 -0
  9. package/dist/{chunk-EFO6JZY6.js → chunk-5JZEY5IL.js} +119 -77
  10. package/dist/chunk-5JZEY5IL.js.map +1 -0
  11. package/dist/{chunk-WYON5ANU.cjs → chunk-6DOCSYEM.cjs} +113 -71
  12. package/dist/chunk-6DOCSYEM.cjs.map +1 -0
  13. package/dist/{chunk-BZG7K44Z.js → chunk-6OCKAXIS.js} +2 -2
  14. package/dist/{chunk-ZF6KHPB7.js → chunk-A2W2JQ3S.js} +11 -5
  15. package/dist/chunk-A2W2JQ3S.js.map +1 -0
  16. package/dist/{chunk-N6V7LQBL.js → chunk-C4MVZXB5.js} +2 -2
  17. package/dist/{chunk-4GSF2R7T.js → chunk-FGL4IGOT.js} +4 -4
  18. package/dist/{chunk-R2BUANHQ.cjs → chunk-GPC72VSF.cjs} +6 -6
  19. package/dist/chunk-GPC72VSF.cjs.map +1 -0
  20. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  21. package/dist/{chunk-TDQ6XDB3.js → chunk-GYTL6WT3.js} +3 -3
  22. package/dist/{chunk-O7OUX6NU.cjs → chunk-HAW2VL62.cjs} +12 -12
  23. package/dist/chunk-HAW2VL62.cjs.map +1 -0
  24. package/dist/chunk-J55UQC5H.cjs.map +1 -1
  25. package/dist/{chunk-QJWVMPB6.js → chunk-JY2NBFIG.js} +15 -13
  26. package/dist/chunk-JY2NBFIG.js.map +1 -0
  27. package/dist/{chunk-A55JGNKD.js → chunk-KQIYC2ZU.js} +2 -2
  28. package/dist/{chunk-QNJLLF4J.cjs → chunk-KZVQK5NS.cjs} +11 -5
  29. package/dist/chunk-KZVQK5NS.cjs.map +1 -0
  30. package/dist/{chunk-PHID6WNG.js → chunk-MDCTITUG.js} +2 -2
  31. package/dist/{chunk-2KF5WZCR.js → chunk-O4CB7D2Q.js} +2 -2
  32. package/dist/{chunk-YZ5HHS6A.js → chunk-SDRKHEVT.js} +2 -2
  33. package/dist/{chunk-MJBCXW5R.js → chunk-UX3HHAWH.js} +1 -1
  34. package/dist/{chunk-MJBCXW5R.js.map → chunk-UX3HHAWH.js.map} +1 -1
  35. package/dist/{chunk-K2VYABZ3.js → chunk-VU26WGE5.js} +102 -38
  36. package/dist/chunk-VU26WGE5.js.map +1 -0
  37. package/dist/{chunk-BFT5IM2R.js → chunk-WJLICIYV.js} +2 -2
  38. package/dist/{chunk-5CDUL6PH.js → chunk-WL3BWROT.js} +1 -1
  39. package/dist/{chunk-5CDUL6PH.js.map → chunk-WL3BWROT.js.map} +1 -1
  40. package/dist/{chunk-XEPKOC2O.cjs → chunk-WWMKIHF7.cjs} +344 -215
  41. package/dist/chunk-WWMKIHF7.cjs.map +1 -0
  42. package/dist/{chunk-BLPR4HRF.js → chunk-XZA6X34R.js} +121 -77
  43. package/dist/chunk-XZA6X34R.js.map +1 -0
  44. package/dist/{chunk-ML4NHUR7.js → chunk-YGKC6E6A.js} +11 -5
  45. package/dist/chunk-YGKC6E6A.js.map +1 -0
  46. package/dist/{chunk-AKB72TEH.cjs → chunk-YIANW5QX.cjs} +1 -1
  47. package/dist/chunk-YIANW5QX.cjs.map +1 -0
  48. package/dist/{chunk-WY5JAR4O.js → chunk-ZDX5PIWR.js} +2 -2
  49. package/dist/chunks-EBWJR55V.js +10 -0
  50. package/dist/cli.js +26 -26
  51. package/dist/{formula-ECNOZT36.cjs → formula-5RETDCIC.cjs} +9 -9
  52. package/dist/formula-5RETDCIC.cjs.map +1 -0
  53. package/dist/{formula-7MMFBRGJ.js → formula-MBLN2DG4.js} +4 -4
  54. package/dist/{formula-SHBXRXOJ.js → formula-QZZDW5GW.js} +3 -3
  55. package/dist/{image-ocr-P6ECJCT2.js → image-ocr-CJSO3QSR.js} +8 -8
  56. package/dist/{image-ocr-QCT3A7X5.js → image-ocr-EREKAS47.js} +6 -6
  57. package/dist/{image-ocr-VUDSP2B4.cjs → image-ocr-PSPVRLB5.cjs} +15 -15
  58. package/dist/image-ocr-PSPVRLB5.cjs.map +1 -0
  59. package/dist/index.cjs +688 -622
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.d.cts +2 -1
  62. package/dist/index.d.ts +2 -1
  63. package/dist/index.js +106 -40
  64. package/dist/index.js.map +1 -1
  65. package/dist/mcp.js +22 -22
  66. package/dist/{model-bundle-OUHGCEZY.js → model-bundle-MA4MMCRJ.js} +5 -5
  67. package/dist/{models-6D6LMOTH.js → models-SEJ7LNSN.js} +5 -5
  68. package/dist/page-range-QHHFTL7X.cjs.map +1 -1
  69. package/dist/{parser-ZPRQ3SSU.js → parser-M5WHRX25.js} +41 -23
  70. package/dist/parser-M5WHRX25.js.map +1 -0
  71. package/dist/{parser-RQ4PJRTJ.cjs → parser-QILYPWSI.cjs} +215 -197
  72. package/dist/parser-QILYPWSI.cjs.map +1 -0
  73. package/dist/{parser-CTRB7PKD.js → parser-VH3F4EQU.js} +38 -20
  74. package/dist/parser-VH3F4EQU.js.map +1 -0
  75. package/dist/pdf-ocr-3SZUM3CN.cjs +16 -0
  76. package/dist/pdf-ocr-3SZUM3CN.cjs.map +1 -0
  77. package/dist/pdf-ocr-QB2TB5W5.js +18 -0
  78. package/dist/pdf-ocr-XC33L43D.js +15 -0
  79. package/dist/{profile-io-YZUW6MAN.js → profile-io-5YB627EO.js} +3 -3
  80. package/dist/{rasterize-OUR2QJXX.js → rasterize-V2XHHS2I.js} +3 -3
  81. package/dist/{redact-doc-4OQKG4SM.js → redact-doc-5MK5L5IQ.js} +11 -11
  82. package/dist/{render-XNO6PZJO.js → render-SYZMHYK6.js} +7 -7
  83. package/dist/seal-IPKIQHYB.js +10 -0
  84. package/dist/{setup-UU3EIHNI.js → setup-ZPLJENSK.js} +3 -3
  85. package/dist/visual-RTTGNOAE.js +20 -0
  86. package/dist/{watch-SR6Q5SQN.js → watch-FNWHVKK3.js} +12 -12
  87. package/package.json +1 -1
  88. package/dist/chunk-4XVNQAK5.js.map +0 -1
  89. package/dist/chunk-AKB72TEH.cjs.map +0 -1
  90. package/dist/chunk-BLPR4HRF.js.map +0 -1
  91. package/dist/chunk-EFO6JZY6.js.map +0 -1
  92. package/dist/chunk-K2VYABZ3.js.map +0 -1
  93. package/dist/chunk-ML4NHUR7.js.map +0 -1
  94. package/dist/chunk-O7OUX6NU.cjs.map +0 -1
  95. package/dist/chunk-QJWVMPB6.js.map +0 -1
  96. package/dist/chunk-QNJLLF4J.cjs.map +0 -1
  97. package/dist/chunk-R2BUANHQ.cjs.map +0 -1
  98. package/dist/chunk-WN6OD2CQ.js.map +0 -1
  99. package/dist/chunk-WYON5ANU.cjs.map +0 -1
  100. package/dist/chunk-XEPKOC2O.cjs.map +0 -1
  101. package/dist/chunk-ZF6KHPB7.js.map +0 -1
  102. package/dist/chunks-YBFBLJ4G.js +0 -10
  103. package/dist/formula-ECNOZT36.cjs.map +0 -1
  104. package/dist/image-ocr-VUDSP2B4.cjs.map +0 -1
  105. package/dist/parser-CTRB7PKD.js.map +0 -1
  106. package/dist/parser-RQ4PJRTJ.cjs.map +0 -1
  107. package/dist/parser-ZPRQ3SSU.js.map +0 -1
  108. package/dist/pdf-ocr-462ZFSHX.js +0 -15
  109. package/dist/pdf-ocr-L35FQYGP.js +0 -18
  110. package/dist/pdf-ocr-STK5EQFF.cjs +0 -16
  111. package/dist/pdf-ocr-STK5EQFF.cjs.map +0 -1
  112. package/dist/seal-CJ7C44JN.js +0 -10
  113. package/dist/visual-QRMRFPUK.js +0 -20
  114. /package/dist/{-PRAKO6M4.js.map → -2UA2JHVA.js.map} +0 -0
  115. /package/dist/{chunk-I5DJOP62.js.map → chunk-2XHXABCX.js.map} +0 -0
  116. /package/dist/{chunk-6RGGYQQC.js.map → chunk-4HRJISJF.js.map} +0 -0
  117. /package/dist/{chunk-BZG7K44Z.js.map → chunk-6OCKAXIS.js.map} +0 -0
  118. /package/dist/{chunk-N6V7LQBL.js.map → chunk-C4MVZXB5.js.map} +0 -0
  119. /package/dist/{chunk-4GSF2R7T.js.map → chunk-FGL4IGOT.js.map} +0 -0
  120. /package/dist/{chunk-TDQ6XDB3.js.map → chunk-GYTL6WT3.js.map} +0 -0
  121. /package/dist/{chunk-A55JGNKD.js.map → chunk-KQIYC2ZU.js.map} +0 -0
  122. /package/dist/{chunk-PHID6WNG.js.map → chunk-MDCTITUG.js.map} +0 -0
  123. /package/dist/{chunk-2KF5WZCR.js.map → chunk-O4CB7D2Q.js.map} +0 -0
  124. /package/dist/{chunk-YZ5HHS6A.js.map → chunk-SDRKHEVT.js.map} +0 -0
  125. /package/dist/{chunk-BFT5IM2R.js.map → chunk-WJLICIYV.js.map} +0 -0
  126. /package/dist/{chunk-WY5JAR4O.js.map → chunk-ZDX5PIWR.js.map} +0 -0
  127. /package/dist/{chunks-YBFBLJ4G.js.map → chunks-EBWJR55V.js.map} +0 -0
  128. /package/dist/{formula-7MMFBRGJ.js.map → formula-MBLN2DG4.js.map} +0 -0
  129. /package/dist/{formula-SHBXRXOJ.js.map → formula-QZZDW5GW.js.map} +0 -0
  130. /package/dist/{image-ocr-P6ECJCT2.js.map → image-ocr-CJSO3QSR.js.map} +0 -0
  131. /package/dist/{image-ocr-QCT3A7X5.js.map → image-ocr-EREKAS47.js.map} +0 -0
  132. /package/dist/{model-bundle-OUHGCEZY.js.map → model-bundle-MA4MMCRJ.js.map} +0 -0
  133. /package/dist/{models-6D6LMOTH.js.map → models-SEJ7LNSN.js.map} +0 -0
  134. /package/dist/{pdf-ocr-462ZFSHX.js.map → pdf-ocr-QB2TB5W5.js.map} +0 -0
  135. /package/dist/{pdf-ocr-L35FQYGP.js.map → pdf-ocr-XC33L43D.js.map} +0 -0
  136. /package/dist/{profile-io-YZUW6MAN.js.map → profile-io-5YB627EO.js.map} +0 -0
  137. /package/dist/{rasterize-OUR2QJXX.js.map → rasterize-V2XHHS2I.js.map} +0 -0
  138. /package/dist/{redact-doc-4OQKG4SM.js.map → redact-doc-5MK5L5IQ.js.map} +0 -0
  139. /package/dist/{render-XNO6PZJO.js.map → render-SYZMHYK6.js.map} +0 -0
  140. /package/dist/{seal-CJ7C44JN.js.map → seal-IPKIQHYB.js.map} +0 -0
  141. /package/dist/{setup-UU3EIHNI.js.map → setup-ZPLJENSK.js.map} +0 -0
  142. /package/dist/{visual-QRMRFPUK.js.map → visual-RTTGNOAE.js.map} +0 -0
  143. /package/dist/{watch-SR6Q5SQN.js.map → watch-FNWHVKK3.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/chris_gomdori/workspace/kordoc/dist/chunk-J55UQC5H.cjs","../src/page-range.ts"],"names":[],"mappings":"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","file":"/Users/chris_gomdori/workspace/kordoc/dist/chunk-J55UQC5H.cjs","sourcesContent":[null,"/** 페이지/섹션 범위 파싱 유틸리티 */\n\n/**\n * 페이지 범위 지정을 1-based Set<number>로 변환.\n *\n * @param spec - [1,2,3] 또는 \"1-3\" 또는 \"1,3,5-7\"\n * @param maxPages - 최대 페이지 수 (클램핑 상한)\n * @returns 1-based 페이지 번호 Set\n */\nexport function parsePageRange(spec: number[] | string, maxPages: number): Set<number> {\n const result = new Set<number>()\n if (maxPages <= 0) return result\n\n if (Array.isArray(spec)) {\n for (const n of spec) {\n const page = Math.round(n)\n if (page >= 1 && page <= maxPages) result.add(page)\n }\n return result\n }\n\n if (typeof spec !== \"string\" || spec.trim() === \"\") return result\n\n const parts = spec.split(\",\")\n for (const part of parts) {\n const trimmed = part.trim()\n if (!trimmed) continue\n\n const rangeMatch = trimmed.match(/^(\\d+)\\s*-\\s*(\\d+)$/)\n if (rangeMatch) {\n const start = Math.max(1, parseInt(rangeMatch[1], 10))\n const end = Math.min(maxPages, parseInt(rangeMatch[2], 10))\n for (let i = start; i <= end; i++) result.add(i)\n } else {\n const page = parseInt(trimmed, 10)\n if (!isNaN(page) && page >= 1 && page <= maxPages) result.add(page)\n }\n }\n\n return result\n}\n\n/**\n * 파싱 상한 이후에 실제 문서 범위에 속하는 요청이 있는가. 경고용으로 전체 범위를 Set에 펼치면\n * 페이지 상한을 우회해 거대한 범위만큼 메모리를 쓰므로 구간 교차만 검사한다.\n * 배열의 Math.round, 단일 문자열의 parseInt 등 parsePageRange의 기존 문법은 그대로 유지한다.\n */\nexport function hasRequestedPagesAfter(spec: number[] | string, maxParsed: number, total: number): boolean {\n if (total <= 0 || total <= maxParsed) return false\n const beyond = (page: number): boolean => page >= 1 && page <= total && page > maxParsed\n if (Array.isArray(spec)) return spec.some(n => beyond(Math.round(n)))\n if (typeof spec !== \"string\" || spec.trim() === \"\") return false\n\n for (const part of spec.split(\",\")) {\n const trimmed = part.trim()\n if (!trimmed) continue\n const rangeMatch = trimmed.match(/^(\\d+)\\s*-\\s*(\\d+)$/)\n if (rangeMatch) {\n const start = Math.max(1, parseInt(rangeMatch[1], 10), Math.floor(maxParsed) + 1)\n const end = Math.min(total, parseInt(rangeMatch[2], 10))\n if (start <= end) return true\n } else if (beyond(parseInt(trimmed, 10))) return true\n }\n return false\n}\n"]}
1
+ {"version":3,"sources":["/Users/mong-e/workspace/kordoc-quality-99/dist/chunk-J55UQC5H.cjs","../src/page-range.ts"],"names":[],"mappings":"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","file":"/Users/mong-e/workspace/kordoc-quality-99/dist/chunk-J55UQC5H.cjs","sourcesContent":[null,"/** 페이지/섹션 범위 파싱 유틸리티 */\n\n/**\n * 페이지 범위 지정을 1-based Set<number>로 변환.\n *\n * @param spec - [1,2,3] 또는 \"1-3\" 또는 \"1,3,5-7\"\n * @param maxPages - 최대 페이지 수 (클램핑 상한)\n * @returns 1-based 페이지 번호 Set\n */\nexport function parsePageRange(spec: number[] | string, maxPages: number): Set<number> {\n const result = new Set<number>()\n if (maxPages <= 0) return result\n\n if (Array.isArray(spec)) {\n for (const n of spec) {\n const page = Math.round(n)\n if (page >= 1 && page <= maxPages) result.add(page)\n }\n return result\n }\n\n if (typeof spec !== \"string\" || spec.trim() === \"\") return result\n\n const parts = spec.split(\",\")\n for (const part of parts) {\n const trimmed = part.trim()\n if (!trimmed) continue\n\n const rangeMatch = trimmed.match(/^(\\d+)\\s*-\\s*(\\d+)$/)\n if (rangeMatch) {\n const start = Math.max(1, parseInt(rangeMatch[1], 10))\n const end = Math.min(maxPages, parseInt(rangeMatch[2], 10))\n for (let i = start; i <= end; i++) result.add(i)\n } else {\n const page = parseInt(trimmed, 10)\n if (!isNaN(page) && page >= 1 && page <= maxPages) result.add(page)\n }\n }\n\n return result\n}\n\n/**\n * 파싱 상한 이후에 실제 문서 범위에 속하는 요청이 있는가. 경고용으로 전체 범위를 Set에 펼치면\n * 페이지 상한을 우회해 거대한 범위만큼 메모리를 쓰므로 구간 교차만 검사한다.\n * 배열의 Math.round, 단일 문자열의 parseInt 등 parsePageRange의 기존 문법은 그대로 유지한다.\n */\nexport function hasRequestedPagesAfter(spec: number[] | string, maxParsed: number, total: number): boolean {\n if (total <= 0 || total <= maxParsed) return false\n const beyond = (page: number): boolean => page >= 1 && page <= total && page > maxParsed\n if (Array.isArray(spec)) return spec.some(n => beyond(Math.round(n)))\n if (typeof spec !== \"string\" || spec.trim() === \"\") return false\n\n for (const part of spec.split(\",\")) {\n const trimmed = part.trim()\n if (!trimmed) continue\n const rangeMatch = trimmed.match(/^(\\d+)\\s*-\\s*(\\d+)$/)\n if (rangeMatch) {\n const start = Math.max(1, parseInt(rangeMatch[1], 10), Math.floor(maxParsed) + 1)\n const end = Math.min(total, parseInt(rangeMatch[2], 10))\n if (start <= end) return true\n } else if (beyond(parseInt(trimmed, 10))) return true\n }\n return false\n}\n"]}
@@ -9,7 +9,7 @@ import {
9
9
  HEADING_RATIO_H3,
10
10
  tidyScriptTags,
11
11
  unframeLayoutTables
12
- } from "./chunk-5CDUL6PH.js";
12
+ } from "./chunk-WL3BWROT.js";
13
13
  import {
14
14
  parsePageRange
15
15
  } from "./chunk-VQFA55IC.js";
@@ -22,7 +22,7 @@ import {
22
22
  findChildByLocalName,
23
23
  hwpFaceToCssStack,
24
24
  parseRenderStyles
25
- } from "./chunk-I5DJOP62.js";
25
+ } from "./chunk-2XHXABCX.js";
26
26
  import {
27
27
  MAX_COLS,
28
28
  MAX_ROWS,
@@ -33,18 +33,18 @@ import {
33
33
  flattenLayoutTables,
34
34
  mapPuaText,
35
35
  markNonLayoutTable
36
- } from "./chunk-BFT5IM2R.js";
36
+ } from "./chunk-WJLICIYV.js";
37
37
  import {
38
38
  loadSharp,
39
39
  rasterizePageSvg
40
- } from "./chunk-PHID6WNG.js";
40
+ } from "./chunk-MDCTITUG.js";
41
41
  import {
42
42
  KordocError,
43
43
  escapeHtml,
44
44
  precheckZipSize,
45
45
  sanitizeHref,
46
46
  toArrayBuffer
47
- } from "./chunk-ZF6KHPB7.js";
47
+ } from "./chunk-A2W2JQ3S.js";
48
48
 
49
49
  // src/render/svg-render.ts
50
50
  import JSZip from "jszip";
@@ -1387,11 +1387,10 @@ var FONTS = {
1387
1387
  function hasFontMetrics(face) {
1388
1388
  return !!face && Object.prototype.hasOwnProperty.call(FONTS, face.trim());
1389
1389
  }
1390
- function fontAdvanceEm1000(face, cp) {
1390
+ function fontWidthFn(face) {
1391
+ if (!hasFontMetrics(face)) return null;
1391
1392
  const m = FONTS[face.trim()];
1392
- if (!m) return null;
1393
- if (cp >= 32 && cp <= 126) return m.ascii[cp - 32];
1394
- return m.ex[cp] ?? m.cjk;
1393
+ return (cp) => cp >= 32 && cp <= 126 ? m.ascii[cp - 32] : m.ex[cp] ?? m.cjk;
1395
1394
  }
1396
1395
 
1397
1396
  // src/hwpx/text-metrics.ts
@@ -1581,7 +1580,7 @@ function widthFnOf(faceClass) {
1581
1580
  if (faceClass === "gothic") return gothicWidthEm1000;
1582
1581
  if (faceClass?.startsWith("font:")) {
1583
1582
  const face = faceClass.slice(5);
1584
- return (cp) => fontAdvanceEm1000(face, cp) ?? gothicWidthEm1000(cp);
1583
+ return fontWidthFn(face) ?? gothicWidthEm1000;
1585
1584
  }
1586
1585
  return charWidthEm1000;
1587
1586
  }
@@ -1632,7 +1631,8 @@ function simulateWrap(text, firstWidth, contWidth, height, ratioPct, mode = "kee
1632
1631
  const breakBefore = (unitPos, w) => {
1633
1632
  let bp = unitPos;
1634
1633
  const u = text[unitPos];
1635
- if (u !== void 0 && FORBID_START.has(u) && bp - 1 > lineStart() && text[bp - 1] !== " ") bp--;
1634
+ const prevStart = (end) => end - (end >= 2 && /[\uDC00-\uDFFF]/.test(text[end - 1]) && /[\uD800-\uDBFF]/.test(text[end - 2]) ? 2 : 1);
1635
+ if (u !== void 0 && FORBID_START.has(u) && prevStart(bp) > lineStart() && text[bp - 1] !== " ") bp = prevStart(bp);
1636
1636
  while (bp - 1 > lineStart() && FORBID_END.has(text[bp - 1])) bp--;
1637
1637
  if (bp <= lineStart()) bp = unitPos;
1638
1638
  starts.push(bp);
@@ -5802,7 +5802,9 @@ function parseCell(records, lhIdx, end, ctx) {
5802
5802
  if (isHeader) cell.isHeader = true;
5803
5803
  if (rec.data.length >= 24 && rec.data.readUInt32LE(20) > A4_HEIGHT) cell.pageSpanning = true;
5804
5804
  if (rec.data.length >= 34) {
5805
- const edges = ctx.docInfo?.borderEdges?.[rec.data.readUInt16LE(32) - 1];
5805
+ const borderFillId = rec.data.readUInt16LE(32);
5806
+ const definitions = ctx.docInfo?.borderEdges;
5807
+ const edges = borderFillId === 0 && definitions?.length ? { t: false, b: false, l: false, r: false } : definitions?.[borderFillId - 1];
5806
5808
  if (edges) cell.edges = edges;
5807
5809
  }
5808
5810
  return cell;
@@ -7385,4 +7387,4 @@ export {
7385
7387
  cropRect,
7386
7388
  extractRenderedRegions
7387
7389
  };
7388
- //# sourceMappingURL=chunk-QJWVMPB6.js.map
7390
+ //# sourceMappingURL=chunk-JY2NBFIG.js.map