@silurus/ooxml 0.78.1 → 0.79.1

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 (46) hide show
  1. package/README.md +39 -1
  2. package/THIRD_PARTY_NOTICES.md +13 -0
  3. package/dist/{canvas-viewer-mechanics-B4K_t5X_.js → canvas-viewer-mechanics-DJ9yfiLN.js} +1 -1
  4. package/dist/chart-number-format-tjYUR9eS.js +435 -0
  5. package/dist/dash-CMzZIDz_.js +824 -0
  6. package/dist/{document-pull-client-5AakVD6e.js → document-pull-client-DYoybVCn.js} +2119 -2113
  7. package/dist/{docx-bjhRwb2u.js → docx-CSk_-kj_.js} +65 -56
  8. package/dist/docx.mjs +4 -4
  9. package/dist/docx_parser_bg.wasm +0 -0
  10. package/dist/index.mjs +3 -3
  11. package/dist/{line-distribute-BVFW1-Hs.js → line-distribute-CU7vu7XS.js} +1 -1
  12. package/dist/{line-metrics-DS0NS2Iq.js → line-metrics-A77J_KRx.js} +4229 -3233
  13. package/dist/math.mjs +1 -1
  14. package/dist/node.mjs +322 -322
  15. package/dist/{pptx-D1rCrHGR.js → pptx-CO1Ut97p.js} +192 -183
  16. package/dist/pptx.mjs +5 -5
  17. package/dist/pptx_parser_bg.wasm +0 -0
  18. package/dist/region-map.mjs +12708 -0
  19. package/dist/{render-DhlT5jxZ.js → render-C5m7Ddwx.js} +1 -1
  20. package/dist/render-worker-host-BhMT5U73.js +27 -0
  21. package/dist/render-worker-host-DNMxGh5s.js +27 -0
  22. package/dist/render-worker-host-DWyg7wio.js +27 -0
  23. package/dist/{resource-measurement-BA-4Q-II.js → resource-measurement-COxqtfGk.js} +1 -1
  24. package/dist/{session-C_HGxbRD.js → session-CJwZaquG.js} +10 -10
  25. package/dist/{slide-pull-client-BiC4sVGi.js → slide-pull-client-CFHNk0ek.js} +584 -583
  26. package/dist/three-d.mjs +2426 -0
  27. package/dist/types/docx.d.ts +251 -16
  28. package/dist/types/index.d.ts +266 -20
  29. package/dist/types/math.d.ts +1 -1
  30. package/dist/types/node.d.ts +225 -1
  31. package/dist/types/pptx.d.ts +253 -16
  32. package/dist/types/region-map.d.ts +586 -0
  33. package/dist/types/three-d.d.ts +586 -0
  34. package/dist/types/xlsx.d.ts +256 -16
  35. package/dist/{worksheet-pull-client-BnvgeqfG.js → worksheet-pull-client-CziyJf24.js} +13 -13
  36. package/dist/{xlsx-BG_WYSc0.js → xlsx-DHQmjAfh.js} +1246 -1073
  37. package/dist/xlsx.mjs +5 -5
  38. package/dist/xlsx_parser_bg.wasm +0 -0
  39. package/package.json +13 -1
  40. package/dist/render-worker-host-CtJo7hc9.js +0 -27
  41. package/dist/render-worker-host-D8vv-Asx.js +0 -27
  42. package/dist/render-worker-host-DAjG9nmw.js +0 -27
  43. /package/dist/{highlight-rect-CAkCWJ37.js → highlight-rect-cCvVU-MW.js} +0 -0
  44. /package/dist/{mathjax-CMjda8Ip.js → mathjax-Dqo857oC.js} +0 -0
  45. /package/dist/{transfer-DCu4c2BL.js → transfer-3QEJrsJa.js} +0 -0
  46. /package/dist/{visible-index-CgyJLAS_.js → visible-index-CKvgpUrf.js} +0 -0
package/README.md CHANGED
@@ -79,7 +79,7 @@ pnpm add @silurus/ooxml
79
79
  > **Bundle size note**: the package is ESM-only (`.mjs`). npm's *Unpacked
80
80
  > Size* sums every entry bundle **and** the standalone MathJax + STIX Two Math
81
81
  > asset, so the reported figure is much larger than any single app build. For
