{"version":3,"file":"manifest-CVL1_t0O.mjs","names":[],"sources":["../src/packaging/relationships.ts","../src/packaging/core.ts","../src/packaging/custom.ts","../src/packaging/extended.ts","../src/packaging/manifest.ts"],"sourcesContent":["// `*.rels` files — Open Packaging Conventions relationship lists.\n//\n// Mirrors openpyxl/openpyxl/packaging/relationship.py. Relationship Ids\n// (`rId{N}`) auto-increment using the smallest unused integer so the list stays\n// deterministic even when callers mix in pre-assigned ids.\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { fromTree, toTree } from '../schema/serialize';\nimport { PKG_REL_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { serializeXml } from '../xml/serializer';\n\nexport interface Relationship {\n  /** rIdN identifier; unique within the parent .rels file. */\n  id: string;\n  /** Full relationship type URI. */\n  type: string;\n  /** Target — relative part path or absolute URL when targetMode === 'External'. */\n  target: string;\n  /** Defaults to internal. */\n  targetMode?: 'External' | 'Internal';\n}\n\nexport interface Relationships {\n  rels: Relationship[];\n}\n\nconst RelationshipSchema = defineSchema<Relationship>({\n  tagname: 'Relationship',\n  xmlNs: PKG_REL_NS,\n  attrs: {\n    id: { kind: 'string', xmlName: 'Id' },\n    type: { kind: 'string', xmlName: 'Type' },\n    target: { kind: 'string', xmlName: 'Target' },\n    targetMode: {\n      kind: 'enum',\n      values: ['External', 'Internal'],\n      xmlName: 'TargetMode',\n      optional: true,\n    },\n  },\n  elements: [],\n});\n\nconst RelationshipsSchema: Schema<Relationships> = defineSchema<Relationships>({\n  tagname: 'Relationships',\n  xmlNs: PKG_REL_NS,\n  attrs: {},\n  elements: [\n    {\n      kind: 'sequence',\n      key: 'rels',\n      itemName: 'Relationship',\n      itemNs: PKG_REL_NS,\n      itemSchema: () => RelationshipSchema,\n    },\n  ],\n});\n\nexport function makeRelationships(): Relationships {\n  return { rels: [] };\n}\n\nconst RID_RE = /^rId(\\d+)$/;\n\nconst allocateNextId = (rels: Relationships): string => {\n  // Smallest positive integer not yet used as `rId{N}`. Linear scan is fine\n  // because rels lists are small (tens of entries in real workbooks).\n  const used = new Set<number>();\n  for (const r of rels.rels) {\n    const m = RID_RE.exec(r.id);\n    if (m !== null) {\n      const n = Number.parseInt(m[1] ?? '0', 10);\n      if (Number.isFinite(n) && n > 0) used.add(n);\n    }\n  }\n  let n = 1;\n  while (used.has(n)) n++;\n  return `rId${n}`;\n};\n\n/**\n * Append a relationship and return the resulting object. Auto-assigns the next\n * free `rId{N}` Id.\n */\nexport function appendRel(rels: Relationships, type: string, target: string, targetMode?: 'External'): Relationship {\n  const next: Relationship = { id: allocateNextId(rels), type, target };\n  if (targetMode !== undefined) next.targetMode = targetMode;\n  rels.rels.push(next);\n  return next;\n}\n\nexport function findById(rels: Relationships, id: string): Relationship | undefined {\n  for (const r of rels.rels) if (r.id === id) return r;\n  return undefined;\n}\n\n/**\n * Build an id → relationship index for callers that look up the same .rels\n * file many times in a hot loop. Cheaper than repeated {@link findById} once\n * the rels count crosses a handful of entries.\n */\nexport function indexRelsById(rels: Relationships): Map<string, Relationship> {\n  const out = new Map<string, Relationship>();\n  for (const r of rels.rels) out.set(r.id, r);\n  return out;\n}\n\nexport function findByType(rels: Relationships, type: string): Relationship | undefined {\n  for (const r of rels.rels) if (r.type === type) return r;\n  return undefined;\n}\n\nexport function findAllByType(rels: Relationships, type: string): Relationship[] {\n  const out: Relationship[] = [];\n  for (const r of rels.rels) if (r.type === type) out.push(r);\n  return out;\n}\n\nexport function relsToBytes(rels: Relationships): Uint8Array {\n  return serializeXml(toTree(rels, RelationshipsSchema));\n}\n\nexport function relsFromBytes(bytes: Uint8Array | string): Relationships {\n  return fromTree(parseXml(bytes), RelationshipsSchema);\n}\n","// `docProps/core.xml` — Dublin Core / Office core document properties.\n//\n// Each property lives in its own namespace (cp / dc / dcterms). The dcterms\n// timestamps carry an `xsi:type=\"dcterms:W3CDTF\"` marker which we reproduce as\n// a fixed attr on those text elements via the schema layer's `text` element\n// kind.\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { fromTree, toTree } from '../schema/serialize';\nimport { COREPROPS_NS, DCORE_NS, DCTERMS_NS, XSI_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { serializeXml } from '../xml/serializer';\n\n/**\n * Set of properties exposed under `docProps/core.xml`. All fields are optional;\n * the workbook only emits those that are set. Timestamps are stored as ISO-8601\n * strings (the W3CDTF subset) — no Date conversion happens at this layer;\n * phase-3 saveWorkbook is responsible for stamping `modified` to `now()` on\n * each save.\n */\nexport interface CoreProperties {\n  category?: string;\n  contentStatus?: string;\n  /** ISO-8601 W3CDTF; auto-stamped on save in phase 3. */\n  created?: string;\n  creator?: string;\n  description?: string;\n  identifier?: string;\n  keywords?: string;\n  language?: string;\n  lastModifiedBy?: string;\n  /** ISO-8601 W3CDTF. */\n  lastPrinted?: string;\n  /** ISO-8601 W3CDTF; auto-stamped on save in phase 3. */\n  modified?: string;\n  revision?: string;\n  subject?: string;\n  title?: string;\n  version?: string;\n}\n\nconst W3CDTF_ATTRS: Record<string, string> = {\n  [`{${XSI_NS}}type`]: 'dcterms:W3CDTF',\n};\n\nconst CorePropertiesSchema: Schema<CoreProperties> = defineSchema<CoreProperties>({\n  tagname: 'coreProperties',\n  xmlNs: COREPROPS_NS,\n  attrs: {},\n  elements: [\n    // openpyxl's child-namespace assignment, mirrored exactly:\n    { kind: 'text', key: 'category', xmlNs: COREPROPS_NS, primitive: 'string', optional: true },\n    { kind: 'text', key: 'contentStatus', xmlNs: COREPROPS_NS, primitive: 'string', optional: true },\n    { kind: 'text', key: 'keywords', xmlNs: COREPROPS_NS, primitive: 'string', optional: true },\n    { kind: 'text', key: 'lastModifiedBy', xmlNs: COREPROPS_NS, primitive: 'string', optional: true },\n    {\n      kind: 'text',\n      key: 'lastPrinted',\n      xmlNs: DCTERMS_NS,\n      primitive: 'string',\n      optional: true,\n      attrs: W3CDTF_ATTRS,\n    },\n    { kind: 'text', key: 'revision', xmlNs: COREPROPS_NS, primitive: 'string', optional: true },\n    { kind: 'text', key: 'version', xmlNs: COREPROPS_NS, primitive: 'string', optional: true },\n    { kind: 'text', key: 'description', xmlNs: DCORE_NS, primitive: 'string', optional: true },\n    { kind: 'text', key: 'identifier', xmlNs: DCORE_NS, primitive: 'string', optional: true },\n    { kind: 'text', key: 'language', xmlNs: DCORE_NS, primitive: 'string', optional: true },\n    { kind: 'text', key: 'subject', xmlNs: DCORE_NS, primitive: 'string', optional: true },\n    { kind: 'text', key: 'title', xmlNs: DCORE_NS, primitive: 'string', optional: true },\n    { kind: 'text', key: 'creator', xmlNs: DCORE_NS, primitive: 'string', optional: true },\n    {\n      kind: 'text',\n      key: 'created',\n      xmlNs: DCTERMS_NS,\n      primitive: 'string',\n      optional: true,\n      attrs: W3CDTF_ATTRS,\n    },\n    {\n      kind: 'text',\n      key: 'modified',\n      xmlNs: DCTERMS_NS,\n      primitive: 'string',\n      optional: true,\n      attrs: W3CDTF_ATTRS,\n    },\n  ],\n});\n\nexport function makeCoreProperties(): CoreProperties {\n  return {};\n}\n\nexport function corePropsToBytes(p: CoreProperties): Uint8Array {\n  return serializeXml(toTree(p, CorePropertiesSchema));\n}\n\nexport function corePropsFromBytes(bytes: Uint8Array | string): CoreProperties {\n  return fromTree(parseXml(bytes), CorePropertiesSchema);\n}\n\n// ---- Workbook ergonomic helpers ----------------------------------------\n\nimport type { Workbook } from '../workbook/workbook';\n\nconst ensureCoreProperties = (wb: Workbook): CoreProperties => {\n  if (!wb.properties) wb.properties = {};\n  return wb.properties;\n};\n\n/** Set the document author (Excel \"File → Properties → Author\"). */\nexport const setWorkbookCreator = (wb: Workbook, creator: string): void => {\n  ensureCoreProperties(wb).creator = creator;\n};\n\n/** Set the document title. */\nexport const setWorkbookTitle = (wb: Workbook, title: string): void => {\n  ensureCoreProperties(wb).title = title;\n};\n\n/** Set the document subject. */\nexport const setWorkbookSubject = (wb: Workbook, subject: string): void => {\n  ensureCoreProperties(wb).subject = subject;\n};\n\n/** Set the document description / abstract. */\nexport const setWorkbookDescription = (wb: Workbook, description: string): void => {\n  ensureCoreProperties(wb).description = description;\n};\n\n/** Set comma- or semicolon-separated keywords. */\nexport const setWorkbookKeywords = (wb: Workbook, keywords: string): void => {\n  ensureCoreProperties(wb).keywords = keywords;\n};\n\n/** Set the \"last modified by\" name (defaults to creator if absent). */\nexport const setWorkbookLastModifiedBy = (wb: Workbook, name: string): void => {\n  ensureCoreProperties(wb).lastModifiedBy = name;\n};\n\n/** Set the document category (e.g. \"Reports\", \"Drafts\"). */\nexport const setWorkbookCategory = (wb: Workbook, category: string): void => {\n  ensureCoreProperties(wb).category = category;\n};\n","// `docProps/custom.xml` — user-defined document properties. Each <property>\n// carries fmtid/pid/name attributes plus a single typed value child from the\n// vt: namespace (vt:lpwstr, vt:i4, vt:bool, …).\n//\n// The Schema layer drives the <property> element attribute set; the typed-value\n// child is stored as a raw XmlNode and the `make*Value` / `read*Value` helpers\n// below cover the most common conversions.\n\nimport { OpenXmlSchemaError } from '../utils/exceptions';\nimport { CPROPS_FMTID, CUSTPROPS_NS, parseQName, VTYPES_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { serializeXml } from '../xml/serializer';\nimport { el, type XmlNode } from '../xml/tree';\n\nexport interface CustomProperty {\n  /** User-visible property name (must be unique within the workbook). */\n  name: string;\n  /** OOXML \"Property Identifier\"; ≥ 2. Auto-allocated if absent on append. */\n  pid: number;\n  /** Format ID GUID. Defaults to the well-known {D5CDD505-…} on append. */\n  fmtid?: string;\n  /** Typed value as a raw vt: element. Use the `make*Value` helpers. */\n  value: XmlNode;\n}\n\nexport interface CustomProperties {\n  properties: CustomProperty[];\n}\n\nexport function makeCustomProperties(): CustomProperties {\n  return { properties: [] };\n}\n\nconst PROPERTY_NAME = `{${CUSTPROPS_NS}}property`;\nconst PROPERTIES_NAME = `{${CUSTPROPS_NS}}Properties`;\n\n// ---- typed-value constructors ----------------------------------------------\n\nconst vt = (local: string, text: string): XmlNode => el(`{${VTYPES_NS}}${local}`, {}, [], text);\n\nexport function makeStringValue(s: string): XmlNode {\n  return vt('lpwstr', s);\n}\nexport function makeAsciiStringValue(s: string): XmlNode {\n  return vt('lpstr', s);\n}\nexport function makeIntValue(n: number): XmlNode {\n  if (!Number.isInteger(n)) throw new OpenXmlSchemaError(`makeIntValue: ${n} is not an integer`);\n  return vt('i4', String(n));\n}\nexport function makeDoubleValue(n: number): XmlNode {\n  if (!Number.isFinite(n)) throw new OpenXmlSchemaError(`makeDoubleValue: ${n} is not finite`);\n  return vt('r8', String(n));\n}\nexport function makeBoolValue(b: boolean): XmlNode {\n  return vt('bool', b ? '1' : '0');\n}\nexport function makeFiletimeValue(iso: string): XmlNode {\n  return vt('filetime', iso);\n}\nexport function makeDateValue(iso: string): XmlNode {\n  return vt('date', iso);\n}\n\n// ---- typed-value readers ---------------------------------------------------\n\nconst localNameOf = (n: XmlNode): string => parseQName(n.name).local;\n\nexport function readStringValue(v: XmlNode): string | undefined {\n  const ln = localNameOf(v);\n  if (ln === 'lpwstr' || ln === 'lpstr' || ln === 'bstr') return v.text ?? '';\n  return undefined;\n}\nexport function readIntValue(v: XmlNode): number | undefined {\n  const ln = localNameOf(v);\n  if (\n    ln === 'i4' ||\n    ln === 'i2' ||\n    ln === 'i1' ||\n    ln === 'int' ||\n    ln === 'uint' ||\n    ln === 'ui4' ||\n    ln === 'ui2' ||\n    ln === 'ui1'\n  ) {\n    const n = Number.parseInt(v.text ?? '', 10);\n    return Number.isFinite(n) ? n : undefined;\n  }\n  return undefined;\n}\nexport function readDoubleValue(v: XmlNode): number | undefined {\n  const ln = localNameOf(v);\n  if (ln === 'r4' || ln === 'r8' || ln === 'decimal' || ln === 'cy') {\n    const n = Number.parseFloat(v.text ?? '');\n    return Number.isFinite(n) ? n : undefined;\n  }\n  return undefined;\n}\nexport function readBoolValue(v: XmlNode): boolean | undefined {\n  if (localNameOf(v) !== 'bool') return undefined;\n  const t = (v.text ?? '').toLowerCase();\n  if (t === '1' || t === 'true' || t === 't') return true;\n  if (t === '0' || t === 'false' || t === 'f') return false;\n  return undefined;\n}\nexport function readFiletimeValue(v: XmlNode): string | undefined {\n  if (localNameOf(v) === 'filetime') return v.text ?? '';\n  return undefined;\n}\n\n// ---- collection ops --------------------------------------------------------\n\nconst allocatePid = (props: CustomProperties): number => {\n  // pid 0 / 1 are reserved by the OPC spec; user pids start at 2.\n  const used = new Set<number>();\n  for (const p of props.properties) used.add(p.pid);\n  let n = 2;\n  while (used.has(n)) n++;\n  return n;\n};\n\nexport function appendCustomProperty(\n  props: CustomProperties,\n  name: string,\n  value: XmlNode,\n  opts?: { pid?: number; fmtid?: string },\n): CustomProperty {\n  const pid = opts?.pid ?? allocatePid(props);\n  const out: CustomProperty = { name, pid, value };\n  if (opts?.fmtid !== undefined) out.fmtid = opts.fmtid;\n  props.properties.push(out);\n  return out;\n}\n\nexport function findCustomPropertyByName(props: CustomProperties, name: string): CustomProperty | undefined {\n  for (const p of props.properties) if (p.name === name) return p;\n  return undefined;\n}\n\n// ---- bytes round-trip ------------------------------------------------------\n\nexport function customPropsToBytes(p: CustomProperties): Uint8Array {\n  const root = el(PROPERTIES_NAME);\n  for (const prop of p.properties) {\n    const propEl = el(PROPERTY_NAME, {\n      fmtid: prop.fmtid ?? CPROPS_FMTID,\n      pid: String(prop.pid),\n      name: prop.name,\n    });\n    propEl.children.push(prop.value);\n    root.children.push(propEl);\n  }\n  return serializeXml(root);\n}\n\nexport function customPropsFromBytes(bytes: Uint8Array | string): CustomProperties {\n  const root = parseXml(bytes);\n  if (root.name !== PROPERTIES_NAME) {\n    throw new OpenXmlSchemaError(`customPropsFromBytes: expected <Properties>, got \"${root.name}\"`);\n  }\n  const properties: CustomProperty[] = [];\n  for (const propEl of root.children) {\n    if (propEl.name !== PROPERTY_NAME) continue;\n    const fmtid = propEl.attrs['fmtid'];\n    const pidRaw = propEl.attrs['pid'];\n    const name = propEl.attrs['name'];\n    if (name === undefined || pidRaw === undefined) {\n      throw new OpenXmlSchemaError('custom.xml: <property> requires name and pid attributes');\n    }\n    const pid = Number.parseInt(pidRaw, 10);\n    if (!Number.isFinite(pid)) {\n      throw new OpenXmlSchemaError(`custom.xml: <property> pid is not an integer (got \"${pidRaw}\")`);\n    }\n    const value = propEl.children[0];\n    if (value === undefined) {\n      throw new OpenXmlSchemaError(`custom.xml: <property name=\"${name}\"> has no typed-value child`);\n    }\n    const out: CustomProperty = { name, pid, value };\n    if (fmtid !== undefined) out.fmtid = fmtid;\n    properties.push(out);\n  }\n  return { properties };\n}\n\n// ---- Workbook ergonomic helpers ----------------------------------------\n\nimport type { Workbook } from '../workbook/workbook';\n\nconst ensureCustomProperties = (wb: Workbook): CustomProperties => {\n  if (!wb.customProperties) wb.customProperties = makeCustomProperties();\n  return wb.customProperties;\n};\n\nconst replaceOrAppend = (\n  wb: Workbook,\n  name: string,\n  value: XmlNode,\n  opts?: { fmtid?: string },\n): CustomProperty => {\n  const props = ensureCustomProperties(wb);\n  const existing = findCustomPropertyByName(props, name);\n  if (existing) {\n    existing.value = value;\n    if (opts?.fmtid !== undefined) existing.fmtid = opts.fmtid;\n    return existing;\n  }\n  return appendCustomProperty(props, name, value, opts);\n};\n\n/** Set (or replace) a custom string property. */\nexport const setCustomStringProperty = (wb: Workbook, name: string, value: string): CustomProperty =>\n  replaceOrAppend(wb, name, makeStringValue(value));\n\n/**\n * Set (or replace) a custom numeric property. Integers (within Int32 range) are\n * stored as `vt:i4`; non-integer / out-of-range numbers as `vt:r8` doubles.\n */\nexport const setCustomNumberProperty = (wb: Workbook, name: string, value: number): CustomProperty => {\n  if (!Number.isFinite(value)) {\n    throw new OpenXmlSchemaError(`setCustomNumberProperty: value \"${value}\" is not finite`);\n  }\n  const isInt32 = Number.isInteger(value) && value >= -2147483648 && value <= 2147483647;\n  const node = isInt32 ? makeIntValue(value) : makeDoubleValue(value);\n  return replaceOrAppend(wb, name, node);\n};\n\n/** Set (or replace) a custom boolean property. */\nexport const setCustomBoolProperty = (wb: Workbook, name: string, value: boolean): CustomProperty =>\n  replaceOrAppend(wb, name, makeBoolValue(value));\n\n/**\n * Set (or replace) a custom date property. Accepts a `Date` (converted to ISO\n * via `toISOString()`) or a pre-formatted W3C-DTF string.\n */\nexport const setCustomDateProperty = (\n  wb: Workbook,\n  name: string,\n  value: Date | string,\n): CustomProperty => {\n  const iso = value instanceof Date ? value.toISOString() : value;\n  return replaceOrAppend(wb, name, makeFiletimeValue(iso));\n};\n\n/**\n * Read the typed value of a custom property by name. Tries each decoder in turn\n * — string, int, double, bool, filetime — and returns the first hit. Returns\n * `undefined` for unknown names or unsupported types.\n */\nexport const getCustomPropertyValue = (\n  wb: Workbook,\n  name: string,\n): string | number | boolean | undefined => {\n  if (!wb.customProperties) return undefined;\n  const prop = findCustomPropertyByName(wb.customProperties, name);\n  if (!prop) return undefined;\n  const s = readStringValue(prop.value);\n  if (s !== undefined) return s;\n  const i = readIntValue(prop.value);\n  if (i !== undefined) return i;\n  const d = readDoubleValue(prop.value);\n  if (d !== undefined) return d;\n  const b = readBoolValue(prop.value);\n  if (b !== undefined) return b;\n  const ft = readFiletimeValue(prop.value);\n  if (ft !== undefined) return ft;\n  return undefined;\n};\n\n/**\n * Remove a custom property by name. Returns `true` when one was removed,\n * `false` when the name wasn't found.\n */\nexport const removeCustomProperty = (wb: Workbook, name: string): boolean => {\n  if (!wb.customProperties) return false;\n  const arr = wb.customProperties.properties;\n  const i = arr.findIndex((p) => p.name === name);\n  if (i < 0) return false;\n  arr.splice(i, 1);\n  return true;\n};\n\n/** Read-only snapshot of every custom property. */\nexport const listCustomProperties = (wb: Workbook): ReadonlyArray<CustomProperty> => {\n  return wb.customProperties?.properties ?? [];\n};\n","// `docProps/app.xml` — Office \"extended\" document properties.\n//\n// Mirrors openpyxl/openpyxl/packaging/extended.py. Most fields are flat (text\n// or numeric). The four vector-shaped children — HeadingPairs, TitlesOfParts,\n// HLinks, DigSig — are kept as raw XmlNode subtrees and round-tripped verbatim;\n// modelling vt:vector explicitly is a phase-3 concern at the earliest. See row\n// for `packaging/extended.py`.\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { fromTree, toTree } from '../schema/serialize';\nimport { XPROPS_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { serializeXml } from '../xml/serializer';\nimport type { XmlNode } from '../xml/tree';\n\nexport interface ExtendedProperties {\n  application?: string;\n  appVersion?: string;\n  characters?: number;\n  charactersWithSpaces?: number;\n  company?: string;\n  digitalSignature?: XmlNode;\n  docSecurity?: number;\n  hLinks?: XmlNode;\n  headingPairs?: XmlNode;\n  hiddenSlides?: number;\n  hyperlinkBase?: string;\n  hyperlinks?: XmlNode;\n  hyperlinksChanged?: boolean;\n  lines?: number;\n  linksUpToDate?: boolean;\n  manager?: string;\n  mmClips?: number;\n  notes?: number;\n  pages?: number;\n  paragraphs?: number;\n  presentationFormat?: string;\n  scaleCrop?: boolean;\n  sharedDoc?: boolean;\n  slides?: number;\n  template?: string;\n  titlesOfParts?: XmlNode;\n  totalTime?: number;\n  words?: number;\n}\n\nconst ExtendedSchema: Schema<ExtendedProperties> = defineSchema<ExtendedProperties>({\n  tagname: 'Properties',\n  xmlNs: XPROPS_NS,\n  attrs: {},\n  // Element order chosen to match the Office output convention.\n  elements: [\n    { kind: 'text', key: 'template', xmlNs: XPROPS_NS, name: 'Template', primitive: 'string', optional: true },\n    { kind: 'text', key: 'manager', xmlNs: XPROPS_NS, name: 'Manager', primitive: 'string', optional: true },\n    { kind: 'text', key: 'company', xmlNs: XPROPS_NS, name: 'Company', primitive: 'string', optional: true },\n    { kind: 'text', key: 'pages', xmlNs: XPROPS_NS, name: 'Pages', primitive: 'int', optional: true },\n    { kind: 'text', key: 'words', xmlNs: XPROPS_NS, name: 'Words', primitive: 'int', optional: true },\n    { kind: 'text', key: 'characters', xmlNs: XPROPS_NS, name: 'Characters', primitive: 'int', optional: true },\n    {\n      kind: 'text',\n      key: 'presentationFormat',\n      xmlNs: XPROPS_NS,\n      name: 'PresentationFormat',\n      primitive: 'string',\n      optional: true,\n    },\n    { kind: 'text', key: 'lines', xmlNs: XPROPS_NS, name: 'Lines', primitive: 'int', optional: true },\n    { kind: 'text', key: 'paragraphs', xmlNs: XPROPS_NS, name: 'Paragraphs', primitive: 'int', optional: true },\n    { kind: 'text', key: 'slides', xmlNs: XPROPS_NS, name: 'Slides', primitive: 'int', optional: true },\n    { kind: 'text', key: 'notes', xmlNs: XPROPS_NS, name: 'Notes', primitive: 'int', optional: true },\n    { kind: 'text', key: 'totalTime', xmlNs: XPROPS_NS, name: 'TotalTime', primitive: 'int', optional: true },\n    { kind: 'text', key: 'hiddenSlides', xmlNs: XPROPS_NS, name: 'HiddenSlides', primitive: 'int', optional: true },\n    { kind: 'text', key: 'mmClips', xmlNs: XPROPS_NS, name: 'MMClips', primitive: 'int', optional: true },\n    { kind: 'text', key: 'scaleCrop', xmlNs: XPROPS_NS, name: 'ScaleCrop', primitive: 'bool', optional: true },\n    { kind: 'raw', key: 'headingPairs', xmlNs: XPROPS_NS, name: 'HeadingPairs', optional: true },\n    { kind: 'raw', key: 'titlesOfParts', xmlNs: XPROPS_NS, name: 'TitlesOfParts', optional: true },\n    { kind: 'raw', key: 'hLinks', xmlNs: XPROPS_NS, name: 'HLinks', optional: true },\n    { kind: 'raw', key: 'hyperlinks', xmlNs: XPROPS_NS, name: 'Hyperlinks', optional: true },\n    { kind: 'text', key: 'linksUpToDate', xmlNs: XPROPS_NS, name: 'LinksUpToDate', primitive: 'bool', optional: true },\n    { kind: 'text', key: 'sharedDoc', xmlNs: XPROPS_NS, name: 'SharedDoc', primitive: 'bool', optional: true },\n    {\n      kind: 'text',\n      key: 'hyperlinkBase',\n      xmlNs: XPROPS_NS,\n      name: 'HyperlinkBase',\n      primitive: 'string',\n      optional: true,\n    },\n    {\n      kind: 'text',\n      key: 'hyperlinksChanged',\n      xmlNs: XPROPS_NS,\n      name: 'HyperlinksChanged',\n      primitive: 'bool',\n      optional: true,\n    },\n    { kind: 'raw', key: 'digitalSignature', xmlNs: XPROPS_NS, name: 'DigSig', optional: true },\n    { kind: 'text', key: 'application', xmlNs: XPROPS_NS, name: 'Application', primitive: 'string', optional: true },\n    { kind: 'text', key: 'appVersion', xmlNs: XPROPS_NS, name: 'AppVersion', primitive: 'string', optional: true },\n    { kind: 'text', key: 'docSecurity', xmlNs: XPROPS_NS, name: 'DocSecurity', primitive: 'int', optional: true },\n    {\n      kind: 'text',\n      key: 'charactersWithSpaces',\n      xmlNs: XPROPS_NS,\n      name: 'CharactersWithSpaces',\n      primitive: 'int',\n      optional: true,\n    },\n  ],\n});\n\nexport function makeExtendedProperties(): ExtendedProperties {\n  return {};\n}\n\nexport function extendedPropsToBytes(p: ExtendedProperties): Uint8Array {\n  return serializeXml(toTree(p, ExtendedSchema));\n}\n\nexport function extendedPropsFromBytes(bytes: Uint8Array | string): ExtendedProperties {\n  return fromTree(parseXml(bytes), ExtendedSchema);\n}\n\n// ---- Workbook ergonomic helpers ----------------------------------------\n\nimport type { Workbook } from '../workbook/workbook';\n\nconst ensureAppProperties = (wb: Workbook): ExtendedProperties => {\n  if (!wb.appProperties) wb.appProperties = {};\n  return wb.appProperties;\n};\n\n/** Set the company name on docProps/app.xml. */\nexport const setWorkbookCompany = (wb: Workbook, company: string): void => {\n  ensureAppProperties(wb).company = company;\n};\n\n/** Set the manager / supervisor name on docProps/app.xml. */\nexport const setWorkbookManager = (wb: Workbook, manager: string): void => {\n  ensureAppProperties(wb).manager = manager;\n};\n\n/** Set the application name (e.g. `\"Microsoft Excel\"`). */\nexport const setWorkbookApplication = (wb: Workbook, application: string): void => {\n  ensureAppProperties(wb).application = application;\n};\n\n/** Set the application version (typically `\"16.0300\"` for Excel 365). */\nexport const setWorkbookAppVersion = (wb: Workbook, version: string): void => {\n  ensureAppProperties(wb).appVersion = version;\n};\n\n/** Set the hyperlink base URL — Excel uses this as a prefix for relative `&F` codes. */\nexport const setWorkbookHyperlinkBase = (wb: Workbook, base: string): void => {\n  ensureAppProperties(wb).hyperlinkBase = base;\n};\n","// [Content_Types].xml — the package manifest. Tracks default content types per\n// file extension and per-part Override entries.\n\nimport { defineSchema, type Schema } from '../schema/core';\nimport { fromTree, toTree } from '../schema/serialize';\nimport { CONTYPES_NS } from '../xml/namespaces';\nimport { parseXml } from '../xml/parser';\nimport { serializeXml } from '../xml/serializer';\n\nexport interface DefaultEntry {\n  /** File extension without leading dot (e.g. \"rels\", \"xml\", \"png\"). */\n  ext: string;\n  contentType: string;\n}\n\nexport interface OverrideEntry {\n  /** Part name path including leading slash (e.g. \"/xl/workbook.xml\"). */\n  partName: string;\n  contentType: string;\n}\n\nexport interface Manifest {\n  defaults: DefaultEntry[];\n  overrides: OverrideEntry[];\n}\n\nconst DefaultSchema = defineSchema<DefaultEntry>({\n  tagname: 'Default',\n  xmlNs: CONTYPES_NS,\n  attrs: {\n    ext: { kind: 'string', xmlName: 'Extension' },\n    contentType: { kind: 'string', xmlName: 'ContentType' },\n  },\n  elements: [],\n});\n\nconst OverrideSchema = defineSchema<OverrideEntry>({\n  tagname: 'Override',\n  xmlNs: CONTYPES_NS,\n  attrs: {\n    partName: { kind: 'string', xmlName: 'PartName' },\n    contentType: { kind: 'string', xmlName: 'ContentType' },\n  },\n  elements: [],\n});\n\nconst ManifestSchema: Schema<Manifest> = defineSchema<Manifest>({\n  tagname: 'Types',\n  xmlNs: CONTYPES_NS,\n  attrs: {},\n  elements: [\n    {\n      kind: 'sequence',\n      key: 'defaults',\n      itemName: 'Default',\n      itemNs: CONTYPES_NS,\n      itemSchema: () => DefaultSchema,\n    },\n    {\n      kind: 'sequence',\n      key: 'overrides',\n      itemName: 'Override',\n      itemNs: CONTYPES_NS,\n      itemSchema: () => OverrideSchema,\n    },\n  ],\n});\n\nexport function makeManifest(): Manifest {\n  return { defaults: [], overrides: [] };\n}\n\n/** Register a default content type for an extension. Idempotent. */\nexport function addDefault(m: Manifest, ext: string, contentType: string): void {\n  for (const d of m.defaults) {\n    if (d.ext === ext) {\n      if (d.contentType !== contentType) {\n        d.contentType = contentType; // newer wins; matches openpyxl behaviour\n      }\n      return;\n    }\n  }\n  m.defaults.push({ ext, contentType });\n}\n\n/** Register an Override for a specific part. Idempotent. */\nexport function addOverride(m: Manifest, partName: string, contentType: string): void {\n  for (const o of m.overrides) {\n    if (o.partName === partName) {\n      if (o.contentType !== contentType) o.contentType = contentType;\n      return;\n    }\n  }\n  m.overrides.push({ partName, contentType });\n}\n\nexport function findOverride(m: Manifest, partName: string): OverrideEntry | undefined {\n  for (const o of m.overrides) if (o.partName === partName) return o;\n  return undefined;\n}\n\n/** Find the first Override matching a content type. */\nexport function findOverrideByContentType(m: Manifest, contentType: string): OverrideEntry | undefined {\n  for (const o of m.overrides) if (o.contentType === contentType) return o;\n  return undefined;\n}\n\nexport function manifestToBytes(m: Manifest): Uint8Array {\n  return serializeXml(toTree(m, ManifestSchema));\n}\n\nexport function manifestFromBytes(bytes: Uint8Array | string): Manifest {\n  return fromTree(parseXml(bytes), ManifestSchema);\n}\n"],"mappings":"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"}