@sheetxl/query 0.7.23-beta.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 (82) hide show
  1. package/LICENSE.md +11 -0
  2. package/README.md +69 -0
  3. package/browser/cjs/index.cjs +26 -0
  4. package/browser/esm/index.mjs +1994 -0
  5. package/licenses/dependencies.txt +1 -0
  6. package/node/esm/index.mjs +2024 -0
  7. package/package.json +52 -0
  8. package/types/index.d.ts +2 -0
  9. package/types/src/Tool.d.ts +108 -0
  10. package/types/src/Tool.d.ts.map +1 -0
  11. package/types/src/encode/encodeCell.d.ts +149 -0
  12. package/types/src/encode/encodeCell.d.ts.map +1 -0
  13. package/types/src/encode/index.d.ts +2 -0
  14. package/types/src/encode/index.d.ts.map +1 -0
  15. package/types/src/grep/GrepTypes.d.ts +308 -0
  16. package/types/src/grep/GrepTypes.d.ts.map +1 -0
  17. package/types/src/grep/grep.d.ts +15 -0
  18. package/types/src/grep/grep.d.ts.map +1 -0
  19. package/types/src/grep/grepTool.d.ts +16 -0
  20. package/types/src/grep/grepTool.d.ts.map +1 -0
  21. package/types/src/grep/index.d.ts +5 -0
  22. package/types/src/grep/index.d.ts.map +1 -0
  23. package/types/src/grep/renderGrep.d.ts +19 -0
  24. package/types/src/grep/renderGrep.d.ts.map +1 -0
  25. package/types/src/index.d.ts +20 -0
  26. package/types/src/index.d.ts.map +1 -0
  27. package/types/src/markdown/MarkdownBuilder.d.ts +84 -0
  28. package/types/src/markdown/MarkdownBuilder.d.ts.map +1 -0
  29. package/types/src/markdown/appendSections.d.ts +364 -0
  30. package/types/src/markdown/appendSections.d.ts.map +1 -0
  31. package/types/src/markdown/caps.d.ts +24 -0
  32. package/types/src/markdown/caps.d.ts.map +1 -0
  33. package/types/src/markdown/describeRegionPayload.d.ts +46 -0
  34. package/types/src/markdown/describeRegionPayload.d.ts.map +1 -0
  35. package/types/src/markdown/describeRule.d.ts +66 -0
  36. package/types/src/markdown/describeRule.d.ts.map +1 -0
  37. package/types/src/markdown/describeStyle.d.ts +64 -0
  38. package/types/src/markdown/describeStyle.d.ts.map +1 -0
  39. package/types/src/markdown/index.d.ts +27 -0
  40. package/types/src/markdown/index.d.ts.map +1 -0
  41. package/types/src/markdown/parseRenderOptions.d.ts +16 -0
  42. package/types/src/markdown/parseRenderOptions.d.ts.map +1 -0
  43. package/types/src/markdown/profileRegion.d.ts +121 -0
  44. package/types/src/markdown/profileRegion.d.ts.map +1 -0
  45. package/types/src/markdown/registry.d.ts +96 -0
  46. package/types/src/markdown/registry.d.ts.map +1 -0
  47. package/types/src/markdown/renderCell.d.ts +23 -0
  48. package/types/src/markdown/renderCell.d.ts.map +1 -0
  49. package/types/src/markdown/renderCellRange.d.ts +61 -0
  50. package/types/src/markdown/renderCellRange.d.ts.map +1 -0
  51. package/types/src/markdown/renderConditionalFormat.d.ts +15 -0
  52. package/types/src/markdown/renderConditionalFormat.d.ts.map +1 -0
  53. package/types/src/markdown/renderCounts.d.ts +11 -0
  54. package/types/src/markdown/renderCounts.d.ts.map +1 -0
  55. package/types/src/markdown/renderDataValidation.d.ts +15 -0
  56. package/types/src/markdown/renderDataValidation.d.ts.map +1 -0
  57. package/types/src/markdown/renderFormula.d.ts +63 -0
  58. package/types/src/markdown/renderFormula.d.ts.map +1 -0
  59. package/types/src/markdown/renderMovable.d.ts +35 -0
  60. package/types/src/markdown/renderMovable.d.ts.map +1 -0
  61. package/types/src/markdown/renderNames.d.ts +32 -0
  62. package/types/src/markdown/renderNames.d.ts.map +1 -0
  63. package/types/src/markdown/renderRanges.d.ts +33 -0
  64. package/types/src/markdown/renderRanges.d.ts.map +1 -0
  65. package/types/src/markdown/renderRecords.d.ts +39 -0
  66. package/types/src/markdown/renderRecords.d.ts.map +1 -0
  67. package/types/src/markdown/renderRegions.d.ts +70 -0
  68. package/types/src/markdown/renderRegions.d.ts.map +1 -0
  69. package/types/src/markdown/renderResult.d.ts +35 -0
  70. package/types/src/markdown/renderResult.d.ts.map +1 -0
  71. package/types/src/markdown/renderSheet.d.ts +29 -0
  72. package/types/src/markdown/renderSheet.d.ts.map +1 -0
  73. package/types/src/markdown/renderStats.d.ts +18 -0
  74. package/types/src/markdown/renderStats.d.ts.map +1 -0
  75. package/types/src/markdown/renderStyle.d.ts +12 -0
  76. package/types/src/markdown/renderStyle.d.ts.map +1 -0
  77. package/types/src/markdown/renderTable.d.ts +12 -0
  78. package/types/src/markdown/renderTable.d.ts.map +1 -0
  79. package/types/src/markdown/renderValues.d.ts +28 -0
  80. package/types/src/markdown/renderValues.d.ts.map +1 -0
  81. package/types/src/markdown/renderWorkbook.d.ts +50 -0
  82. package/types/src/markdown/renderWorkbook.d.ts.map +1 -0
