overview-components 1.0.92 → 1.0.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/dist/assets/generated/locales/de.js +71 -0
  2. package/dist/assets/generated/locales/de.js.map +1 -0
  3. package/dist/assets/generated/locales/en.js +71 -0
  4. package/dist/assets/generated/locales/en.js.map +1 -0
  5. package/dist/assets/generated/locales/fr.js +71 -0
  6. package/dist/assets/generated/locales/fr.js.map +1 -0
  7. package/dist/assets/generated/locales/hr.js +71 -0
  8. package/dist/assets/generated/locales/hr.js.map +1 -0
  9. package/dist/assets/generated/locales/it.js +71 -0
  10. package/dist/assets/generated/locales/it.js.map +1 -0
  11. package/dist/assets/generated/locales/pl.js +71 -0
  12. package/dist/assets/generated/locales/pl.js.map +1 -0
  13. package/dist/assets/generated/locales/ro.js +71 -0
  14. package/dist/assets/generated/locales/ro.js.map +1 -0
  15. package/dist/assets/generated/locales/sk.js +71 -0
  16. package/dist/assets/generated/locales/sk.js.map +1 -0
  17. package/dist/assets/generated/locales/sr.js +71 -0
  18. package/dist/assets/generated/locales/sr.js.map +1 -0
  19. package/dist/assets/icons/iconGlyphs.js +679 -0
  20. package/dist/assets/icons/iconGlyphs.js.map +1 -0
  21. package/dist/assets/illustration/delete-illustration.js +96 -0
  22. package/dist/assets/illustration/delete-illustration.js.map +1 -0
  23. package/dist/assets/illustration/no-content.js +167 -0
  24. package/dist/assets/illustration/no-content.js.map +1 -0
  25. package/dist/assets/illustration/no-preview.js +133 -0
  26. package/dist/assets/illustration/no-preview.js.map +1 -0
  27. package/dist/assets/illustration/not-found.js +106 -0
  28. package/dist/assets/illustration/not-found.js.map +1 -0
  29. package/dist/assets/illustration/settings-illustration.js +176 -0
  30. package/dist/assets/illustration/settings-illustration.js.map +1 -0
  31. package/dist/components/components-settings/attachments-tab-settings.js +226 -0
  32. package/dist/components/components-settings/attachments-tab-settings.js.map +1 -0
  33. package/dist/components/components-settings/data-grid-settings.js +318 -0
  34. package/dist/components/components-settings/data-grid-settings.js.map +1 -0
  35. package/dist/components/components-settings/section-tab-settings.js +269 -0
  36. package/dist/components/components-settings/section-tab-settings.js.map +1 -0
  37. package/dist/components/components-settings/tabs-overview-settings.js +439 -0
  38. package/dist/components/components-settings/tabs-overview-settings.js.map +1 -0
  39. package/dist/components/lit-attachments-tab.js +680 -0
  40. package/dist/components/lit-attachments-tab.js.map +1 -0
  41. package/dist/components/lit-badge.js +100 -0
  42. package/dist/components/lit-badge.js.map +1 -0
  43. package/dist/components/lit-case-variables-tab.js +842 -0
  44. package/dist/components/lit-case-variables-tab.js.map +1 -0
  45. package/dist/components/lit-chart.js +423 -0
  46. package/dist/components/lit-chart.js.map +1 -0
  47. package/dist/components/lit-data-grid-tanstack.js +2246 -0
  48. package/dist/components/lit-data-grid-tanstack.js.map +1 -0
  49. package/dist/components/lit-filter-modal.js +344 -0
  50. package/dist/components/lit-filter-modal.js.map +1 -0
  51. package/dist/components/lit-multiselect-item.js +706 -0
  52. package/dist/components/lit-multiselect-item.js.map +1 -0
  53. package/dist/components/lit-section-tab.js +145 -0
  54. package/dist/components/lit-section-tab.js.map +1 -0
  55. package/dist/components/lit-tabs-overview.js +345 -0
  56. package/dist/components/lit-tabs-overview.js.map +1 -0
  57. package/dist/components/modals/lit-confirm-modal.js +120 -0
  58. package/dist/components/modals/lit-confirm-modal.js.map +1 -0
  59. package/dist/components/modals/lit-delete-modal.js +128 -0
  60. package/dist/components/modals/lit-delete-modal.js.map +1 -0
  61. package/dist/components/react-wrappers/attachments-tab.js +9 -0
  62. package/dist/components/react-wrappers/attachments-tab.js.map +1 -0
  63. package/dist/components/react-wrappers/badge.js +9 -0
  64. package/dist/components/react-wrappers/badge.js.map +1 -0
  65. package/dist/components/react-wrappers/button.js +9 -0
  66. package/dist/components/react-wrappers/button.js.map +1 -0
  67. package/dist/components/react-wrappers/case-variables-tab.js +9 -0
  68. package/dist/components/react-wrappers/case-variables-tab.js.map +1 -0
  69. package/dist/components/react-wrappers/chart.js +9 -0
  70. package/dist/components/react-wrappers/chart.js.map +1 -0
  71. package/dist/components/react-wrappers/data-grid-tanstack.js +9 -0
  72. package/dist/components/react-wrappers/data-grid-tanstack.js.map +1 -0
  73. package/dist/components/react-wrappers/filter-modal.js +9 -0
  74. package/dist/components/react-wrappers/filter-modal.js.map +1 -0
  75. package/dist/components/react-wrappers/progress-bar.js +9 -0
  76. package/dist/components/react-wrappers/progress-bar.js.map +1 -0
  77. package/dist/components/react-wrappers/section-tab.js +9 -0
  78. package/dist/components/react-wrappers/section-tab.js.map +1 -0
  79. package/dist/components/react-wrappers/tabs-overview.js +9 -0
  80. package/dist/components/react-wrappers/tabs-overview.js.map +1 -0
  81. package/dist/data/translations.js +2763 -0
  82. package/dist/data/translations.js.map +1 -0
  83. package/dist/index.js +43 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/schemas/index.js +17 -0
  86. package/dist/schemas/index.js.map +1 -0
  87. package/dist/schemas/lit-attachments-tab-document.schema.js +20 -0
  88. package/dist/schemas/lit-attachments-tab-document.schema.js.map +1 -0
  89. package/dist/schemas/lit-attachments-tab-settings-value.schema.js +15 -0
  90. package/dist/schemas/lit-attachments-tab-settings-value.schema.js.map +1 -0
  91. package/dist/schemas/lit-attachments-tab.schema.js +32 -0
  92. package/dist/schemas/lit-attachments-tab.schema.js.map +1 -0
  93. package/dist/schemas/lit-case-variables-tab-cell.schema.js +43 -0
  94. package/dist/schemas/lit-case-variables-tab-cell.schema.js.map +1 -0
  95. package/dist/schemas/lit-case-variables-tab-rows.schema.js +6 -0
  96. package/dist/schemas/lit-case-variables-tab-rows.schema.js.map +1 -0
  97. package/dist/schemas/lit-case-variables-tab.schema.js +24 -0
  98. package/dist/schemas/lit-case-variables-tab.schema.js.map +1 -0
  99. package/dist/schemas/lit-data-grid-tanstack-column-array.schema.js +6 -0
  100. package/dist/schemas/lit-data-grid-tanstack-column-array.schema.js.map +1 -0
  101. package/dist/schemas/lit-data-grid-tanstack-column-custom-filter-array.schema.js +6 -0
  102. package/dist/schemas/lit-data-grid-tanstack-column-custom-filter-array.schema.js.map +1 -0
  103. package/dist/schemas/lit-data-grid-tanstack-column-custom-filter.schema.js +11 -0
  104. package/dist/schemas/lit-data-grid-tanstack-column-custom-filter.schema.js.map +1 -0
  105. package/dist/schemas/lit-data-grid-tanstack-column.schema.js +55 -0
  106. package/dist/schemas/lit-data-grid-tanstack-column.schema.js.map +1 -0
  107. package/dist/schemas/lit-data-grid-tanstack.schema.js +99 -0
  108. package/dist/schemas/lit-data-grid-tanstack.schema.js.map +1 -0
  109. package/dist/schemas/lit-section-tab-schema.js +24 -0
  110. package/dist/schemas/lit-section-tab-schema.js.map +1 -0
  111. package/dist/schemas/lit-tabs-overview-tab-array.schema.js +6 -0
  112. package/dist/schemas/lit-tabs-overview-tab-array.schema.js.map +1 -0
  113. package/dist/schemas/lit-tabs-overview-tab.schema.js +32 -0
  114. package/dist/schemas/lit-tabs-overview-tab.schema.js.map +1 -0
  115. package/dist/schemas/lit-tabs-overview.schema.js +29 -0
  116. package/dist/schemas/lit-tabs-overview.schema.js.map +1 -0
  117. package/dist/scripts/translate-locales.js +69 -0
  118. package/dist/scripts/translate-locales.js.map +1 -0
  119. package/dist/shared/filter-inputs.js +427 -0
  120. package/dist/shared/filter-inputs.js.map +1 -0
  121. package/dist/shared/lit-button.js +156 -0
  122. package/dist/shared/lit-button.js.map +1 -0
  123. package/dist/shared/lit-case-variables-tab-cell.js +226 -0
  124. package/dist/shared/lit-case-variables-tab-cell.js.map +1 -0
  125. package/dist/shared/lit-checkbox.js +171 -0
  126. package/dist/shared/lit-checkbox.js.map +1 -0
  127. package/dist/shared/lit-custom-popper.js +117 -0
  128. package/dist/shared/lit-custom-popper.js.map +1 -0
  129. package/dist/shared/lit-data-grid-action-buttons-popover.js +295 -0
  130. package/dist/shared/lit-data-grid-action-buttons-popover.js.map +1 -0
  131. package/dist/shared/lit-data-grid-density-popover.js +84 -0
  132. package/dist/shared/lit-data-grid-density-popover.js.map +1 -0
  133. package/dist/shared/lit-data-grid-export-popover.js +68 -0
  134. package/dist/shared/lit-data-grid-export-popover.js.map +1 -0
  135. package/dist/shared/lit-data-grid-operators-popover.js +114 -0
  136. package/dist/shared/lit-data-grid-operators-popover.js.map +1 -0
  137. package/dist/shared/lit-data-grid-row-actions.js +76 -0
  138. package/dist/shared/lit-data-grid-row-actions.js.map +1 -0
  139. package/dist/shared/lit-date-picker.js +606 -0
  140. package/dist/shared/lit-date-picker.js.map +1 -0
  141. package/dist/shared/lit-icon-button.js +105 -0
  142. package/dist/shared/lit-icon-button.js.map +1 -0
  143. package/dist/shared/lit-icon.js +284 -0
  144. package/dist/shared/lit-icon.js.map +1 -0
  145. package/dist/shared/lit-input.js +239 -0
  146. package/dist/shared/lit-input.js.map +1 -0
  147. package/dist/shared/lit-label.js +104 -0
  148. package/dist/shared/lit-label.js.map +1 -0
  149. package/dist/shared/lit-loader.js +69 -0
  150. package/dist/shared/lit-loader.js.map +1 -0
  151. package/dist/shared/lit-loading-bar.js +127 -0
  152. package/dist/shared/lit-loading-bar.js.map +1 -0
  153. package/dist/shared/lit-menu-item.js +99 -0
  154. package/dist/shared/lit-menu-item.js.map +1 -0
  155. package/dist/shared/lit-menu.js +42 -0
  156. package/dist/shared/lit-menu.js.map +1 -0
  157. package/dist/shared/lit-modal-body.js +22 -0
  158. package/dist/shared/lit-modal-body.js.map +1 -0
  159. package/dist/shared/lit-modal-footer.js +29 -0
  160. package/dist/shared/lit-modal-footer.js.map +1 -0
  161. package/dist/shared/lit-modal-header.js +36 -0
  162. package/dist/shared/lit-modal-header.js.map +1 -0
  163. package/dist/shared/lit-modal.js +169 -0
  164. package/dist/shared/lit-modal.js.map +1 -0
  165. package/dist/shared/lit-overflow-tooltip.js +103 -0
  166. package/dist/shared/lit-overflow-tooltip.js.map +1 -0
  167. package/dist/shared/lit-pill.js +88 -0
  168. package/dist/shared/lit-pill.js.map +1 -0
  169. package/dist/shared/lit-progress-bar.js +81 -0
  170. package/dist/shared/lit-progress-bar.js.map +1 -0
  171. package/dist/shared/lit-responsive-button.js +94 -0
  172. package/dist/shared/lit-responsive-button.js.map +1 -0
  173. package/dist/shared/lit-select-field.js +459 -0
  174. package/dist/shared/lit-select-field.js.map +1 -0
  175. package/dist/shared/lit-select.js +413 -0
  176. package/dist/shared/lit-select.js.map +1 -0
  177. package/dist/shared/lit-settings.js +77 -0
  178. package/dist/shared/lit-settings.js.map +1 -0
  179. package/dist/shared/lit-text-field.js +222 -0
  180. package/dist/shared/lit-text-field.js.map +1 -0
  181. package/dist/shared/lit-toggle.js +222 -0
  182. package/dist/shared/lit-toggle.js.map +1 -0
  183. package/dist/shared/lit-tooltip.js +166 -0
  184. package/dist/shared/lit-tooltip.js.map +1 -0
  185. package/dist/shared/simple-popper.js +266 -0
  186. package/dist/shared/simple-popper.js.map +1 -0
  187. package/dist/shared/simple-tooltip.js +248 -0
  188. package/dist/shared/simple-tooltip.js.map +1 -0
  189. package/dist/shared/styles/button-shared-styles.js +201 -0
  190. package/dist/shared/styles/button-shared-styles.js.map +1 -0
  191. package/dist/styles.js +169 -0
  192. package/dist/styles.js.map +1 -0
  193. package/dist/utils/currency.js +16 -0
  194. package/dist/utils/currency.js.map +1 -0
  195. package/dist/utils/custom-filters.js +84 -0
  196. package/dist/utils/custom-filters.js.map +1 -0
  197. package/dist/utils/date.js +22 -0
  198. package/dist/utils/date.js.map +1 -0
  199. package/dist/utils/getOperatorByType.js +66 -0
  200. package/dist/utils/getOperatorByType.js.map +1 -0
  201. package/dist/utils/getOverviewValue.js +177 -0
  202. package/dist/utils/getOverviewValue.js.map +1 -0
  203. package/dist/utils/localization.js +432 -0
  204. package/dist/utils/localization.js.map +1 -0
  205. package/dist/utils/utils.js +13 -0
  206. package/dist/utils/utils.js.map +1 -0
  207. package/dist/utils/validate-json-schema.js +8 -0
  208. package/dist/utils/validate-json-schema.js.map +1 -0
  209. package/dist/validators/validator.js +7 -0
  210. package/dist/validators/validator.js.map +1 -0
  211. package/package.json +2 -2
