@design.estate/dees-document 1.0.94 → 1.0.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +184 -131
- package/dist_bundle/bundle.js.map +4 -4
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/document.d.ts +3 -0
- package/dist_ts_web/elements/document.demo.d.ts +1 -0
- package/dist_ts_web/elements/document.demo.js +6 -0
- package/dist_ts_web/elements/document.js +53 -18
- package/dist_ts_web/elements/index.d.ts +1 -0
- package/dist_ts_web/elements/index.js +2 -1
- package/dist_ts_web/elements/page.d.ts +4 -0
- package/dist_ts_web/elements/page.js +79 -35
- package/dist_ts_web/elements/viewer.d.ts +14 -0
- package/dist_ts_web/elements/viewer.demo.d.ts +1 -0
- package/dist_ts_web/elements/viewer.demo.js +6 -0
- package/dist_ts_web/elements/viewer.js +83 -0
- package/dist_ts_web/pages/page1.js +1 -1
- package/dist_watch/bundle.js +3446 -2449
- package/dist_watch/bundle.js.map +4 -4
- package/package.json +5 -5
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/document.demo.ts +6 -0
- package/ts_web/elements/document.ts +55 -19
- package/ts_web/elements/index.ts +1 -0
- package/ts_web/elements/page.ts +79 -35
- package/ts_web/elements/viewer.demo.ts +6 -0
- package/ts_web/elements/viewer.ts +83 -0
- package/ts_web/pages/page1.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@design.estate/dees-document",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.96",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "a catalog for creating documents like invoices",
|
|
6
6
|
"main": "dist_ts_web/index.js",
|
|
@@ -18,17 +18,17 @@
|
|
|
18
18
|
"author": "Lossless GmbH",
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@design.estate/dees-domtools": "^2.0.
|
|
22
|
-
"@design.estate/dees-element": "^2.0.
|
|
21
|
+
"@design.estate/dees-domtools": "^2.0.55",
|
|
22
|
+
"@design.estate/dees-element": "^2.0.32",
|
|
23
23
|
"@design.estate/dees-wcctools": "^1.0.76",
|
|
24
24
|
"@git.zone/tsrun": "^1.2.44",
|
|
25
25
|
"@push.rocks/smartfile": "^10.0.26",
|
|
26
26
|
"@push.rocks/smartjson": "^5.0.10",
|
|
27
27
|
"@push.rocks/smartpath": "^5.0.5",
|
|
28
28
|
"@push.rocks/smartpdf": "^3.0.16",
|
|
29
|
-
"@push.rocks/smarttime": "^4.0.
|
|
29
|
+
"@push.rocks/smarttime": "^4.0.6",
|
|
30
30
|
"@tsclass/tsclass": "^4.0.46",
|
|
31
|
-
"@types/qrcode": "^1.5.
|
|
31
|
+
"@types/qrcode": "^1.5.4",
|
|
32
32
|
"qrcode": "^1.5.3"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -18,6 +18,7 @@ import { DePage } from './page.js';
|
|
|
18
18
|
import { DeContentInvoice } from './contentinvoice.js';
|
|
19
19
|
|
|
20
20
|
import * as shared from './shared/index.js';
|
|
21
|
+
import { demoFunc } from './document.demo.js';
|
|
21
22
|
|
|
22
23
|
declare global {
|
|
23
24
|
interface HTMLElementTagNameMap {
|
|
@@ -27,9 +28,7 @@ declare global {
|
|
|
27
28
|
|
|
28
29
|
@customElement('dedocument-dedocument')
|
|
29
30
|
export class DeDocument extends DeesElement {
|
|
30
|
-
public static demo =
|
|
31
|
-
<dedocument-dedocument .format="${'a4'}" .letterData=${shared.demoLetter}></dedocument-dedocument>
|
|
32
|
-
`;
|
|
31
|
+
public static demo = demoFunc;
|
|
33
32
|
|
|
34
33
|
@property({
|
|
35
34
|
type: String,
|
|
@@ -39,7 +38,12 @@ export class DeDocument extends DeesElement {
|
|
|
39
38
|
@property({
|
|
40
39
|
type: Number,
|
|
41
40
|
})
|
|
42
|
-
public viewWidth: number =
|
|
41
|
+
public viewWidth: number = null;
|
|
42
|
+
|
|
43
|
+
@property({
|
|
44
|
+
type: Number,
|
|
45
|
+
})
|
|
46
|
+
public viewHeight: number = null;
|
|
43
47
|
|
|
44
48
|
@property({
|
|
45
49
|
type: Boolean,
|
|
@@ -81,28 +85,31 @@ export class DeDocument extends DeesElement {
|
|
|
81
85
|
}
|
|
82
86
|
|
|
83
87
|
.betweenPagesSpacer {
|
|
84
|
-
height:
|
|
88
|
+
height: 16px;
|
|
85
89
|
}
|
|
86
90
|
`,
|
|
87
91
|
];
|
|
88
92
|
|
|
89
93
|
public render(): TemplateResult {
|
|
90
94
|
return html`
|
|
91
|
-
<
|
|
92
|
-
:host {
|
|
93
|
-
transform-origin: top left;
|
|
94
|
-
transform: ${this.viewWidth
|
|
95
|
-
? unsafeCSS(
|
|
96
|
-
`scale(${this.viewWidth / shared.a4Width}, ${this.viewWidth / shared.a4Width})`
|
|
97
|
-
)
|
|
98
|
-
: unsafeCSS('')};
|
|
99
|
-
}
|
|
100
|
-
</style>
|
|
101
|
-
<div class="scaleport"></div>
|
|
95
|
+
<div class="documentContainer"></div>
|
|
102
96
|
`;
|
|
103
97
|
}
|
|
104
98
|
|
|
105
99
|
public async firstUpdated(_changedProperties: Map<string | number | symbol, unknown>) {
|
|
100
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
|
101
|
+
for (const entry of entries) {
|
|
102
|
+
const width = entry.contentRect.width;
|
|
103
|
+
const height = entry.contentRect.height;
|
|
104
|
+
// Handle the new dimensions here
|
|
105
|
+
this.adjustDePageScaling();
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
resizeObserver.observe(this);
|
|
109
|
+
this.registerGarbageFunction(() => {
|
|
110
|
+
resizeObserver.disconnect();
|
|
111
|
+
})
|
|
112
|
+
|
|
106
113
|
if (this.letterDataUrl) {
|
|
107
114
|
const response = await fetch(this.letterDataUrl);
|
|
108
115
|
this.letterData = await response.json();
|
|
@@ -112,7 +119,7 @@ export class DeDocument extends DeesElement {
|
|
|
112
119
|
|
|
113
120
|
public async renderDocument() {
|
|
114
121
|
const domtools = await this.domtoolsPromise;
|
|
115
|
-
const
|
|
122
|
+
const documentContainer = this.shadowRoot.querySelector('.documentContainer');
|
|
116
123
|
let pages: DePage[] = [];
|
|
117
124
|
let pageCounter = 0;
|
|
118
125
|
let complete = false;
|
|
@@ -135,12 +142,12 @@ export class DeDocument extends DeesElement {
|
|
|
135
142
|
newPage.pageNumber = pageCounter;
|
|
136
143
|
newPage.append(currentContent);
|
|
137
144
|
newPage.pageTotalNumber = pageCounter;
|
|
138
|
-
|
|
145
|
+
documentContainer.append(newPage);
|
|
139
146
|
// betweenPagesSpacer
|
|
140
147
|
if (!this.printMode) {
|
|
141
148
|
const betweenPagesSpacerDiv = document.createElement('div');
|
|
142
149
|
betweenPagesSpacerDiv.classList.add('betweenPagesSpacer');
|
|
143
|
-
|
|
150
|
+
documentContainer.append(betweenPagesSpacerDiv);
|
|
144
151
|
}
|
|
145
152
|
await currentContent.elementDomReady;
|
|
146
153
|
await currentContent.trimStartToOffset(overallContentOffset);
|
|
@@ -164,5 +171,34 @@ export class DeDocument extends DeesElement {
|
|
|
164
171
|
for (const page of pages) {
|
|
165
172
|
page.pageTotalNumber = pageCounter;
|
|
166
173
|
}
|
|
174
|
+
this.adjustDePageScaling();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
updated(changedProperties: Map<string | number | symbol, unknown>): void {
|
|
178
|
+
super.updated(changedProperties);
|
|
179
|
+
|
|
180
|
+
if (changedProperties.has('viewHeight') || changedProperties.has('viewWidth')) {
|
|
181
|
+
this.adjustDePageScaling();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private adjustDePageScaling() {
|
|
186
|
+
if (this.printMode) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
this.viewWidth = this.clientWidth;
|
|
190
|
+
// Find all DePage instances within this DeDocument
|
|
191
|
+
const pages = this.shadowRoot.querySelectorAll('dedocument-page');
|
|
192
|
+
|
|
193
|
+
// Update each DePage instance's viewHeight and viewWidth
|
|
194
|
+
pages.forEach((page: DePage) => {
|
|
195
|
+
if (this.viewHeight) {
|
|
196
|
+
page.viewHeight = this.viewHeight;
|
|
197
|
+
}
|
|
198
|
+
if (this.viewWidth) {
|
|
199
|
+
page.viewWidth = this.viewWidth;
|
|
200
|
+
console.log('setting viewWidth: ', this.viewWidth);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
167
203
|
}
|
|
168
204
|
}
|
package/ts_web/elements/index.ts
CHANGED
package/ts_web/elements/page.ts
CHANGED
|
@@ -23,6 +23,12 @@ declare global {
|
|
|
23
23
|
export class DePage extends DeesElement {
|
|
24
24
|
public static demo = () => html` <dedocument-page .format="${'a4'}"></dedocument-page> `;
|
|
25
25
|
|
|
26
|
+
@property()
|
|
27
|
+
viewWidth: number = null;
|
|
28
|
+
|
|
29
|
+
@property()
|
|
30
|
+
viewHeight: number = null;
|
|
31
|
+
|
|
26
32
|
@property({
|
|
27
33
|
type: String,
|
|
28
34
|
})
|
|
@@ -58,7 +64,15 @@ export class DePage extends DeesElement {
|
|
|
58
64
|
domtools.elementBasic.staticStyles,
|
|
59
65
|
css`
|
|
60
66
|
:host {
|
|
67
|
+
display: block;
|
|
68
|
+
max-height: ${shared.a4Height}px;
|
|
69
|
+
max-width: ${shared.a4Width}px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
#scaleWrapper {
|
|
73
|
+
transform-origin: top left;
|
|
61
74
|
}
|
|
75
|
+
|
|
62
76
|
.versionOverlay {
|
|
63
77
|
pointer-events: none;
|
|
64
78
|
position: absolute;
|
|
@@ -93,44 +107,46 @@ export class DePage extends DeesElement {
|
|
|
93
107
|
|
|
94
108
|
public render(): TemplateResult {
|
|
95
109
|
return html`
|
|
96
|
-
<
|
|
97
|
-
<dedocument-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
<dedocument-letterheader
|
|
105
|
-
.pageNumber="${this.pageNumber}"
|
|
106
|
-
.letterData=${this.letterData}
|
|
107
|
-
.pageTotalNumber="${this.pageTotalNumber}"
|
|
108
|
-
></dedocument-letterheader>
|
|
109
|
-
`
|
|
110
|
-
: html``}
|
|
111
|
-
<dedocument-pagecontent
|
|
112
|
-
.pageNumber="${this.pageNumber}"
|
|
113
|
-
.pageTotalNumber="${this.pageTotalNumber}"
|
|
114
|
-
.letterData=${this.letterData}
|
|
115
|
-
><slot></slot
|
|
116
|
-
></dedocument-pagecontent>
|
|
117
|
-
<dedocument-pagefooter
|
|
118
|
-
.letterData=${this.letterData}
|
|
119
|
-
.pageNumber="${this.pageNumber}"
|
|
120
|
-
.pageTotalNumber="${this.pageTotalNumber}"
|
|
121
|
-
></dedocument-pagefooter>
|
|
122
|
-
<div class="versionOverlay">
|
|
123
|
-
${this.letterData.versionInfo.type === 'draft'
|
|
110
|
+
<div id="scaleWrapper">
|
|
111
|
+
<dedocument-pagecontainer .printMode=${this.printMode}>
|
|
112
|
+
<dedocument-pageheader
|
|
113
|
+
.letterData=${this.letterData}
|
|
114
|
+
.pageNumber="${this.pageNumber}"
|
|
115
|
+
.pageTotalNumber="${this.pageTotalNumber}"
|
|
116
|
+
></dedocument-pageheader>
|
|
117
|
+
${this.pageNumber === 1
|
|
124
118
|
? html`
|
|
125
|
-
<
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
119
|
+
<dedocument-letterheader
|
|
120
|
+
.pageNumber="${this.pageNumber}"
|
|
121
|
+
.letterData=${this.letterData}
|
|
122
|
+
.pageTotalNumber="${this.pageTotalNumber}"
|
|
123
|
+
></dedocument-letterheader>
|
|
130
124
|
`
|
|
131
125
|
: html``}
|
|
132
|
-
|
|
133
|
-
|
|
126
|
+
<dedocument-pagecontent
|
|
127
|
+
.pageNumber="${this.pageNumber}"
|
|
128
|
+
.pageTotalNumber="${this.pageTotalNumber}"
|
|
129
|
+
.letterData=${this.letterData}
|
|
130
|
+
><slot></slot
|
|
131
|
+
></dedocument-pagecontent>
|
|
132
|
+
<dedocument-pagefooter
|
|
133
|
+
.letterData=${this.letterData}
|
|
134
|
+
.pageNumber="${this.pageNumber}"
|
|
135
|
+
.pageTotalNumber="${this.pageTotalNumber}"
|
|
136
|
+
></dedocument-pagefooter>
|
|
137
|
+
<div class="versionOverlay">
|
|
138
|
+
${this.letterData.versionInfo.type === 'draft'
|
|
139
|
+
? html`
|
|
140
|
+
<div class="topInfo">
|
|
141
|
+
Please note: THIS IS A DRAFT ONLY. NO RIGHTS CAN BE DERIVED FROM THIS.<br />
|
|
142
|
+
-> Revision/Document version: ${this.letterData.versionInfo.version}
|
|
143
|
+
</div>
|
|
144
|
+
<div class="bigDraftText">DRAFT</div>
|
|
145
|
+
`
|
|
146
|
+
: html``}
|
|
147
|
+
</div>
|
|
148
|
+
</dedocument-pagecontainer>
|
|
149
|
+
</div>
|
|
134
150
|
`;
|
|
135
151
|
}
|
|
136
152
|
|
|
@@ -139,4 +155,32 @@ export class DePage extends DeesElement {
|
|
|
139
155
|
const pageContent = this.shadowRoot.querySelector('dedocument-pagecontent');
|
|
140
156
|
return pageContent.checkOverflow();
|
|
141
157
|
}
|
|
158
|
+
|
|
159
|
+
updated(changedProperties: Map<string | number | symbol, unknown>): void {
|
|
160
|
+
super.updated(changedProperties);
|
|
161
|
+
if (changedProperties.has("viewHeight") || changedProperties.has("viewWidth")) {
|
|
162
|
+
this.adjustScaling();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
private adjustScaling() {
|
|
167
|
+
console.log('page scale adjustment triggered.')
|
|
168
|
+
const scaleWrapper: HTMLDivElement = this.shadowRoot.querySelector("#scaleWrapper");
|
|
169
|
+
|
|
170
|
+
if (!scaleWrapper) return;
|
|
171
|
+
|
|
172
|
+
let scale = 1;
|
|
173
|
+
if (this.viewHeight) {
|
|
174
|
+
scale = this.viewHeight / shared.a4Height;
|
|
175
|
+
} else if (this.viewWidth) {
|
|
176
|
+
scale = this.viewWidth / shared.a4Width;
|
|
177
|
+
}
|
|
178
|
+
console.log(`new scale is ${scale}`);
|
|
179
|
+
scaleWrapper.style.transform = `scale(${scale})`;
|
|
180
|
+
|
|
181
|
+
// Adjust the outer dimensions so they match the scaled content
|
|
182
|
+
|
|
183
|
+
// this.style.width = `${shared.a4Width * scale}px`;
|
|
184
|
+
this.style.height = `${shared.a4Height * scale}px`;
|
|
185
|
+
}
|
|
142
186
|
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
|
|
3
|
+
import { DeesElement, css, cssManager, customElement, html } from '@design.estate/dees-element';
|
|
4
|
+
import { demoFunc } from './viewer.demo.js';
|
|
5
|
+
|
|
6
|
+
declare global {
|
|
7
|
+
interface HTMLElementTagNameMap {
|
|
8
|
+
'dedocument-viewer': DeDocumentViewer;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@customElement('dedocument-viewer')
|
|
13
|
+
export class DeDocumentViewer extends DeesElement {
|
|
14
|
+
// DEMO
|
|
15
|
+
public static demo = demoFunc;
|
|
16
|
+
|
|
17
|
+
// INSTANCE
|
|
18
|
+
public letterData: plugins.tsclass.business.ILetter = null;
|
|
19
|
+
|
|
20
|
+
public static styles = [
|
|
21
|
+
cssManager.defaultStyles,
|
|
22
|
+
css`
|
|
23
|
+
.maincontainer {
|
|
24
|
+
position: relative;
|
|
25
|
+
height: 100%;
|
|
26
|
+
width: 100%;
|
|
27
|
+
background: ${cssManager.bdTheme('#eeeeeb', '#111')};
|
|
28
|
+
}
|
|
29
|
+
.controls {
|
|
30
|
+
top: 0px;
|
|
31
|
+
right: 0px;
|
|
32
|
+
left: 0px;
|
|
33
|
+
position: absolute;
|
|
34
|
+
height: 32px;
|
|
35
|
+
width: 100%;
|
|
36
|
+
background: ${cssManager.bdTheme('#eeeeeb', '#111111ee')};
|
|
37
|
+
box-shadow: 0px 2px 8px 0px #000000;
|
|
38
|
+
}
|
|
39
|
+
.controlsShadow {
|
|
40
|
+
position: absolute;
|
|
41
|
+
top: 32px;
|
|
42
|
+
right: 0px;
|
|
43
|
+
left: 0px;
|
|
44
|
+
height: 16px;
|
|
45
|
+
width: 100%;
|
|
46
|
+
position: absolute;
|
|
47
|
+
background: linear-gradient(to bottom, #111111cc 0%, #11111100 100%);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.viewport {
|
|
51
|
+
position: absolute;
|
|
52
|
+
padding: 16px;
|
|
53
|
+
padding-top: 48px;
|
|
54
|
+
padding-bottom: 0px;
|
|
55
|
+
top: 0px;
|
|
56
|
+
left: 0px;
|
|
57
|
+
right: 0px;
|
|
58
|
+
bottom: 0px;
|
|
59
|
+
overflow-y: scroll;
|
|
60
|
+
overscroll-behavior: contain;
|
|
61
|
+
}
|
|
62
|
+
`,
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
public render = () => {
|
|
66
|
+
return html`
|
|
67
|
+
<div class="maincontainer">
|
|
68
|
+
<div class="viewport">
|
|
69
|
+
${this.letterData
|
|
70
|
+
? html` <dedocument-dedocument .letterData=${this.letterData}></dedocument-dedocument> `
|
|
71
|
+
: html``}
|
|
72
|
+
</div>
|
|
73
|
+
<div class="controls"></div>
|
|
74
|
+
</div>
|
|
75
|
+
`;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
public updated = (changedProperties: Map<string | number | symbol, unknown>) => {
|
|
79
|
+
super.updated(changedProperties);
|
|
80
|
+
if (changedProperties.has('letterData')) {
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
package/ts_web/pages/page1.ts
CHANGED