package/LICENSE.md ADDED
@@ -0,0 +1,11 @@
1
+ # Repository Licensing
2
+
3
+ SheetXL contains a mix of open-source and commercially licensed packages. Each package is individually licensed and contains its own license file.
4
+
5
+ For the specific terms and conditions applicable to a package, please see the `LICENSE.md` file located in that package's root directory.
6
+
7
+ Generally, packages intended for public distribution (such as CLIs, adapters, and vanilla wrappers) are licensed under the MIT license. All other core packages are proprietary and require a commercial license for use.
8
+
9
+ For more details on commercial licensing, please visit our website:
10
+
11
+ https://www.sheetxl.com/docs/guides/licensing-pricing
package/README.md ADDED
@@ -0,0 +1,69 @@
1
+ # @sheetxl/query
2
+
3
+ The workbook read surface — capabilities declared once, as descriptors any surface adapts
4
+ mechanically. Designed so an agent can use it well; built for anyone.
5
+
6
+ ```
7
+ @sheetxl/sdk engine + analysis → typed results
8
+ ↓
9
+ @sheetxl/query capabilities + renderers ← this package
10
+ ↓
11
+ host surfaces command flags · tool schemas · embedding hosts
12
+ ```
13
+
14
+ ## What lives here
15
+
16
+ | | |
17
+ |---|---|
18
+ | **Capabilities** | `grep` — search cell contents by pattern across a workbook |
19
+ | **The value encoding** | the `'` string prefix, `TRUE`/`FALSE`, error literals — the presentation contract every read shares |
20
+ | **Renderers** | typed result → the aligned listing or table a reader consumes |
21
+
22
+ ## What does not
23
+
24
+ - **No file I/O.** Every capability takes an `IWorkbook`. A host may hold a workbook with
25
+ unsaved edits and no file behind it — a path-shaped entry point would exclude that host or
26
+ make it read stale data. Loading belongs to the caller.
27
+ - **No argument parsing.** Argument syntax — flag grammar, schema dialects — belongs to the
28
+ surface that owns it.
29
+ - **Nothing UI.** No consumer above the grid depends on this package.
30
+
31
+ ## Descriptors
32
+
33
+ A capability is declared once, as a `Tool.Descriptor`, and each surface generates its own
34
+ registration from it:
35
+
36
+ ```ts
37
+ import { TOOLS } from '@sheetxl/query';
38
+
39
+ for (const descriptor of TOOLS) {
40
+ // a flag parser: descriptor.params → options
41
+ // a tool registry: descriptor.params → inputSchema
42
+ }
43
+ ```
44
+
45
+ Adding a capability here adds it to every surface with no edit in any of them. Affordances —
46
+ how you name a workbook, how a result reaches its reader — are expected to differ and stay
47
+ with the surface that owns them. The divergence worth preventing is two hand-written copies
48
+ of one capability.
49
+
50
+ ## Macros may not import this package
51
+
52
+ Portability is the defining property of a macro, and the SDK is the portability boundary. A
53
+ macro that imported `@sheetxl/query` would work in one host and fail in another — an
54
+ environment-dependent cliff that passes every test you would think to write. A macro returns
55
+ data; the layer above renders it.
56
+
57
+ ## 🔗 Learn More
58
+
59
+ Whether you're ready to build, need help, or just want to see more examples, here's where to go next.
60
+
61
+ * 💬 **[Join our Discord Community](https://discord.gg/NTKdwUgK9p)** - Get help and connect with the team.
62
+ * ⭐ **[Star us on GitHub](https://github.com/sheetxl/sheetxl)** - If you like SheetXL give us a star ⭐ and help others find us!
63
+ * 📘 **[Developer Docs](https://www.sheetxl.com/docs)** - Guides and tutorials.
64
+ * 🔌 **[API Reference](https://api.sheetxl.com)** - Detailed documentation for all packages.
65
+ * 👀 **[Live Demo Gallery](https://www.sheetxl.com/demos)** - A showcase of interactive examples.
66
+ * 🖼️ **[Storybook](https://storybook.sheetxl.com)** - Explore and test individual UI components.
67
+ * 🌐 **[Website](https://www.sheetxl.com)** - Our Website.
68
+
69
+ ---
@@ -0,0 +1,26 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@sheetxl/sdk");var t;(t||={}).Mode={Display:`display`,Value:`value`};function n(e){return Number.isFinite(e)?function(e){let t=e.indexOf(`e`);if(t===-1)return e;let n=e.substring(t+2);return`${e.substring(0,t)}E${e[t+1]}${n.length<2?`0`+n:n}`}(String(Number(e.toPrecision(15)))):String(e)}function r(t,r){if(!Number.isFinite(t))return String(t);if(!r||r===`General`)return n(t);try{let i=e.NumberFormat.getEngine().format(r,t)?.text;return i?i.trim():n(t)}catch{return n(t)}}function i(e,n){let r=n===t.Mode.Value,i=e.getText({hideStringPrefix:!0,useFormattingCategory:r});return i?{match:i,display:e.getText({useFormattingCategory:r})}:null}function a(t){if(t==null)return null;if(typeof t==`string`)return{match:t,display:`'${t}`};if(typeof t==`boolean`){let e=t?`TRUE`:`FALSE`;return{match:e,display:e}}if(typeof t==`number`){let e=n(t);return{match:e,display:e}}if(e.FormulaError.isError(t)){let e=t.getLabel();return{match:e,display:e}}let r=t.toString();return{match:r,display:r}}var o=[`display`,`value`,`raw`,`formula`,`hyperlink`,`numberFormat`],s=[`display`,`value`,`formula`],c=e=>e.getVisibility()===`visible`,l=(e,t,n)=>{let r=e.getSheets().getItems({visibility:`veryHidden`}),i=t?.trim();if(!i)return r.filter(e=>n||c(e)).map(e=>({sheet:e,address:null}));let a=/^'(.*)'!(.+)$/.exec(i)??/^([^!]+)!(.+)$/.exec(i);if(a){let[,e,t]=a,n=r.find(t=>t.getName()===e);if(!n)throw Error(`Sheet not found: ${e}`);return[{sheet:n,address:t}]}let o=r.find(e=>e.getName()===i);if(o)return[{sheet:o,address:null}];if(/[*?]/.test(i)){let e=(e=>{let t=e.replace(/[.*+?^${}()|[\]\\]/g,e=>e===`*`?`.*`:e===`?`?`.`:`\\${e}`);return RegExp(`^${t}$`)})(i),t=r.filter(t=>e.test(t.getName())&&(n||c(t)));if(t.length===0)throw Error(`No sheets match ${JSON.stringify(i)}. Sheets: ${r.map(e=>e.getName()).join(`, `)}`);return t.map(e=>({sheet:e,address:null}))}let s=r.filter(e=>n||c(e));try{s[0]?.getRange(i)}catch{throw Error(`Unknown scope ${JSON.stringify(i)}: not a sheet name or a range. Sheets: ${r.map(e=>e.getName()).join(`, `)}`)}return s.map(e=>({sheet:e,address:i}))},u=(e,n)=>{switch(n){case`display`:return i(e,t.Mode.Display);case`value`:return i(e,t.Mode.Value);case`raw`:return a(e.getValue());case`formula`:{let t=e.getFormulaText();return t?{match:`=${t}`,display:`=${t}`}:null}case`hyperlink`:{let t=e.getHyperlink()?.getAddress()??null;return t?{match:t,display:t}:null}case`numberFormat`:{let t=e.getStyle().getNumberFormat();return t&&t!==`General`?{match:t,display:t}:null}default:return null}},d=[`hyperlink`,`numberFormat`],f=(e,t,n)=>{let r=null,i=e=>({range:`${t}!${e.getRange().toString()}`,table:e.getName()});return{resolve(a,o){let s=(e=>e.getTable())(a);if(e===`table`)return s?i(s):void 0;if(r===null){r=[];for(let e of n.getRegions()){let n=e.getCoords();n.rowStart===n.rowEnd&&n.colStart===n.colEnd||r.push({coords:n,address:`${t}!${e.toString()}`})}}let c=r.find(({coords:e})=>o.rowIndex>=e.rowStart&&o.rowIndex<=e.rowEnd&&o.colIndex>=e.colStart&&o.colIndex<=e.colEnd);return c?{range:c.address,...s?{table:s.getName()}:{}}:s?i(s):void 0}}};async function p(e,t){if(!t.pattern)throw Error(`grep requires a pattern`);let n=t.fields?.length?t.fields:s,r=t.output??`content`,i=t.maxCount??200,a=!0===t.invert,o=!0===t.hidden,c=(e=>{if(e===void 0||!1===e)return null;if(!0===e)return`contentful`;if(e===`contentful`||e===`table`)return e;throw Error(`Invalid context ${JSON.stringify(e)}: expected 'contentful' or 'table'. Context is the enclosing block, not a line count — a grid has no ±N lines.`)})(t.context),p=(e=>{let t=e.fixedStrings?(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`))(e.pattern):e.pattern;e.word&&(t=`(?<!\\w)(?:${t})(?!\\w)`);let n=e.ignoreCase?`iu`:`u`;try{return new RegExp(t,n)}catch{try{return new RegExp(t,n.replace(`u`,``))}catch(t){throw Error(`Invalid regex ${JSON.stringify(e.pattern)}: ${t instanceof Error?t.message:String(t)}. Use fixedStrings (-F) to search for the literal text.`)}}})(t),m=l(e,t.scope,o),h=!n.some(e=>d.includes(e)),g=n.includes(`display`)&&n.includes(`value`),_=r===`content`||r===`addresses`,v=[],y=[],b=0,x=0,S=!1;for(let{sheet:e,address:t}of m){if(S)continue;let s=e.getName();x++,await e.getCalculation().ready();let l=t===null?e.getUsedRange():e.getRange(t);if(!l)continue;let d=c&&r===`content`?f(c,s,l):null,m=0;l.forEach((e,t)=>{if(h&&e==null)return;let o=t.getCell(),c=[],l,f=null;for(let e of n){let t=u(o,e);if(e===`display`&&(l=t?.match??null),t!==null&&(e!==`value`||!g||(l===void 0&&(l=u(o,`display`)?.match??null),t.match!==l))&&(f===null&&(f={field:e,text:t.display}),p.test(t.match)&&(c.push({field:e,text:t.display}),r===`addresses`&&!a)))break}if(!(a?c.length>0||f===null:c.length===0)){if(i>0&&b>=i)return S=!0,{break:!0};if(b++,m++,_){let e=a?[f]:r===`addresses`?c.slice(0,1):c,n=d?.resolve(o,t.getCoords()),i=t.getAddress();for(let t of e)v.push({sheet:s,address:i,field:t.field,text:t.text,...n?{context:n}:{}})}}},o?void 0:{ignoreHidden:!0}),m>0&&y.push({sheet:s,cells:m})}return{pattern:t.pattern,fields:n,scope:t.scope?.trim()||`workbook`,matches:v,cellCount:b,sheets:y,sheetsSearched:x,sheetsMatched:y.length,truncated:S,output:r}}var m=e=>{let t=e.replace(/\s+/g,` `).trim();return t.length>120?`${t.slice(0,119)}…`:t},h=(e,t,n,r)=>{let i=t.map(e=>r?`${e.sheet}!${e.address}`:e.address),a=Math.max(...i.map(e=>e.length)),o=Math.max(...t.map(e=>e.field.length));for(let r=0;r<t.length;r++){let s=t[r];e.push(`${n}${i[r].padEnd(a)} ${s.field.padEnd(o)} ${m(s.text)}`)}};function g(e){let{pattern:t,fields:n,scope:r,matches:i,cellCount:a,sheetsSearched:o,sheetsMatched:s}=e,c=[`grep "${t}" · ${r} · fields ${n.join(`,`)} · ${a} ${a===1?`cell`:`cells`} in ${s} of ${o} ${o===1?`sheet`:`sheets`}`];if(e.output===`count`)for(let t of e.sheets)c.push(` ${t.sheet}: ${t.cells}`);else if(e.output===`sheets`){for(let t of e.sheets)c.push(` ${t.sheet}`);e.sheets.length===0&&c.push(` no matches`)}else if(i.length===0)c.push(` no matches`);else if(e.output===`addresses`)for(let e of i)c.push(` ${e.sheet}!${e.address}`);else{let e=[],t=new Map;for(let n of i){let r=n.context?.range??``,i=t.get(r);i||(i={key:r,heading:n.context?n.context.table?`${n.context.range} · ${n.context.table}`:n.context.range:null,rows:[]},t.set(r,i),e.push(i)),i.rows.push(n)}for(let t of e)t.heading?(c.push(` ${t.heading}`),h(c,t.rows,` `,!1)):h(c,t.rows,` `,!0)}return e.truncated&&c.push(` …truncated at ${a} ${a===1?`cell`:`cells`} · narrow the pattern, or scope the search to one sheet or range`),c.join(`
2
+ `)}var _={name:`grep`,description:`Search cell contents by pattern across a workbook. Returns grid-anchored matches, each tagged with the cell layer it matched. Selection by attribute (fills, formats, features) is the regions read, not grep.`,params:[{name:`pattern`,type:`string`,description:`The regular expression to search for (literal with fixedStrings).`,required:!0,positional:0},{name:`fields`,type:`enum[]`,values:o,defaultValue:s,description:`Cell layers to search: display (number format applied), value (as the formula bar shows it; duplicate of display suppressed per cell), raw (the stored scalar — dates as serials), formula, hyperlink, numberFormat (the format code, e.g. "0.00%").`},{name:`fixedStrings`,type:`boolean`,alias:`F`,defaultValue:!1,description:`Treat the pattern as a literal string, not a regular expression.`},{name:`ignoreCase`,type:`boolean`,alias:`i`,defaultValue:!1,description:`Case-insensitive matching.`},{name:`word`,type:`boolean`,alias:`w`,defaultValue:!1,description:`Require the match to fall on word boundaries (text edges count as edges).`},{name:`invert`,type:`boolean`,alias:`v`,defaultValue:!1,description:`Report cells where no requested field matched. Only cells with text in a requested field are considered — blanks are not findings.`},{name:`scope`,type:`string`,description:`Where to search: a sheet name (globs allowed: "Q*"), a sheet-qualified range (Sheet1!A1:D9), or a bare range applied to every sheet. Defaults to every used range.`},{name:`hidden`,type:`boolean`,defaultValue:!1,description:`Search hidden rows, columns and sheets, which are excluded by default. Naming a hidden sheet in scope always searches it.`},{name:`context`,type:`enum`,values:[`contentful`,`table`],alias:`C`,valueOptional:!0,description:`Annotate and group matches by the block they sit in: contentful (the uniform data region; bare -C means this) or table (enclosing table only). Not a line count — a grid has no ±N lines.`},{name:`maxCount`,type:`number`,alias:`m`,defaultValue:200,description:`Stop after this many matching cells (0 = unlimited). Truncation is always reported, and only when a further match actually exists.`},{name:`output`,type:`enum`,values:[`content`,`addresses`,`count`,`sheets`],defaultValue:`content`,description:`What to return: content (address, layer and text), addresses (one per matched cell), count (per sheet), or sheets (names with a match).`}],run:p,render:g},v=(e,t)=>e<=t+3?e:t,y=e=>{if(!e)return null;let t=String(e.toHex?.()??``);if(!t)return e.toString();let n=/^#FF/i.test(t)&&t.length===9?`#${t.slice(3)}`:t,r=e.toString();if(!r)return n;let i=r.toLowerCase().replace(/^#/,``);return i===n.slice(1).toLowerCase()||i===t.slice(1).toLowerCase()?n:`${n} (${r.replace(/\d+\.\d{4,}/g,e=>String(parseFloat(Number(e).toFixed(2))))})`},b=t=>{let n=t.getFill(),r=n.getType();if(r===e.IFill.Type.None)return null;if(r===e.IFill.Type.Pattern){let t=n,r=t.getPatternType();if(r===e.IFill.BuiltInSheetPattern.None)return null;let i=y(t.getForeground());if(r===e.IFill.BuiltInSheetPattern.Solid)return i?`solid ${i}`:`solid`;let a=y(t.getBackground());return[`${r} pattern`,i,a?`on ${a}`:null].filter(Boolean).join(` `)}let i=y(n.getColor?.());return i?`${r} ${i}`:r},x=e=>{let t=C(e);return t.length>0?t.join(` · `):null},S=new Set([`top`,`left`,`bottom`,`right`]),C=e=>{let t=e.getBorder(),n=[[`top`,t.getTop()],[`left`,t.getLeft()],[`bottom`,t.getBottom()],[`right`,t.getRight()],[`horizontal`,t.getHorizontal()],[`vertical`,t.getVertical()],[`diagonalUp`,t.getDiagonalUp()],[`diagonalDown`,t.getDiagonalDown()]],r=new Map;for(let[e,t]of n){let n=t?.getStyle?.();if(!n||n===`none`)continue;let i=y(t?.getColor?.()),a=i?`${n} ${i}`:n,o=r.get(a);o?o.push(e):r.set(a,[e])}let i=[];for(let[e,t]of r){let n=t.length===4&&t.every(e=>S.has(e));i.push(`${n?`outline`:t.join(`+`)} ${e}`)}return i},w=e=>{let t=e.getNumberFormat();return t&&t!==`General`?t:null},T=(e,t)=>{let n=e.getAlignment(),r=t.getAlignment(),i=[];return n.getHorizontal()!==r.getHorizontal()&&i.push(`h ${n.getHorizontal()}`),n.getVertical()!==r.getVertical()&&i.push(`v ${n.getVertical()}`),n.getOverflow()!==r.getOverflow()&&i.push(n.getOverflow()),n.getIndent()!==r.getIndent()&&i.push(`indent ${n.getIndent()}`),n.getRotation()!==r.getRotation()&&i.push(`rotation ${n.getRotation()}`),i.length>0?i.join(` · `):null},E=(e,t)=>{let n=e.getFont(),r=t.getFont(),i=[];n.getBold()!==r.getBold()&&i.push(n.getBold()?`bold`:`not bold`),n.getItalic()!==r.getItalic()&&i.push(n.getItalic()?`italic`:`not italic`),n.getUnderline()!==r.getUnderline()&&i.push(`underline ${n.getUnderline()}`),n.getStrike()!==r.getStrike()&&i.push(n.getStrike()?`strike`:`not strike`),n.getSize()!==r.getSize()&&i.push(`${n.getSize()}pt`),n.getFamily()!==r.getFamily()&&i.push(n.getFamily());let a=y(n.getColor());return a!==y(r.getColor())&&i.push(a??`no color`),i.length>0?i.join(` · `):null},D=(e,t)=>e.length>t?`${e.slice(0,t-1)}…`:e,O=e=>{if(!e)return null;if(typeof e!=`string`)return y(e);let t=e.replace(/^#/,``);return/^[0-9a-f]{6}$/i.test(t)||/^[0-9a-f]{8}$/i.test(t)?`#${(t.length===8&&/^ff/i.test(t)?t.slice(2):t).toUpperCase()}`:e},k=t=>{if(!t)return null;let n=[],r=(t=>{if(!t)return null;if(typeof t==`string`)return O(t);let n=t.type;if(n===e.IFill.Type.None)return null;if(n===e.IFill.Type.Gradient)return`gradient`;let r=t,i=O(r.foreground??t.color??r.background),a=r.patternType;return[a&&a!==e.IFill.BuiltInSheetPattern.Solid?`${a} pattern`:null,i].filter(Boolean).join(` `)||null})(t.fill);r&&n.push(`fill ${r}`);let i=t.font;if(i){let t=[];(i.weight===void 0?!0===i.bold:i.weight>=600)&&t.push(`bold`),(i.style===void 0?!0===i.italic:i.style===e.IFont.Style.Italic)&&t.push(`italic`),i.strike&&t.push(`strike`),i.underline&&i.underline!==e.IFont.UnderlineStyle.None&&t.push(`underline ${i.underline}`);let r=i.color===`auto`?null:O(i.color);r&&t.push(`text ${r}`),t.length>0&&n.push(t.join(` `))}if(t.numberFormat!==void 0&&t.numberFormat!==null){let e=typeof t.numberFormat==`number`?`numFmt ${t.numberFormat}`:String(t.numberFormat);e&&n.push(e)}return t.border&&n.push(`border`),t.alignment&&n.push(`alignment`),n.length>0?n.join(` · `):null},ee=t=>{let n=t.type??e.IConditionalFormat.ColorStopType.Num,r=t.value,i=r==null||r===``?n:`${n} ${r}`,a=O(t.color);return a?`${i} ${a}`:i},te=t=>{let n=t.type;if(t.type===e.IConditionalFormat.ScaleType.DataBar){let e=O(t.color);e&&(n+=` ${e}`)}else t.type===e.IConditionalFormat.ScaleType.IconSet&&(t.iconSet&&(n+=` ${t.iconSet}`),t.reverse&&(n+=` reversed`));let r=(t.stops??[]).map(ee).join(` → `);return r?`${n} · ${r}`:n},ne=`(no rule)`,re=e=>{let t=e.getScale(),n=[];if(t)n.push(te(t));else{n.push(e.getCondition()?.toString()||ne);let t=k(e.getStyle());t&&n.push(`→ ${t}`)}return e.isStopIfTrue()&&n.push(`· stop if true`),D(n.join(` `),90)},ie=e=>{let t=[e.getCondition()?.toString()||ne],n=e.getAlertStyle();return n&&t.push(n),e.isIncludeBlanks()&&t.push(`blanks allowed`),e.isHideDropdown()&&t.push(`no dropdown`),D(t.join(` · `),90)},ae=t=>{if(t?.getOperator()?.getName()!==e.ICondition.BuiltInOperatorNames.InSet)return null;let n=t.getParam()?.items;if(!n)return null;if(typeof n==`string`)return n;let r=n.slice(0,20).map(e=>a(e)?.match??``),i=n.length-r.length;return i>0?`${r.join(`, `)}, +${i} more`:r.join(`, `)},A=(e,t)=>{if(e.length===0)return null;let n=e.slice(0,3).map(t),r=e.length-n.length;return r>0?`${n.join(` | `)} | +${r} more`:n.join(` | `)},j=e.ICellRange.Feature;function M(e,n){let r=n?.maxSeries??24,a=n?.maxProfileCells??2e4,o=n?.maxCategories??3,s=e.getRowCount(),c=e.getColumnCount();if(s===1&&c===1)return{shape:`cell`,summary:`cell · ${i(e.getCell(),t.Mode.Display)?.display??`(blank)`}`,series:[]};let l=e.getRange(),u=l.getCoords(),d=s>=c;if(s===1||c===1)return{shape:`list`,summary:`list · ${ce(l,o)}`,series:[]};let f=function(e,t){let n=e.getRange(),r=n.getCoords(),i=e.getCell().getTable();if(i){let e=i.getColumns().map(e=>e.getName());return{present:!0,inside:!0,note:`table "${i.getName()}"`,names:t?e:null}}let a=t?r.rowStart+1:r.colStart+1,o=N(t?n.getRangeAt(a,r.colStart,r.rowEnd,r.colEnd):n.getRangeAt(r.rowStart,a,r.rowEnd,r.colEnd)),s=t?n.getRangeAt(r.rowStart,r.colStart,r.rowStart,r.colEnd):n.getRangeAt(r.rowStart,r.colStart,r.rowEnd,r.colStart);if(N(s)&&!o)return{present:!0,inside:!0,note:`header `+(t?`row ${r.rowStart+1}`:`column ${me(r.colStart)}`),names:oe(s,e,t)};let c=(t?r.rowStart:r.colStart)-1;if(c>=0&&!N(n)){let i=t?n.getRangeAt(c,r.colStart,c,r.colEnd):n.getRangeAt(r.rowStart,c,r.rowEnd,c);if(N(i))return{present:!0,inside:!1,note:`header ${t?`row ${c+1}`:`column ${me(c)}`} (above this block)`,names:oe(i,e,t)}}return{present:!1,inside:!1,note:`no header detected`,names:null}}(e,d),p=d?c:s,m=d?``:` · by row`,h=f.present&&f.inside,g=d&&h?u.rowStart+1:u.rowStart,_=!d&&h?u.colStart+1:u.colStart,v=u.rowEnd-g+1,y=u.colEnd-_+1,b=v*y>a,x=b&&d?Math.max(1,Math.floor(a/Math.max(1,y))):v,S=b&&!d?Math.max(1,Math.floor(a/Math.max(1,v))):y,C=Math.min(u.rowEnd,g+x-1),w=Math.min(u.colEnd,_+S-1),T=Math.min(p,r),E=[],D=[];for(let t=0;t<T;t++){let n=d?l.getRangeAt(g,u.colStart+t,C,u.colStart+t):l.getRangeAt(u.rowStart+t,_,u.rowStart+t,w);E.push(se(e,d,t,f.names)),D.push(ce(n,o))}let O=E.length?Math.max(...E.map(e=>e.length)):0,k=E.map((e,t)=>`${e.padEnd(O)} ${D[t]}`);p>T&&k.push(`…${p-T} more ${d?`columns`:`rows`} not profiled · read them with getStats()`);let ee=[f.present?`table${m}`:`block${m}`,f.note];return b&&ee.push(`profiled from the first ${d?`${x} rows`:`${S} columns`} of ${d?v:y}`),{shape:f.present?`table`:`block`,summary:ee.filter(Boolean).join(` · `),series:k}}function N(t){let n=t.getStats({onError:`ignore`}),r=n.getCount();return r>0&&(n.getTypedCounts()[e.ScalarType.String]??0)===r}function oe(e,n,r){let a=n.getRange().getCoords(),o=e.getCoords(),s=r?a.colEnd-a.colStart+1:a.rowEnd-a.rowStart+1,c=[];for(let n=0;n<s;n++){let s=r?e.getRangeAt(o.rowStart,a.colStart+n).getCell():e.getRangeAt(a.rowStart+n,o.colStart).getCell();c.push(i(s,t.Mode.Display)?.match??``)}return c}function se(e,t,n,r){let i=e.getRange().getCoords(),a=t?me(i.colStart+n):String(i.rowStart+n+1),o=r?.[n];return o?`${a} ${o}`:a}function ce(t,n=3){let r=t.getStats({onError:`ignore`}),i=r.getTypedCounts(),a=r.getCount(),o=r.getSize(),s=o-a;if(a===0)return`${o} cells, all blank`;let c=t.getCounts([j.Formula])[j.Formula]??0,l=ue(t),u=i[e.ScalarType.Number]??0,d=i[e.ScalarType.String]??0,f=i[e.ScalarType.Error]??0,p=[String(a)],m=!1;if(c===a){let e=[...t.getRegions(j.Formula)];if(e.length===1){let t=e[0].getCell().getFormulaText();p.push(`formula`,t?`=${t}`:`(uniform)`)}else p.push(`formula`,`${e.length} distinct`)}else if(l===a)p.push(`date`,de(r,t));else if(u===a)p.push(`number`,de(r,t),...fe(r,t));else if(d===a)p.push(`text`,pe(r,n));else{let t=[u?`number ${u}`:null,d?`text ${d}`:null,i[e.ScalarType.Boolean]?`boolean ${i[e.ScalarType.Boolean]}`:null,f?`error ${f}`:null].filter(Boolean);p.push(`mixed`,t.join(` · `)),m=!0}let h=[f>0&&!m?`error ${f}`:null,s>0?`${s} blank`:null,c>0&&c!==a?`${c} formula`:null].filter(Boolean),g=p.filter(Boolean).join(` `);return h.length?`${g} · ${h.join(` · `)}`:g}function le(t,n=3){let r=t.getStats({onError:`ignore`}),i=r.getTypedCounts(),a=[],o=i[e.ScalarType.Number]??0;if(o>0){let e=[de(r,t),...fe(r,t)].filter(Boolean);a.push(`Number: ${o} ${e.join(` `)}`.trimEnd())}let s=i[e.ScalarType.String]??0;if(s>0){let e=pe(r,n,e=>typeof e==`string`);a.push(`String: ${s} ${e}`.trimEnd())}let c=i[e.ScalarType.Boolean]??0;if(c>0){let e=pe(r,n,e=>typeof e==`boolean`);a.push(`Boolean: ${c} ${e}`.trimEnd())}return a}function ue(t){let n=0;return t.forEach((t,r)=>{r.getInteropType()===e.InteropScalarType.Date&&n++}),n}function de(e,t){let n=e.getAggregates({onError:`ignore`});if(n.min===null||n.max===null)return``;let i=t.getStyle().getNumberFormat(),a=r(n.min,i),o=r(n.max,i);return a===o?a:`${a} … ${o}`}function fe(e,t){let n=e.getAggregates({onError:`ignore`}),i=t.getStyle().getNumberFormat(),a=[];return n.sum!==null&&a.push(`Σ ${r(n.sum,i)}`),n.average!==null&&a.push(`x̄ ${r(n.average,i)}`),a}function pe(e,t,n){let r=e.getFrequencies(n?{filterFn:n}:void 0),i=r.getUniqueCount();if(i===0)return``;if(i===r.getTotalCount())return`${i} distinct, no repeats`;let a=Array.from(r.getValueCounts()).slice(0,t);return`${i} unique (${a.map(([e,t])=>`${e} ${t}`).join(` · `)}${i>a.length?` · …`:``})`}function me(e){let t=e,n=``;do n=String.fromCharCode(65+t%26)+n,t=Math.floor(t/26)-1;while(t>=0);return n}var P=e.ICellRange.Feature,F=e=>e.getRange().getStyle(),he=e=>i(e.getCell(),t.Mode.Display)?.display??null;function ge(e,t){switch(e){case P.Formula:return e=>{let t=e.getCell().getFormulaText();return t?`=${t}`:null};case P.Error:return he;case P.CalcError:return e=>{let t=he(e)??``,n=e.getCell().getFormulaText();return(n?`${t} =${n}`:t).trim()||null};case P.Merge:return he;case P.Comments:return e=>{let t=e.getCell().getComments()?.content;if(typeof t!=`string`)return null;let n=t.replace(/\s+/g,` `).trim();return n?n.length>60?`${n.slice(0,59)}…`:n:null};case P.Spills:return e=>e.getCell().getSpill()?.getValuesRange().toString()??null;case P.Hyperlink:return e=>e.getCell().getHyperlink()?.getAddress()??null;case P.Table:return e=>e.getCell().getTable()?.getName()??null;case P.Fill:return e=>b(F(e));case P.Border:return e=>x(F(e));case P.NumberFormat:return e=>w(F(e));case P.Alignment:return t?e=>T(F(e),t):void 0;case P.Font:return t?e=>E(F(e),t):void 0;case P.Conditionals:return e=>A(e.getRange().getConditionalFormats(),re);case P.DataValidations:return e=>A(e.getRange().getDataValidations(),ie);case P.Contentful:return e=>le(e.getRange()).join(` `)||null;default:return}}function _e(e,t){let n=e.map(e=>ge(e,t)).filter(e=>!!e);if(n.length!==0)return n.length===1?n[0]:e=>{let t=n.map(t=>t(e)).filter(Boolean);return t.length>0?t.join(` `):null}}var I=class{constructor(){this._lines=[],this._headingOffset=0}setHeadingOffset(e){return this._headingOffset=e,this}_heading(e,t){return this._lines.push(`${`#`.repeat(Math.min(6,e+this._headingOffset))} ${t}`),this}h1(e){return this._heading(1,e)}h2(e){return this._heading(2,e)}h3(e){return this._heading(3,e)}text(e){return this._lines.push(e),this}blank(){return this._lines.push(``),this}bullet(e){return typeof e==`string`?this._lines.push(`- ${e}`):e.forEach(e=>this._lines.push(`- ${e}`)),this}fact(e){return typeof e==`string`?this._lines.push(` ${e}`):e.forEach(e=>this._lines.push(` ${e}`)),this}bold(e){return`**${e}**`}codespan(e){return`\`${e}\``}code(e,t=``){return`\`\`\`${t}\n${e}\n\`\`\``}beginFrame(e){return new ve(this,e)}_addLines(e){this._lines.push(...e)}toLines(){return[...this._lines]}},ve=class{constructor(e,t){this._parent=e,this._headers=t,this._indexWidth=0,this._rows=[],this._colWidths=t.map(e=>e.length)}addRow(e,t){let n=e.map(e=>typeof e==`string`?{text:e}:e);return n.forEach((e,t)=>{this._colWidths[t]=Math.max(this._colWidths[t]??0,e.text.length)}),t!==void 0&&(this._indexWidth=Math.max(this._indexWidth,t.length)),this._rows.push({index:t,cells:n}),this}endFrame(){return this._parent._addLines(this._renderLines()),this._parent}_columnAlignment(e){let t=0,n=0;for(let r of this._rows){let i=r.cells[e];i&&i.text&&(n++,i.alignment===`right`&&t++)}return n>0&&2*t>=n?`right`:void 0}_renderLines(){let e=this._indexWidth>0?` `.repeat(this._indexWidth):``,t=this._colWidths.map((e,t)=>this._columnAlignment(t)),n=[];if(this._headers.some(e=>e.length>0)){let r=this._headers.map((e,n)=>ye(e,this._colWidths[n],t[n])).join(` `);n.push(`${e}${e?` `:``}${r}`.trimEnd())}for(let e of this._rows){let t=e.cells.map((e,t)=>ye(e.text,this._colWidths[t],e.alignment)).join(` `),r=this._indexWidth>0?(e.index??``).padStart(this._indexWidth)+` `:``;n.push(`${r}${t}`.trimEnd())}return n}},ye=(e,t,n)=>{if(e.length>=t)return e;let r=t-e.length;return n===`right`?e.padStart(t):n===`center`?` `.repeat(Math.floor(r/2))+e+` `.repeat(Math.ceil(r/2)):e.padEnd(t)};function be(e,t,n){let r=v(t.length,n?.maxRegions??200),i=t.length>r?t.slice(0,r):t,a=i.length<t.length;if(i.length===0)return void e.text(`None`);let o=i.map(e=>e.toString()),s=Math.max(...o.map(e=>e.length)),c=i.map(e=>`${e.getRowCount()}×${e.getColumnCount()}`),l=Math.max(...c.map(e=>e.length)),u=n?.profile?n?.maxProfiled??12:0;for(let t=0;t<i.length;t++){let r=i[t],a=n?.payload?.(r),d=r.isClipped()?` ✂ clipped at the query edge — the block continues`:``,f=` ${o[t].padEnd(s)} ${c[t].padEnd(l)}`;if(t<u){let t=M(r,n);e.text(`${f} ${t.summary}${d}`);for(let n of t.series)e.text(` ${n}`);continue}e.text(a?`${f} ${a}${d}`:`${f}${d}`.trimEnd())}if(u>0&&i.length>u&&e.text(` …${i.length-u} more regions listed but not profiled · profile one with getRange().getStats(), or loop them in code`),a){let i=n?.recovery??`narrow the range, or loop the regions in code — this listing is a report, not the query`;e.text(` …truncated at ${r} of ${t.length} regions · ${i}`)}}function xe(t,n){let r=[...t],i=t.getFeatures(),a=i.join(`, `),o=i.length===1&&i[0]===e.ICellRange.Feature.Contentful,s=t.getRange().getSheet().getWorkbook()?.getStyles().getNormal()??null,c=new I;return c.h1(`Regions — ${a} (${r.length})`),be(c,r,{...n,profile:o,payload:o?void 0:_e(i,s)}),c.toLines().join(`
3
+ `).trimEnd()}function Se(e,t){let n=t.getRange();e.text(`Name: ${t.getName()}`);let r=t.getDescription();r&&e.text(`Description: ${r}`);let i=n.getRowCount(),a=n.getColumnCount();e.text(`Location: ${n.toString()}, ${i} row${i===1?``:`s`} x ${a} column${a===1?``:`s`}`);let o=t.getColumns().map(e=>e.getName());e.text(`Columns (${o.length}): ${o.join(`, `)}`),e.text(`Headers: `+(t.isShowHeaders()?`shown`:`hidden`)),e.text(`Totals: `+(t.isShowTotals()?`shown`:`hidden`))}function Ce(e){let t=new I;return t.h1(`Table — ${e.getName()}`),t.text(`Sheet: ${z(e.getRange().getSheet().getName())}`),t.blank(),Se(t,e),t.toLines().join(`
4
+ `).trimEnd()}var L=e.ICellRange.Feature,we=[L.Error,L.CalcError,L.Contentful,L.Formula,L.Spills,L.Merge,L.Table,L.AutoTable,L.Hyperlink,L.Comments,L.Unlock,L.NumberFormat,L.Font,L.Fill,L.Border,L.Alignment,L.Conditionals,L.DataValidations],Te=new Map(Object.entries(L).map(([e,t])=>[t,e])),Ee=e=>Te.get(e)??e;function De(e){let t=new Map(Object.values(L).map(e=>[e.toLowerCase(),e])),n=[];for(let r of e.split(`,`)){let e=r.trim();if(!e)continue;let i=t.get(e.toLowerCase());if(!i)throw Error(`Unknown feature '${e}'. Features: ${Object.values(L).join(`, `)}.`);n.push(i)}return n}var R=e=>`${e.toString()}, ${e.getRowCount()}×${e.getColumnCount()}`,z=t=>e.AddressUtils.sheetNameToString(t)??`Untitled`,Oe=e=>`wb.getSheet(${JSON.stringify(e.getSheet().getName())})`,B=e=>(e=>{if(!e.includes(`$`))return e;let t=``,n=!1;for(let r of e){if(r===`'`)n=!n;else if(r===`$`&&!n)continue;t+=r}return t})(e.getAddress()),V=e=>{let t=B(e);return t.includes(`!`)?t:`${z(e.getSheet().getName())}!${t}`},H=e=>{let t=e.toString();return`${t.includes(`!`)?t:`${z(e.getSheet().getName())}!${t}`}, ${e.getRowCount()}×${e.getColumnCount()}`};function U(t,n){let r=n.getStats({onError:`ignore`}),i=r.getTypedCounts(),a=ue(n),o=[[`Error`,i[e.ScalarType.Error]??0],[`Number`,i[e.ScalarType.Number]??0],[`String`,i[e.ScalarType.String]??0],[`Date`,a],[`Boolean`,i[e.ScalarType.Boolean]??0],[`RichData`,i[e.ScalarType.RichData]??0]].filter(([,e])=>e>0),s=r.getCount();t.h2(`Kind (${s} cell${s===1?``:`s`} · ${o.length} kind${o.length===1?``:`s`})`);for(let[e,n]of o)t.fact(`${e}: ${n}`);o.length===0&&t.fact(`None`),t.blank()}function ke(e,t,n){let r=t.getSheet().getWorkbook()?.getStyles().getNormal()??null,i=n?.features===void 0?null:new Set(typeof n.features==`string`?[n.features]:n.features),a=we.filter(e=>!i||i.has(e));if(a.length===0)return;let o=t.getCounts(a);for(let i of a){let a=[...t.getRegions(i)];if(a.length===0)continue;let s=!!n?.profile&&i===L.Contentful;e.h2(`${Ee(i)} (${Ae(a.length,o[i])})`),be(e,a,{maxRegions:n?.maxRegions,maxProfiled:n?.maxProfiled,profile:s,payload:s?void 0:ge(i,r),recovery:`${Oe(t)}.getRegions(${JSON.stringify(i)}) lists all ${a.length}`}),e.blank()}}var Ae=(e,t)=>`${t} cell${t===1?``:`s`} · ${e} region${e===1?``:`s`}`,je=(e,t)=>e.length>t?`${e.slice(0,t-1)}…`:e,Me=e=>e.isIFormula?e:null,W=e=>{let t=e.getScope();return t?`${z(t)}!${e.getName()}`:e.getName()},Ne=e=>{let t=e.getAddress();return t.includes(`!`)?t:`${z(e.getSheet().getName())}!${t}`};function Pe(e){let t=Me(e),n;return n=t?`=`+t.getExpression():e.getRanges?.()?.getAddress()??``,t?.isVolatile()&&(n+=` (volatile)`),n.trim()}var Fe=new Set([e.FormulaError.Code.Ref,e.FormulaError.Code.Name]),Ie=t=>{let n=t.value,r=e.FormulaError.isError(n)?n:n?.error;return r&&Fe.has(r.getCode())?r.getCode()===e.FormulaError.Code.Name?`#NAME?`:`#REF!`:null},Le=new Set,Re=e=>{let t=e.value;return typeof t==`object`&&t?.name?t.name:e.text??``};function ze(e){let t=null;for(let n=0;n<e.length;n++){let r=e[n];if(r.type!==`named`||!r.context)continue;let i=r.context.name?.toUpperCase();if(i!==`LAMBDA`&&(i!==`LET`||r.context.argIndex%2!=0))continue;let a=n+1;for(;a<e.length&&e[a].type===`whitespace`;)a++;if(e[a]?.type!==`separator`)continue;let o=Re(r).toLowerCase();o&&(t??=new Set).add(o)}return t??Le}function G(e,t,n){if(t.length===0)return;let r=new Set;for(let e of n?.symbols??t)r.add(e.getName().toLowerCase());let i=new Map,a=new Set;for(let e of t)i.set(e.getId(),e),e.getScope()&&a.add(e.getName().toLowerCase());let o=t.map(e=>{let t=function(e,t){let n=Me(e),r=[];if(n){let e=n.getTokens(),i=null,a=null;for(let n of e){if(n.type===`error`){a??=Ie(n);continue}if(n.type!==`named`)continue;let o=Re(n);o&&!t.has(o.toLowerCase())&&(i??=ze(e),i.has(o.toLowerCase())||r.includes(o)||r.push(o))}if(a||r.length>0)return{broken:!0,missing:r,error:r.length>0?`#NAME?: ${r.join(`, `)}`:a};if(!n.isReferenceOnly())return{broken:!1,missing:r,error:``}}let i=null;try{i=e.getRanges?.()??null}catch{return{broken:!0,missing:r,error:`#REF!`}}let a=!i||i.isInvalidAny();return{broken:a,missing:r,error:a?`#REF!`:``}}(e,r),n=Me(e),o=n?function(e,t){let n=e.getDirectDependents(),r=0,i=[],a=new Set,o=[];if(n){let e=n.getCoords(),s=n.getCount();for(let c=0;c<s;c++){let s=n.at(c);if(s.isINamedRange){let e=s;if(a.has(e.getId()))continue;a.add(e.getId());let n=t.get(e.getId());i.push(n?W(n):e.getName())}else{let t=e[c];r+=(t.rowEnd-t.rowStart+1)*(t.colEnd-t.colStart+1),o.push(Ne(s))}}}let s=r+i.length;if(s===0)return{text:`unused`,weight:s};let c=[...i,...o],l=[],u=0;for(let e=0;e<c.length;e++){let t=(l.length>0?2:0)+c[e].length;if(l.length>0&&u+t>60)break;l.push(l.length===0?je(c[e],60):c[e]),u+=t}let d=c.length-l.length,f=d>0?`, +${d} more`:``;return{text:`${s} · ${l.join(`, `)}${f}`,weight:s}}(n,i):null;o?.weight===0&&!e.getScope()&&a.has(e.getName().toLowerCase())&&(o={...o,text:`unused · shadowed`});let s=e.getComment()??``,c=W(e);return{name:c,refersTo:Pe(e),dependents:o,hidden:e.isHidden(),comment:je(s,60),broken:t.broken,error:t.error,sortKey:c.toLowerCase().replace(/'/g,``)}}),s=(e,t)=>{let n=(t.dependents?.weight??0)-(e.dependents?.weight??0);return n===0?e.sortKey.localeCompare(t.sortKey):n},c=[...o.filter(e=>e.broken).sort(s),...o.filter(e=>!e.broken).sort(s)],l=v(c.length,n?.maxNames??200),u=c.length>l?c.slice(0,l):c,d=u.filter(e=>e.broken),f=u.filter(e=>!e.broken);e.h2(`${n?.heading??`Names`} (${o.length})`);let p=(t,n)=>{let r=t.some(e=>e.hidden),i=t.some(e=>e.comment.length>0),a=t.some(e=>e.dependents!==null),o=[`Name`,`Refers To`];n&&o.push(`Error`),a&&o.push(`Dependents`),r&&o.push(`Hidden`),i&&o.push(`Comment`);let s=e.beginFrame(o);for(let e of t){let t=[{text:e.name},{text:e.refersTo}];n&&t.push({text:e.error}),a&&t.push({text:e.dependents?.text??``}),r&&t.push({text:e.hidden?`hidden`:``}),i&&t.push({text:e.comment}),s.addRow(t)}s.endFrame()};if(d.length>0){let t=c.reduce((e,t)=>e+ +!!t.broken,0);e.text(`${t} ${t===1?`does`:`do`} not resolve:`),p(d,!0),e.blank()}if(f.length>0&&p(f,!1),u.length<o.length){let t=n?.recovery??`getByName('Name') renders one in full`;e.text(` …and ${o.length-u.length} more · ${t}`)}e.blank()}function K(e,t,n){Ve(e,`Precedents`,t,`precedents`,n),Ve(e,`Dependents`,t,`dependents`,n)}function Be(e){let t=e.isINamedRange?e.getId():null;if(t)return`name:${t}`;let n=e.getCoords();return`${e.getSheet()?.getName()??``}!${n.rowStart},${n.colStart},${n.rowEnd},${n.colEnd}`}function Ve(e,t,n,r,i){let a=i?.maxDepth??3,o=i?.maxNodes??50,s=[],c=new Set,l=new Set,u=!1,d=!1,f=!1,p=(e,t)=>{let n=(e=>r===`precedents`?e.getDirectPrecedents():e.getDirectDependents())(e);if(n&&n.length!==0)if(t>a)u=!0;else for(let e=0;e<n.length;e++){if(s.length>=o)return void(d=!0);let r=n.at(e),{address:i,sheet:a,isName:u}=He(r),m=` `.repeat(t),h=Be(r),g={indent:m,sheet:a,isName:u,label:`${m}${i}`};l.has(h)?(s.push({...g,detail:`↺ circular`}),f=!0):c.has(h)?s.push({...g,detail:`↑ shown above`}):(c.add(h),l.add(h),s.push({...g,detail:Ue(r)}),p(r,t+1),l.delete(h))}};if(p(n,0),s.length===0)return;let m=s.filter(e=>!e.isName);if(m.length>0&&m.some(e=>e.sheet!==m[0].sheet))for(let e of s)e.isName||(e.label=`${e.indent}${e.sheet}!${e.label.slice(e.indent.length)}`);e.h2(t);let h=Math.max(...s.map(e=>e.label.length));for(let t of s)e.text(` ${t.label.padEnd(h)} ${t.detail}`.trimEnd());f&&e.text(` ↺ circular reference — the chain returns to a cell already on this branch`);let g=r===`precedents`?`getPrecedents()`:`getDependents()`;if(u&&e.text(` …deeper levels not walked · ${g} is the whole reach, flat`),d){let t=r===`precedents`?`getDirectPrecedents()`:`getDirectDependents()`;e.text(` …truncated at ${o} nodes · re-root on one node and walk it — its ${t}`)}e.blank()}function He(e){let t=e.getSheet()?.getName()??``;if(e.isINamedRange)return{address:e.getName(),sheet:t,isName:!0};let n=e.getAddress(),r=n.lastIndexOf(`!`);return{address:r>=0&&r<n.length-1?n.slice(r+1):n,sheet:t,isName:!1}}function Ue(e){if(e.isINamedRange){let t=e.getRanges();return t?`name → ${t.getAddress()}`:`name`}if(e.isSingleCell()){let n=e.getCell(),r=i(n,t.Mode.Display),a=n.getFormulaText(),o=r?r.display:`(empty)`;return a?`${o} =${a}`:o}let n=`${e.getRowCount()}×${e.getColumnCount()}`,r=[...e.getRegions(L.Formula)];if(r.length===1&&r[0].getRange().isEqual(e)){let e=r[0].getCell().getFormulaText();if(e)return`${n} =${e}`}return n}function We(e,t,n){let r=n.getCoords().min,i=[],a=0,o=0;if(n.forEachSpan((e,t)=>{let s=t.getCoords();if(o++,a+=s.max-s.min+1,i.length>=100)return;let c=n.at(s.min-r).getText(),l=n.at(s.max-r).getText();i.push({address:`${c}:${l}`,count:s.max-s.min+1})},{visibility:`hidden`,includeEmpty:!0}),a===0)return;e.h2(`${t} (${a})`);let s=Math.max(...i.map(e=>e.address.length));for(let t of i)e.text(` ${t.address.padEnd(s)} ${t.count}`);o>i.length&&e.text(` …and ${o-i.length} more`),e.blank()}function Ge(e,t,n,r){if(n.length===0)return;let i=n.length>50?n.slice(0,50):n,a=i.map(e=>({address:je(B(e.getRanges()),40),rule:r(e)}));e.h2(`${t} (${n.length})`);let o=Math.max(...a.map(e=>e.address.length));for(let t of a)e.text(` ${t.address.padEnd(o)} ${t.rule}`.trimEnd());i.length<n.length&&e.text(` …and ${n.length-i.length} more`),e.blank()}function q(e,t){let n=t.getSheet(),r=t.getCoords(),i=n.getName(),a=[];for(let e of n.getNames().getItems({type:`formula`,includeHidden:!0})??[]){let t=null;try{t=e.getRanges?.()??null}catch{}t?t.getCoords().some(e=>{return(!e.scope||e.scope===i)&&(n=e,(t=r).rowStart<=n.rowEnd&&n.rowStart<=t.rowEnd&&t.colStart<=n.colEnd&&n.colStart<=t.colEnd);var t,n})&&a.push(e):e.getScope()===i&&a.push(e)}G(e,a,{symbols:n.getWorkbook()?.getNames().getItems({includeHidden:!0})??n.getNames().getItems({includeHidden:!0})??[]});let o=t.getColumnHeaders(),s=t.getRowHeaders();We(e,`Hidden Columns`,o),We(e,`Hidden Rows`,s);let c=t.getTables();c.length>0&&(e.h2(`Tables`),c.forEach((t,n)=>{n>0&&e.blank(),Se(e,t)}),e.blank())}var Ke={features:e=>De(e),mode:(e,n)=>function(e,t,n){let r=new Map(Object.values(n).map(e=>[e.toLowerCase(),e])).get(e.trim().toLowerCase());if(!r)throw Error(`Unknown ${t} '${e}'. Values: ${Object.values(n).join(`, `)}.`);return r}(e,n,t.Mode)},qe=Object.keys(Ke);function Je(e,n){e=e.getSheet().getRange(e.getCoords()).getCell();let r=new I;return r.h1(`Cell — ${z(e.getSheet().getName())}!${e.getAddress()}`),r.blank(),function(e,n){let r=i(n,t.Mode.Display),a=i(n,t.Mode.Value),o=n.getFormulaText(),s=e.toLines().length;(r||o)&&(e.fact(`Type: ${n.getType()}`),r&&e.fact(`Display: ${r.display}`),a&&a.match!==r?.match&&e.fact(`Value: ${a.display}`),o&&e.fact(`Formula: ${e.codespan(`=${o}`)}`));let c=n.getHyperlink();c&&e.fact(`Hyperlink: ${c.getAddress()}`);let l=n.getSpans(),u=!n.isTopLeft();if(u||l.height>1||l.width>1){let t=n.getRange().toString();e.fact(`Merge: ${t} · ${l.height}×${l.width}`),u&&e.fact(`Merge Anchor: false — this cell is covered; the value lives at the top-left`)}let d=n.getSpill();d&&e.fact(`Spill: ${d.toString()}`),n.isSpillOverflow()&&e.fact(`Spill Overflow: true — the anchor formula is elsewhere`);let f=n.getTable();f&&e.fact(`Table: ${f.getName()}`);let p=n.getErrors();p.length>0&&e.fact(`Errors: ${p.join(`; `)}`);let m=n.getWarnings();m.length>0&&e.fact(`Warnings: ${m.join(`; `)}`),e.toLines().length>s&&e.blank()}(r,e),function(e,t){let n=t.getStyle(),r=t.getSheet().getWorkbook()?.getStyles().getNormal()??null,i=w(n),a=r?E(n,r):null,o=b(n),s=C(n),c=r?T(n,r):null,l=n.getNamed().getName();if(l!==(r?.getNamed().getName()??`Normal`)||i||a||o||c||s.length!==0){if(e.h2(`Style`),e.fact(`Named: ${l}`),i&&e.fact(`Number Format: ${i}`),a&&e.fact(`Font: ${a}`),o&&e.fact(`Fill: ${o}`),s.length===1)e.fact(`Border: ${s[0]}`);else if(s.length>1){e.fact(`Border:`);for(let t of s)e.fact(` ${t}`)}c&&e.fact(`Alignment: ${c}`),e.blank()}}(r,e),K(r,e,n),r.toLines().join(`
5
+ `).trimEnd()}var Ye=new Set([`picture`]),Xe=e=>e.replace(/[\r\n]+/g,` `).trim(),Ze=e=>{switch(e.getType()){case`chart`:{let t=[],n=e.getChartType?.();n&&n!==`unknown`&&t.push(n);let r=e.getChartTitle?.();return r&&t.push(`"${r}"`),t.length>0?t.join(` · `):null}case`picture`:return e.getResource?.()?.getName()||null;default:return null}},Qe=e=>{let t=e.getContent(),n=[],r=Ze(t);r&&n.push(r);let i=e.getDescription();i&&n.push(Xe(i));let a=e.getName()||`(unnamed)`,o=n.length>0?`${a} — ${n.join(` · `)}`:a;return c=90,((s=o).length>c?`${s.slice(0,c-1)}…`:s)+(e.isHidden()?` (hidden)`:``);var s,c};function $e(e,t){if(t.length===0)return;let n=t.length>50?t.slice(0,50):t,r=n.map(e=>({address:e.getRange().toString(),type:e.getContent().getType(),summary:Qe(e)}));e.h2(`Movables (${t.length})`);let i=Math.max(...r.map(e=>e.address.length)),a=Math.max(...r.map(e=>e.type.length));for(let t of r)e.text(` ${t.address.padEnd(i)} ${t.type.padEnd(a)} ${t.summary}`.trimEnd());n.length<t.length&&e.text(` …and ${t.length-n.length} more`);let o=[...new Set(r.map(e=>e.type).filter(e=>!Ye.has(e)))];o.length>0&&e.text(` Not drawn: ${o.join(`, `)} — SheetXL shows a labeled placeholder for these in the UI.`),e.blank()}function et(t){let n=new I,r=t.getRange(),i=t.getContent(),a=i.getType();n.h1(`Movable — ${H(r)}`),n.blank(),n.fact(`Name: ${t.getName()||`(unnamed)`}`),n.fact(`Type: ${a}`);let o=Ze(i);o&&n.fact(`Content: ${o}`);let s=t.getDescription();s&&n.fact(`Alt Text: ${Xe(s)}`),n.fact(`Anchor: ${R(r)}, ${(t=>{switch(t){case e.IAnchored.Type.Absolute:return`absolute — stays put when rows or columns move`;case e.IAnchored.Type.OneCell:return`oneCell — moves with the cells, keeps its size`;default:return`twoCell — moves and resizes with the cells`}})(t.getAnchorType?.())}`),n.fact(`Bounds: ${(e=>{let t=e.getBounds();if(!t)return`not laid out`;let n=e=>Math.round(e);return`${n(t.width)}×${n(t.height)} px at (${n(t.x)}, ${n(t.y)})`})(t)}`),t.isHidden()&&n.fact(`Hidden: true — this object is not visible in the UI`);let c=t.getRotation();return c!==0&&n.fact(`Rotation: ${c}°`),n.fact(`Z-Order: ${t.getZIndex()}`),n.fact(`Display: ${(e=>Ye.has(e)?`drawn`:`placeholder — SheetXL frames the ${e} at this position but does not draw its content`)(a)}`),n.blank(),n.text(`Sheet: ${z(r.getSheet().getName())}`),n.toLines().join(`
6
+ `).trimEnd()}function tt(n,r){let a=new I;a.h1(`Cell Range — ${H(n)}`),a.blank(),U(a,n),function(e,t,n){if(!1===n?.profile||t.isSingleCell()||!t.isContentful())return;let r=M({getRowCount:()=>t.getRowCount(),getColumnCount:()=>t.getColumnCount(),getCell:()=>t.getCell(),getRange:()=>t},n);e.h2(`Profile`),e.text(r.summary);for(let t of r.series)e.text(` ${t}`);e.blank()}(a,n,r);let o=function(e,n,r){let a=r?.mode??t.Mode.Display,o=r?.maxCells??1e3,{rowStart:s,colStart:c}=n.getCoords(),l=n.getRowHeaders(),u=n.getColumnHeaders(),d=new Map,f=[],p=0,m=!1;n.forEach((e,t)=>{if(p>=o)return m=!0,{break:!0};let n=t.getCell(),r=n.getFormulaText(),s=i(n,a);if(!s&&!r)return;let c={text:(s?.display??``).replace(/\|/g,`\\|`).replace(/[\r\n]+/g,` `),alignment:n.getRenderHorizontalAlignment()},l=n.getSpill();l&&f.push({address:n.getAddress(),valuesRange:l.getValuesRange().toString()});let{rowIndex:u,colIndex:h}=t.getCoords(),g=d.get(u);g||(g=new Map,d.set(u,g)),g.set(h,c),p++});let h=Array.from(d.keys()).sort((e,t)=>e-t),g=new Set;d.forEach(e=>e.forEach((e,t)=>g.add(t)));let _=Array.from(g).sort((e,t)=>e-t);if(h.length===0)return{spills:f};let v=n.getIntersect({rowStart:h[0],rowEnd:h[h.length-1],colStart:_[0],colEnd:_[_.length-1]}),y=`${p} cell${p===1?``:`s`}`,b=v.toString()!==n.toString();e.h2(`Values (${b?`${R(v)} · `:``}${y})`);let x=e.beginFrame(_.map(e=>u.at(e-c).getText()));for(let e of h){let t=d.get(e);x.addRow(_.map(e=>t?.get(e)??{text:``}),l.at(e-s).getText())}return x.endFrame(),m&&e.text(`…truncated at ${o} cells · narrow the address, or summarize the whole range with getStats()`),e.blank(),{spills:f}}(a,n,r);return function(t,n,r){let i=[];for(let t of n.getRegions(e.ICellRange.Feature.Formula)){let e=t.getCell().getFormulaText();if(e&&(i.push({address:t.getAddress(),size:`${t.getRowCount()}×${t.getColumnCount()}`,formula:`=${e}`}),i.length>=(r?.maxRegions??100)))break}if(i.length===0)return;t.h2(`Formulas`);let a=Math.max(...i.map(e=>e.address.length)),o=Math.max(...i.map(e=>e.size.length));for(let e of i)t.text(` ${e.address.padEnd(a)} ${e.size.padEnd(o)} ${e.formula}`);t.blank()}(a,n,r),function(e,t){if(t.length===0)return;e.h2(`Spills`);let n=Math.max(...t.map(e=>e.address.length));for(let{address:r,valuesRange:i}of t)e.text(` ${r.padEnd(n)} ${i}`);e.blank()}(a,o.spills),q(a,n),$e(a,n.getMovables()),Ge(a,`Conditional Formats`,n.getConditionalFormats(),re),Ge(a,`Data Validations`,n.getDataValidations(),ie),K(a,n,r),a.toLines().join(`
7
+ `).trimEnd()}function nt(e){let t=new I,n=e.getRanges();t.h1(`Conditional Format — ${V(n)}`),t.blank(),t.fact(`Order: ${e.getIndex()+1}`);let r=e.getScale();if(r)t.fact(`Rule: ${te(r)}`);else{let n=e.getCondition();t.fact(`Rule: ${n?.toString()||`none — this rule tests nothing`}`);let r=k(e.getStyle());r&&t.fact(`Format: ${r}`)}return e.isStopIfTrue()&&t.fact(`Stop If True: true — later rules are not evaluated where this one matches`),t.fact(`Cells: ${n.size}`),t.toLines().join(`
8
+ `).trimEnd()}function rt(e){let t=new I;t.h1(`Counts`);let n=!1;for(let[r,i]of Object.entries(e))i>0&&(t.fact(`${r}: ${i}`),n=!0);return n||t.fact(`None`),t.toLines().join(`
9
+ `).trimEnd()}function it(t){let n=new I,r=t.getRanges();n.h1(`Data Validation — ${V(r)}`),n.blank();let i=t.getCondition();n.fact(`Rule: ${i?.toString()||`none — anything is accepted here`}`);let a=ae(i);a&&n.fact(`Allowed: ${a}`),n.fact(`Blanks: `+(t.isIncludeBlanks()?`allowed`:`rejected`));let o=t.getAlertStyle();if(n.fact(`Alert: ${o}${o===e.IDataValidation.AlertStyle.Stop?` — the entry is refused`:` — the entry is accepted anyway`}`),t.isShowAlertMessage()){let e=at(t.getAlertTitle(),t.getAlertMessage());e&&n.fact(`Alert Message: ${e}`)}if(t.isShowPromptMessage()){let e=at(t.getPromptTitle(),t.getPromptMessage());e&&n.fact(`Prompt: ${e}`)}return t.isHideDropdown()&&n.fact(`Dropdown: hidden`),n.fact(`Cells: ${r.size}`),n.toLines().join(`
10
+ `).trimEnd()}var at=(e,t)=>{let n=[e?.trim(),t?.trim()].filter(Boolean);return n.length>0?n.join(` — `):null},ot=`function`,st=`named`,ct=`tableReference`,lt=`tableColumn`,ut=`externalReference`,dt=[[`isReferenceOnly`,`reference-only`],[`isVolatile`,`volatile`]],ft=(e,t)=>e?` (${z(e)}!${t})`:``;function pt(e,t,n,r){if(e===`external`)return`another workbook — not resolvable from here`;if(!n)return``;switch(e){case`function`:{let e=n.getCalculation().getFunctions().getByName(t);return e?e.isBuiltIn()?`built-in`:`custom`:`unknown — evaluates to #NAME?`}case`named`:return function(e,t){let n=t.getNames(),r=n.getByName(e)??n.getByName(e,!0);if(r){let e=ft(r.getScope(),r.getName()),t=r.getRanges?.();return!t||t.isInvalid()?`defined name — reference does not resolve${e}`:`${t.toString()}${e}`}let i=t.getCalculation().getNamedFormulas().getByName(e);return i?`=${i.getExpression()}${ft(i.getScope(),i.getName())}`:`unknown — evaluates to #NAME?`}(t,n);case`table`:{let e=n.getTables().getByName(t)??n.getWorkbook()?.getSheets().getItems().map(e=>e.getTables().getByName(t)).find(Boolean)??null;return e?((e,t)=>{let n=e.getSheet(),r=e.toString();return!n||t&&n.getName()===t.getName()||r.includes(`!`)?r:`${z(n.getName())}!${r}`})(e.getRange(),n):`unknown — evaluates to #NAME?`}case`column`:{if(!r)return`column of the enclosing table`;let e=n.getTables().getByName(r);if(!e)return`column of ${r}`;let i=t.replace(/^\[|\]$/g,``).trim();return e.getColumns().find(e=>e.getName()===i)?`${r} column`:`no such column in ${r} — evaluates to #REF!`}}return``}async function mt(e,t){let n=t?.maxTokens??200,r=new I,i=(e=>e.isINamed?e:null)(e);if(r.h1(i?`Name — ${W(i)}`:`Formula`),r.text(r.codespan(`=`+e.getExpression())),r.blank(),i){i.isHidden()&&r.fact(`Hidden: true — not offered in the UI; formulas resolve it normally`);let e=i.getComment();e&&r.fact(`Comment: ${e}`);let t=i.getRanges?.();r.fact(`Refers to: ${t?t.getAddress():`no range — this name holds an expression`}`)}await async function(e,t){let n;try{n=await t.evaluate()}catch(t){e.fact(`Value: did not evaluate — ${t?.message??String(t)}`);return}if((r=n)&&typeof r==`object`&&!0===r.isIRange)return void e.fact(`Value: spills ${n.getRowCount()}×${n.getColumnCount()} — an array result`);var r;let i=a(n);e.fact(`Value: ${i?i.display:`(empty)`}`)}(r,e),r.fact(`Status: ${e.getCalculationStatus()}`),e.isValid()||r.fact(`Valid: false — the text did not parse as a complete expression`);let o=dt.filter(([t])=>e[t]()).map(([,e])=>e);o.length>0&&r.fact(`Flags: ${o.join(` · `)}`),r.blank();let s=e.getReferences(),c=t?.context??s?.getSheet()??null,l=function(e,t){let n=new Map,r=null;for(let i of e){let e=i.text?.trim();if(!e)continue;let a;switch(i.type){case ot:a=`function`;break;case st:a=`named`;break;case ct:a=`table`,r=e;break;case lt:a=`column`;break;case ut:a=`external`;break;default:continue}let o=`${a}${e.toLowerCase()}`,s=n.get(o);s?s.uses++:n.set(o,{kind:a,text:e,uses:1,resolution:pt(a,e,t,r)})}return[...n.values()]}(e.getTokens(),c);if(l.length>0){r.h2(`Symbols (${l.length})`);let e=r.beginFrame([`Kind`,`Symbol`,`Uses`,`Resolves to`]);for(let t of l)e.addRow([t.kind,t.text,String(t.uses),t.resolution]);e.endFrame(),c||r.text("…no sheet context — pass `context` to resolve these"),r.blank()}if(r.h2(`References`),s&&s.length!==0)for(let e=0;e<s.length;e++)r.text(` ${String(e).padStart(2)} ${s.at(e).getAddress()}`);else r.text(`None`);r.blank(),i&&function(e,t){t.getDirectDependents()||(e.h2(`Dependents (0)`),e.text(` None — no formula references this name`),e.blank()),K(e,t)}(r,i);let u=e.getTokens();if(r.h2(`Tokens`),u.length===0)r.text(`None`);else{let e=u.length>n?u.slice(0,n):u,t=r.beginFrame([`#`,`Type`,`Text`,`Enclosing`,`Arg`]);for(let n=0;n<e.length;n++){let r=e[n],i=r.context;t.addRow([{text:String(n),alignment:`right`},r.type??``,r.text??``,i?.name??``,i&&i.argIndex>=0?String(i.argIndex):``])}t.endFrame(),e.length<u.length&&r.text(`…truncated at ${e.length} of ${u.length} tokens · search getTokens() directly`)}return r.toLines().join(`
11
+ `).trimEnd()}var ht=[[`formula`,`Names`],[`table`,`Tables`]];function gt(e,t){let n=new I,r=e.getItems({includeHidden:!0})??[];if(n.h1(`Names — ${r.length} item${r.length===1?``:`s`}`),n.blank(),r.length===0)return n.text(`None`),n.toLines().join(`
12
+ `).trimEnd();let i=new Set(ht.map(([e])=>e));for(let[e,i]of ht)G(n,r.filter(t=>t.getType()===e),{...t,heading:i,symbols:r});let a=r.filter(e=>!i.has(e.getType())),o=[...new Set(a.map(e=>e.getType()))].sort();for(let e of o)G(n,a.filter(t=>t.getType()===e),{...t,heading:e,symbols:r});return n.toLines().join(`
13
+ `).trimEnd()}var J=e=>{if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null};function Y(e,t){let n=t?.maxCells??1e3,r=Array.isArray(e)?e:[e],i=new I;if(i.h1(`Records`),i.text(`Count: ${r.length}`),i.blank(),r.length===0)return i.text(`None`),i.toLines().join(`
14
+ `).trimEnd();let a=e=>{let t=[],n=new Set;for(let r of e)for(let e of Object.keys(r??{}))n.has(e)||(n.add(e),t.push(e));return t},o=Math.max(1,a(r).length),s=v(r.length,Math.max(1,Math.floor(n/o))),c=r.length>s?r.slice(0,s):r,l=c.length===r.length?a(r):a(c);if(l.length===0)return i.text(`No fields`),i.toLines().join(`
15
+ `).trimEnd();let u=i.beginFrame(l);for(let e of c)u.addRow(l.map(t=>_t(e?.[t])));return u.endFrame(),c.length<r.length&&i.text(`…truncated at ${c.length} of ${r.length} records · filter, sort or aggregate the array in the expression`),i.toLines().join(`
16
+ `).trimEnd()}var _t=e=>{if(e==null)return{text:``};if(typeof e==`function`)return{text:`[Function]`};if(typeof e==`bigint`||typeof e==`symbol`)return{text:X(String(e))};if(typeof e==`object`){if(e instanceof Date)return{text:e.toISOString()};let t=e;if(!0===t.isFormulaError||!0===t.isIRichData)return{text:X(vt(e))};if(J(e)||Array.isArray(e)){let t;try{t=JSON.stringify(e)??String(e)}catch{t=`[circular]`}return{text:X(t)}}return{text:X(String(e))}}let t=X(vt(e).replace(/[\r\n]+/g,` `));return typeof e==`number`?{text:t,alignment:`right`}:{text:t}},vt=e=>{try{return a(e)?.match??String(e)}catch{return String(e)}},X=e=>e.length>80?`${e.slice(0,79)}…`:e;function yt(e,t){let n=e.length,r=v(n,t?.maxRanges??100),i=Math.min(n,r),a=[];for(let t=0;t<i;t++){let n=e.at(t);a.push({...He(n),detail:Ue(n)})}let o=a.filter(e=>!e.isName),s=o.length>0&&o.some(e=>e.sheet!==o[0].sheet),c=o.length>0?o[0].sheet:e.getSheet()?.getName(),l=new I,u=a.length>0&&!s&&!!c;if(l.h1(u?`Ranges — ${z(c)} (${n})`:`Ranges (${n})`),a.length===0)return l.text(`none`),l.toLines().join(`
17
+ `).trimEnd();let d=a.map(e=>s&&!e.isName?`${z(e.sheet)}!${e.address}`:e.address),f=Math.max(...d.map(e=>e.length));for(let e=0;e<a.length;e++)l.text(` ${d[e].padEnd(f)} ${a[e].detail}`.trimEnd());return i<n&&l.text(` …and ${n-i} more · loop the collection in code to see them all`),l.toLines().join(`
18
+ `).trimEnd()}function bt(t,n){let r=new I,i=t.getSelectedRange(),a=t.getUsedRange();r.h1(`Sheet — ${z(t.getName())}${function(t){let n=t.getWorkbook(),r=``;n&&n.getSelectedSheet()?.getId()===t.getId()&&(r+=` (selected)`);let i=t.getVisibility();return i===e.ISheet.Visibility.Hidden?r+=` (hidden)`:i===e.ISheet.Visibility.VeryHidden&&(r+=` (very hidden)`),r}(t)}`),r.text(`Used: ${a?R(a):`empty`}`),r.text(`Selection: ${R(i)}`),r.blank();let o=a??i;return U(r,o),ke(r,o,{profile:!0,...n}),q(r,o),$e(r,t.getMovables().getItems()),r.toLines().join(`
19
+ `).trimEnd()}var xt=[[`numericalCount`,`Numbers`],[`sum`,`Sum`],[`min`,`Min`],[`max`,`Max`],[`average`,`Average`],[`stdDev`,`StdDev`]];function St(t){let r=new I;r.h1(`Stats`);let i=t.getTypedCounts();r.fact(`Cells: ${t.getSize()}`),r.fact(`Values: ${t.getCount()}`);let a=i[e.ScalarType.Error]??0;a>0&&r.fact(`Errors: ${a}`);let o=t.getAggregates({onError:`ignore`});for(let[e,t]of xt){let i=o[e];i!=null&&r.fact(`${t}: ${n(i)}`)}let s=[];for(let[t,n]of Object.entries(i))t!==e.ScalarType.Null&&n&&s.push(`${t.charAt(0).toUpperCase()}${t.slice(1)}: ${n}`);return s.length>0&&(r.blank(),r.h2(`Type`),r.fact(s)),r.toLines().join(`
20
+ `).trimEnd()}function Ct(e){let t=new I;t.h1(`Style`),t.text(`Named: ${e.getNamed().getName()}`),t.blank();let n=e.toJSON(),r=n?Object.entries(n).filter(([,e])=>e!==void 0):[];if(r.length===0)t.fact(`No direct styling (inherits the named style)`);else for(let[e,n]of r)t.fact(`${e}: ${t.codespan(typeof n==`string`?n:JSON.stringify(n))}`);return t.toLines().join(`
21
+ `).trimEnd()}function wt(e,t){let n=t?.maxCells??1e3,r=Tt(e)?e.getValues():e,i=r.length,a=r.reduce((e,t)=>Math.max(e,t?.length??0),0),o=new I;if(o.h1(`Values`),o.text(`Size: ${i}×${a}`),o.blank(),i===0||a===0)return o.text(`None`),o.toLines().join(`
22
+ `).trimEnd();let s=v(i,Math.max(1,Math.floor(n/a))),c=i>s?r.slice(0,s):r,l=o.beginFrame(Array(a).fill(``));for(let e of c)l.addRow(Array.from({length:a},(t,n)=>Et(e?.[n])));return l.endFrame(),c.length<i&&o.text(`…truncated at ${c.length} of ${i} rows · slice or aggregate in the expression before returning it`),o.toLines().join(`
23
+ `).trimEnd()}var Tt=e=>!!e&&typeof e==`object`&&!0===e.isIRange,Et=e=>{if(e==null)return{text:``};let t=(a(e)?.display??``).replace(/[\r\n]+/g,` `);return typeof e==`number`?{text:t,alignment:`right`}:{text:t}},Z=e.ICellRange.Feature;function Dt(t,n){let r=new I;r.h1(`Workbook — ${t.getName()??`Untitled`}`),r.text(`Locale: ${t.getRuntime().getLocale()}`),r.blank();let i=t.getSheets().getItems({visibility:e.ISheet.Visibility.VeryHidden}),a=t.getSelectedSheet(),o=[];for(let e of i){let t=e.getUsedRange();o.push({sheet:e,label:Ot(e,e.getId()===a.getId()),used:t?.toString()??`empty`,counts:t?.getCounts([Z.Contentful,Z.Formula,Z.Error,Z.CalcError])??null})}let s=o;if(o.length>50){s=o.slice(0,50);let e=o.find(e=>e.sheet.getId()===a.getId());e&&!s.includes(e)&&(s[s.length-1]=e)}r.h2(`Sheets (${o.length})`);let c=r.beginFrame([`Sheet`,`Used`,`Cells`,`Formulas`,`Errors`]);for(let e of s)c.addRow([{text:e.label},{text:e.used},{text:String(e.counts?.[Z.Contentful]??0),alignment:`right`},{text:String(e.counts?.[Z.Formula]??0),alignment:`right`},{text:String(e.counts?.[Z.Error]??0),alignment:`right`}]);if(o.length>1){let e=e=>o.reduce((t,n)=>t+(n.counts?.[e]??0),0);c.addRow([{text:`Total`},{text:``},{text:String(e(Z.Contentful)),alignment:`right`},{text:String(e(Z.Formula)),alignment:`right`},{text:String(e(Z.Error)),alignment:`right`}])}c.endFrame(),s.length<o.length&&r.text(` …and ${o.length-s.length} more sheets · the totals include them · wb.getSheets().getItems() lists all`),r.blank(),kt(r,`Errors`,o,Z.Error),kt(r,`Calc Failures`,o,Z.CalcError),G(r,t.getNames().getItems({type:`formula`,includeHidden:!0})??[],{maxNames:n?.maxNames??30,recovery:`wb.getNames() renders the full view`,symbols:t.getNames().getItems({includeHidden:!0})??[]});let l=n?.maxSheets??8,u=o.filter(e=>e.sheet.getUsedRange()!==null),d=u.slice(0,l),f=u.find(e=>e.sheet.getId()===a.getId());f&&!d.includes(f)&&(d[d.length-1]=f),r.setHeadingOffset(1);for(let e of d){let t=e.sheet.getUsedRange();t&&(r.h1(`Sheet — ${e.label}`),U(r,t),ke(r,t,{features:n?.features,maxRegions:n?.maxRegions??25,profile:!0,maxProfiled:n?.maxProfiled??4}),q(r,t))}return r.setHeadingOffset(0),d.length<u.length&&r.text(`…and ${u.length-d.length} more sheets not expanded · a sheet report (\`wb.getSheet('Name')\`) renders one in full`),r.toLines().join(`
24
+ `).trimEnd()}function Ot(t,n){let r=t.getVisibility(),i=``;return n&&(i+=` (selected)`),r===e.ISheet.Visibility.Hidden?i+=` (hidden)`:r===e.ISheet.Visibility.VeryHidden&&(i+=` (very hidden)`),`${z(t.getName())}${i}`}function kt(e,t,n,r){let i=n.reduce((e,t)=>e+(t.counts?.[r]??0),0);if(i===0)return;let a=[],o=0;for(let e of n){if(!e.counts?.[r])continue;let t=e.sheet.getUsedRange();if(!t)continue;let n=z(e.sheet.getName());for(let e of t.getRegions(r))o++,a.length>=20||a.push({address:`${n}!${e.toString()}`,size:`${e.getRowCount()}×${e.getColumnCount()}`,payload:At(e)})}e.h2(`${t} (${i})`);let s=Math.max(0,...a.map(e=>e.address.length)),c=Math.max(0,...a.map(e=>e.size.length));for(let t of a)e.text(` ${t.address.padEnd(s)} ${t.size.padEnd(c)} ${t.payload}`.trimEnd());o>a.length&&e.text(` …and ${o-a.length} more · getRegions('${r}') on a sheet's used range lists the rest`),e.blank()}function At(e){let n=e.getCell(),r=i(n,t.Mode.Display)?.display??``,a=n.getFormulaText();return a?`${r} =${a}`.trim():r}var Q=(e,t)=>!!e&&typeof e==`object`&&!0===e[t],jt=[{kind:`workbook`,is:e=>Q(e,`isIWorkbook`),render:(e,t)=>Dt(e,t)},{kind:`sheet`,is:e=>Q(e,`isISheet`),render:(e,t)=>bt(e,t)},{kind:`cell`,is:e=>Q(e,`isICell`),render:(e,t)=>Je(e,t)},{kind:`names`,is:e=>Q(e,`isINamedCollection`),render:(e,t)=>gt(e,t)},{kind:`formula`,is:e=>Q(e,`isIFormula`),render:(e,t)=>mt(e,t)},{kind:`table`,is:e=>Q(e,`isITable`),render:e=>Ce(e)},{kind:`movable`,is:e=>Q(e,`isIMovable`),render:e=>et(e)},{kind:`conditionalFormat`,is:e=>Q(e,`isIConditionalFormat`),render:e=>nt(e)},{kind:`dataValidation`,is:e=>Q(e,`isIDataValidation`),render:e=>it(e)},{kind:`stats`,is:e=>Q(e,`isIRangeStats`),render:e=>St(e)},{kind:`counts`,is:e=>Q(e,`isICellRangeCounts`),render:e=>rt(e)},{kind:`style`,is:e=>Q(e,`isIStyle`),render:e=>Ct(e)},{kind:`regions`,is:e=>Q(e,`isICellRegions`),render:(e,t)=>xe(e,t)},{kind:`cellRange`,is:e=>Q(e,`isICellRange`),render:(e,t)=>tt(e,t)},{kind:`ranges`,is:e=>Q(e,`isICellRanges`),render:(e,t)=>yt(e,t)},{kind:`range`,is:e=>Q(e,`isIRange`),render:(e,t)=>wt(e,t)},{kind:`values`,is:e=>Array.isArray(e)&&e.length>0&&e.every(e=>Array.isArray(e)),render:(e,t)=>wt(e,t)},{kind:`records`,is:e=>Array.isArray(e)&&e.length>0&&e.every(J),render:(e,t)=>Y(e,t)},{kind:`record`,is:e=>J(e),render:(e,t)=>Y(e,t)},{kind:`items`,is:e=>Array.isArray(e)&&e.length>0&&e.every(e=>!!$(e)),render:async(e,t)=>{let n=e.length>20?e.slice(0,20):e,r=[];for(let e of n)r.push(await $(e).render(e,t));return n.length<e.length&&r.push(`…and ${e.length-n.length} more · render one at a time to see them`),r.join(`
25
+
26
+ `)}}],Mt=class extends Error{constructor(e){super(e),this.name=`NoRendererError`}};function $(e){for(let t of jt)if(t.is(e))return t;return null}async function Nt(e,t,n){await e?.getCalculation().ready();let r=$(t),i=t;if(!r&&i&&typeof i==`object`&&!Array.isArray(i)&&typeof i[Symbol.iterator]==`function`){let e=[];for(let t of i)if(e.push(t),e.length>=1e3)break;i=e,r=$(i)}if(!r)throw new Mt(`No markdown renderer for this value. Renderable kinds: ${jt.map(e=>e.kind).join(`, `)}.`);return r.render(i,n)}var Pt=[_];Object.defineProperty(exports,"CellEncoding",{enumerable:!0,get:function(){return t}}),exports.GREP_FIELDS=o,exports.GREP_FIELDS_DEFAULT=s,exports.GrepField={Display:`display`,Value:`value`,Raw:`raw`,Formula:`formula`,Hyperlink:`hyperlink`,NumberFormat:`numberFormat`},exports.MarkdownBuilder=I,exports.MarkdownFrameSection=ve,exports.NoRendererError=Mt,exports.RENDERERS=jt,exports.RENDER_OPTION_KEYS=qe,exports.REPORTED_FEATURES=we,exports.TOOLS=Pt,exports.appendDependencies=K,exports.appendKinds=U,exports.appendMovables=$e,exports.appendNames=G,exports.appendRegionList=be,exports.appendRegions=ke,exports.appendRules=Ge,exports.appendSheetObjects=q,exports.appendTableDetails=Se,exports.countDates=ue,exports.describeAlignment=T,exports.describeAllowedValues=ae,exports.describeBorder=x,exports.describeBorderParts=C,exports.describeColor=y,exports.describeConditionalFormat=re,exports.describeDataValidation=ie,exports.describeExtent=R,exports.describeFill=b,exports.describeFont=E,exports.describeNode=Ue,exports.describeNodeLabel=He,exports.describeNumberFormat=w,exports.describeQualifiedExtent=H,exports.describeQualifiedName=W,exports.describeQualifiedRanges=V,exports.describeRanges=B,exports.describeRuleStyle=k,exports.describeRules=A,exports.describeScale=te,exports.describeSheetCall=Oe,exports.describeSheetName=z,exports.encodeCell=i,exports.encodeFormattedNumber=r,exports.encodeNumber=n,exports.encodeScalar=a,exports.grep=p,exports.grepTool=_,exports.isPlainRecord=J,exports.parseFeatures=De,exports.parseRenderOptions=function(e){let t={};for(let[n,r]of Object.entries(e)){let e=Ke[n];if(!e)throw Error(`Unknown report option '${n}'. Options: ${qe.join(`, `)}.`);t[n]=e(r,n)}return t},exports.profileKinds=le,exports.profileRegion=M,exports.regionPayload=ge,exports.regionPayloads=_e,exports.renderCell=Je,exports.renderCellRange=tt,exports.renderConditionalFormat=nt,exports.renderCounts=rt,exports.renderDataValidation=it,exports.renderFormula=mt,exports.renderGrep=g,exports.renderMarkdown=Nt,exports.renderMovable=et,exports.renderNames=gt,exports.renderRanges=yt,exports.renderRecords=Y,exports.renderRegions=xe,exports.renderResult=async function(e,t,n){if(t===void 0)return{text:void 0,rendered:!0};if(typeof t==`string`)return{text:t,rendered:!0};if(typeof t==`object`&&t)try{return{text:await Nt(e,t,n),rendered:!0}}catch(e){if(!(e instanceof Mt))throw e}return function(e){if(e===null)return{text:`null`,rendered:!0};switch(typeof e){case`number`:case`boolean`:return{text:a(e)?.display??String(e),rendered:!0};case`bigint`:case`symbol`:return{text:String(e),rendered:!0};case`function`:return{text:`[Function]`,rendered:!0}}let t=e;if(!0===t.isFormulaError||!0===t.isIRichData)return{text:a(e)?.display??``,rendered:!0};let n;try{n=String(e)}catch{n=`[object Object]`}return{text:n,rendered:!1}}(t)},exports.renderSheet=bt,exports.renderStats=St,exports.renderStyle=Ct,exports.renderTable=Ce,exports.renderValues=wt,exports.renderWorkbook=Dt,exports.resolveRenderer=$;