82
- > v0.78.1, the complete npm package is approximately 12.0 MB unpacked (4.0 MB
82
+ > v0.79.0, the complete npm package is approximately 13.0 MB unpacked (4.3 MB
83
83
  > as the downloaded tarball), while a format-specific application graph is
84
84
  > approximately:
85
85
  >
@@ -89,6 +89,8 @@ pnpm add @silurus/ooxml
89
89
  > | `@silurus/ooxml/xlsx` | 2.6 MB | 0.82 MB | XLSX renderer, parser WASM, and lazy worker |
90
90
  > | `@silurus/ooxml/pptx` | 2.5 MB | 0.78 MB | PPTX renderer, parser WASM, and lazy worker |
91
91
  > | `@silurus/ooxml/math` | 3.1 MB | 1.1 MB | Optional MathJax + STIX Two Math engine |
92
+ > | `@silurus/ooxml/three-d` | 81 KB | 23 KB | Optional model-space 3-D chart mesh and camera |
93
+ > | `@silurus/ooxml/region-map` | 236 KB | 66 KB | Optional offline Region Map renderer and fixed country geometry |
92
94
  >
93
95
  > These are production-artifact estimates, not initial-load figures: each row
94
96
  > sums all assets reachable from that entry, including parser WASM and worker
@@ -101,6 +103,11 @@ pnpm add @silurus/ooxml
101
103
  > `@silurus/ooxml/math` and passed it to a viewer (see
102
104
  > [Rendering equations](#rendering-equations)). Never import the `math` entry
103
105
  > and the loader chunk never enters your graph at all.
106
+ >
107
+ > The 3-D chart and Region Map renderers follow the same dependency-injection
108
+ > boundary: import and pass only the addons an application needs. Ordinary
109
+ > format entries do not reach either optional implementation, so bundlers can
110
+ > tree-shake their mesh code and fixed geographic asset completely.
104
111
 
105
112
  ---
106
113
 
@@ -199,6 +206,37 @@ per-render argument. (Excel stores "Insert > Equation" as OMML inside the shared
199
206
  DrawingML `<xdr:txBody>` grammar, so `XlsxViewer` renders equations embedded in
200
207
  shapes / text boxes the same way.)
201
208
 
209
+ ### Optional chart renderers
210
+
211
+ Model-space 3-D charts and offline country-level Region Maps are separate
212
+ entries. Inject them once in the same load options object as `math`; omitting an
213
+ addon keeps it out of the application graph. They currently render on the main
214
+ thread, so use `mode: 'main'` (the default). Without `threeD`, 3-D chart groups
215
+ fall back to their canonical 2-D family. Without `regionMap`, Region Maps show
216
+ the standard unsupported-chart placeholder.
217
+
218
+ ```typescript
219
+ import { XlsxViewer } from '@silurus/ooxml/xlsx';
220
+ import { threeD } from '@silurus/ooxml/three-d';
221
+ import { regionMap } from '@silurus/ooxml/region-map';
222
+
223
+ const container = document.getElementById('xlsx-container') as HTMLElement;
224
+ const workbookViewer = new XlsxViewer(container, {
225
+ threeD,
226
+ regionMap,
227
+ mode: 'main',
228
+ });
229
+ await workbookViewer.load('/workbook-with-advanced-charts.xlsx');
230
+ ```
231
+
232
+ The Region Map addon is deterministic and network-free. It uses a pinned
233
+ Natural Earth country dataset, supports authored world projections and
234
+ two/three-stop value ramps, and fails closed for cached identities or
235
+ sub-country/view-specific layouts that the bounded offline model cannot yet
236
+ represent safely. The specification/Office evidence boundary for automatic
237
+ chart behavior is documented in
238
+ [Chart compatibility evidence and scope](docs/chart-compatibility-evidence.md).
239
+
202
240
  ### Off-main-thread rendering
203
241
 
204
242
  By default the headless engines parse in a worker but render on the main thread.
@@ -6,6 +6,19 @@ is included in the npm tarball so it travels with every install.
6
6
 
7
7
  ## JavaScript / bundled asset
8
8
 
9
+ ### Natural Earth Admin 0 Countries, 1:110m
10
+
11
+ The optional Region Map renderer contains a coordinate-quantized derivative of
12
+ Natural Earth's Admin 0 Countries 1:110m vector dataset. Natural Earth states
13
+ that all versions of its raster and vector data are in the public domain. The
14
+ generated source records the exact upstream SHA-256 and fixed feature/vertex
15
+ bounds. The boundaries are illustrative, show Natural Earth's default de-facto
16
+ point of view, and do not imply this project's endorsement of any territorial
17
+ claim.
18
+
19
+ - Source: <https://github.com/nvkelso/natural-earth-vector/blob/master/geojson/ne_110m_admin_0_countries.geojson>
20
+ - Terms: <https://www.naturalearthdata.com/about/terms-of-use/>
21
+
9
22
  ### MathJax + STIX Two Math (`mathjax-stix2.js`)
10
23
 
11
24
  The optional equation-rendering engine (`@silurus/ooxml/math`, opt-in —
@@ -1,4 +1,4 @@
1
- import { hn as e } from "./line-metrics-DS0NS2Iq.js";
1
+ import { on as e } from "./line-metrics-A77J_KRx.js";
2
2
  //#region packages/core/src/errors/cfb-sniff.ts
3
3
  var t = [
4
4
  208,
@@ -0,0 +1,435 @@
1
+ //#region packages/core/src/chart/layout.ts
2
+ function e(e, t, n) {
3
+ let r = Math.max(1, t), i = [], a = [], o = 0;
4
+ for (let t = 0; t < e.length; t++) {
5
+ let s = Math.min(r, Math.max(0, e[t])), c = a.length === 0 ? s : o + n + s;
6
+ a.length > 0 && c > r ? (i.push(a), a = [t], o = s) : (a.push(t), o = c);
7
+ }
8
+ return a.length > 0 && i.push(a), i;
9
+ }
10
+ var t = 14;
11
+ function n(e, t) {
12
+ return typeof e == "number" && Number.isFinite(e) && e >= 100 && e <= 4e5 ? e / 100 * t : null;
13
+ }
14
+ function r(e, r, i) {
15
+ return n(e.titleFontSizeHpt, i) ?? t * i;
16
+ }
17
+ var i = .62;
18
+ function a(e, t, n, a, o) {
19
+ if (!e.title && !e.titlePresent) return {
20
+ fontPx: 0,
21
+ topPad: 0,
22
+ bottomPad: 0,
23
+ bandH: 0
24
+ };
25
+ let s = r(e, t, n), c = s + t * a + t * o, l = Math.min(Math.max(0, c - s), s * i);
26
+ return {
27
+ fontPx: s,
28
+ topPad: l,
29
+ bottomPad: c - s - l,
30
+ bandH: c
31
+ };
32
+ }
33
+ function o(t, n, r, i, a) {
34
+ if (!t.showLegend) return null;
35
+ let o = t.legendPos ?? "r", s = o === "l" ? "l" : o === "t" ? "t" : o === "b" ? "b" : "r";
36
+ if (s === "r" || s === "l") {
37
+ if (a) {
38
+ let e = Math.min(80, n * .3), t = n * .3, r = Math.max(0, ...a.itemWidths) + a.horizontalPadding;
39
+ return {
40
+ side: s,
41
+ reserveW: Math.min(t, Math.max(e, r)),
42
+ reserveH: 0
43
+ };
44
+ }
45
+ return {
46
+ side: s,
47
+ reserveW: Math.max(80, n * i),
48
+ reserveH: 0
49
+ };
50
+ }
51
+ if (a) {
52
+ let t = Math.max(1, n - a.horizontalPadding), i = e(a.itemWidths, t, a.itemGap).length * a.rowHeight + a.verticalPadding;
53
+ return {
54
+ side: s,
55
+ reserveW: 0,
56
+ reserveH: Math.min(r * .3, i)
57
+ };
58
+ }
59
+ return {
60
+ side: s,
61
+ reserveW: 0,
62
+ reserveH: Math.max(18, r * .08)
63
+ };
64
+ }
65
+ function s(e) {
66
+ return {
67
+ legRightW: e?.side === "r" ? e.reserveW : 0,
68
+ legLeftW: e?.side === "l" ? e.reserveW : 0,
69
+ legTopH: e?.side === "t" ? e.reserveH : 0,
70
+ legBottomH: e?.side === "b" ? e.reserveH : 0
71
+ };
72
+ }
73
+ function c(e, t) {
74
+ return n(e, t) ?? 10 * t;
75
+ }
76
+ function l(e, t, n) {
77
+ let r = 0, i = !1;
78
+ if (n != null) switch (i = !0, n) {
79
+ case "horz": break;
80
+ case "vert270":
81
+ r -= 90;
82
+ break;
83
+ case "vert":
84
+ case "wordArtVert":
85
+ case "eaVert":
86
+ case "mongolianVert":
87
+ case "wordArtVertRtl":
88
+ r += 90;
89
+ break;
90
+ }
91
+ return t != null && Number.isFinite(t) && (r += t / 6e4, i = !0), i ? r * Math.PI / 180 : e === "left" ? -Math.PI / 2 : e === "right" ? Math.PI / 2 : 0;
92
+ }
93
+ function u(e) {
94
+ return Math.max(8, e * .02);
95
+ }
96
+ function d(e, t, n, r) {
97
+ let i = c(e.catAxisTitleFontSizeHpt, r), a = c(e.valAxisTitleFontSizeHpt, r);
98
+ return {
99
+ catFontPx: i,
100
+ valFontPx: a,
101
+ catBandH: e.catAxisTitle ? i + u(n) + 4 : 0,
102
+ valBandW: e.valAxisTitle ? a + u(t) + 4 : 0
103
+ };
104
+ }
105
+ var f = 2.25, p = 2.75;
106
+ function m(e, t, n) {
107
+ if (!e.title && !e.titlePresent) return {
108
+ fontPx: 0,
109
+ topPad: 0,
110
+ bottomPad: 0,
111
+ bandH: 0
112
+ };
113
+ let a = r(e, t, n), o = a * f, s = Math.min(Math.max(0, o - a), a * i);
114
+ return {
115
+ fontPx: a,
116
+ topPad: s,
117
+ bottomPad: o - a - s,
118
+ bandH: o
119
+ };
120
+ }
121
+ function h(e) {
122
+ return e * p;
123
+ }
124
+ function g(e) {
125
+ return 5 / 6 * e;
126
+ }
127
+ function _(e) {
128
+ return e;
129
+ }
130
+ var v = 1.5;
131
+ function y(e) {
132
+ let t = e.outerTextMarginPx ?? 0;
133
+ return {
134
+ t: e.valAxisHidden ? 0 : e.valLabelFontPx / 2 + t,
135
+ r: (e.secondaryBandW ?? 0) > 0 ? (e.secondaryBandW ?? 0) + t : 0,
136
+ b: e.catAxisHidden ? 0 : e.catLabelFontPx + (e.catLabelGapPx ?? g(e.catLabelFontPx)) + e.catTitleBandH + t,
137
+ l: e.valAxisHidden ? 0 : e.valLabelWidth + (e.valLabelGapPx ?? _(e.valLabelFontPx)) + e.valTitleBandW + t
138
+ };
139
+ }
140
+ function b(e, t, n) {
141
+ let r = e.xMode || "factor", i = e.yMode || "factor", a = e.wMode || "factor", o = e.hMode || "factor", s = r === "edge" ? t.x + e.x * t.w : n.x + e.x * t.w, c = i === "edge" ? t.y + e.y * t.h : n.y + e.y * t.h, l = e.w == null ? n.w : a === "edge" ? t.x + e.w * t.w - s : e.w * t.w, u = e.h == null ? n.h : o === "edge" ? t.y + e.h * t.h - c : e.h * t.h;
142
+ return ![
143
+ s,
144
+ c,
145
+ l,
146
+ u
147
+ ].every(Number.isFinite) || l <= 0 || u <= 0 ? null : {
148
+ x: s,
149
+ y: c,
150
+ w: l,
151
+ h: u
152
+ };
153
+ }
154
+ function x(e, t, n, r, i, c, l) {
155
+ let u = l.titleBand ?? a(e, i, c, l.titleTopPadFrac ?? 0, l.titleBottomPadFrac ?? 0), f = l.legendReserve === void 0 ? o(e, r, i, l.legendSideReserveFrac) : l.legendReserve, p = s(f), m = d(e, r, i, c), h, g, _, v;
156
+ if (l.radialGapFrac != null) {
157
+ let e = i * l.radialGapFrac;
158
+ _ = r - p.legRightW - p.legLeftW, v = i - u.bandH - p.legTopH - p.legBottomH - e, h = t + p.legLeftW, g = n + u.bandH + p.legTopH + e;
159
+ } else {
160
+ let e = l.pad;
161
+ if (!e) throw Error("computeChartFrame: cartesian frame requires params.pad");
162
+ h = t + e.l, g = n + e.t, _ = r - e.l - e.r, v = i - e.t - e.b;
163
+ }
164
+ let y = l.honorPlotAreaManualLayout ? e.plotAreaManualLayout : null;
165
+ if (y) {
166
+ let e = y.layoutTarget === "inner" ? {
167
+ t: 0,
168
+ r: 0,
169
+ b: 0,
170
+ l: 0
171
+ } : l.manualOuterInsets ?? {
172
+ t: 0,
173
+ r: 0,
174
+ b: 0,
175
+ l: 0
176
+ }, a = y.layoutTarget === "inner" ? {
177
+ x: h,
178
+ y: g,
179
+ w: _,
180
+ h: v
181
+ } : {
182
+ x: h - e.l,
183
+ y: g - e.t,
184
+ w: _ + e.l + e.r,
185
+ h: v + e.t + e.b
186
+ }, o = b(y, {
187
+ x: t,
188
+ y: n,
189
+ w: r,
190
+ h: i
191
+ }, a);
192
+ o && o.w > e.l + e.r && o.h > e.t + e.b && (h = o.x + e.l, g = o.y + e.t, _ = o.w - e.l - e.r, v = o.h - e.t - e.b);
193
+ }
194
+ return {
195
+ title: u,
196
+ legend: f,
197
+ legendBands: p,
198
+ axisTitles: m,
199
+ plotRect: {
200
+ px0: h,
201
+ py0: g,
202
+ pw: _,
203
+ ph: v
204
+ },
205
+ center: {
206
+ cx: h + _ / 2,
207
+ cy: g + v / 2
208
+ }
209
+ };
210
+ }
211
+ //#endregion
212
+ //#region packages/core/src/excel-date.ts
213
+ var S = 864e5, C = Date.UTC(1899, 11, 30), w = Date.UTC(1904, 0, 1);
214
+ function T(e, t = !1) {
215
+ if (t) return new Date(w + e * S);
216
+ let n = e < 60 ? e + 1 : e;
217
+ return new Date(C + n * S);
218
+ }
219
+ function E(e, t = !1) {
220
+ if (t) return (e.getTime() - w) / S;
221
+ let n = (e.getTime() - C) / S;
222
+ return n <= 60 ? n - 1 : n;
223
+ }
224
+ //#endregion
225
+ //#region packages/core/src/text/round-decimal.ts
226
+ function D(e, t) {
227
+ if (!Number.isFinite(e)) return String(e);
228
+ let n = Math.max(0, Math.trunc(t)), r = e < 0, [i, a = ""] = O(Math.abs(e).toString()).split("."), o = a.padEnd(n + 1, "0"), s = o.slice(0, n), c = o.charCodeAt(n) - 48, l = (i + s).split("").map((e) => e.charCodeAt(0) - 48);
229
+ if (c >= 5) {
230
+ let e = l.length - 1;
231
+ for (; e >= 0; e--) if (l[e] === 9) l[e] = 0;
232
+ else {
233
+ l[e] += 1;
234
+ break;
235
+ }
236
+ e < 0 && l.unshift(1);
237
+ }
238
+ let u = l.map((e) => String(e)).join(""), d = n, f = (d > 0 ? u.slice(0, u.length - d) : u) || "0", p = d > 0 ? u.slice(u.length - d) : "", m = f.replace(/^0+(?=\d)/, ""), h = p.length > 0 ? `${m}.${p}` : m, g = /^[0.]*$/.test(h) && !/[1-9]/.test(h);
239
+ return r && !g ? `-${h}` : h;
240
+ }
241
+ function O(e) {
242
+ let t = /^(\d+)(?:\.(\d+))?[eE]([+-]?\d+)$/.exec(e);
243
+ if (!t) return e;
244
+ let [, n, r = "", i] = t, a = parseInt(i, 10), o = n + r, s = n.length + a;
245
+ return s <= 0 ? "0." + "0".repeat(-s) + o : s >= o.length ? o + "0".repeat(s - o.length) : o.slice(0, s) + "." + o.slice(s);
246
+ }
247
+ //#endregion
248
+ //#region packages/core/src/chart/chart-number-format.ts
249
+ function k(e) {
250
+ return Number.isInteger(e) ? String(e) : D(e, 6).replace(/\.?0+$/, "");
251
+ }
252
+ function A(e, t, n = !1) {
253
+ if (!t || t.trim().toLowerCase() === "general") return k(e);
254
+ if (M(t)) return N(e, t, n);
255
+ let r = P(t), i;
256
+ return i = e > 0 ? r[0] ?? t : e < 0 ? r[1] ?? r[0] ?? t : r[2] ?? r[0] ?? t, i === "" ? "" : (e < 0 && r.length < 2 ? "-" : "") + F(Math.abs(e), i);
257
+ }
258
+ function j(e, t, n = !1) {
259
+ if (!t || e.trim() === "") return e;
260
+ let r = Number(e);
261
+ return Number.isFinite(r) ? A(r, t, n) : e;
262
+ }
263
+ function M(e) {
264
+ let t = !1;
265
+ for (let n = 0; n < e.length; n++) {
266
+ let r = e[n];
267
+ if (r === "\"") {
268
+ t = !t;
269
+ continue;
270
+ }
271
+ if (!t) {
272
+ if (r === "\\") {
273
+ n++;
274
+ continue;
275
+ }
276
+ if (r === "[") {
277
+ for (; n < e.length && e[n] !== "]";) n++;
278
+ continue;
279
+ }
280
+ if (r === "y" || r === "Y" || r === "d" || r === "D" || r === "m" || r === "M" || r === "h" || r === "H" || r === "s" || r === "S") return !0;
281
+ }
282
+ }
283
+ return !1;
284
+ }
285
+ function N(e, t, n = !1) {
286
+ let r = T(Math.floor(e), n), i = r.getUTCFullYear(), a = r.getUTCMonth() + 1, o = r.getUTCDate(), s = (e - Math.floor(e)) * 86400, c = Math.floor(s / 3600), l = Math.floor(s % 3600 / 60), u = Math.floor(s % 60), d = "", f = !1, p = 0;
287
+ for (; p < t.length;) {
288
+ let e = t[p];
289
+ if (e === "\"") {
290
+ f = !f, p++;
291
+ continue;
292
+ }
293
+ if (f) {
294
+ d += e, p++;
295
+ continue;
296
+ }
297
+ if (e === "\\" && p + 1 < t.length) {
298
+ d += t[p + 1], p += 2;
299
+ continue;
300
+ }
301
+ if (e === "[") {
302
+ for (; p < t.length && t[p] !== "]";) p++;
303
+ p < t.length && p++;
304
+ continue;
305
+ }
306
+ if (e === "y" || e === "Y") {
307
+ let e = 0;
308
+ for (; p < t.length && (t[p] === "y" || t[p] === "Y");) e++, p++;
309
+ d += e >= 3 ? String(i) : String(i % 100).padStart(2, "0");
310
+ continue;
311
+ }
312
+ if (e === "m" || e === "M") {
313
+ let e = 0;
314
+ for (; p < t.length && (t[p] === "m" || t[p] === "M");) e++, p++;
315
+ d.match(/[Hh]+\W*$/) ? d += e >= 2 ? String(l).padStart(2, "0") : String(l) : d += e >= 2 ? String(a).padStart(2, "0") : String(a);
316
+ continue;
317
+ }
318
+ if (e === "d" || e === "D") {
319
+ let e = 0;
320
+ for (; p < t.length && (t[p] === "d" || t[p] === "D");) e++, p++;
321
+ d += e >= 2 ? String(o).padStart(2, "0") : String(o);
322
+ continue;
323
+ }
324
+ if (e === "h" || e === "H") {
325
+ let e = 0;
326
+ for (; p < t.length && (t[p] === "h" || t[p] === "H");) e++, p++;
327
+ d += e >= 2 ? String(c).padStart(2, "0") : String(c);
328
+ continue;
329
+ }
330
+ if (e === "s" || e === "S") {
331
+ let e = 0;
332
+ for (; p < t.length && (t[p] === "s" || t[p] === "S");) e++, p++;
333
+ d += e >= 2 ? String(u).padStart(2, "0") : String(u);
334
+ continue;
335
+ }
336
+ d += e, p++;
337
+ }
338
+ return d;
339
+ }
340
+ function P(e) {
341
+ let t = [], n = "";
342
+ for (let r = 0; r < e.length; r++) {
343
+ let i = e[r];
344
+ if (i === "\\" && r + 1 < e.length) {
345
+ n += i + e[r + 1], r++;
346
+ continue;
347
+ }
348
+ if (i === "\"") {
349
+ for (n += i, r++; r < e.length && e[r] !== "\"";) n += e[r], r++;
350
+ r < e.length && (n += e[r]);
351
+ continue;
352
+ }
353
+ if (i === "[") {
354
+ for (n += i, r++; r < e.length && e[r] !== "]";) n += e[r], r++;
355
+ r < e.length && (n += e[r]);
356
+ continue;
357
+ }
358
+ if (i === ";") {
359
+ t.push(n), n = "";
360
+ continue;
361
+ }
362
+ n += i;
363
+ }
364
+ return t.push(n), t;
365
+ }
366
+ function F(e, t) {
367
+ let n = [], r = 0, i = !1, a = !1;
368
+ for (; r < t.length;) {
369
+ let e = t[r];
370
+ if (e === "\"") {
371
+ r++;
372
+ let e = "";
373
+ for (; r < t.length && t[r] !== "\"";) e += t[r], r++;
374
+ r < t.length && r++, n.push({
375
+ kind: "lit",
376
+ text: e
377
+ });
378
+ continue;
379
+ }
380
+ if (e === "\\" && r + 1 < t.length) {
381
+ n.push({
382
+ kind: "lit",
383
+ text: t[r + 1]
384
+ }), r += 2;
385
+ continue;
386
+ }
387
+ if (e === "_" && r + 1 < t.length) {
388
+ n.push({
389
+ kind: "lit",
390
+ text: " "
391
+ }), r += 2;
392
+ continue;
393
+ }
394
+ if (e === "*" && r + 1 < t.length) {
395
+ r += 2;
396
+ continue;
397
+ }
398
+ if (e === "[") {
399
+ for (r++; r < t.length && t[r] !== "]";) r++;
400
+ r < t.length && r++;
401
+ continue;
402
+ }
403
+ if (e === "%") {
404
+ a = !0, n.push({
405
+ kind: "lit",
406
+ text: "%"
407
+ }), r++;
408
+ continue;
409
+ }
410
+ if (e === "#" || e === "0" || e === "." || e === "," || e === "?") {
411
+ let e = "";
412
+ for (; r < t.length && (t[r] === "#" || t[r] === "0" || t[r] === "." || t[r] === "," || t[r] === "?");) e += t[r], r++;
413
+ n.push({
414
+ kind: "num",
415
+ text: e
416
+ }), i = !0;
417
+ continue;
418
+ }
419
+ n.push({
420
+ kind: "lit",
421
+ text: e
422
+ }), r++;
423
+ }
424
+ if (!i) return n.map((e) => e.text).join("");
425
+ let o = a ? e * 100 : e, s = "";
426
+ for (let e of n) e.kind === "num" && (s += e.text);
427
+ let c = I(o, s), l = !1;
428
+ return n.map((e) => e.kind === "lit" ? e.text : l ? "" : (l = !0, c)).join("");
429
+ }
430
+ function I(e, t) {
431
+ let n = t.indexOf("."), r = n >= 0 ? t.slice(0, n) : t, i = n >= 0 ? t.slice(n + 1) : "", a = /,/.test(r), o = (i.match(/[#0?]/g) ?? []).length, s = (r.replace(/,/g, "").match(/0/g) ?? []).length, [c, l = ""] = D(e, o).split("."), u = c.padStart(s, "0"), d = a ? u.replace(/\B(?=(\d{3})+(?!\d))/g, ",") : u;
432
+ return o === 0 ? d : `${d}.${l.padEnd(o, "0")}`;
433
+ }
434
+ //#endregion
435
+ export { _ as C, b as S, y as _, T as a, x as b, c, m as d, h as f, o as g, s as h, D as i, u as l, d as m, k as n, E as o, g as p, A as r, v as s, j as t, l as u, n as v, e as x, a as y };