Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
7b2e8ede07 | |||
7da242ee9e | |||
d71203d2a6 | |||
064cee9921 |
@ -47,28 +47,23 @@ rules:
|
|||||||
"@typescript-eslint/array-type":
|
"@typescript-eslint/array-type":
|
||||||
- error
|
- error
|
||||||
- default: array
|
- default: array
|
||||||
"@typescript-eslint/no-restricted-types":
|
"@typescript-eslint/ban-types":
|
||||||
- error
|
- error
|
||||||
- types:
|
- types:
|
||||||
Object:
|
Object:
|
||||||
message: Avoid using the `Object` type. Did you mean `object`?
|
message: Avoid using the `Object` type. Did you mean `object`?
|
||||||
fixWith: object
|
|
||||||
Function:
|
Function:
|
||||||
message: >-
|
message: >-
|
||||||
Avoid using the `Function` type. Prefer a specific function type,
|
Avoid using the `Function` type. Prefer a specific function type,
|
||||||
like `() => void`.
|
like `() => void`.
|
||||||
Boolean:
|
Boolean:
|
||||||
message: Avoid using the `Boolean` type. Did you mean `boolean`?
|
message: Avoid using the `Boolean` type. Did you mean `boolean`?
|
||||||
fixWith: boolean
|
|
||||||
Number:
|
Number:
|
||||||
message: Avoid using the `Number` type. Did you mean `number`?
|
message: Avoid using the `Number` type. Did you mean `number`?
|
||||||
fixWith: number
|
|
||||||
String:
|
String:
|
||||||
message: Avoid using the `String` type. Did you mean `string`?
|
message: Avoid using the `String` type. Did you mean `string`?
|
||||||
fixWith: string
|
|
||||||
Symbol:
|
Symbol:
|
||||||
message: Avoid using the `Symbol` type. Did you mean `symbol`?
|
message: Avoid using the `Symbol` type. Did you mean `symbol`?
|
||||||
fixWith: symbol
|
|
||||||
"@typescript-eslint/consistent-type-assertions": error
|
"@typescript-eslint/consistent-type-assertions": error
|
||||||
"@typescript-eslint/dot-notation": error
|
"@typescript-eslint/dot-notation": error
|
||||||
"@typescript-eslint/explicit-function-return-type":
|
"@typescript-eslint/explicit-function-return-type":
|
||||||
@ -97,7 +92,7 @@ rules:
|
|||||||
format:
|
format:
|
||||||
- camelCase
|
- camelCase
|
||||||
- PascalCase
|
- PascalCase
|
||||||
- UPPER_CASE # for constants
|
- UPPER_CASE # for constants
|
||||||
filter:
|
filter:
|
||||||
regex: (^[a-z]+:.+)|_attr|[0-9]
|
regex: (^[a-z]+:.+)|_attr|[0-9]
|
||||||
match: false
|
match: false
|
||||||
|
16
.github/workflows/default.yml
vendored
16
.github/workflows/default.yml
vendored
@ -13,10 +13,10 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@master
|
||||||
- uses: "./.github/actions/install-and-build"
|
- uses: "./.github/actions/install-and-build"
|
||||||
- name: Archive Production Artifact
|
- name: Archive Production Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@master
|
||||||
with:
|
with:
|
||||||
name: build
|
name: build
|
||||||
path: build
|
path: build
|
||||||
@ -25,24 +25,22 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@master
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: npm ci --force
|
run: npm ci --force
|
||||||
- name: Test
|
- name: Test
|
||||||
run: npm run test:ci
|
run: npm run test:ci
|
||||||
- name: Codecov
|
- name: Codecov
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v3
|
||||||
with:
|
with:
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
verbose: true
|
verbose: true
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
||||||
lint:
|
lint:
|
||||||
name: Lint
|
name: Lint
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@master
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: npm ci --force
|
run: npm ci --force
|
||||||
- name: Lint
|
- name: Lint
|
||||||
@ -52,7 +50,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@master
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: npm ci --force
|
run: npm ci --force
|
||||||
- name: Prettier
|
- name: Prettier
|
||||||
@ -62,7 +60,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@master
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: npm ci --force
|
run: npm ci --force
|
||||||
- name: Prettier
|
- name: Prettier
|
||||||
|
2
.github/workflows/demos.yml
vendored
2
.github/workflows/demos.yml
vendored
@ -12,7 +12,7 @@ jobs:
|
|||||||
name: Demos
|
name: Demos
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@master
|
||||||
- uses: "./.github/actions/install-and-build"
|
- uses: "./.github/actions/install-and-build"
|
||||||
- name: Run Demos
|
- name: Run Demos
|
||||||
run: npm run run-ts -- ./demo/1-basic.ts
|
run: npm run run-ts -- ./demo/1-basic.ts
|
||||||
|
8
.github/workflows/github-pages.yml
vendored
8
.github/workflows/github-pages.yml
vendored
@ -10,7 +10,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@master
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: npm ci --force
|
run: npm ci --force
|
||||||
- name: Build 🔧
|
- name: Build 🔧
|
||||||
@ -19,7 +19,7 @@ jobs:
|
|||||||
echo "docx.js.org" > docs/.nojekyll
|
echo "docx.js.org" > docs/.nojekyll
|
||||||
echo "docx.js.org" > docs/CNAME
|
echo "docx.js.org" > docs/CNAME
|
||||||
- name: Archive Production Artifact
|
- name: Archive Production Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@master
|
||||||
with:
|
with:
|
||||||
name: docs
|
name: docs
|
||||||
path: docs
|
path: docs
|
||||||
@ -28,11 +28,11 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo 🛎️
|
- name: Checkout Repo 🛎️
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@master
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: npm ci --force
|
run: npm ci --force
|
||||||
- name: Download Artifact
|
- name: Download Artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@master
|
||||||
with:
|
with:
|
||||||
name: docs
|
name: docs
|
||||||
path: docs
|
path: docs
|
||||||
|
46
.github/workflows/npm-publish.yml
vendored
46
.github/workflows/npm-publish.yml
vendored
@ -1,46 +0,0 @@
|
|||||||
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
|
|
||||||
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
|
|
||||||
|
|
||||||
name: Node.js Package
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [created]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: "20.x"
|
|
||||||
- run: npm ci --force
|
|
||||||
- run: npm run cspell
|
|
||||||
- run: npm run prettier
|
|
||||||
- run: npm run lint
|
|
||||||
- run: npm run test:ci
|
|
||||||
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: "20.x"
|
|
||||||
- run: npm ci --force
|
|
||||||
- run: npm run build
|
|
||||||
|
|
||||||
publish-npm:
|
|
||||||
needs: [test, build]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: "20.x"
|
|
||||||
registry-url: https://registry.npmjs.org/
|
|
||||||
- run: npm ci --force
|
|
||||||
- run: npm publish
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
|
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -5,6 +5,5 @@
|
|||||||
"editor.formatOnSave": false,
|
"editor.formatOnSave": false,
|
||||||
"prettier.tabWidth": 4,
|
"prettier.tabWidth": 4,
|
||||||
"prettier.arrowParens": "always",
|
"prettier.arrowParens": "always",
|
||||||
"prettier.bracketSpacing": true,
|
"prettier.bracketSpacing": true
|
||||||
"eslint.useFlatConfig": true
|
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,6 @@ Read the contribution guidelines [here](https://docx.js.org/#/contribution-guide
|
|||||||
[<img src="https://i.imgur.com/PXo25um.png" alt="drawing" height="50"/>](https://www.circadianrisk.com/)
|
[<img src="https://i.imgur.com/PXo25um.png" alt="drawing" height="50"/>](https://www.circadianrisk.com/)
|
||||||
[<img src="https://i.imgur.com/AKGhtlh.png" alt="drawing"/>](https://lexense.com/)
|
[<img src="https://i.imgur.com/AKGhtlh.png" alt="drawing"/>](https://lexense.com/)
|
||||||
[<img src="https://i.imgur.com/9tqJaHw.png" alt="drawing" height="50"/>](https://novelpad.co/)
|
[<img src="https://i.imgur.com/9tqJaHw.png" alt="drawing" height="50"/>](https://novelpad.co/)
|
||||||
[<img src="https://i.imgur.com/5bLKFeP.png" alt="drawing" height="50"/>](https://proton.me/)
|
|
||||||
|
|
||||||
...and many more!
|
...and many more!
|
||||||
|
|
||||||
|
24
SECURITY.md
24
SECURITY.md
@ -1,24 +0,0 @@
|
|||||||
# Security Policy
|
|
||||||
|
|
||||||
## Supported Versions
|
|
||||||
|
|
||||||
Use this section to tell people about which versions of your project are
|
|
||||||
currently being supported with security updates.
|
|
||||||
|
|
||||||
| Version | Supported |
|
|
||||||
| ------- | ------------------ |
|
|
||||||
| 9.0.x | :white_check_mark: |
|
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
|
||||||
|
|
||||||
We encourage responsible disclosure of security vulnerabilities. If you believe you have found a security vulnerability in this project, please report it via the [Security Tab](https://github.com/dolanmiu/docx/security/advisories)
|
|
||||||
|
|
||||||
Please include the following information in your report:
|
|
||||||
|
|
||||||
* A description of the vulnerability
|
|
||||||
* Steps to reproduce the vulnerability
|
|
||||||
* Impact of the vulnerability
|
|
||||||
|
|
||||||
We will investigate all reported vulnerabilities and take appropriate action.
|
|
||||||
|
|
||||||
We appreciate your help in keeping this project secure.
|
|
@ -1,72 +0,0 @@
|
|||||||
// Patch a document with patches
|
|
||||||
|
|
||||||
import * as fs from "fs";
|
|
||||||
import { patchDocument, PatchType, TextRun } from "docx";
|
|
||||||
|
|
||||||
patchDocument({
|
|
||||||
outputType: "nodebuffer",
|
|
||||||
data: fs.readFileSync("demo/assets/field-trip.docx"),
|
|
||||||
patches: {
|
|
||||||
todays_date: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: new Date().toLocaleDateString() })],
|
|
||||||
},
|
|
||||||
|
|
||||||
school_name: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "test" })],
|
|
||||||
},
|
|
||||||
|
|
||||||
address: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "blah blah" })],
|
|
||||||
},
|
|
||||||
|
|
||||||
city: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "test" })],
|
|
||||||
},
|
|
||||||
|
|
||||||
state: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "test" })],
|
|
||||||
},
|
|
||||||
|
|
||||||
zip: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "test" })],
|
|
||||||
},
|
|
||||||
|
|
||||||
phone: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "test" })],
|
|
||||||
},
|
|
||||||
|
|
||||||
first_name: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "test" })],
|
|
||||||
},
|
|
||||||
|
|
||||||
last_name: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "test" })],
|
|
||||||
},
|
|
||||||
|
|
||||||
email_address: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "test" })],
|
|
||||||
},
|
|
||||||
|
|
||||||
ft_dates: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "test" })],
|
|
||||||
},
|
|
||||||
|
|
||||||
grade: {
|
|
||||||
type: PatchType.PARAGRAPH,
|
|
||||||
children: [new TextRun({ text: "test" })],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}).then((doc) => {
|
|
||||||
fs.writeFileSync("My Document.docx", doc);
|
|
||||||
});
|
|
@ -1,43 +0,0 @@
|
|||||||
// Simple example to add textbox to a document
|
|
||||||
import { Document, Packer, Paragraph, Textbox, TextRun } from "docx";
|
|
||||||
import * as fs from "fs";
|
|
||||||
|
|
||||||
const doc = new Document({
|
|
||||||
sections: [
|
|
||||||
{
|
|
||||||
properties: {},
|
|
||||||
children: [
|
|
||||||
new Textbox({
|
|
||||||
alignment: "center",
|
|
||||||
children: [
|
|
||||||
new Paragraph({
|
|
||||||
children: [new TextRun("Hi i'm a textbox!")],
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
style: {
|
|
||||||
width: "200pt",
|
|
||||||
height: "auto",
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
new Textbox({
|
|
||||||
alignment: "center",
|
|
||||||
children: [
|
|
||||||
new Paragraph({
|
|
||||||
children: [new TextRun("Hi i'm a textbox with a hidden box!")],
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
style: {
|
|
||||||
width: "300pt",
|
|
||||||
height: 400,
|
|
||||||
visibility: "hidden",
|
|
||||||
zIndex: "auto",
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
Packer.toBuffer(doc).then((buffer) => {
|
|
||||||
fs.writeFileSync("My Document.docx", buffer);
|
|
||||||
});
|
|
Binary file not shown.
@ -22,7 +22,7 @@ const doc = new Document({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
}]
|
}];
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -22,30 +22,19 @@ const doc = new docx.Document({
|
|||||||
|
|
||||||
### Full list of options:
|
### Full list of options:
|
||||||
|
|
||||||
| Property | Type | Notes |
|
- creator
|
||||||
| -------------------------- | -------------------------------------------------------- | -------- |
|
- description
|
||||||
| sections | `ISectionOptions[]` | Optional |
|
- title
|
||||||
| title | `string` | Optional |
|
- subject
|
||||||
| subject | `string` | Optional |
|
- keywords
|
||||||
| creator | `string` | Optional |
|
- lastModifiedBy
|
||||||
| keywords | `string` | Optional |
|
- revision
|
||||||
| description | `string` | Optional |
|
- externalStyles
|
||||||
| lastModifiedBy | `string` | Optional |
|
- styles
|
||||||
| revision | `number` | Optional |
|
- numbering
|
||||||
| externalStyles | `string` | Optional |
|
- footnotes
|
||||||
| styles | `IStylesOptions` | Optional |
|
- hyperlinks
|
||||||
| numbering | `INumberingOptions` | Optional |
|
- background
|
||||||
| comments | `ICommentsOptions` | Optional |
|
|
||||||
| footnotes | `Record<string, { children: Paragraph[] }>` | Optional |
|
|
||||||
| background | `IDocumentBackgroundOptions` | Optional |
|
|
||||||
| features | `{ trackRevisions?: boolean; updateFields?: boolean; }` | Optional |
|
|
||||||
| compatabilityModeVersion | `number` | Optional |
|
|
||||||
| compatibility | `ICompatibilityOptions` | Optional |
|
|
||||||
| customProperties | ` ICustomPropertyOptions`[] | Optional |
|
|
||||||
| evenAndOddHeaderAndFooters | `boolean` | Optional |
|
|
||||||
| defaultTabStop | `number` | Optional |
|
|
||||||
| fonts | ` FontOptions[]` | Optional |
|
|
||||||
| hyphenation | `IHyphenationOptions` | Optional |
|
|
||||||
|
|
||||||
### Change background color of Document
|
### Change background color of Document
|
||||||
|
|
||||||
|
@ -130,62 +130,6 @@ new Paragraph({
|
|||||||
}),
|
}),
|
||||||
```
|
```
|
||||||
|
|
||||||
## Disabling numbering inherited from paragraph style
|
|
||||||
|
|
||||||
If the numbering is set on a paragraph style, you may wish to disable it for a specific paragraph:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
const doc = new Document({
|
|
||||||
...
|
|
||||||
numbering: {
|
|
||||||
config: [
|
|
||||||
{
|
|
||||||
reference: "my-bullet-points",
|
|
||||||
levels: [
|
|
||||||
{
|
|
||||||
level: 0,
|
|
||||||
format: LevelFormat.BULLET,
|
|
||||||
text: "\u1F60",
|
|
||||||
alignment: AlignmentType.LEFT,
|
|
||||||
style: {
|
|
||||||
paragraph: {
|
|
||||||
indent: { left: convertInchesToTwip(0.5), hanging: convertInchesToTwip(0.25) },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
styles: {
|
|
||||||
paragraphStyles: [
|
|
||||||
{
|
|
||||||
id: 'bullet',
|
|
||||||
name: 'Bullet',
|
|
||||||
basedOn: 'Normal',
|
|
||||||
next: 'Normal',
|
|
||||||
run: {},
|
|
||||||
paragraph: {
|
|
||||||
numbering: {
|
|
||||||
reference: 'my-bullet-points',
|
|
||||||
level: 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
...
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
```ts
|
|
||||||
new Paragraph({
|
|
||||||
text: "No bullet points!",
|
|
||||||
style: "Bullet",
|
|
||||||
numbering: false,
|
|
||||||
}),
|
|
||||||
```
|
|
||||||
|
|
||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
[Example](https://raw.githubusercontent.com/dolanmiu/docx/master/demo/3-numbering-and-bullet-points.ts ":include")
|
[Example](https://raw.githubusercontent.com/dolanmiu/docx/master/demo/3-numbering-and-bullet-points.ts ":include")
|
||||||
|
@ -35,9 +35,6 @@ interface Patch {
|
|||||||
| type | `PatchType` | Required | `DOCUMENT`, `PARAGRAPH` |
|
| type | `PatchType` | Required | `DOCUMENT`, `PARAGRAPH` |
|
||||||
| children | `FileChild[] or ParagraphChild[]` | Required | The contents to replace with. A `FileChild` is a `Paragraph` or `Table`, whereas a `ParagraphChild` is typical `Paragraph` children. |
|
| children | `FileChild[] or ParagraphChild[]` | Required | The contents to replace with. A `FileChild` is a `Paragraph` or `Table`, whereas a `ParagraphChild` is typical `Paragraph` children. |
|
||||||
|
|
||||||
|
|
||||||
The patcher also takes in a `keepOriginalStyles` boolean, which will preserve the styles of the patched text when set to true.
|
|
||||||
|
|
||||||
### How to patch existing document
|
### How to patch existing document
|
||||||
|
|
||||||
1. Open your existing word document in your favorite Word Processor
|
1. Open your existing word document in your favorite Word Processor
|
||||||
|
@ -126,10 +126,10 @@ const doc = new Document({
|
|||||||
next: "Normal",
|
next: "Normal",
|
||||||
quickFormat: true,
|
quickFormat: true,
|
||||||
run: {
|
run: {
|
||||||
size: 26,
|
size: 26
|
||||||
bold: true,
|
bold: true,
|
||||||
color: "999999",
|
color: "999999",
|
||||||
underline: {
|
{
|
||||||
type: UnderlineType.DOUBLE,
|
type: UnderlineType.DOUBLE,
|
||||||
color: "FF0000",
|
color: "FF0000",
|
||||||
},
|
},
|
||||||
|
@ -22,7 +22,7 @@ Then add the table in the `section`
|
|||||||
const doc = new Document({
|
const doc = new Document({
|
||||||
sections: [{
|
sections: [{
|
||||||
children: [table],
|
children: [table],
|
||||||
}],
|
}];
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
# Text Box
|
|
||||||
|
|
||||||
Similar `Text Frames`, but the difference being that it is `VML` `Shape` based.
|
|
||||||
|
|
||||||
!> `Text Boxes` requires an understanding of [Paragraphs](usage/paragraph.md).
|
|
||||||
|
|
||||||
> `Text boxes` are paragraphs of text in a document which are positioned in a separate region or frame in the document, and can be positioned with a specific size and position relative to non-frame paragraphs in the current document.
|
|
||||||
|
|
||||||
## Intro
|
|
||||||
|
|
||||||
To make a `Text Box`, simply create a `Textbox` object inside the `Document`:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
new Textbox({
|
|
||||||
alignment: "center",
|
|
||||||
children: [
|
|
||||||
new Paragraph({
|
|
||||||
children: [new TextRun("Hi i'm a textbox!")],
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
style: {
|
|
||||||
width: "200pt",
|
|
||||||
height: "auto",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
```
|
|
@ -1,6 +1,6 @@
|
|||||||
# Text Frames
|
# Text Frames
|
||||||
|
|
||||||
> Similar to `Text Boxes`!
|
Also known as `Text Boxes`
|
||||||
|
|
||||||
!> Text Frames requires an understanding of [Paragraphs](usage/paragraph.md).
|
!> Text Frames requires an understanding of [Paragraphs](usage/paragraph.md).
|
||||||
|
|
||||||
|
370
eslint.config.ts
370
eslint.config.ts
@ -1,370 +0,0 @@
|
|||||||
import eslint from "@eslint/js";
|
|
||||||
import type { Linter } from "eslint";
|
|
||||||
import importPlugin from "eslint-plugin-import";
|
|
||||||
import unicorn from "eslint-plugin-unicorn";
|
|
||||||
import jsdoc from "eslint-plugin-jsdoc";
|
|
||||||
import preferArrow from "eslint-plugin-prefer-arrow";
|
|
||||||
import functional from "eslint-plugin-functional";
|
|
||||||
import globals from "globals";
|
|
||||||
import tsEslint from "typescript-eslint";
|
|
||||||
|
|
||||||
const config: Linter.Config<Linter.RulesRecord>[] = [
|
|
||||||
{
|
|
||||||
ignores: ["**/vite.config.ts", "**/build/**", "**/coverage/**", "**/*.js", "eslint.config.ts", "**/demo/**", "**/scripts/**"],
|
|
||||||
},
|
|
||||||
eslint.configs.recommended,
|
|
||||||
importPlugin.flatConfigs.recommended,
|
|
||||||
...tsEslint.configs.recommended,
|
|
||||||
...tsEslint.configs.stylistic,
|
|
||||||
{
|
|
||||||
files: ["**/src/**/*.ts"],
|
|
||||||
plugins: {
|
|
||||||
unicorn,
|
|
||||||
jsdoc,
|
|
||||||
"prefer-arrow": preferArrow,
|
|
||||||
functional,
|
|
||||||
},
|
|
||||||
|
|
||||||
languageOptions: {
|
|
||||||
parserOptions: {
|
|
||||||
projectService: true,
|
|
||||||
tsconfigRootDir: import.meta.dirname,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
settings: {
|
|
||||||
"import/resolver": {
|
|
||||||
typescript: true,
|
|
||||||
node: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
rules: {
|
|
||||||
"no-undef": "off",
|
|
||||||
"no-extra-boolean-cast": "off",
|
|
||||||
"no-alert": "error",
|
|
||||||
"no-self-compare": "error",
|
|
||||||
"no-unreachable-loop": "error",
|
|
||||||
"no-template-curly-in-string": "error",
|
|
||||||
"no-unused-private-class-members": "error",
|
|
||||||
"no-extend-native": "error",
|
|
||||||
"no-floating-decimal": "error",
|
|
||||||
"no-implied-eval": "error",
|
|
||||||
"no-iterator": "error",
|
|
||||||
"no-lone-blocks": "error",
|
|
||||||
"no-loop-func": "error",
|
|
||||||
"no-new-object": "error",
|
|
||||||
"no-proto": "error",
|
|
||||||
"no-useless-catch": "error",
|
|
||||||
"one-var-declaration-per-line": "error",
|
|
||||||
"prefer-arrow-callback": "error",
|
|
||||||
"prefer-destructuring": "error",
|
|
||||||
"prefer-exponentiation-operator": "error",
|
|
||||||
"prefer-promise-reject-errors": "error",
|
|
||||||
"prefer-regex-literals": "error",
|
|
||||||
"prefer-spread": "error",
|
|
||||||
"prefer-template": "error",
|
|
||||||
"require-await": "error",
|
|
||||||
"@typescript-eslint/adjacent-overload-signatures": "error",
|
|
||||||
|
|
||||||
"@typescript-eslint/array-type": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
default: "array",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"@typescript-eslint/no-restricted-types": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
types: {
|
|
||||||
Object: {
|
|
||||||
message: "Avoid using the `Object` type. Did you mean `object`?",
|
|
||||||
fixWith: "object",
|
|
||||||
},
|
|
||||||
|
|
||||||
Function: {
|
|
||||||
message: "Avoid using the `Function` type. Prefer a specific function type, like `() => void`.",
|
|
||||||
},
|
|
||||||
|
|
||||||
Boolean: {
|
|
||||||
message: "Avoid using the `Boolean` type. Did you mean `boolean`?",
|
|
||||||
fixWith: "boolean",
|
|
||||||
},
|
|
||||||
|
|
||||||
Number: {
|
|
||||||
message: "Avoid using the `Number` type. Did you mean `number`?",
|
|
||||||
fixWith: "number",
|
|
||||||
},
|
|
||||||
|
|
||||||
String: {
|
|
||||||
message: "Avoid using the `String` type. Did you mean `string`?",
|
|
||||||
fixWith: "string",
|
|
||||||
},
|
|
||||||
|
|
||||||
Symbol: {
|
|
||||||
message: "Avoid using the `Symbol` type. Did you mean `symbol`?",
|
|
||||||
fixWith: "symbol",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"@typescript-eslint/consistent-type-assertions": "error",
|
|
||||||
"@typescript-eslint/dot-notation": "error",
|
|
||||||
|
|
||||||
"@typescript-eslint/explicit-function-return-type": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
allowExpressions: true,
|
|
||||||
allowTypedFunctionExpressions: true,
|
|
||||||
allowHigherOrderFunctions: false,
|
|
||||||
allowDirectConstAssertionInArrowFunctions: true,
|
|
||||||
allowConciseArrowFunctionExpressionsStartingWithVoid: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"@typescript-eslint/explicit-member-accessibility": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
accessibility: "explicit",
|
|
||||||
|
|
||||||
overrides: {
|
|
||||||
accessors: "explicit",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"@typescript-eslint/explicit-module-boundary-types": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
allowArgumentsExplicitlyTypedAsAny: true,
|
|
||||||
allowDirectConstAssertionInArrowFunctions: true,
|
|
||||||
allowHigherOrderFunctions: false,
|
|
||||||
allowTypedFunctionExpressions: false,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"@typescript-eslint/naming-convention": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
selector: ["objectLiteralProperty"],
|
|
||||||
leadingUnderscore: "allow",
|
|
||||||
format: ["camelCase", "PascalCase", "UPPER_CASE"],
|
|
||||||
|
|
||||||
filter: {
|
|
||||||
regex: "(^[a-z]+:.+)|_attr|[0-9]",
|
|
||||||
match: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"@typescript-eslint/no-empty-function": "error",
|
|
||||||
"@typescript-eslint/no-empty-interface": "error",
|
|
||||||
"@typescript-eslint/no-explicit-any": "error",
|
|
||||||
"@typescript-eslint/no-misused-new": "error",
|
|
||||||
"@typescript-eslint/no-namespace": "error",
|
|
||||||
"@typescript-eslint/no-parameter-properties": "off",
|
|
||||||
"@typescript-eslint/no-require-imports": "error",
|
|
||||||
|
|
||||||
"@typescript-eslint/no-shadow": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
hoist: "all",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"@typescript-eslint/consistent-type-definitions": ["error", "type"],
|
|
||||||
|
|
||||||
"@typescript-eslint/no-this-alias": "error",
|
|
||||||
"@typescript-eslint/no-unused-expressions": "error",
|
|
||||||
"@typescript-eslint/no-use-before-define": "off",
|
|
||||||
"@typescript-eslint/no-var-requires": "error",
|
|
||||||
"@typescript-eslint/prefer-for-of": "error",
|
|
||||||
"@typescript-eslint/prefer-function-type": "error",
|
|
||||||
"@typescript-eslint/prefer-namespace-keyword": "error",
|
|
||||||
"@typescript-eslint/prefer-readonly": "error",
|
|
||||||
|
|
||||||
"@typescript-eslint/triple-slash-reference": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
path: "always",
|
|
||||||
types: "prefer-import",
|
|
||||||
lib: "always",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"@typescript-eslint/typedef": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
parameter: true,
|
|
||||||
propertyDeclaration: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"@typescript-eslint/no-inferrable-types": "off",
|
|
||||||
|
|
||||||
"@typescript-eslint/unified-signatures": "error",
|
|
||||||
"arrow-body-style": "error",
|
|
||||||
complexity: "off",
|
|
||||||
"consistent-return": "error",
|
|
||||||
"constructor-super": "error",
|
|
||||||
curly: "error",
|
|
||||||
"dot-notation": "off",
|
|
||||||
eqeqeq: ["error", "smart"],
|
|
||||||
"guard-for-in": "error",
|
|
||||||
|
|
||||||
"id-denylist": ["error", "any", "Number", "number", "String", "string", "Boolean", "boolean", "Undefined", "undefined"],
|
|
||||||
|
|
||||||
"id-match": "error",
|
|
||||||
"import/no-default-export": "error",
|
|
||||||
"import/no-extraneous-dependencies": "off",
|
|
||||||
"import/no-internal-modules": "off",
|
|
||||||
"sort-imports": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
allowSeparatedGroups: true,
|
|
||||||
ignoreDeclarationSort: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"import/order": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
groups: [["external", "builtin"], "internal", ["sibling", "parent", "index"]],
|
|
||||||
"newlines-between": "always",
|
|
||||||
pathGroups: [
|
|
||||||
{ pattern: "@file/**/*", group: "internal" },
|
|
||||||
{ pattern: "@file/**", group: "internal" },
|
|
||||||
{ pattern: "@export/**", group: "internal" },
|
|
||||||
],
|
|
||||||
pathGroupsExcludedImportTypes: ["internal"],
|
|
||||||
alphabetize: {
|
|
||||||
order: "asc",
|
|
||||||
caseInsensitive: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
indent: "off",
|
|
||||||
"jsdoc/check-alignment": "error",
|
|
||||||
"jsdoc/check-indentation": "off",
|
|
||||||
"max-classes-per-file": "off",
|
|
||||||
"max-len": "off",
|
|
||||||
"new-parens": "error",
|
|
||||||
"no-bitwise": "error",
|
|
||||||
"no-caller": "error",
|
|
||||||
"no-cond-assign": "error",
|
|
||||||
"no-console": "error",
|
|
||||||
"no-debugger": "error",
|
|
||||||
"no-duplicate-case": "error",
|
|
||||||
"no-duplicate-imports": "error",
|
|
||||||
"no-empty": "error",
|
|
||||||
"no-empty-function": "off",
|
|
||||||
"no-eval": "error",
|
|
||||||
"no-extra-bind": "error",
|
|
||||||
"no-fallthrough": "off",
|
|
||||||
"no-invalid-this": "off",
|
|
||||||
"no-multiple-empty-lines": "error",
|
|
||||||
"no-new-func": "error",
|
|
||||||
"no-new-wrappers": "error",
|
|
||||||
"no-param-reassign": "error",
|
|
||||||
"no-redeclare": "error",
|
|
||||||
"no-return-await": "error",
|
|
||||||
"no-sequences": "error",
|
|
||||||
"no-shadow": "off",
|
|
||||||
"no-sparse-arrays": "error",
|
|
||||||
"no-throw-literal": "error",
|
|
||||||
"no-trailing-spaces": "error",
|
|
||||||
"no-undef-init": "error",
|
|
||||||
|
|
||||||
"no-underscore-dangle": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
allow: ["_attr"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"no-unsafe-finally": "error",
|
|
||||||
"no-unused-expressions": "off",
|
|
||||||
"no-unused-labels": "error",
|
|
||||||
"no-use-before-define": "off",
|
|
||||||
"no-useless-constructor": "error",
|
|
||||||
"no-var": "error",
|
|
||||||
"object-shorthand": "off",
|
|
||||||
"one-var": ["error", "never"],
|
|
||||||
"prefer-arrow/prefer-arrow-functions": "error",
|
|
||||||
"prefer-const": "error",
|
|
||||||
"prefer-object-spread": "error",
|
|
||||||
radix: "error",
|
|
||||||
"space-in-parens": ["error", "never"],
|
|
||||||
|
|
||||||
"spaced-comment": [
|
|
||||||
"error",
|
|
||||||
"always",
|
|
||||||
{
|
|
||||||
markers: ["/"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"unicorn/filename-case": "error",
|
|
||||||
"unicorn/prefer-ternary": "error",
|
|
||||||
"use-isnan": "error",
|
|
||||||
"valid-typeof": "off",
|
|
||||||
|
|
||||||
"functional/immutable-data": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
ignoreImmediateMutation: true,
|
|
||||||
ignoreAccessorPattern: ["**.root*", "**.numberingReferences*", "**.sections*", "**.properties*"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"functional/prefer-property-signatures": "error",
|
|
||||||
"functional/no-mixed-types": "error",
|
|
||||||
"functional/prefer-readonly-type": "error",
|
|
||||||
|
|
||||||
"@typescript-eslint/no-unused-vars": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
argsIgnorePattern: "^[_]+$",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ["**/*.spec.ts"],
|
|
||||||
plugins: {
|
|
||||||
unicorn,
|
|
||||||
jsdoc,
|
|
||||||
"prefer-arrow": preferArrow,
|
|
||||||
functional,
|
|
||||||
},
|
|
||||||
languageOptions: {
|
|
||||||
globals: {
|
|
||||||
...globals.browser,
|
|
||||||
...globals.node,
|
|
||||||
},
|
|
||||||
|
|
||||||
sourceType: "module",
|
|
||||||
|
|
||||||
parserOptions: {
|
|
||||||
projectService: true,
|
|
||||||
tsconfigRootDir: import.meta.dirname,
|
|
||||||
project: ["tsconfig.json"],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
rules: {
|
|
||||||
"@typescript-eslint/no-unused-expressions": "off",
|
|
||||||
"@typescript-eslint/dot-notation": "off",
|
|
||||||
"prefer-destructuring": "off",
|
|
||||||
"@typescript-eslint/explicit-function-return-type": "off",
|
|
||||||
"no-unused-vars": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
argsIgnorePattern: "^[_]+$",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
export default config;
|
|
13503
package-lock.json
generated
13503
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
44
package.json
44
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "docx",
|
"name": "docx",
|
||||||
"version": "9.1.0",
|
"version": "8.5.0",
|
||||||
"description": "Easily generate .docx files with JS/TS with a nice declarative API. Works for Node and on the Browser.",
|
"description": "Easily generate .docx files with JS/TS with a nice declarative API. Works for Node and on the Browser.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "build/index.umd.js",
|
"main": "build/index.umd.js",
|
||||||
@ -22,7 +22,7 @@
|
|||||||
"test": "vitest --ui --coverage",
|
"test": "vitest --ui --coverage",
|
||||||
"test:ci": "vitest run --coverage",
|
"test:ci": "vitest run --coverage",
|
||||||
"prepublishOnly": "npm run build --omit=dev",
|
"prepublishOnly": "npm run build --omit=dev",
|
||||||
"lint": "eslint --flag unstable_ts_config --config eslint.config.ts",
|
"lint": "eslint --ext .ts src",
|
||||||
"predemo": "npm run build",
|
"predemo": "npm run build",
|
||||||
"demo": "tsx ./demo/index.ts",
|
"demo": "tsx ./demo/index.ts",
|
||||||
"typedoc": "typedoc src/index.ts --tsconfig tsconfig.typedoc.json",
|
"typedoc": "typedoc src/index.ts --tsconfig tsconfig.typedoc.json",
|
||||||
@ -54,8 +54,7 @@
|
|||||||
"clippy"
|
"clippy"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "^22.7.5",
|
"@types/node": "^20.3.1",
|
||||||
"hash.js": "^1.1.7",
|
|
||||||
"jszip": "^3.10.1",
|
"jszip": "^3.10.1",
|
||||||
"nanoid": "^5.0.4",
|
"nanoid": "^5.0.4",
|
||||||
"xml": "^1.0.1",
|
"xml": "^1.0.1",
|
||||||
@ -68,43 +67,38 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://docx.js.org",
|
"homepage": "https://docx.js.org",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/compat": "^1.2.1",
|
|
||||||
"@types/eslint__js": "^8.42.3",
|
|
||||||
"@types/inquirer": "^9.0.3",
|
"@types/inquirer": "^9.0.3",
|
||||||
"@types/prompt": "^1.1.1",
|
"@types/prompt": "^1.1.1",
|
||||||
"@types/unzipper": "^0.10.4",
|
"@types/unzipper": "^0.10.4",
|
||||||
"@types/xml": "^1.0.8",
|
"@types/xml": "^1.0.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.8.1",
|
"@typescript-eslint/eslint-plugin": "^6.9.1",
|
||||||
"@typescript-eslint/parser": "^8.8.1",
|
"@typescript-eslint/parser": "^6.9.1",
|
||||||
"@vitest/coverage-v8": "^1.1.0",
|
"@vitest/coverage-v8": "^1.1.0",
|
||||||
"@vitest/ui": "^2.1.2",
|
"@vitest/ui": "^1.1.0",
|
||||||
"cspell": "^8.2.3",
|
"cspell": "^8.2.3",
|
||||||
"docsify-cli": "^4.3.0",
|
"docsify-cli": "^4.3.0",
|
||||||
"eslint": "^9.13.0",
|
"eslint": "^8.23.0",
|
||||||
"eslint-import-resolver-typescript": "^3.6.3",
|
"eslint-plugin-functional": "^6.0.0",
|
||||||
"eslint-plugin-functional": "^7.0.2",
|
|
||||||
"eslint-plugin-import": "^2.26.0",
|
"eslint-plugin-import": "^2.26.0",
|
||||||
"eslint-plugin-jsdoc": "^50.3.1",
|
"eslint-plugin-jsdoc": "^48.0.2",
|
||||||
"eslint-plugin-no-null": "^1.0.2",
|
"eslint-plugin-no-null": "^1.0.2",
|
||||||
"eslint-plugin-prefer-arrow": "^1.2.3",
|
"eslint-plugin-prefer-arrow": "^1.2.3",
|
||||||
"eslint-plugin-unicorn": "^56.0.0",
|
"eslint-plugin-unicorn": "^50.0.1",
|
||||||
"execa": "^9.4.0",
|
"execa": "^8.0.1",
|
||||||
"glob": "^11.0.0",
|
"glob": "^10.2.7",
|
||||||
"inquirer": "^12.0.0",
|
"inquirer": "^9.2.7",
|
||||||
"jiti": "^2.3.3",
|
"jsdom": "^23.0.1",
|
||||||
"jsdom": "^25.0.1",
|
|
||||||
"pre-commit": "^1.2.2",
|
"pre-commit": "^1.2.2",
|
||||||
"prettier": "^3.1.1",
|
"prettier": "^3.1.1",
|
||||||
"tsconfig-paths": "^4.0.0",
|
"tsconfig-paths": "^4.0.0",
|
||||||
"tsx": "^4.7.0",
|
"tsx": "^4.7.0",
|
||||||
"typedoc": "^0.26.9",
|
"typedoc": "^0.25.4",
|
||||||
"typescript": "5.3.3",
|
"typescript": "5.3.3",
|
||||||
"typescript-eslint": "^8.10.0",
|
"unzipper": "^0.10.11",
|
||||||
"unzipper": "^0.12.3",
|
|
||||||
"vite": "^5.0.10",
|
"vite": "^5.0.10",
|
||||||
"vite-plugin-dts": "^4.2.4",
|
"vite-plugin-dts": "^3.3.1",
|
||||||
"vite-plugin-node-polyfills": "^0.22.0",
|
"vite-plugin-node-polyfills": "^0.19.0",
|
||||||
"vite-tsconfig-paths": "^5.0.1",
|
"vite-tsconfig-paths": "^4.2.0",
|
||||||
"vitest": "^1.1.0"
|
"vitest": "^1.1.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { BaseXmlComponent, IContext, IXmlableObject } from "@file/xml-components";
|
import { BaseXmlComponent, IContext, IXmlableObject } from "@file/xml-components";
|
||||||
|
|
||||||
export class Formatter {
|
export class Formatter {
|
||||||
|
// tslint:disable-next-line: no-object-literal-type-assertion
|
||||||
public format(input: BaseXmlComponent, context: IContext = { stack: [] } as unknown as IContext): IXmlableObject {
|
public format(input: BaseXmlComponent, context: IContext = { stack: [] } as unknown as IContext): IXmlableObject {
|
||||||
const output = input.prepForXml(context);
|
const output = input.prepForXml(context);
|
||||||
|
|
||||||
|
@ -125,6 +125,7 @@ describe("Compiler", () => {
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// tslint:disable-next-line: no-string-literal
|
||||||
const spy = vi.spyOn(compiler["formatter"], "format");
|
const spy = vi.spyOn(compiler["formatter"], "format");
|
||||||
|
|
||||||
compiler.compile(file);
|
compiler.compile(file);
|
||||||
|
@ -9,12 +9,12 @@ import { ImageReplacer } from "./image-replacer";
|
|||||||
import { NumberingReplacer } from "./numbering-replacer";
|
import { NumberingReplacer } from "./numbering-replacer";
|
||||||
import { PrettifyType } from "./packer";
|
import { PrettifyType } from "./packer";
|
||||||
|
|
||||||
type IXmlifyedFile = {
|
interface IXmlifyedFile {
|
||||||
readonly data: string;
|
readonly data: string;
|
||||||
readonly path: string;
|
readonly path: string;
|
||||||
};
|
}
|
||||||
|
|
||||||
type IXmlifyedFileMapping = {
|
interface IXmlifyedFileMapping {
|
||||||
readonly Document: IXmlifyedFile;
|
readonly Document: IXmlifyedFile;
|
||||||
readonly Styles: IXmlifyedFile;
|
readonly Styles: IXmlifyedFile;
|
||||||
readonly Properties: IXmlifyedFile;
|
readonly Properties: IXmlifyedFile;
|
||||||
@ -34,7 +34,7 @@ type IXmlifyedFileMapping = {
|
|||||||
readonly Comments?: IXmlifyedFile;
|
readonly Comments?: IXmlifyedFile;
|
||||||
readonly FontTable?: IXmlifyedFile;
|
readonly FontTable?: IXmlifyedFile;
|
||||||
readonly FontTableRelationships?: IXmlifyedFile;
|
readonly FontTableRelationships?: IXmlifyedFile;
|
||||||
};
|
}
|
||||||
|
|
||||||
export class Compiler {
|
export class Compiler {
|
||||||
private readonly formatter: Formatter;
|
private readonly formatter: Formatter;
|
||||||
@ -109,12 +109,6 @@ export class Compiler {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
file.Document.Relationships.createRelationship(
|
|
||||||
file.Document.Relationships.RelationshipCount + 1,
|
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable",
|
|
||||||
"fontTable.xml",
|
|
||||||
);
|
|
||||||
|
|
||||||
return xml(
|
return xml(
|
||||||
this.formatter.format(file.Document.Relationships, {
|
this.formatter.format(file.Document.Relationships, {
|
||||||
viewWrapper: file.Document,
|
viewWrapper: file.Document,
|
||||||
|
@ -139,6 +139,7 @@ describe("Packer", () => {
|
|||||||
it("should create a standard docx file", async () => {
|
it("should create a standard docx file", async () => {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
vi.spyOn((Packer as any).compiler, "compile").mockReturnValue({
|
vi.spyOn((Packer as any).compiler, "compile").mockReturnValue({
|
||||||
|
// tslint:disable-next-line: no-empty
|
||||||
generateAsync: () => vi.fn(),
|
generateAsync: () => vi.fn(),
|
||||||
});
|
});
|
||||||
const str = await Packer.toBlob(file);
|
const str = await Packer.toBlob(file);
|
||||||
@ -166,6 +167,7 @@ describe("Packer", () => {
|
|||||||
it("should create a standard docx file", async () => {
|
it("should create a standard docx file", async () => {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
vi.spyOn((Packer as any).compiler, "compile").mockReturnValue({
|
vi.spyOn((Packer as any).compiler, "compile").mockReturnValue({
|
||||||
|
// tslint:disable-next-line: no-empty
|
||||||
generateAsync: () => Promise.resolve(vi.fn()),
|
generateAsync: () => Promise.resolve(vi.fn()),
|
||||||
});
|
});
|
||||||
const stream = Packer.toStream(file);
|
const stream = Packer.toStream(file);
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { Stream } from "stream";
|
import { Stream } from "stream";
|
||||||
|
|
||||||
import { File } from "@file/file";
|
import { File } from "@file/file";
|
||||||
|
|
||||||
import { Compiler } from "./next-compiler";
|
import { Compiler } from "./next-compiler";
|
||||||
@ -11,7 +10,7 @@ export const PrettifyType = {
|
|||||||
NONE: "",
|
NONE: "",
|
||||||
WITH_2_BLANKS: " ",
|
WITH_2_BLANKS: " ",
|
||||||
WITH_4_BLANKS: " ",
|
WITH_4_BLANKS: " ",
|
||||||
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||||
WITH_TAB: "\t",
|
WITH_TAB: "\t",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { AppPropertiesAttributes } from "./app-properties-attributes";
|
import { AppPropertiesAttributes } from "./app-properties-attributes";
|
||||||
|
|
||||||
export class AppProperties extends XmlComponent {
|
export class AppProperties extends XmlComponent {
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
import { XmlAttributeComponent, XmlComponent } from "@file/xml-components";
|
import { XmlAttributeComponent, XmlComponent } from "@file/xml-components";
|
||||||
import { eighthPointMeasureValue, hexColorValue, pointMeasureValue } from "@util/values";
|
import { eighthPointMeasureValue, hexColorValue, pointMeasureValue } from "@util/values";
|
||||||
|
|
||||||
export type IBorderOptions = {
|
export interface IBorderOptions {
|
||||||
readonly style: (typeof BorderStyle)[keyof typeof BorderStyle];
|
readonly style: (typeof BorderStyle)[keyof typeof BorderStyle];
|
||||||
/** Border color, in hex (eg 'FF00AA') */
|
/** Border color, in hex (eg 'FF00AA') */
|
||||||
readonly color?: string;
|
readonly color?: string;
|
||||||
@ -30,7 +30,7 @@ export type IBorderOptions = {
|
|||||||
readonly size?: number;
|
readonly size?: number;
|
||||||
/** Spacing offset. Values are specified in pt */
|
/** Spacing offset. Values are specified in pt */
|
||||||
readonly space?: number;
|
readonly space?: number;
|
||||||
};
|
}
|
||||||
|
|
||||||
export class BorderElement extends XmlComponent {
|
export class BorderElement extends XmlComponent {
|
||||||
public constructor(elementName: string, { color, size, space, style }: IBorderOptions) {
|
public constructor(elementName: string, { color, size, space, style }: IBorderOptions) {
|
||||||
@ -55,6 +55,7 @@ class BordersAttributes extends XmlAttributeComponent<IBorderOptions> {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
export const BorderStyle = {
|
export const BorderStyle = {
|
||||||
SINGLE: "single",
|
SINGLE: "single",
|
||||||
DASH_DOT_STROKED: "dashDotStroked",
|
DASH_DOT_STROKED: "dashDotStroked",
|
||||||
@ -84,3 +85,4 @@ export const BorderStyle = {
|
|||||||
TRIPLE: "triple",
|
TRIPLE: "triple",
|
||||||
WAVE: "wave",
|
WAVE: "wave",
|
||||||
} as const;
|
} as const;
|
||||||
|
/* eslint-enable */
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
|
|
||||||
import { CheckBoxUtil } from ".";
|
import { CheckBoxUtil } from ".";
|
||||||
|
|
||||||
describe("CheckBoxUtil", () => {
|
describe("CheckBoxUtil", () => {
|
||||||
|
@ -7,20 +7,20 @@
|
|||||||
// </xsd:complexType>
|
// </xsd:complexType>
|
||||||
// <xsd:element name="checkbox" type="CT_SdtCheckbox"/>
|
// <xsd:element name="checkbox" type="CT_SdtCheckbox"/>
|
||||||
|
|
||||||
import { CheckBoxSymbolElement } from "@file/checkbox/checkbox-symbol";
|
|
||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
import { CheckBoxSymbolElement } from "@file/checkbox/checkbox-symbol";
|
||||||
|
|
||||||
export type ICheckboxSymbolProperties = {
|
export interface ICheckboxSymbolProperties {
|
||||||
readonly value?: string;
|
readonly value?: string;
|
||||||
readonly font?: string;
|
readonly font?: string;
|
||||||
};
|
}
|
||||||
|
|
||||||
export type ICheckboxSymbolOptions = {
|
export interface ICheckboxSymbolOptions {
|
||||||
readonly alias?: string;
|
readonly alias?: string;
|
||||||
readonly checked?: boolean;
|
readonly checked?: boolean;
|
||||||
readonly checkedState?: ICheckboxSymbolProperties;
|
readonly checkedState?: ICheckboxSymbolProperties;
|
||||||
readonly uncheckedState?: ICheckboxSymbolProperties;
|
readonly uncheckedState?: ICheckboxSymbolProperties;
|
||||||
};
|
}
|
||||||
|
|
||||||
export class CheckBoxUtil extends XmlComponent {
|
export class CheckBoxUtil extends XmlComponent {
|
||||||
private readonly DEFAULT_UNCHECKED_SYMBOL: string = "2610";
|
private readonly DEFAULT_UNCHECKED_SYMBOL: string = "2610";
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
|
|
||||||
import { CheckBox } from "./checkbox";
|
import { CheckBox } from "./checkbox";
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import { SymbolRun } from "@file/paragraph/run/symbol-run";
|
import { SymbolRun } from "@file/paragraph/run/symbol-run";
|
||||||
import { StructuredDocumentTagContent } from "@file/table-of-contents/sdt-content";
|
|
||||||
import { StructuredDocumentTagProperties } from "@file/table-of-contents/sdt-properties";
|
import { StructuredDocumentTagProperties } from "@file/table-of-contents/sdt-properties";
|
||||||
|
import { StructuredDocumentTagContent } from "@file/table-of-contents/sdt-content";
|
||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { CheckBoxUtil, ICheckboxSymbolOptions } from "./checkbox-util";
|
import { CheckBoxUtil, ICheckboxSymbolOptions } from "./checkbox-util";
|
||||||
|
|
||||||
export class CheckBox extends XmlComponent {
|
export class CheckBox extends XmlComponent {
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
// tslint:disable:no-string-literal
|
||||||
|
|
||||||
import { beforeEach, describe, expect, it } from "vitest";
|
import { beforeEach, describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { ContentTypeAttributes } from "./content-types-attributes";
|
import { ContentTypeAttributes } from "./content-types-attributes";
|
||||||
import { Default } from "./default/default";
|
import { Default } from "./default/default";
|
||||||
import { Override } from "./override/override";
|
import { Override } from "./override/override";
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { DefaultAttributes } from "./default-attributes";
|
import { DefaultAttributes } from "./default-attributes";
|
||||||
|
|
||||||
export class Default extends XmlComponent {
|
export class Default extends XmlComponent {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { OverrideAttributes } from "./override-attributes";
|
import { OverrideAttributes } from "./override-attributes";
|
||||||
|
|
||||||
export class Override extends XmlComponent {
|
export class Override extends XmlComponent {
|
||||||
|
@ -45,7 +45,7 @@ describe("Properties", () => {
|
|||||||
expect(tree["cp:coreProperties"]).to.be.an.instanceof(Array);
|
expect(tree["cp:coreProperties"]).to.be.an.instanceof(Array);
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
const key = (obj: Readonly<Record<string, any>>) => Object.keys(obj)[0];
|
const key = (obj: { readonly [key: string]: any }) => Object.keys(obj)[0];
|
||||||
expect(tree["cp:coreProperties"].map(key)).to.include.members([
|
expect(tree["cp:coreProperties"].map(key)).to.include.members([
|
||||||
"_attr",
|
"_attr",
|
||||||
"cp:keywords",
|
"cp:keywords",
|
||||||
|
@ -1,19 +1,21 @@
|
|||||||
import { FontOptions } from "@file/fonts/font-table";
|
|
||||||
import { ICommentsOptions } from "@file/paragraph/run/comment-run";
|
import { ICommentsOptions } from "@file/paragraph/run/comment-run";
|
||||||
import { IHyphenationOptions } from "@file/settings";
|
|
||||||
import { ICompatibilityOptions } from "@file/settings/compatibility";
|
import { ICompatibilityOptions } from "@file/settings/compatibility";
|
||||||
|
import { FontOptions } from "@file/fonts/font-table";
|
||||||
import { StringContainer, XmlComponent } from "@file/xml-components";
|
import { StringContainer, XmlComponent } from "@file/xml-components";
|
||||||
import { dateTimeValue } from "@util/values";
|
import { dateTimeValue } from "@util/values";
|
||||||
|
import { IHyphenationOptions } from "@file/settings";
|
||||||
|
import { IFootnoteProperties } from "@file/settings/footnote-properties";
|
||||||
|
|
||||||
import { ICustomPropertyOptions } from "../custom-properties";
|
import { ICustomPropertyOptions } from "../custom-properties";
|
||||||
import { IDocumentBackgroundOptions } from "../document";
|
import { IDocumentBackgroundOptions } from "../document";
|
||||||
|
|
||||||
import { DocumentAttributes } from "../document/document-attributes";
|
import { DocumentAttributes } from "../document/document-attributes";
|
||||||
import { ISectionOptions } from "../file";
|
import { ISectionOptions } from "../file";
|
||||||
import { INumberingOptions } from "../numbering";
|
import { INumberingOptions } from "../numbering";
|
||||||
import { Paragraph } from "../paragraph";
|
import { Paragraph } from "../paragraph";
|
||||||
import { IStylesOptions } from "../styles";
|
import { IStylesOptions } from "../styles";
|
||||||
|
|
||||||
export type IPropertiesOptions = {
|
export interface IPropertiesOptions {
|
||||||
readonly sections: readonly ISectionOptions[];
|
readonly sections: readonly ISectionOptions[];
|
||||||
readonly title?: string;
|
readonly title?: string;
|
||||||
readonly subject?: string;
|
readonly subject?: string;
|
||||||
@ -26,14 +28,11 @@ export type IPropertiesOptions = {
|
|||||||
readonly styles?: IStylesOptions;
|
readonly styles?: IStylesOptions;
|
||||||
readonly numbering?: INumberingOptions;
|
readonly numbering?: INumberingOptions;
|
||||||
readonly comments?: ICommentsOptions;
|
readonly comments?: ICommentsOptions;
|
||||||
readonly footnotes?: Readonly<
|
readonly footnotes?: {
|
||||||
Record<
|
readonly [key: string]: {
|
||||||
string,
|
readonly children: readonly Paragraph[];
|
||||||
{
|
};
|
||||||
readonly children: readonly Paragraph[];
|
};
|
||||||
}
|
|
||||||
>
|
|
||||||
>;
|
|
||||||
readonly background?: IDocumentBackgroundOptions;
|
readonly background?: IDocumentBackgroundOptions;
|
||||||
readonly features?: {
|
readonly features?: {
|
||||||
readonly trackRevisions?: boolean;
|
readonly trackRevisions?: boolean;
|
||||||
@ -46,7 +45,8 @@ export type IPropertiesOptions = {
|
|||||||
readonly defaultTabStop?: number;
|
readonly defaultTabStop?: number;
|
||||||
readonly fonts?: readonly FontOptions[];
|
readonly fonts?: readonly FontOptions[];
|
||||||
readonly hyphenation?: IHyphenationOptions;
|
readonly hyphenation?: IHyphenationOptions;
|
||||||
};
|
readonly footnoteProperties?: IFootnoteProperties;
|
||||||
|
}
|
||||||
|
|
||||||
// <xs:element name="coreProperties" type="CT_CoreProperties"/>
|
// <xs:element name="coreProperties" type="CT_CoreProperties"/>
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { IContext, IXmlableObject, XmlComponent } from "@file/xml-components";
|
import { IContext, IXmlableObject, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { CustomPropertiesAttributes } from "./custom-properties-attributes";
|
import { CustomPropertiesAttributes } from "./custom-properties-attributes";
|
||||||
import { CustomProperty, ICustomPropertyOptions } from "./custom-property";
|
import { CustomProperty, ICustomPropertyOptions } from "./custom-property";
|
||||||
|
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { CustomPropertyAttributes } from "./custom-property-attributes";
|
import { CustomPropertyAttributes } from "./custom-property-attributes";
|
||||||
|
|
||||||
export type ICustomPropertyOptions = {
|
export interface ICustomPropertyOptions {
|
||||||
readonly name: string;
|
readonly name: string;
|
||||||
readonly value: string;
|
readonly value: string;
|
||||||
};
|
}
|
||||||
|
|
||||||
export class CustomProperty extends XmlComponent {
|
export class CustomProperty extends XmlComponent {
|
||||||
public constructor(id: number, properties: ICustomPropertyOptions) {
|
public constructor(id: number, properties: ICustomPropertyOptions) {
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
|
import { XmlComponent } from "./xml-components";
|
||||||
import { Document, IDocumentOptions } from "./document";
|
import { Document, IDocumentOptions } from "./document";
|
||||||
import { Footer } from "./footer/footer";
|
import { Footer } from "./footer/footer";
|
||||||
import { FootNotes } from "./footnotes";
|
import { FootNotes } from "./footnotes";
|
||||||
import { Header } from "./header/header";
|
import { Header } from "./header/header";
|
||||||
import { Relationships } from "./relationships";
|
import { Relationships } from "./relationships";
|
||||||
import { XmlComponent } from "./xml-components";
|
|
||||||
|
|
||||||
export type IViewWrapper = {
|
export interface IViewWrapper {
|
||||||
readonly View: Document | Footer | Header | FootNotes | XmlComponent;
|
readonly View: Document | Footer | Header | FootNotes | XmlComponent;
|
||||||
readonly Relationships: Relationships;
|
readonly Relationships: Relationships;
|
||||||
};
|
}
|
||||||
|
|
||||||
export class DocumentWrapper implements IViewWrapper {
|
export class DocumentWrapper implements IViewWrapper {
|
||||||
private readonly document: Document;
|
private readonly document: Document;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { NextAttributeComponent, XmlComponent } from "@file/xml-components";
|
import { NextAttributeComponent, XmlComponent } from "@file/xml-components";
|
||||||
import { PositiveUniversalMeasure, decimalNumber, twipsMeasureValue } from "@util/values";
|
import { decimalNumber, PositiveUniversalMeasure, twipsMeasureValue } from "@util/values";
|
||||||
|
|
||||||
import { Column } from "./column";
|
import { Column } from "./column";
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ import { decimalNumber } from "@util/values";
|
|||||||
// <xsd:attribute name="charSpace" type="ST_DecimalNumber"/>
|
// <xsd:attribute name="charSpace" type="ST_DecimalNumber"/>
|
||||||
// </xsd:complexType>
|
// </xsd:complexType>
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
export const DocumentGridType = {
|
export const DocumentGridType = {
|
||||||
DEFAULT: "default",
|
DEFAULT: "default",
|
||||||
LINES: "lines",
|
LINES: "lines",
|
||||||
@ -24,11 +25,12 @@ export const DocumentGridType = {
|
|||||||
SNAP_TO_CHARS: "snapToChars",
|
SNAP_TO_CHARS: "snapToChars",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export type IDocGridAttributesProperties = {
|
/* eslint-enable */
|
||||||
|
export interface IDocGridAttributesProperties {
|
||||||
readonly type?: (typeof DocumentGridType)[keyof typeof DocumentGridType];
|
readonly type?: (typeof DocumentGridType)[keyof typeof DocumentGridType];
|
||||||
readonly linePitch?: number;
|
readonly linePitch?: number;
|
||||||
readonly charSpace?: number;
|
readonly charSpace?: number;
|
||||||
};
|
}
|
||||||
|
|
||||||
export class DocGridAttributes extends XmlAttributeComponent<IDocGridAttributesProperties> {
|
export class DocGridAttributes extends XmlAttributeComponent<IDocGridAttributesProperties> {
|
||||||
protected readonly xmlKeys = {
|
protected readonly xmlKeys = {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
|
|
||||||
import { HeaderFooterReference, HeaderFooterReferenceType, HeaderFooterType } from "./header-footer-reference";
|
import { HeaderFooterReference, HeaderFooterReferenceType, HeaderFooterType } from "./header-footer-reference";
|
||||||
|
|
||||||
describe("HeaderFooterReference", () => {
|
describe("HeaderFooterReference", () => {
|
||||||
|
@ -32,10 +32,10 @@ export const HeaderFooterReferenceType = {
|
|||||||
// <xsd:attribute ref="r:id" use="required"/>
|
// <xsd:attribute ref="r:id" use="required"/>
|
||||||
// </xsd:complexType>
|
// </xsd:complexType>
|
||||||
|
|
||||||
export type IHeaderFooterOptions = {
|
export interface IHeaderFooterOptions {
|
||||||
readonly type?: (typeof HeaderFooterReferenceType)[keyof typeof HeaderFooterReferenceType];
|
readonly type?: (typeof HeaderFooterReferenceType)[keyof typeof HeaderFooterReferenceType];
|
||||||
readonly id?: number;
|
readonly id?: number;
|
||||||
};
|
}
|
||||||
|
|
||||||
class FooterReferenceAttributes extends XmlAttributeComponent<{
|
class FooterReferenceAttributes extends XmlAttributeComponent<{
|
||||||
readonly type: (typeof HeaderFooterReferenceType)[keyof typeof HeaderFooterReferenceType];
|
readonly type: (typeof HeaderFooterReferenceType)[keyof typeof HeaderFooterReferenceType];
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
|
||||||
|
|
||||||
import { createLineNumberType } from "./line-number";
|
|
||||||
|
|
||||||
describe("createLineNumberType", () => {
|
|
||||||
it("should work", () => {
|
|
||||||
const textDirection = createLineNumberType({ countBy: 0, start: 0, restart: "newPage", distance: 10 });
|
|
||||||
|
|
||||||
const tree = new Formatter().format(textDirection);
|
|
||||||
expect(tree).to.deep.equal({
|
|
||||||
"w:lnNumType": { _attr: { "w:countBy": 0, "w:start": 0, "w:restart": "newPage", "w:distance": 10 } },
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should work with string measures for distance", () => {
|
|
||||||
const textDirection = createLineNumberType({ countBy: 0, start: 0, restart: "newPage", distance: "10mm" });
|
|
||||||
|
|
||||||
const tree = new Formatter().format(textDirection);
|
|
||||||
expect(tree).to.deep.equal({
|
|
||||||
"w:lnNumType": { _attr: { "w:countBy": 0, "w:start": 0, "w:restart": "newPage", "w:distance": "10mm" } },
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should work with blank entries", () => {
|
|
||||||
const textDirection = createLineNumberType({});
|
|
||||||
|
|
||||||
const tree = new Formatter().format(textDirection);
|
|
||||||
expect(tree).to.deep.equal({
|
|
||||||
"w:lnNumType": { _attr: {} },
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,6 +1,6 @@
|
|||||||
// http://officeopenxml.com/WPsectionLineNumbering.php
|
// http://officeopenxml.com/WPsectionLineNumbering.php
|
||||||
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
||||||
import { PositiveUniversalMeasure, decimalNumber, twipsMeasureValue } from "@util/values";
|
import { decimalNumber, PositiveUniversalMeasure, twipsMeasureValue } from "@util/values";
|
||||||
|
|
||||||
// <xsd:simpleType name="ST_LineNumberRestart">
|
// <xsd:simpleType name="ST_LineNumberRestart">
|
||||||
// <xsd:restriction base="xsd:string">
|
// <xsd:restriction base="xsd:string">
|
||||||
@ -10,11 +10,13 @@ import { PositiveUniversalMeasure, decimalNumber, twipsMeasureValue } from "@uti
|
|||||||
// </xsd:restriction>
|
// </xsd:restriction>
|
||||||
// </xsd:simpleType>
|
// </xsd:simpleType>
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
export const LineNumberRestartFormat = {
|
export const LineNumberRestartFormat = {
|
||||||
NEW_PAGE: "newPage",
|
NEW_PAGE: "newPage",
|
||||||
NEW_SECTION: "newSection",
|
NEW_SECTION: "newSection",
|
||||||
CONTINUOUS: "continuous",
|
CONTINUOUS: "continuous",
|
||||||
} as const;
|
} as const;
|
||||||
|
/* eslint-enable */
|
||||||
|
|
||||||
// <xsd:complexType name="CT_LineNumber">
|
// <xsd:complexType name="CT_LineNumber">
|
||||||
// <xsd:attribute name="countBy" type="ST_DecimalNumber" use="optional"/>
|
// <xsd:attribute name="countBy" type="ST_DecimalNumber" use="optional"/>
|
||||||
|
@ -3,7 +3,7 @@ import { describe, expect, it } from "vitest";
|
|||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
import { BorderStyle } from "@file/border";
|
import { BorderStyle } from "@file/border";
|
||||||
|
|
||||||
import { PageBorderDisplay, PageBorderZOrder, PageBorders } from "./page-borders";
|
import { PageBorderDisplay, PageBorders, PageBorderZOrder } from "./page-borders";
|
||||||
|
|
||||||
describe("PageBorders", () => {
|
describe("PageBorders", () => {
|
||||||
describe("#constructor()", () => {
|
describe("#constructor()", () => {
|
||||||
|
@ -10,11 +10,13 @@ import { IgnoreIfEmptyXmlComponent, XmlAttributeComponent } from "@file/xml-comp
|
|||||||
// </xsd:restriction>
|
// </xsd:restriction>
|
||||||
// </xsd:simpleType>
|
// </xsd:simpleType>
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
export const PageBorderDisplay = {
|
export const PageBorderDisplay = {
|
||||||
ALL_PAGES: "allPages",
|
ALL_PAGES: "allPages",
|
||||||
FIRST_PAGE: "firstPage",
|
FIRST_PAGE: "firstPage",
|
||||||
NOT_FIRST_PAGE: "notFirstPage",
|
NOT_FIRST_PAGE: "notFirstPage",
|
||||||
} as const;
|
} as const;
|
||||||
|
/* eslint-enable */
|
||||||
|
|
||||||
// <xsd:simpleType name="ST_PageBorderOffset">
|
// <xsd:simpleType name="ST_PageBorderOffset">
|
||||||
// <xsd:restriction base="xsd:string">
|
// <xsd:restriction base="xsd:string">
|
||||||
@ -38,19 +40,19 @@ export const PageBorderZOrder = {
|
|||||||
FRONT: "front",
|
FRONT: "front",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export type IPageBorderAttributes = {
|
export interface IPageBorderAttributes {
|
||||||
readonly display?: (typeof PageBorderDisplay)[keyof typeof PageBorderDisplay];
|
readonly display?: (typeof PageBorderDisplay)[keyof typeof PageBorderDisplay];
|
||||||
readonly offsetFrom?: (typeof PageBorderOffsetFrom)[keyof typeof PageBorderOffsetFrom];
|
readonly offsetFrom?: (typeof PageBorderOffsetFrom)[keyof typeof PageBorderOffsetFrom];
|
||||||
readonly zOrder?: (typeof PageBorderZOrder)[keyof typeof PageBorderZOrder];
|
readonly zOrder?: (typeof PageBorderZOrder)[keyof typeof PageBorderZOrder];
|
||||||
};
|
}
|
||||||
|
|
||||||
export type IPageBordersOptions = {
|
export interface IPageBordersOptions {
|
||||||
readonly pageBorders?: IPageBorderAttributes;
|
readonly pageBorders?: IPageBorderAttributes;
|
||||||
readonly pageBorderTop?: IBorderOptions;
|
readonly pageBorderTop?: IBorderOptions;
|
||||||
readonly pageBorderRight?: IBorderOptions;
|
readonly pageBorderRight?: IBorderOptions;
|
||||||
readonly pageBorderBottom?: IBorderOptions;
|
readonly pageBorderBottom?: IBorderOptions;
|
||||||
readonly pageBorderLeft?: IBorderOptions;
|
readonly pageBorderLeft?: IBorderOptions;
|
||||||
};
|
}
|
||||||
|
|
||||||
class PageBordersAttributes extends XmlAttributeComponent<IPageBorderAttributes> {
|
class PageBordersAttributes extends XmlAttributeComponent<IPageBorderAttributes> {
|
||||||
protected readonly xmlKeys = {
|
protected readonly xmlKeys = {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { NextAttributeComponent, XmlComponent } from "@file/xml-components";
|
import { NextAttributeComponent, XmlComponent } from "@file/xml-components";
|
||||||
import { PositiveUniversalMeasure, UniversalMeasure, signedTwipsMeasureValue, twipsMeasureValue } from "@util/values";
|
import { PositiveUniversalMeasure, signedTwipsMeasureValue, twipsMeasureValue, UniversalMeasure } from "@util/values";
|
||||||
|
|
||||||
// <xsd:complexType name="CT_PageMar">
|
// <xsd:complexType name="CT_PageMar">
|
||||||
// <xsd:attribute name="top" type="ST_SignedTwipsMeasure" use="required"/>
|
// <xsd:attribute name="top" type="ST_SignedTwipsMeasure" use="required"/>
|
||||||
|
@ -13,6 +13,7 @@ import { decimalNumber } from "@util/values";
|
|||||||
// </xsd:restriction>
|
// </xsd:restriction>
|
||||||
// </xsd:simpleType>
|
// </xsd:simpleType>
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
export const PageNumberSeparator = {
|
export const PageNumberSeparator = {
|
||||||
HYPHEN: "hyphen",
|
HYPHEN: "hyphen",
|
||||||
PERIOD: "period",
|
PERIOD: "period",
|
||||||
@ -21,11 +22,13 @@ export const PageNumberSeparator = {
|
|||||||
EN_DASH: "endash",
|
EN_DASH: "endash",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export type IPageNumberTypeAttributes = {
|
/* eslint-enable */
|
||||||
|
|
||||||
|
export interface IPageNumberTypeAttributes {
|
||||||
readonly start?: number;
|
readonly start?: number;
|
||||||
readonly formatType?: (typeof NumberFormat)[keyof typeof NumberFormat];
|
readonly formatType?: (typeof NumberFormat)[keyof typeof NumberFormat];
|
||||||
readonly separator?: (typeof PageNumberSeparator)[keyof typeof PageNumberSeparator];
|
readonly separator?: (typeof PageNumberSeparator)[keyof typeof PageNumberSeparator];
|
||||||
};
|
}
|
||||||
|
|
||||||
// <xsd:complexType name="CT_PageNumber">
|
// <xsd:complexType name="CT_PageNumber">
|
||||||
// <xsd:attribute name="fmt" type="ST_NumberFormat" use="optional" default="decimal"/>
|
// <xsd:attribute name="fmt" type="ST_NumberFormat" use="optional" default="decimal"/>
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
|
|
||||||
import { PageTextDirection, PageTextDirectionType } from "./page-text-direction";
|
import { PageTextDirection, PageTextDirectionType } from "./page-text-direction";
|
||||||
|
|
||||||
describe("PageTextDirection", () => {
|
describe("PageTextDirection", () => {
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
import { XmlAttributeComponent, XmlComponent } from "@file/xml-components";
|
import { XmlAttributeComponent, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
export const PageTextDirectionType = {
|
export const PageTextDirectionType = {
|
||||||
LEFT_TO_RIGHT_TOP_TO_BOTTOM: "lrTb",
|
LEFT_TO_RIGHT_TOP_TO_BOTTOM: "lrTb",
|
||||||
TOP_TO_BOTTOM_RIGHT_TO_LEFT: "tbRl",
|
TOP_TO_BOTTOM_RIGHT_TO_LEFT: "tbRl",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
|
/* eslint-enable */
|
||||||
|
|
||||||
class PageTextDirectionAttributes extends XmlAttributeComponent<{
|
class PageTextDirectionAttributes extends XmlAttributeComponent<{
|
||||||
readonly val: (typeof PageTextDirectionType)[keyof typeof PageTextDirectionType];
|
readonly val: (typeof PageTextDirectionType)[keyof typeof PageTextDirectionType];
|
||||||
}> {
|
}> {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
|
|
||||||
import { SectionType, Type } from "./section-type";
|
import { SectionType, Type } from "./section-type";
|
||||||
|
|
||||||
describe("Type", () => {
|
describe("Type", () => {
|
||||||
|
@ -11,6 +11,7 @@ import { XmlAttributeComponent, XmlComponent } from "@file/xml-components";
|
|||||||
// </xsd:restriction>
|
// </xsd:restriction>
|
||||||
// </xsd:simpleType>
|
// </xsd:simpleType>
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
export const SectionType = {
|
export const SectionType = {
|
||||||
NEXT_PAGE: "nextPage",
|
NEXT_PAGE: "nextPage",
|
||||||
NEXT_COLUMN: "nextColumn",
|
NEXT_COLUMN: "nextColumn",
|
||||||
@ -18,6 +19,7 @@ export const SectionType = {
|
|||||||
EVEN_PAGE: "evenPage",
|
EVEN_PAGE: "evenPage",
|
||||||
ODD_PAGE: "oddPage",
|
ODD_PAGE: "oddPage",
|
||||||
} as const;
|
} as const;
|
||||||
|
/* eslint-enable */
|
||||||
|
|
||||||
// <xsd:complexType name="CT_SectType">
|
// <xsd:complexType name="CT_SectType">
|
||||||
// <xsd:attribute name="val" type="ST_SectionMark"/>
|
// <xsd:attribute name="val" type="ST_SectionMark"/>
|
||||||
|
@ -15,7 +15,7 @@ import { LineNumberRestartFormat } from "./properties/line-number";
|
|||||||
import { PageBorderOffsetFrom } from "./properties/page-borders";
|
import { PageBorderOffsetFrom } from "./properties/page-borders";
|
||||||
import { PageTextDirectionType } from "./properties/page-text-direction";
|
import { PageTextDirectionType } from "./properties/page-text-direction";
|
||||||
import { SectionType } from "./properties/section-type";
|
import { SectionType } from "./properties/section-type";
|
||||||
import { SectionProperties, sectionMarginDefaults, sectionPageSizeDefaults } from "./section-properties";
|
import { sectionMarginDefaults, sectionPageSizeDefaults, SectionProperties } from "./section-properties";
|
||||||
|
|
||||||
const DEFAULT_MARGINS = {
|
const DEFAULT_MARGINS = {
|
||||||
"w:bottom": sectionMarginDefaults.BOTTOM,
|
"w:bottom": sectionMarginDefaults.BOTTOM,
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
// http://officeopenxml.com/WPsection.php
|
// http://officeopenxml.com/WPsection.php
|
||||||
|
// tslint:disable: no-unnecessary-initializer
|
||||||
|
|
||||||
import { FooterWrapper } from "@file/footer-wrapper";
|
import { FooterWrapper } from "@file/footer-wrapper";
|
||||||
import { HeaderWrapper } from "@file/header-wrapper";
|
import { HeaderWrapper } from "@file/header-wrapper";
|
||||||
import { VerticalAlign, VerticalAlignElement } from "@file/vertical-align";
|
import { VerticalAlign, VerticalAlignElement } from "@file/vertical-align";
|
||||||
import { OnOffElement, XmlComponent } from "@file/xml-components";
|
import { OnOffElement, XmlComponent } from "@file/xml-components";
|
||||||
|
import { FootnoteProperties, IFootnoteProperties } from "@file/settings/footnote-properties";
|
||||||
|
|
||||||
|
import { HeaderFooterReference, HeaderFooterReferenceType, HeaderFooterType } from "./properties/header-footer-reference";
|
||||||
import { Columns, IColumnsAttributes } from "./properties/columns";
|
import { Columns, IColumnsAttributes } from "./properties/columns";
|
||||||
import { DocumentGrid, IDocGridAttributesProperties } from "./properties/doc-grid";
|
import { DocumentGrid, IDocGridAttributesProperties } from "./properties/doc-grid";
|
||||||
import { HeaderFooterReference, HeaderFooterReferenceType, HeaderFooterType } from "./properties/header-footer-reference";
|
|
||||||
import { ILineNumberAttributes, createLineNumberType } from "./properties/line-number";
|
import { ILineNumberAttributes, createLineNumberType } from "./properties/line-number";
|
||||||
import { IPageBordersOptions, PageBorders } from "./properties/page-borders";
|
import { IPageBordersOptions, PageBorders } from "./properties/page-borders";
|
||||||
import { IPageMarginAttributes, PageMargin } from "./properties/page-margin";
|
import { IPageMarginAttributes, PageMargin } from "./properties/page-margin";
|
||||||
@ -16,13 +18,13 @@ import { IPageSizeAttributes, PageOrientation, PageSize } from "./properties/pag
|
|||||||
import { PageTextDirection, PageTextDirectionType } from "./properties/page-text-direction";
|
import { PageTextDirection, PageTextDirectionType } from "./properties/page-text-direction";
|
||||||
import { SectionType, Type } from "./properties/section-type";
|
import { SectionType, Type } from "./properties/section-type";
|
||||||
|
|
||||||
export type IHeaderFooterGroup<T> = {
|
export interface IHeaderFooterGroup<T> {
|
||||||
readonly default?: T;
|
readonly default?: T;
|
||||||
readonly first?: T;
|
readonly first?: T;
|
||||||
readonly even?: T;
|
readonly even?: T;
|
||||||
};
|
}
|
||||||
|
|
||||||
export type ISectionPropertiesOptions = {
|
export interface ISectionPropertiesOptions {
|
||||||
readonly page?: {
|
readonly page?: {
|
||||||
readonly size?: IPageSizeAttributes;
|
readonly size?: IPageSizeAttributes;
|
||||||
readonly margin?: IPageMarginAttributes;
|
readonly margin?: IPageMarginAttributes;
|
||||||
@ -38,7 +40,8 @@ export type ISectionPropertiesOptions = {
|
|||||||
readonly verticalAlign?: (typeof VerticalAlign)[keyof typeof VerticalAlign];
|
readonly verticalAlign?: (typeof VerticalAlign)[keyof typeof VerticalAlign];
|
||||||
readonly column?: IColumnsAttributes;
|
readonly column?: IColumnsAttributes;
|
||||||
readonly type?: (typeof SectionType)[keyof typeof SectionType];
|
readonly type?: (typeof SectionType)[keyof typeof SectionType];
|
||||||
};
|
readonly footnoteProperties?: IFootnoteProperties;
|
||||||
|
}
|
||||||
|
|
||||||
// <xsd:complexType name="CT_SectPr">
|
// <xsd:complexType name="CT_SectPr">
|
||||||
// <xsd:sequence>
|
// <xsd:sequence>
|
||||||
@ -118,6 +121,7 @@ export class SectionProperties extends XmlComponent {
|
|||||||
verticalAlign,
|
verticalAlign,
|
||||||
column,
|
column,
|
||||||
type,
|
type,
|
||||||
|
footnoteProperties,
|
||||||
}: ISectionPropertiesOptions = {}) {
|
}: ISectionPropertiesOptions = {}) {
|
||||||
super("w:sectPr");
|
super("w:sectPr");
|
||||||
|
|
||||||
@ -157,6 +161,10 @@ export class SectionProperties extends XmlComponent {
|
|||||||
this.root.push(new PageTextDirection(textDirection));
|
this.root.push(new PageTextDirection(textDirection));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (footnoteProperties) {
|
||||||
|
this.root.push(new FootnoteProperties(footnoteProperties));
|
||||||
|
}
|
||||||
|
|
||||||
this.root.push(new DocumentGrid(linePitch, charSpace, gridType));
|
this.root.push(new DocumentGrid(linePitch, charSpace, gridType));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { XmlAttributeComponent } from "@file/xml-components";
|
import { XmlAttributeComponent } from "@file/xml-components";
|
||||||
|
|
||||||
/* cSpell:disable */
|
/* cSpell:disable */
|
||||||
export type IDocumentAttributesProperties = {
|
export interface IDocumentAttributesProperties {
|
||||||
readonly wpc?: string;
|
readonly wpc?: string;
|
||||||
readonly mc?: string;
|
readonly mc?: string;
|
||||||
readonly o?: string;
|
readonly o?: string;
|
||||||
@ -41,7 +41,7 @@ export type IDocumentAttributesProperties = {
|
|||||||
readonly w16?: string;
|
readonly w16?: string;
|
||||||
readonly w16sdtdh?: string;
|
readonly w16sdtdh?: string;
|
||||||
readonly w16se?: string;
|
readonly w16se?: string;
|
||||||
};
|
}
|
||||||
/* cSpell:enable */
|
/* cSpell:enable */
|
||||||
|
|
||||||
export class DocumentAttributes extends XmlAttributeComponent<IDocumentAttributesProperties> {
|
export class DocumentAttributes extends XmlAttributeComponent<IDocumentAttributesProperties> {
|
||||||
|
@ -39,12 +39,12 @@ export class DocumentBackgroundAttributes extends XmlAttributeComponent<{
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export type IDocumentBackgroundOptions = {
|
export interface IDocumentBackgroundOptions {
|
||||||
readonly color?: string;
|
readonly color?: string;
|
||||||
readonly themeColor?: string;
|
readonly themeColor?: string;
|
||||||
readonly themeShade?: string;
|
readonly themeShade?: string;
|
||||||
readonly themeTint?: string;
|
readonly themeTint?: string;
|
||||||
};
|
}
|
||||||
|
|
||||||
// <xsd:complexType name="CT_Background">
|
// <xsd:complexType name="CT_Background">
|
||||||
// <xsd:sequence>
|
// <xsd:sequence>
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// http://officeopenxml.com/WPdocument.php
|
// http://officeopenxml.com/WPdocument.php
|
||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { ConcreteHyperlink, Paragraph } from "../paragraph";
|
import { ConcreteHyperlink, Paragraph } from "../paragraph";
|
||||||
import { Table } from "../table";
|
import { Table } from "../table";
|
||||||
import { TableOfContents } from "../table-of-contents";
|
import { TableOfContents } from "../table-of-contents";
|
||||||
@ -8,9 +7,9 @@ import { Body } from "./body";
|
|||||||
import { DocumentAttributes } from "./document-attributes";
|
import { DocumentAttributes } from "./document-attributes";
|
||||||
import { DocumentBackground, IDocumentBackgroundOptions } from "./document-background";
|
import { DocumentBackground, IDocumentBackgroundOptions } from "./document-background";
|
||||||
|
|
||||||
export type IDocumentOptions = {
|
export interface IDocumentOptions {
|
||||||
readonly background?: IDocumentBackgroundOptions;
|
readonly background?: IDocumentBackgroundOptions;
|
||||||
};
|
}
|
||||||
|
|
||||||
// <xsd:element name="document" type="CT_Document"/>
|
// <xsd:element name="document" type="CT_Document"/>
|
||||||
//
|
//
|
||||||
@ -81,6 +80,7 @@ export class Document extends XmlComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public add(item: Paragraph | Table | TableOfContents | ConcreteHyperlink): Document {
|
public add(item: Paragraph | Table | TableOfContents | ConcreteHyperlink): Document {
|
||||||
|
// eslint-disable-next-line functional/immutable-data
|
||||||
this.body.push(item);
|
this.body.push(item);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
import { XmlAttributeComponent } from "@file/xml-components";
|
import { XmlAttributeComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { IDistance } from "../drawing";
|
import { IDistance } from "../drawing";
|
||||||
|
|
||||||
export type IAnchorAttributes = {
|
export interface IAnchorAttributes extends IDistance {
|
||||||
readonly allowOverlap?: "0" | "1";
|
readonly allowOverlap?: "0" | "1";
|
||||||
readonly behindDoc?: "0" | "1";
|
readonly behindDoc?: "0" | "1";
|
||||||
readonly layoutInCell?: "0" | "1";
|
readonly layoutInCell?: "0" | "1";
|
||||||
readonly locked?: "0" | "1";
|
readonly locked?: "0" | "1";
|
||||||
readonly relativeHeight?: number;
|
readonly relativeHeight?: number;
|
||||||
readonly simplePos?: "0" | "1";
|
readonly simplePos?: "0" | "1";
|
||||||
} & IDistance;
|
}
|
||||||
|
|
||||||
export class AnchorAttributes extends XmlAttributeComponent<IAnchorAttributes> {
|
export class AnchorAttributes extends XmlAttributeComponent<IAnchorAttributes> {
|
||||||
protected readonly xmlKeys = {
|
protected readonly xmlKeys = {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { assert, describe, expect, it } from "vitest";
|
import { assert, describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
|
|
||||||
import { Utility } from "tests/utility";
|
import { Utility } from "tests/utility";
|
||||||
|
|
||||||
import { IDrawingOptions } from "../drawing";
|
import { IDrawingOptions } from "../drawing";
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// http://officeopenxml.com/drwPicFloating.php
|
// http://officeopenxml.com/drwPicFloating.php
|
||||||
import { IMediaData, IMediaDataTransformation } from "@file/media";
|
import { IMediaData, IMediaDataTransformation } from "@file/media";
|
||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { IDrawingOptions } from "../drawing";
|
import { IDrawingOptions } from "../drawing";
|
||||||
import { HorizontalPosition, IFloating, SimplePos, VerticalPosition } from "../floating";
|
import { HorizontalPosition, IFloating, SimplePos, VerticalPosition } from "../floating";
|
||||||
import { Graphic } from "../inline/graphic";
|
import { Graphic } from "../inline/graphic";
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_docPr_topic_ID0ES32OB.html
|
// https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_docPr_topic_ID0ES32OB.html
|
||||||
import { ConcreteHyperlink } from "@file/paragraph";
|
|
||||||
import { IContext, IXmlableObject, NextAttributeComponent, XmlComponent } from "@file/xml-components";
|
import { IContext, IXmlableObject, NextAttributeComponent, XmlComponent } from "@file/xml-components";
|
||||||
|
import { ConcreteHyperlink } from "@file/paragraph";
|
||||||
|
|
||||||
import { docPropertiesUniqueNumericIdGen } from "@util/convenience-functions";
|
import { docPropertiesUniqueNumericIdGen } from "@util/convenience-functions";
|
||||||
|
|
||||||
import { createHyperlinkClick } from "./doc-properties-children";
|
import { createHyperlinkClick } from "./doc-properties-children";
|
||||||
@ -17,11 +18,11 @@ import { createHyperlinkClick } from "./doc-properties-children";
|
|||||||
// <attribute name="hidden" type="xsd:boolean" use="optional" default="false" />
|
// <attribute name="hidden" type="xsd:boolean" use="optional" default="false" />
|
||||||
// </complexType>
|
// </complexType>
|
||||||
|
|
||||||
export type DocPropertiesOptions = {
|
export interface DocPropertiesOptions {
|
||||||
readonly name: string;
|
readonly name: string;
|
||||||
readonly description: string;
|
readonly description: string;
|
||||||
readonly title: string;
|
readonly title: string;
|
||||||
};
|
}
|
||||||
|
|
||||||
export class DocProperties extends XmlComponent {
|
export class DocProperties extends XmlComponent {
|
||||||
private readonly docPropertiesUniqueNumericId = docPropertiesUniqueNumericIdGen();
|
private readonly docPropertiesUniqueNumericId = docPropertiesUniqueNumericIdGen();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
|
||||||
import { IContext } from "@file/xml-components";
|
import { IContext } from "@file/xml-components";
|
||||||
|
import { Formatter } from "@export/formatter";
|
||||||
|
|
||||||
import { ConcreteHyperlink, TextRun } from "../";
|
import { ConcreteHyperlink, TextRun } from "../";
|
||||||
import { Drawing, IDrawingOptions } from "./drawing";
|
import { Drawing, IDrawingOptions } from "./drawing";
|
||||||
@ -80,6 +80,7 @@ describe("Drawing", () => {
|
|||||||
{
|
{
|
||||||
"a:graphicFrameLocks": {
|
"a:graphicFrameLocks": {
|
||||||
_attr: {
|
_attr: {
|
||||||
|
// tslint:disable-next-line:object-literal-key-quotes
|
||||||
noChangeAspect: 1,
|
noChangeAspect: 1,
|
||||||
"xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main",
|
"xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main",
|
||||||
},
|
},
|
||||||
@ -138,6 +139,7 @@ describe("Drawing", () => {
|
|||||||
{
|
{
|
||||||
"a:blip": {
|
"a:blip": {
|
||||||
_attr: {
|
_attr: {
|
||||||
|
// tslint:disable-next-line:object-literal-key-quotes
|
||||||
cstate: "none",
|
cstate: "none",
|
||||||
"r:embed": "rId{test.jpg}",
|
"r:embed": "rId{test.jpg}",
|
||||||
},
|
},
|
||||||
@ -309,6 +311,7 @@ describe("Drawing", () => {
|
|||||||
{
|
{
|
||||||
"a:graphicFrameLocks": {
|
"a:graphicFrameLocks": {
|
||||||
_attr: {
|
_attr: {
|
||||||
|
// tslint:disable-next-line:object-literal-key-quotes
|
||||||
noChangeAspect: 1,
|
noChangeAspect: 1,
|
||||||
"xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main",
|
"xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main",
|
||||||
},
|
},
|
||||||
@ -367,6 +370,7 @@ describe("Drawing", () => {
|
|||||||
{
|
{
|
||||||
"a:blip": {
|
"a:blip": {
|
||||||
_attr: {
|
_attr: {
|
||||||
|
// tslint:disable-next-line:object-literal-key-quotes
|
||||||
cstate: "none",
|
cstate: "none",
|
||||||
"r:embed": "rId{test.jpg}",
|
"r:embed": "rId{test.jpg}",
|
||||||
},
|
},
|
||||||
@ -550,6 +554,7 @@ describe("Drawing", () => {
|
|||||||
{
|
{
|
||||||
"a:graphicFrameLocks": {
|
"a:graphicFrameLocks": {
|
||||||
_attr: {
|
_attr: {
|
||||||
|
// tslint:disable-next-line:object-literal-key-quotes
|
||||||
noChangeAspect: 1,
|
noChangeAspect: 1,
|
||||||
"xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main",
|
"xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main",
|
||||||
},
|
},
|
||||||
@ -617,6 +622,7 @@ describe("Drawing", () => {
|
|||||||
{
|
{
|
||||||
"a:blip": {
|
"a:blip": {
|
||||||
_attr: {
|
_attr: {
|
||||||
|
// tslint:disable-next-line:object-literal-key-quotes
|
||||||
cstate: "none",
|
cstate: "none",
|
||||||
"r:embed": "rId{test.jpg}",
|
"r:embed": "rId{test.jpg}",
|
||||||
},
|
},
|
||||||
|
@ -14,11 +14,11 @@ export type IDistance = {
|
|||||||
readonly distR?: number;
|
readonly distR?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type IDrawingOptions = {
|
export interface IDrawingOptions {
|
||||||
readonly floating?: IFloating;
|
readonly floating?: IFloating;
|
||||||
readonly docProperties?: DocPropertiesOptions;
|
readonly docProperties?: DocPropertiesOptions;
|
||||||
readonly outline?: OutlineOptions;
|
readonly outline?: OutlineOptions;
|
||||||
};
|
}
|
||||||
|
|
||||||
// <xsd:complexType name="CT_Drawing">
|
// <xsd:complexType name="CT_Drawing">
|
||||||
// <xsd:choice minOccurs="1" maxOccurs="unbounded">
|
// <xsd:choice minOccurs="1" maxOccurs="unbounded">
|
||||||
|
@ -7,12 +7,6 @@ export type EffectExtentAttributes = {
|
|||||||
readonly left: number;
|
readonly left: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
// <xsd:complexType name="CT_EffectExtent">
|
|
||||||
// <xsd:attribute name="l" type="a:ST_Coordinate" use="required"/>
|
|
||||||
// <xsd:attribute name="t" type="a:ST_Coordinate" use="required"/>
|
|
||||||
// <xsd:attribute name="r" type="a:ST_Coordinate" use="required"/>
|
|
||||||
// <xsd:attribute name="b" type="a:ST_Coordinate" use="required"/>
|
|
||||||
// </xsd:complexType>
|
|
||||||
export const createEffectExtent = ({ top, right, bottom, left }: EffectExtentAttributes): XmlComponent =>
|
export const createEffectExtent = ({ top, right, bottom, left }: EffectExtentAttributes): XmlComponent =>
|
||||||
new BuilderElement<EffectExtentAttributes>({
|
new BuilderElement<EffectExtentAttributes>({
|
||||||
name: "wp:effectExtent",
|
name: "wp:effectExtent",
|
||||||
|
@ -4,6 +4,7 @@ import { HorizontalPositionAlign, VerticalPositionAlign } from "@file/shared/ali
|
|||||||
|
|
||||||
import { ITextWrapping } from "../text-wrap";
|
import { ITextWrapping } from "../text-wrap";
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
export const HorizontalPositionRelativeFrom = {
|
export const HorizontalPositionRelativeFrom = {
|
||||||
CHARACTER: "character",
|
CHARACTER: "character",
|
||||||
COLUMN: "column",
|
COLUMN: "column",
|
||||||
@ -26,26 +27,27 @@ export const VerticalPositionRelativeFrom = {
|
|||||||
TOP_MARGIN: "topMargin",
|
TOP_MARGIN: "topMargin",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export type IHorizontalPositionOptions = {
|
/* eslint-enable */
|
||||||
|
export interface IHorizontalPositionOptions {
|
||||||
readonly relative?: (typeof HorizontalPositionRelativeFrom)[keyof typeof HorizontalPositionRelativeFrom];
|
readonly relative?: (typeof HorizontalPositionRelativeFrom)[keyof typeof HorizontalPositionRelativeFrom];
|
||||||
readonly align?: (typeof HorizontalPositionAlign)[keyof typeof HorizontalPositionAlign];
|
readonly align?: (typeof HorizontalPositionAlign)[keyof typeof HorizontalPositionAlign];
|
||||||
readonly offset?: number;
|
readonly offset?: number;
|
||||||
};
|
}
|
||||||
|
|
||||||
export type IVerticalPositionOptions = {
|
export interface IVerticalPositionOptions {
|
||||||
readonly relative?: (typeof VerticalPositionRelativeFrom)[keyof typeof VerticalPositionRelativeFrom];
|
readonly relative?: (typeof VerticalPositionRelativeFrom)[keyof typeof VerticalPositionRelativeFrom];
|
||||||
readonly align?: (typeof VerticalPositionAlign)[keyof typeof VerticalPositionAlign];
|
readonly align?: (typeof VerticalPositionAlign)[keyof typeof VerticalPositionAlign];
|
||||||
readonly offset?: number;
|
readonly offset?: number;
|
||||||
};
|
}
|
||||||
|
|
||||||
export type IMargins = {
|
export interface IMargins {
|
||||||
readonly left?: number;
|
readonly left?: number;
|
||||||
readonly bottom?: number;
|
readonly bottom?: number;
|
||||||
readonly top?: number;
|
readonly top?: number;
|
||||||
readonly right?: number;
|
readonly right?: number;
|
||||||
};
|
}
|
||||||
|
|
||||||
export type IFloating = {
|
export interface IFloating {
|
||||||
readonly horizontalPosition: IHorizontalPositionOptions;
|
readonly horizontalPosition: IHorizontalPositionOptions;
|
||||||
readonly verticalPosition: IVerticalPositionOptions;
|
readonly verticalPosition: IVerticalPositionOptions;
|
||||||
readonly allowOverlap?: boolean;
|
readonly allowOverlap?: boolean;
|
||||||
@ -55,4 +57,4 @@ export type IFloating = {
|
|||||||
readonly margins?: IMargins;
|
readonly margins?: IMargins;
|
||||||
readonly wrap?: ITextWrapping;
|
readonly wrap?: ITextWrapping;
|
||||||
readonly zIndex?: number;
|
readonly zIndex?: number;
|
||||||
};
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// http://officeopenxml.com/drwPicFloating-position.php
|
// http://officeopenxml.com/drwPicFloating-position.php
|
||||||
import { XmlAttributeComponent, XmlComponent } from "@file/xml-components";
|
import { XmlAttributeComponent, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { Align } from "./align";
|
import { Align } from "./align";
|
||||||
import { HorizontalPositionRelativeFrom, IHorizontalPositionOptions } from "./floating-position";
|
import { HorizontalPositionRelativeFrom, IHorizontalPositionOptions } from "./floating-position";
|
||||||
import { PositionOffset } from "./position-offset";
|
import { PositionOffset } from "./position-offset";
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// http://officeopenxml.com/drwPicFloating-position.php
|
// http://officeopenxml.com/drwPicFloating-position.php
|
||||||
import { XmlAttributeComponent, XmlComponent } from "@file/xml-components";
|
import { XmlAttributeComponent, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { Align } from "./align";
|
import { Align } from "./align";
|
||||||
import { IVerticalPositionOptions, VerticalPositionRelativeFrom } from "./floating-position";
|
import { IVerticalPositionOptions, VerticalPositionRelativeFrom } from "./floating-position";
|
||||||
import { PositionOffset } from "./position-offset";
|
import { PositionOffset } from "./position-offset";
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { GraphicFrameLockAttributes } from "./graphic-frame-lock-attributes";
|
import { GraphicFrameLockAttributes } from "./graphic-frame-lock-attributes";
|
||||||
|
|
||||||
export class GraphicFrameLocks extends XmlComponent {
|
export class GraphicFrameLocks extends XmlComponent {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { GraphicFrameLocks } from "./graphic-frame-locks/graphic-frame-locks";
|
import { GraphicFrameLocks } from "./graphic-frame-locks/graphic-frame-locks";
|
||||||
|
|
||||||
export class GraphicFrameProperties extends XmlComponent {
|
export class GraphicFrameProperties extends XmlComponent {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { IMediaData } from "@file/media";
|
|
||||||
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
||||||
|
import { IMediaData } from "@file/media";
|
||||||
|
|
||||||
const createSvgBlip = (mediaData: IMediaData): XmlComponent =>
|
const createSvgBlip = (mediaData: IMediaData): XmlComponent =>
|
||||||
new BuilderElement({
|
new BuilderElement({
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { IMediaData } from "@file/media";
|
import { IMediaData } from "@file/media";
|
||||||
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { createExtentionList } from "./blip-extentions";
|
import { createExtentionList } from "./blip-extentions";
|
||||||
|
|
||||||
type BlipAttributes = {
|
type BlipAttributes = {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { PicLocks } from "./pic-locks/pic-locks";
|
import { PicLocks } from "./pic-locks/pic-locks";
|
||||||
|
|
||||||
export class ChildNonVisualProperties extends XmlComponent {
|
export class ChildNonVisualProperties extends XmlComponent {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { PicLocksAttributes } from "./pic-locks-attributes";
|
import { PicLocksAttributes } from "./pic-locks-attributes";
|
||||||
|
|
||||||
export class PicLocks extends XmlComponent {
|
export class PicLocks extends XmlComponent {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { ChildNonVisualProperties } from "./child-non-visual-pic-properties/child-non-visual-pic-properties";
|
import { ChildNonVisualProperties } from "./child-non-visual-pic-properties/child-non-visual-pic-properties";
|
||||||
import { NonVisualProperties } from "./non-visual-properties/non-visual-properties";
|
import { NonVisualProperties } from "./non-visual-properties/non-visual-properties";
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
import { IContext, IXmlableObject, XmlComponent } from "@file/xml-components";
|
||||||
import { createHyperlinkClick } from "@file/drawing/doc-properties/doc-properties-children";
|
import { createHyperlinkClick } from "@file/drawing/doc-properties/doc-properties-children";
|
||||||
import { ConcreteHyperlink } from "@file/paragraph";
|
import { ConcreteHyperlink } from "@file/paragraph";
|
||||||
import { IContext, IXmlableObject, XmlComponent } from "@file/xml-components";
|
|
||||||
|
|
||||||
import { NonVisualPropertiesAttributes } from "./non-visual-properties-attributes";
|
import { NonVisualPropertiesAttributes } from "./non-visual-properties-attributes";
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ import { XmlComponent } from "@file/xml-components";
|
|||||||
import { BlipFill } from "./blip/blip-fill";
|
import { BlipFill } from "./blip/blip-fill";
|
||||||
import { NonVisualPicProperties } from "./non-visual-pic-properties/non-visual-pic-properties";
|
import { NonVisualPicProperties } from "./non-visual-pic-properties/non-visual-pic-properties";
|
||||||
import { PicAttributes } from "./pic-attributes";
|
import { PicAttributes } from "./pic-attributes";
|
||||||
import { OutlineOptions } from "./shape-properties/outline/outline";
|
|
||||||
import { ShapeProperties } from "./shape-properties/shape-properties";
|
import { ShapeProperties } from "./shape-properties/shape-properties";
|
||||||
|
import { OutlineOptions } from "./shape-properties/outline/outline";
|
||||||
|
|
||||||
export class Pic extends XmlComponent {
|
export class Pic extends XmlComponent {
|
||||||
public constructor({
|
public constructor({
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
|
|
||||||
import { Form } from "./form/form";
|
import { Form } from "./form/form";
|
||||||
|
|
||||||
describe("Form", () => {
|
describe("Form", () => {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// http://officeopenxml.com/drwSp-size.php
|
// http://officeopenxml.com/drwSp-size.php
|
||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { ExtentsAttributes } from "./extents-attributes";
|
import { ExtentsAttributes } from "./extents-attributes";
|
||||||
|
|
||||||
export class Extents extends XmlComponent {
|
export class Extents extends XmlComponent {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// http://officeopenxml.com/drwSp-size.php
|
// http://officeopenxml.com/drwSp-size.php
|
||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { OffsetAttributes } from "./off-attributes";
|
import { OffsetAttributes } from "./off-attributes";
|
||||||
|
|
||||||
export class Offset extends XmlComponent {
|
export class Offset extends XmlComponent {
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
// http://officeopenxml.com/drwSp-outline.php
|
// http://officeopenxml.com/drwSp-outline.php
|
||||||
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { createNoFill } from "./no-fill";
|
import { createNoFill } from "./no-fill";
|
||||||
import { SchemeColor } from "./scheme-color";
|
|
||||||
import { createSolidFill } from "./solid-fill";
|
import { createSolidFill } from "./solid-fill";
|
||||||
|
import { SchemeColor } from "./scheme-color";
|
||||||
|
|
||||||
// <xsd:complexType name="CT_TextOutlineEffect">
|
// <xsd:complexType name="CT_TextOutlineEffect">
|
||||||
// <xsd:sequence>
|
// <xsd:sequence>
|
||||||
|
@ -2,8 +2,8 @@ import { describe, expect, it } from "vitest";
|
|||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
|
|
||||||
import { SchemeColor } from "./scheme-color";
|
|
||||||
import { createSolidFill } from "./solid-fill";
|
import { createSolidFill } from "./solid-fill";
|
||||||
|
import { SchemeColor } from "./scheme-color";
|
||||||
|
|
||||||
describe("createSolidFill", () => {
|
describe("createSolidFill", () => {
|
||||||
it("should create of rgb", () => {
|
it("should create of rgb", () => {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
|
import { createSchemeColor, SchemeColor } from "./scheme-color";
|
||||||
import { createSolidRgbColor } from "./rgb-color";
|
import { createSolidRgbColor } from "./rgb-color";
|
||||||
import { SchemeColor, createSchemeColor } from "./scheme-color";
|
|
||||||
|
|
||||||
export type RgbColorOptions = {
|
export type RgbColorOptions = {
|
||||||
readonly type: "rgb";
|
readonly type: "rgb";
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// http://officeopenxml.com/drwSp-prstGeom.php
|
// http://officeopenxml.com/drwSp-prstGeom.php
|
||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { AdjustmentValues } from "./adjustment-values/adjustment-values";
|
import { AdjustmentValues } from "./adjustment-values/adjustment-values";
|
||||||
import { PresetGeometryAttributes } from "./preset-geometry-attributes";
|
import { PresetGeometryAttributes } from "./preset-geometry-attributes";
|
||||||
|
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
// http://officeopenxml.com/drwSp-SpPr.php
|
// http://officeopenxml.com/drwSp-SpPr.php
|
||||||
import { IMediaDataTransformation } from "@file/media";
|
import { IMediaDataTransformation } from "@file/media";
|
||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { Form } from "./form";
|
import { Form } from "./form";
|
||||||
import { createNoFill } from "./outline/no-fill";
|
|
||||||
import { OutlineOptions, createOutline } from "./outline/outline";
|
import { OutlineOptions, createOutline } from "./outline/outline";
|
||||||
import { PresetGeometry } from "./preset-geometry/preset-geometry";
|
import { PresetGeometry } from "./preset-geometry/preset-geometry";
|
||||||
import { ShapePropertiesAttributes } from "./shape-properties-attributes";
|
import { ShapePropertiesAttributes } from "./shape-properties-attributes";
|
||||||
|
import { createNoFill } from "./outline/no-fill";
|
||||||
|
|
||||||
export class ShapeProperties extends XmlComponent {
|
export class ShapeProperties extends XmlComponent {
|
||||||
private readonly form: Form;
|
private readonly form: Form;
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
import { Formatter } from "@export/formatter";
|
import { Formatter } from "@export/formatter";
|
||||||
|
|
||||||
import { createInline } from "./inline";
|
import { createInline } from "./inline";
|
||||||
|
|
||||||
describe("Inline", () => {
|
describe("Inline", () => {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// http://officeopenxml.com/drwPicInline.php
|
// http://officeopenxml.com/drwPicInline.php
|
||||||
import { IMediaData, IMediaDataTransformation } from "@file/media";
|
import { IMediaData, IMediaDataTransformation } from "@file/media";
|
||||||
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { DocProperties, DocPropertiesOptions } from "./../doc-properties/doc-properties";
|
import { DocProperties, DocPropertiesOptions } from "./../doc-properties/doc-properties";
|
||||||
import { createEffectExtent } from "./../effect-extent/effect-extent";
|
import { createEffectExtent } from "./../effect-extent/effect-extent";
|
||||||
import { Extent } from "./../extent/extent";
|
import { Extent } from "./../extent/extent";
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// http://officeopenxml.com/drwPicFloating-textWrap.php
|
// http://officeopenxml.com/drwPicFloating-textWrap.php
|
||||||
import { IDistance } from "../drawing";
|
import { IDistance } from "../drawing";
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
export const TextWrappingType = {
|
export const TextWrappingType = {
|
||||||
NONE: 0,
|
NONE: 0,
|
||||||
SQUARE: 1,
|
SQUARE: 1,
|
||||||
@ -15,8 +16,10 @@ export const TextWrappingSide = {
|
|||||||
LARGEST: "largest",
|
LARGEST: "largest",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export type ITextWrapping = {
|
/* eslint-enable */
|
||||||
|
|
||||||
|
export interface ITextWrapping {
|
||||||
readonly type: (typeof TextWrappingType)[keyof typeof TextWrappingType];
|
readonly type: (typeof TextWrappingType)[keyof typeof TextWrappingType];
|
||||||
readonly side?: (typeof TextWrappingSide)[keyof typeof TextWrappingSide];
|
readonly side?: (typeof TextWrappingSide)[keyof typeof TextWrappingSide];
|
||||||
readonly margins?: IDistance;
|
readonly margins?: IDistance;
|
||||||
};
|
}
|
||||||
|
@ -5,9 +5,9 @@ import { IDistance } from "../drawing";
|
|||||||
import { IMargins } from "../floating";
|
import { IMargins } from "../floating";
|
||||||
import { ITextWrapping, TextWrappingSide } from "./text-wrapping";
|
import { ITextWrapping, TextWrappingSide } from "./text-wrapping";
|
||||||
|
|
||||||
type IWrapSquareAttributes = {
|
interface IWrapSquareAttributes extends IDistance {
|
||||||
readonly wrapText?: (typeof TextWrappingSide)[keyof typeof TextWrappingSide];
|
readonly wrapText?: (typeof TextWrappingSide)[keyof typeof TextWrappingSide];
|
||||||
} & IDistance;
|
}
|
||||||
|
|
||||||
class WrapSquareAttributes extends XmlAttributeComponent<IWrapSquareAttributes> {
|
class WrapSquareAttributes extends XmlAttributeComponent<IWrapSquareAttributes> {
|
||||||
protected readonly xmlKeys = {
|
protected readonly xmlKeys = {
|
||||||
|
@ -479,41 +479,4 @@ describe("File", () => {
|
|||||||
expect(doc.Styles).to.not.be.undefined;
|
expect(doc.Styles).to.not.be.undefined;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("#features", () => {
|
|
||||||
it("should work with updateFields", () => {
|
|
||||||
const doc = new File({
|
|
||||||
sections: [],
|
|
||||||
features: {
|
|
||||||
updateFields: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(doc.Styles).to.not.be.undefined;
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should work with trackRevisions", () => {
|
|
||||||
const doc = new File({
|
|
||||||
sections: [],
|
|
||||||
features: {
|
|
||||||
trackRevisions: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(doc.Styles).to.not.be.undefined;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("#hyphenation", () => {
|
|
||||||
it("should work with autoHyphenation", () => {
|
|
||||||
const doc = new File({
|
|
||||||
sections: [],
|
|
||||||
hyphenation: {
|
|
||||||
autoHyphenation: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(doc.Styles).to.not.be.undefined;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@ -2,10 +2,8 @@ import { AppProperties } from "./app-properties/app-properties";
|
|||||||
import { ContentTypes } from "./content-types/content-types";
|
import { ContentTypes } from "./content-types/content-types";
|
||||||
import { CoreProperties, IPropertiesOptions } from "./core-properties";
|
import { CoreProperties, IPropertiesOptions } from "./core-properties";
|
||||||
import { CustomProperties } from "./custom-properties";
|
import { CustomProperties } from "./custom-properties";
|
||||||
import { HeaderFooterReferenceType, ISectionPropertiesOptions } from "./document/body/section-properties";
|
|
||||||
import { DocumentWrapper } from "./document-wrapper";
|
import { DocumentWrapper } from "./document-wrapper";
|
||||||
import { FileChild } from "./file-child";
|
import { HeaderFooterReferenceType, ISectionPropertiesOptions } from "./document/body/section-properties";
|
||||||
import { FontWrapper } from "./fonts/font-wrapper";
|
|
||||||
import { FooterWrapper, IDocumentFooter } from "./footer-wrapper";
|
import { FooterWrapper, IDocumentFooter } from "./footer-wrapper";
|
||||||
import { FootnotesWrapper } from "./footnotes-wrapper";
|
import { FootnotesWrapper } from "./footnotes-wrapper";
|
||||||
import { Footer, Header } from "./header";
|
import { Footer, Header } from "./header";
|
||||||
@ -18,8 +16,10 @@ import { Settings } from "./settings";
|
|||||||
import { Styles } from "./styles";
|
import { Styles } from "./styles";
|
||||||
import { ExternalStylesFactory } from "./styles/external-styles-factory";
|
import { ExternalStylesFactory } from "./styles/external-styles-factory";
|
||||||
import { DefaultStylesFactory } from "./styles/factory";
|
import { DefaultStylesFactory } from "./styles/factory";
|
||||||
|
import { FileChild } from "./file-child";
|
||||||
|
import { FontWrapper } from "./fonts/font-wrapper";
|
||||||
|
|
||||||
export type ISectionOptions = {
|
export interface ISectionOptions {
|
||||||
readonly headers?: {
|
readonly headers?: {
|
||||||
readonly default?: Header;
|
readonly default?: Header;
|
||||||
readonly first?: Header;
|
readonly first?: Header;
|
||||||
@ -32,7 +32,7 @@ export type ISectionOptions = {
|
|||||||
};
|
};
|
||||||
readonly properties?: ISectionPropertiesOptions;
|
readonly properties?: ISectionPropertiesOptions;
|
||||||
readonly children: readonly FileChild[];
|
readonly children: readonly FileChild[];
|
||||||
};
|
}
|
||||||
|
|
||||||
export class File {
|
export class File {
|
||||||
// eslint-disable-next-line functional/prefer-readonly-type
|
// eslint-disable-next-line functional/prefer-readonly-type
|
||||||
@ -85,7 +85,7 @@ export class File {
|
|||||||
hyphenationZone: options.hyphenation?.hyphenationZone,
|
hyphenationZone: options.hyphenation?.hyphenationZone,
|
||||||
consecutiveHyphenLimit: options.hyphenation?.consecutiveHyphenLimit,
|
consecutiveHyphenLimit: options.hyphenation?.consecutiveHyphenLimit,
|
||||||
doNotHyphenateCaps: options.hyphenation?.doNotHyphenateCaps,
|
doNotHyphenateCaps: options.hyphenation?.doNotHyphenateCaps,
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.media = new Media();
|
this.media = new Media();
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { createRegularFont } from "./create-regular-font";
|
import { createRegularFont } from "./create-regular-font";
|
||||||
import { CharacterSet } from "./font";
|
|
||||||
import { FontOptionsWithKey } from "./font-wrapper";
|
import { FontOptionsWithKey } from "./font-wrapper";
|
||||||
|
import { CharacterSet } from "./font";
|
||||||
|
|
||||||
// <xsd:complexType name="CT_FontsList">
|
// <xsd:complexType name="CT_FontsList">
|
||||||
// <xsd:sequence>
|
// <xsd:sequence>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { BuilderElement, OnOffElement, XmlComponent, createStringElement } from "@file/xml-components";
|
import { BuilderElement, createStringElement, OnOffElement, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
// <xsd:complexType name="CT_Font">
|
// <xsd:complexType name="CT_Font">
|
||||||
// <xsd:sequence>
|
// <xsd:sequence>
|
||||||
@ -27,7 +27,7 @@ import { BuilderElement, OnOffElement, XmlComponent, createStringElement } from
|
|||||||
// </xsd:complexType>
|
// </xsd:complexType>
|
||||||
|
|
||||||
// http://www.datypic.com/sc/ooxml/e-w_embedRegular-1.html
|
// http://www.datypic.com/sc/ooxml/e-w_embedRegular-1.html
|
||||||
export type IFontRelationshipOptions = {
|
export interface IFontRelationshipOptions {
|
||||||
/**
|
/**
|
||||||
* Relationship to Part
|
* Relationship to Part
|
||||||
*/
|
*/
|
||||||
@ -40,7 +40,7 @@ export type IFontRelationshipOptions = {
|
|||||||
* Embedded Font Is Subsetted
|
* Embedded Font Is Subsetted
|
||||||
*/
|
*/
|
||||||
readonly subsetted?: boolean;
|
readonly subsetted?: boolean;
|
||||||
};
|
}
|
||||||
|
|
||||||
export const CharacterSet = {
|
export const CharacterSet = {
|
||||||
ANSI: "00",
|
ANSI: "00",
|
||||||
|
@ -8,10 +8,10 @@ import { Paragraph } from "./paragraph";
|
|||||||
import { Relationships } from "./relationships";
|
import { Relationships } from "./relationships";
|
||||||
import { Table } from "./table";
|
import { Table } from "./table";
|
||||||
|
|
||||||
export type IDocumentFooter = {
|
export interface IDocumentFooter {
|
||||||
readonly footer: FooterWrapper;
|
readonly footer: FooterWrapper;
|
||||||
readonly type: (typeof HeaderFooterReferenceType)[keyof typeof HeaderFooterReferenceType];
|
readonly type: (typeof HeaderFooterReferenceType)[keyof typeof HeaderFooterReferenceType];
|
||||||
};
|
}
|
||||||
|
|
||||||
export class FooterWrapper implements IViewWrapper {
|
export class FooterWrapper implements IViewWrapper {
|
||||||
private readonly footer: Footer;
|
private readonly footer: Footer;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// http://officeopenxml.com/WPfooters.php
|
// http://officeopenxml.com/WPfooters.php
|
||||||
import { InitializableXmlComponent, XmlComponent } from "@file/xml-components";
|
import { InitializableXmlComponent, XmlComponent } from "@file/xml-components";
|
||||||
|
|
||||||
import { Paragraph } from "../paragraph";
|
import { Paragraph } from "../paragraph";
|
||||||
import { Table } from "../table";
|
import { Table } from "../table";
|
||||||
import { FooterAttributes } from "./footer-attributes";
|
import { FooterAttributes } from "./footer-attributes";
|
||||||
|
@ -6,15 +6,15 @@ import { FootnoteRefRun } from "./run/footnote-ref-run";
|
|||||||
|
|
||||||
export const FootnoteType = {
|
export const FootnoteType = {
|
||||||
SEPERATOR: "separator",
|
SEPERATOR: "separator",
|
||||||
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||||
CONTINUATION_SEPERATOR: "continuationSeparator",
|
CONTINUATION_SEPERATOR: "continuationSeparator",
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export type IFootnoteOptions = {
|
export interface IFootnoteOptions {
|
||||||
readonly id: number;
|
readonly id: number;
|
||||||
readonly type?: (typeof FootnoteType)[keyof typeof FootnoteType];
|
readonly type?: (typeof FootnoteType)[keyof typeof FootnoteType];
|
||||||
readonly children: readonly Paragraph[];
|
readonly children: readonly Paragraph[];
|
||||||
};
|
}
|
||||||
|
|
||||||
export class Footnote extends XmlComponent {
|
export class Footnote extends XmlComponent {
|
||||||
public constructor(options: IFootnoteOptions) {
|
public constructor(options: IFootnoteOptions) {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { Run } from "@file/paragraph";
|
import { Run } from "@file/paragraph";
|
||||||
|
|
||||||
import { ContinuationSeperator } from "./continuation-seperator";
|
import { ContinuationSeperator } from "./continuation-seperator";
|
||||||
|
|
||||||
export class ContinuationSeperatorRun extends Run {
|
export class ContinuationSeperatorRun extends Run {
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user