@@ -0,0 +1,680 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { customElement } from 'lit/decorators.js';
8
+ import { css, html, LitElement } from 'lit';
9
+ import { property, state } from 'lit/decorators.js';
10
+ import { styleMap } from 'lit/directives/style-map.js';
11
+ import { msg } from '@lit/localize';
12
+ import { isEmpty } from 'lodash';
13
+ import { saveAs } from 'file-saver';
14
+ // components
15
+ import '../shared/lit-icon.js';
16
+ import '../shared/lit-icon-button.js';
17
+ import '../shared/lit-select.js';
18
+ import '../shared/lit-overflow-tooltip.js';
19
+ import '../assets/illustration/no-preview.js';
20
+ import '../assets/illustration/not-found.js';
21
+ import '../shared/lit-loading-bar.js';
22
+ import '../components/lit-section-tab.js';
23
+ import './components-settings/attachments-tab-settings.js';
24
+ // pdf.js
25
+ import * as pdfjsLib from 'pdfjs-dist';
26
+ pdfjsLib.GlobalWorkerOptions.workerSrc = new URL('pdfjs-dist/build/pdf.worker.js', import.meta.url).toString();
27
+ let LitAttachmentsTab = class LitAttachmentsTab extends LitElement {
28
+ constructor() {
29
+ super(...arguments);
30
+ this.hideTabWhen = false;
31
+ this.documents = [];
32
+ this.type = 'compact';
33
+ this.scale = 1;
34
+ this.isDocumentLoading = false;
35
+ this.enableSettings = false;
36
+ this.onSettingsChanged = () => { };
37
+ this.selectedId = '';
38
+ this.pageNumber = 1;
39
+ this.pageCount = 1;
40
+ this.isChecked = {};
41
+ this.preview = true;
42
+ this.documentData = null;
43
+ this.isOpenModal = false;
44
+ this.canvas = null;
45
+ this.ctx = null;
46
+ this.outerContainer = null;
47
+ this.isDragging = false;
48
+ this.clickX = 0;
49
+ this.clickY = 0;
50
+ this.prevScrollLeft = 0;
51
+ this.prevScrollTop = 0;
52
+ this.abortController = new AbortController();
53
+ this.handleReadFile = (buffer) => new Promise((resolve, reject) => {
54
+ const reader = new FileReader();
55
+ reader.onload = () => resolve(reader);
56
+ reader.onerror = (err) => reject(err);
57
+ if (buffer !== null)
58
+ reader.readAsArrayBuffer(buffer);
59
+ });
60
+ }
61
+ disconnectedCallback() {
62
+ super.disconnectedCallback();
63
+ this.abortController.abort();
64
+ if (this.documentData && this.documentData.cancel) {
65
+ this.documentData.cancel();
66
+ this.documentData = null;
67
+ }
68
+ }
69
+ connectedCallback() {
70
+ super.connectedCallback();
71
+ this.localScale = this.scale;
72
+ }
73
+ async firstUpdated() {
74
+ this.canvas = this.shadowRoot?.querySelector('canvas') ?? null;
75
+ this.ctx = this.canvas?.getContext('2d');
76
+ this.outerContainer = this.shadowRoot?.querySelector('.document-container') || null;
77
+ await this.renderPage();
78
+ }
79
+ updated(_changedProperties) {
80
+ super.updated(_changedProperties);
81
+ if (_changedProperties.has('documents')) {
82
+ this.selectedId = this.initialSelection || (this.documents?.[0]?.id ?? '');
83
+ if (!this.hideTabWhen &&
84
+ typeof this.documents !== 'undefined' &&
85
+ !isEmpty(this.documents)) {
86
+ this.handleDocumentClick(this.selectedId);
87
+ }
88
+ }
89
+ if (_changedProperties.has('selectedId')) {
90
+ if (this.documentData && this.documentData.cancel) {
91
+ this.documentData.cancel();
92
+ this.documentData = null;
93
+ }
94
+ }
95
+ }
96
+ async loadDocumentData(documentData) {
97
+ try {
98
+ // Find the document in the documents array using the selectedId
99
+ const selectedDoc = this.documents?.find((doc) => doc.id === this.selectedId);
100
+ if (!selectedDoc) {
101
+ console.error('Selected document not found in documents array.');
102
+ return;
103
+ }
104
+ if (selectedDoc.file_type === 'application/pdf') {
105
+ const loadingTask = pdfjsLib.getDocument(documentData);
106
+ this.selectedDocument = await loadingTask.promise;
107
+ if (this.selectedDocument) {
108
+ this.pageCount = this.selectedDocument.numPages;
109
+ }
110
+ this.preview = true;
111
+ }
112
+ else if (selectedDoc.file_type === 'image/jpeg' ||
113
+ selectedDoc.file_type === 'image/png') {
114
+ const img = new Image();
115
+ img.onload = () => {
116
+ this.selectedDocument = img;
117
+ this.pageCount = 1;
118
+ this.preview = true;
119
+ this.renderPage();
120
+ };
121
+ img.src = URL.createObjectURL(new Blob([documentData], { type: selectedDoc.file_type }));
122
+ return;
123
+ }
124
+ else {
125
+ this.selectedDocument = documentData;
126
+ this.preview = false;
127
+ }
128
+ this.pageNumber = 1;
129
+ await this.renderPage();
130
+ }
131
+ catch (error) {
132
+ console.error('Error loading document data:', error);
133
+ }
134
+ }
135
+ async handleDocumentClick(id) {
136
+ this.selectedId = id;
137
+ this.localScale = this.scale;
138
+ if (this.onClick) {
139
+ try {
140
+ this.isDocumentLoading = true;
141
+ this.documentData = await this.onClick(id);
142
+ this.isDocumentLoading = false;
143
+ let readerPromise = this.handleReadFile(this.documentData);
144
+ let reader = await Promise.resolve(readerPromise);
145
+ this.loadDocumentData(reader.result);
146
+ }
147
+ catch (error) {
148
+ console.error('Error fetching document:', error);
149
+ }
150
+ }
151
+ else {
152
+ const document = this.documents?.find((doc) => doc.id === id);
153
+ if (!document) {
154
+ throw new Error('Document not found');
155
+ }
156
+ const src = document.dmsf_src;
157
+ if (!src)
158
+ throw new Error('Missing source URL');
159
+ const buffer = await fetch(src).then((res) => res.arrayBuffer());
160
+ this.loadDocumentData(buffer);
161
+ }
162
+ }
163
+ async renderPage() {
164
+ if (!this.selectedDocument || !this.canvas || !this.ctx || !this.outerContainer)
165
+ return;
166
+ this.canvas.style.display = this.preview ? 'block' : 'none';
167
+ this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
168
+ try {
169
+ const userScale = this.localScale ?? 1;
170
+ const containerWidth = this.outerContainer.offsetWidth;
171
+ const dpr = window.devicePixelRatio || 1;
172
+ if (this.preview && 'getPage' in this.selectedDocument) {
173
+ const page = await this.selectedDocument.getPage(this.pageNumber ?? 1);
174
+ // viewport pri mierke 1
175
+ const viewportBase = page.getViewport({ scale: 1 });
176
+ const fitScale = containerWidth / viewportBase.width;
177
+ // logický scale voči fitnutému rozmeru
178
+ const logicalScale = fitScale * userScale;
179
+ // rozlíšenie sa renderuje vždy ako keby scale bolo aspoň 1
180
+ const renderScale = fitScale * Math.max(userScale, 1);
181
+ const renderViewport = page.getViewport({ scale: renderScale * dpr });
182
+ // renderuj do veľkého canvasu
183
+ this.canvas.width = renderViewport.width;
184
+ this.canvas.height = renderViewport.height;
185
+ // zobrazenie podľa požadovaného scale
186
+ this.canvas.style.width = `${viewportBase.width * logicalScale}px`;
187
+ this.canvas.style.height = 'auto';
188
+ await page.render({
189
+ canvasContext: this.ctx,
190
+ viewport: renderViewport,
191
+ signal: this.abortController.signal,
192
+ }).promise;
193
+ }
194
+ else if (this.preview && this.selectedDocument instanceof HTMLImageElement) {
195
+ const img = this.selectedDocument;
196
+ const fitScale = containerWidth / img.naturalWidth;
197
+ const logicalScale = fitScale * userScale;
198
+ const renderScale = fitScale * Math.max(userScale, 1);
199
+ const renderWidth = img.naturalWidth * renderScale * dpr;
200
+ const renderHeight = img.naturalHeight * renderScale * dpr;
201
+ this.canvas.width = renderWidth;
202
+ this.canvas.height = renderHeight;
203
+ this.canvas.style.width = `${img.naturalWidth * logicalScale}px`;
204
+ this.canvas.style.height = 'auto';
205
+ this.ctx.drawImage(img, 0, 0, renderWidth, renderHeight);
206
+ }
207
+ }
208
+ catch (error) {
209
+ if (error instanceof Error && error.name !== 'AbortError') {
210
+ console.error('Error rendering page:', error);
211
+ }
212
+ }
213
+ console.log('containerWidth', this.outerContainer.offsetWidth);
214
+ console.log('canvas style.width', this.canvas.style.width);
215
+ }
216
+ getSelectedDocumentName() {
217
+ const selectedDoc = this.documents?.find((doc) => doc.id === this.selectedId);
218
+ if (isEmpty(this.documents)) {
219
+ return '';
220
+ }
221
+ else {
222
+ return selectedDoc?.name || 'Unknown Document';
223
+ }
224
+ }
225
+ handlePageChange(next) {
226
+ const newPage = next ? (this.pageNumber ?? 1) + 1 : (this.pageNumber ?? 1) - 1;
227
+ if (newPage >= 1 && newPage <= (this.pageCount ?? 1)) {
228
+ this.pageNumber = newPage;
229
+ this.renderPage();
230
+ }
231
+ }
232
+ async handleDownload() {
233
+ if (!this.selectedDocument || !this.onClick) {
234
+ console.error('No document selected for download or onClick handler missing.');
235
+ return;
236
+ }
237
+ try {
238
+ const documentData = await this.onClick(this.selectedId);
239
+ const selectedDoc = this.documents?.find((doc) => doc.id === this.selectedId);
240
+ const blob = new Blob([documentData.data], { type: selectedDoc?.file_type });
241
+ saveAs(blob, selectedDoc?.name || 'document');
242
+ // const url = URL.createObjectURL(blob);
243
+ // const link = document.createElement('a');
244
+ // link.href = url;
245
+ // link.download = selectedDoc?.name || 'document';
246
+ // document.body.appendChild(link);
247
+ // link.click();
248
+ // document.body.removeChild(link);
249
+ // URL.revokeObjectURL(url);
250
+ }
251
+ catch (error) {
252
+ console.error('Error downloading document:', error);
253
+ }
254
+ }
255
+ handleZoom(increase) {
256
+ this.localScale = increase ? (this.localScale ?? 1) * 1.1 : (this.localScale ?? 1) / 1.1;
257
+ this.renderPage();
258
+ }
259
+ handleMouseDown(e) {
260
+ if ((this.localScale ?? 1) <= 1)
261
+ return;
262
+ this.isDragging = true;
263
+ this.clickX = e.clientX;
264
+ this.clickY = e.clientY;
265
+ if (this.outerContainer) {
266
+ this.prevScrollLeft = this.outerContainer.scrollLeft;
267
+ this.prevScrollTop = this.outerContainer.scrollTop;
268
+ }
269
+ }
270
+ handleMouseMove(e) {
271
+ if (!this.isDragging)
272
+ return;
273
+ const deltaX = e.clientX - this.clickX;
274
+ const deltaY = e.clientY - this.clickY;
275
+ if (this.outerContainer) {
276
+ this.outerContainer.scrollLeft = this.prevScrollLeft - deltaX;
277
+ this.outerContainer.scrollTop = this.prevScrollTop - deltaY;
278
+ }
279
+ }
280
+ handleMouseUp() {
281
+ this.isDragging = false;
282
+ }
283
+ toggleModal() {
284
+ this.isOpenModal = !this.isOpenModal;
285
+ }
286
+ async onSettingsChangedCallback(value) {
287
+ if (value?.scale !== undefined) {
288
+ this.scale = value.scale;
289
+ this.localScale = value.scale;
290
+ }
291
+ if (value?.type !== undefined) {
292
+ this.type = value.type;
293
+ }
294
+ await this.renderPage();
295
+ if (this.onSettingsChanged) {
296
+ this.dispatchEvent(new CustomEvent('onSettingsChanged', {
297
+ bubbles: true,
298
+ composed: true,
299
+ detail: value,
300
+ }));
301
+ this.onSettingsChanged?.(value);
302
+ }
303
+ }
304
+ render() {
305
+ if (this.hideTabWhen)
306
+ return null;
307
+ return html `
308
+ <div class="attachments-container">
309
+ <div class="documents-list-section">
310
+ ${this.type === 'compact'
311
+ ? html ` ${this.documents?.map((doc, index) => html `
312
+ <div
313
+ class="document-label ${this.selectedId == doc.id
314
+ ? 'selected'
315
+ : null}"
316
+ @click=${() => doc.id && this.handleDocumentClick(doc.id)}
317
+ >
318
+ <div class="document-item" id="${doc.id}">
319
+ <lit-overflow-tooltip
320
+ label="${doc.name || `Document ${index + 1}`}"
321
+ >
322
+ ${doc.name || `Document ${index + 1}`}
323
+ </lit-overflow-tooltip>
324
+ </div>
325
+
326
+ ${this.selectedId == doc.id
327
+ ? html `
328
+ <div class="document-checked">
329
+ <span>${msg('Zobrazen náhled')}</span>
330
+ </div>
331
+ `
332
+ : html `
333
+ <div class="document-unchecked">
334
+ <lit-icon icon="reading" size="1rem"></lit-icon>
335
+ <span>${msg('Zobrazit náhled')}</span>
336
+ </div>
337
+ `}
338
+ </div>
339
+ `)}`
340
+ : html `
341
+ <lit-select
342
+ id="document-select"
343
+ .value="${this.selectedId}"
344
+ .options="${this.documents?.map((doc) => ({
345
+ value: doc.id,
346
+ label: doc.name,
347
+ }))}"
348
+ .onChange="${(selectedValue) => {
349
+ this.handleDocumentClick(selectedValue);
350
+ }}"
351
+ .disableClearButton="${true}"
352
+ ></lit-select>
353
+ `}
354
+ <div style="height: 0.1875rem">
355
+ ${this.isDocumentLoading
356
+ ? html ` <lit-loading-bar></lit-loading-bar> `
357
+ : null}
358
+ </div>
359
+ </div>
360
+ <div class="document">
361
+ <div class="document-box">
362
+ <div class="document-selected">
363
+ <lit-overflow-tooltip label="${this.getSelectedDocumentName()}">
364
+ ${this.getSelectedDocumentName()}
365
+ </lit-overflow-tooltip>
366
+ </div>
367
+ ${!isEmpty(this.documents)
368
+ ? html `
369
+ <div class="action-buttons">
370
+ ${this.preview
371
+ ? html `
372
+ <lit-icon
373
+ style="cursor: pointer"
374
+ icon="chevronLeftFilled"
375
+ size="1rem"
376
+ @click=${() => this.handlePageChange(false)}
377
+ ></lit-icon>
378
+ <span
379
+ >page ${this.pageNumber} /
380
+ ${this.pageCount}</span
381
+ >
382
+ <lit-icon
383
+ style="cursor: pointer"
384
+ icon="chevronRightFilled"
385
+ size="1rem"
386
+ @click=${() => this.handlePageChange(true)}
387
+ ></lit-icon>
388
+ <lit-icon-button
389
+ icon="zoomout"
390
+ variant="text"
391
+ size="small"
392
+ @click=${() => this.handleZoom(false)}
393
+ ></lit-icon-button>
394
+ <lit-icon-button
395
+ icon="zoomIn"
396
+ variant="text"
397
+ size="small"
398
+ @click=${() => this.handleZoom(true)}
399
+ ></lit-icon-button>
400
+ `
401
+ : null}
402
+
403
+ <lit-icon-button
404
+ icon="download"
405
+ variant="text"
406
+ size="small"
407
+ @click=${this.handleDownload}
408
+ ></lit-icon-button>
409
+ </div>
410
+ `
411
+ : null}
412
+ </div>
413
+ <div
414
+ class="document-container"
415
+ @mousemove=${this.handleMouseMove}
416
+ @mouseup=${this.handleMouseUp}
417
+ @mouseleave=${this.handleMouseUp}
418
+ >
419
+ ${!isEmpty(this.documents)
420
+ ? html `
421
+ <canvas
422
+ style=${styleMap({
423
+ cursor: (this.scale ?? 1) > 1 ? 'grab' : 'default',
424
+ })}
425
+ @mousedown=${this.handleMouseDown}
426
+ >
427
+ </canvas>
428
+ `
429
+ : null}
430
+ ${!this.preview
431
+ ? html `
432
+ <div class="not-supported__format">
433
+ <div style="max-height: 7.125rem; max-width: 7.125rem">
434
+ <no-preview></no-preview>
435
+ </div>
436
+ ${msg('Náhled dokumentu není možný vzhledem k typu dokumentu.')}
437
+ </div>
438
+ `
439
+ : null}
440
+ ${!this.documents || isEmpty(this.documents)
441
+ ? html `
442
+ <div class="not-supported__format">
443
+ <div style="max-height: 7.125rem; max-width: 7.125rem">
444
+ <not-found></not-found>
445
+ </div>
446
+ ${msg('Nic dalšího tu není')}
447
+ </div>
448
+ `
449
+ : null}
450
+ </div>
451
+ </div>
452
+
453
+ ${this.enableSettings
454
+ ? html `<div class="footer">
455
+ <lit-icon-button
456
+ icon="administration"
457
+ @click="${this.toggleModal}"
458
+ variant="dashed"
459
+ style="display: inline-block"
460
+ ></lit-icon-button>
461
+ <attachments-tab-settings
462
+ .onClose="${() => {
463
+ this.isOpenModal = false;
464
+ }}"
465
+ .isOpenModal="${this.isOpenModal}"
466
+ .onSettingsChangedModal="${this.onSettingsChangedCallback.bind(this)}"
467
+ .type="${this.type}"
468
+ .scale="${this.scale}"
469
+ ></attachments-tab-settings>
470
+ </div>`
471
+ : null}
472
+ </div>
473
+ `;
474
+ }
475
+ };
476
+ LitAttachmentsTab.styles = [
477
+ css `
478
+ .document-label {
479
+ line-height: 2.125rem;
480
+ gap: 0.25rem;
481
+ display: flex;
482
+ justify-content: space-between;
483
+ flex-direction: row;
484
+ align-items: center;
485
+ position: relative;
486
+ font-weight: 500;
487
+ font-size: 0.8125rem;
488
+ padding: 0.125rem 0 0.125rem 1rem;
489
+ background: var(--background-paper, #ffffff);
490
+ color: var(--color-secondary-main, #111827);
491
+ border-radius: 0.5rem;
492
+ cursor: pointer;
493
+ }
494
+
495
+ .document-item {
496
+ font-weight: 500;
497
+ font-size: 0.8125rem;
498
+ color: var(--color-secondary-main, #111827);
499
+ display: flex;
500
+
501
+ overflow: hidden;
502
+ white-space: nowrap;
503
+ text-overflow: ellipsis;
504
+ }
505
+
506
+ .document-label:hover {
507
+ background: var(--color-primary-light, #f0fadf);
508
+ }
509
+
510
+ .selected {
511
+ background: var(--color-primary-light, #f0fadf);
512
+ }
513
+
514
+ .document-checked {
515
+ padding: 0 1rem 0 1rem;
516
+ font-size: 0.75rem;
517
+ color: var(--color-primary-dark, #5f9402);
518
+ white-space: nowrap;
519
+ }
520
+ .document-unchecked {
521
+ display: none;
522
+ padding: 0 1rem 0 1rem;
523
+ font-size: 0.75rem;
524
+ align-items: center;
525
+ gap: 0.5rem;
526
+ white-space: nowrap;
527
+ }
528
+
529
+ .document-label:hover .document-unchecked {
530
+ display: flex;
531
+ }
532
+
533
+ .document {
534
+ background: var(--background-default, #eff3f4);
535
+ border-radius: 0.25rem;
536
+ padding: 0.75rem 0.5rem 0.5rem 0.5rem;
537
+
538
+ flex: 1; /* Zaberie všetok dostupný priestor */
539
+ min-height: 0;
540
+ display: flex;
541
+ flex-direction: column;
542
+ }
543
+
544
+ .document-box {
545
+ display: flex;
546
+ align-items: center;
547
+ max-height: 2rem;
548
+ justify-content: space-between;
549
+ padding: 0 0.75rem 0.75rem 0.75rem;
550
+ }
551
+
552
+ .action-buttons {
553
+ display: flex;
554
+ align-items: center;
555
+ font-size: 0.8125rem;
556
+ gap: 0.75rem;
557
+ white-space: nowrap;
558
+ }
559
+
560
+ .document-selected {
561
+ color: var(--color-secondary-main, #111827);
562
+ font-size: 0.8125rem;
563
+ font-weight: 500;
564
+ max-width: 100%;
565
+ overflow: hidden;
566
+ white-space: nowrap;
567
+ text-overflow: ellipsis;
568
+ display: flex;
569
+ }
570
+
571
+ .document-container {
572
+ position: relative;
573
+ width: 100%;
574
+ flex: 1;
575
+ min-height: 0;
576
+ overflow: auto;
577
+ justify-content: center;
578
+ align-items: center;
579
+ }
580
+
581
+ canvas {
582
+ display: block;
583
+ margin: 0 auto;
584
+ transform-origin: 0 0;
585
+ }
586
+
587
+ .not-supported__format {
588
+ min-height: 40vh;
589
+ font-size: 0.875rem;
590
+ text-align: center;
591
+ display: flex;
592
+ align-items: center;
593
+ justify-content: center;
594
+ flex-direction: column;
595
+ margin: 1rem 0 1rem 0;
596
+ }
597
+ .attachments-container {
598
+ height: 100%;
599
+ overflow: hidden;
600
+ display: flex;
601
+ flex-direction: column;
602
+ }
603
+
604
+ .documents-list-section {
605
+ flex-shrink: 0;
606
+ }
607
+
608
+ .footer {
609
+ flex-shrink: 0;
610
+ justify-content: end;
611
+ display: flex;
612
+ margin-top: 0.5rem;
613
+ }
614
+ `,
615
+ ];
616
+ __decorate([
617
+ property({ type: Boolean })
618
+ ], LitAttachmentsTab.prototype, "hideTabWhen", void 0);
619
+ __decorate([
620
+ property({ type: String })
621
+ ], LitAttachmentsTab.prototype, "initialSelection", void 0);
622
+ __decorate([
623
+ property({ type: Array })
624
+ ], LitAttachmentsTab.prototype, "documents", void 0);
625
+ __decorate([
626
+ property({ type: String })
627
+ ], LitAttachmentsTab.prototype, "type", void 0);
628
+ __decorate([
629
+ property({ type: Number })
630
+ ], LitAttachmentsTab.prototype, "scale", void 0);
631
+ __decorate([
632
+ property({ type: Function })
633
+ ], LitAttachmentsTab.prototype, "onClick", void 0);
634
+ __decorate([
635
+ property({ type: Boolean })
636
+ ], LitAttachmentsTab.prototype, "isDocumentLoading", void 0);
637
+ __decorate([
638
+ property({ type: Boolean })
639
+ ], LitAttachmentsTab.prototype, "enableSettings", void 0);
640
+ __decorate([
641
+ property({ attribute: false })
642
+ ], LitAttachmentsTab.prototype, "onSettingsChanged", void 0);
643
+ __decorate([
644
+ state()
645
+ ], LitAttachmentsTab.prototype, "selectedDocument", void 0);
646
+ __decorate([
647
+ state()
648
+ ], LitAttachmentsTab.prototype, "selectedId", void 0);
649
+ __decorate([
650
+ state()
651
+ ], LitAttachmentsTab.prototype, "pageNumber", void 0);
652
+ __decorate([
653
+ state()
654
+ ], LitAttachmentsTab.prototype, "pageCount", void 0);
655
+ __decorate([
656
+ state()
657
+ ], LitAttachmentsTab.prototype, "isChecked", void 0);
658
+ __decorate([
659
+ state()
660
+ ], LitAttachmentsTab.prototype, "isEllipsisActive", void 0);
661
+ __decorate([
662
+ state()
663
+ ], LitAttachmentsTab.prototype, "isHoveredLabel", void 0);
664
+ __decorate([
665
+ state()
666
+ ], LitAttachmentsTab.prototype, "preview", void 0);
667
+ __decorate([
668
+ state()
669
+ ], LitAttachmentsTab.prototype, "documentData", void 0);
670
+ __decorate([
671
+ state()
672
+ ], LitAttachmentsTab.prototype, "isOpenModal", void 0);
673
+ __decorate([
674
+ state()
675
+ ], LitAttachmentsTab.prototype, "localScale", void 0);
676
+ LitAttachmentsTab = __decorate([
677
+ customElement('lit-attachments-tab')
678
+ ], LitAttachmentsTab);
679
+ export { LitAttachmentsTab };
680
+ //# sourceMappingURL=lit-attachments-tab.js.map