@design.estate/dees-document 1.0.93 → 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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-document",
3
- "version": "1.0.93",
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",
@@ -12,22 +12,23 @@
12
12
  "scripts": {
13
13
  "test": "npm run build && tstest test/",
14
14
  "build": "tsbuild --allowimplicitany && tsbuild element --allowimplicitany && tsbundle element --production",
15
- "watch": "tswatch element"
15
+ "watch": "tswatch element",
16
+ "buildDocs": "tsdoc"
16
17
  },
17
18
  "author": "Lossless GmbH",
18
19
  "license": "MIT",
19
20
  "dependencies": {
20
- "@design.estate/dees-domtools": "^2.0.34",
21
- "@design.estate/dees-element": "^2.0.23",
21
+ "@design.estate/dees-domtools": "^2.0.55",
22
+ "@design.estate/dees-element": "^2.0.32",
22
23
  "@design.estate/dees-wcctools": "^1.0.76",
23
24
  "@git.zone/tsrun": "^1.2.44",
24
25
  "@push.rocks/smartfile": "^10.0.26",
25
26
  "@push.rocks/smartjson": "^5.0.10",
26
27
  "@push.rocks/smartpath": "^5.0.5",
27
28
  "@push.rocks/smartpdf": "^3.0.16",
28
- "@push.rocks/smarttime": "^4.0.1",
29
+ "@push.rocks/smarttime": "^4.0.6",
29
30
  "@tsclass/tsclass": "^4.0.46",
30
- "@types/qrcode": "^1.5.2",
31
+ "@types/qrcode": "^1.5.4",
31
32
  "qrcode": "^1.5.3"
32
33
  },
33
34
  "devDependencies": {
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-document',
6
- version: '1.0.93',
6
+ version: '1.0.96',
7
7
  description: 'a catalog for creating documents like invoices'
8
8
  }
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-document',
6
- version: '1.0.93',
6
+ version: '1.0.96',
7
7
  description: 'a catalog for creating documents like invoices'
8
8
  }
@@ -0,0 +1,6 @@
1
+ import * as shared from './shared/index.js';
2
+ import { html } from '@design.estate/dees-element';
3
+
4
+ export const demoFunc = () => html`
5
+ <dedocument-dedocument .format="${'a4'}" .letterData=${shared.demoLetter}></dedocument-dedocument>
6
+ `;
@@ -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 = () => html`
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 = shared.a4Width;
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: 20px;
88
+ height: 16px;
85
89
  }
86
90
  `,
87
91
  ];
88
92
 
89
93
  public render(): TemplateResult {
90
94
  return html`
91
- <style>
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 scaleport = this.shadowRoot.querySelector('.scaleport');
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
- scaleport.append(newPage);
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
- scaleport.append(betweenPagesSpacerDiv);
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
  }
@@ -6,3 +6,6 @@ export * from './pagecontainer.js';
6
6
  export * from './pagecontent.js';
7
7
  export * from './pagefooter.js';
8
8
  export * from './pageheader.js';
9
+ export * from './viewer.js';
10
+
11
+ export * from './shared/index.js';
@@ -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
- <dedocument-pagecontainer .printMode=${this.printMode}>
97
- <dedocument-pageheader
98
- .letterData=${this.letterData}
99
- .pageNumber="${this.pageNumber}"
100
- .pageTotalNumber="${this.pageTotalNumber}"
101
- ></dedocument-pageheader>
102
- ${this.pageNumber === 1
103
- ? html`
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
- <div class="topInfo">
126
- Please note: THIS IS A DRAFT ONLY. NO RIGHTS CAN BE DERIVED FROM THIS.<br>
127
- -> Revision/Document version: ${this.letterData.versionInfo.version}
128
- </div>
129
- <div class="bigDraftText">DRAFT</div>
119
+ <dedocument-letterheader
120
+ .pageNumber="${this.pageNumber}"
121
+ .letterData=${this.letterData}
122
+ .pageTotalNumber="${this.pageTotalNumber}"
123
+ ></dedocument-letterheader>
130
124
  `
131
125
  : html``}
132
- </div>
133
- </dedocument-pagecontainer>
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,6 @@
1
+ import { html } from '@design.estate/dees-element';
2
+ import * as shared from './shared/index.js';
3
+
4
+ export const demoFunc = () => html`
5
+ <dedocument-viewer .letterData=${shared.demoLetter}></dedocument-viewer>
6
+ `;
@@ -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
+ }
@@ -5,7 +5,7 @@ import * as plugins from '../plugins.js';
5
5
  export const page1 = () => html`
6
6
  <style>
7
7
  dedocument-dedocument {
8
- margin: 40px;
8
+ margin: 16px;
9
9
  }
10
10
  </style>
11
11
  <dedocument-dedocument .printMode=${false} letterData=${plugins.smartjson.stringifyBase64({