@dnncommunity/dnn-elements 0.15.0-beta.7 → 0.15.0

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 (221) hide show
  1. package/dist/cjs/dnn-button_17.cjs.entry.js +1 -1
  2. package/dist/cjs/dnn-button_17.cjs.entry.js.map +1 -1
  3. package/dist/cjs/dnn.cjs.js +4 -116
  4. package/dist/cjs/dnn.cjs.js.map +1 -1
  5. package/dist/cjs/loader.cjs.js +2 -18
  6. package/dist/cjs/loader.cjs.js.map +1 -1
  7. package/dist/collection/components/dnn-tabs/dnn-tabs.css +0 -1
  8. package/dist/collection/components/dnn-tabs/dnn-tabs.stories.js +5 -0
  9. package/dist/collection/components/dnn-tabs/dnn-tabs.stories.js.map +1 -1
  10. package/dist/dnn/dnn.esm.js +1 -130
  11. package/dist/dnn/dnn.esm.js.map +1 -1
  12. package/dist/dnn/dnn.js +1 -1
  13. package/dist/dnn/index.esm.js +1 -46
  14. package/dist/dnn/index.esm.js.map +1 -1
  15. package/dist/dnn/{p-c222c8b7.entry.js → p-058a3145.entry.js} +2 -2
  16. package/dist/dnn/{p-c222c8b7.entry.js.map → p-058a3145.entry.js.map} +1 -1
  17. package/dist/dnn/{p-31dc68a7.system.entry.js → p-1893c229.system.entry.js} +2 -2
  18. package/dist/dnn/{p-31dc68a7.system.entry.js.map → p-1893c229.system.entry.js.map} +1 -1
  19. package/dist/dnn/p-5bcf3629.system.js +1 -1
  20. package/dist/esm/dnn-button_17.entry.js +1 -1
  21. package/dist/esm/dnn-button_17.entry.js.map +1 -1
  22. package/dist/esm/dnn.js +4 -116
  23. package/dist/esm/dnn.js.map +1 -1
  24. package/dist/esm/loader.js +2 -18
  25. package/dist/esm/loader.js.map +1 -1
  26. package/dist/esm-es5/dnn-button_17.entry.js +1 -1
  27. package/dist/esm-es5/dnn-button_17.entry.js.map +1 -1
  28. package/dist/index.js +1 -1
  29. package/package.json +6 -3
  30. package/dist/cjs/app-globals-3a1e7e63.js +0 -7
  31. package/dist/cjs/app-globals-3a1e7e63.js.map +0 -1
  32. package/dist/cjs/css-shim-aaf4fec9.js +0 -8
  33. package/dist/cjs/css-shim-aaf4fec9.js.map +0 -1
  34. package/dist/cjs/dnn-button.cjs.entry.js +0 -92
  35. package/dist/cjs/dnn-button.cjs.entry.js.map +0 -1
  36. package/dist/cjs/dnn-checkbox.cjs.entry.js +0 -58
  37. package/dist/cjs/dnn-checkbox.cjs.entry.js.map +0 -1
  38. package/dist/cjs/dnn-chevron.cjs.entry.js +0 -34
  39. package/dist/cjs/dnn-chevron.cjs.entry.js.map +0 -1
  40. package/dist/cjs/dnn-collapsible.cjs.entry.js +0 -69
  41. package/dist/cjs/dnn-collapsible.cjs.entry.js.map +0 -1
  42. package/dist/cjs/dnn-color-picker.cjs.entry.js +0 -508
  43. package/dist/cjs/dnn-color-picker.cjs.entry.js.map +0 -1
  44. package/dist/cjs/dnn-dropzone.cjs.entry.js +0 -153
  45. package/dist/cjs/dnn-dropzone.cjs.entry.js.map +0 -1
  46. package/dist/cjs/dnn-image-cropper.cjs.entry.js +0 -408
  47. package/dist/cjs/dnn-image-cropper.cjs.entry.js.map +0 -1
  48. package/dist/cjs/dnn-modal.cjs.entry.js +0 -65
  49. package/dist/cjs/dnn-modal.cjs.entry.js.map +0 -1
  50. package/dist/cjs/dnn-permissions-grid.cjs.entry.js +0 -320
  51. package/dist/cjs/dnn-permissions-grid.cjs.entry.js.map +0 -1
  52. package/dist/cjs/dnn-searchbox.cjs.entry.js +0 -66
  53. package/dist/cjs/dnn-searchbox.cjs.entry.js.map +0 -1
  54. package/dist/cjs/dnn-sort-icon.cjs.entry.js +0 -43
  55. package/dist/cjs/dnn-sort-icon.cjs.entry.js.map +0 -1
  56. package/dist/cjs/dnn-tab.cjs.entry.js +0 -31
  57. package/dist/cjs/dnn-tab.cjs.entry.js.map +0 -1
  58. package/dist/cjs/dnn-tabs.cjs.entry.js +0 -52
  59. package/dist/cjs/dnn-tabs.cjs.entry.js.map +0 -1
  60. package/dist/cjs/dnn-toggle.cjs.entry.js +0 -37
  61. package/dist/cjs/dnn-toggle.cjs.entry.js.map +0 -1
  62. package/dist/cjs/dnn-treeview-item.cjs.entry.js +0 -68
  63. package/dist/cjs/dnn-treeview-item.cjs.entry.js.map +0 -1
  64. package/dist/cjs/dnn-vertical-overflow-menu.cjs.entry.js +0 -124
  65. package/dist/cjs/dnn-vertical-overflow-menu.cjs.entry.js.map +0 -1
  66. package/dist/cjs/dnn-vertical-splitview.cjs.entry.js +0 -133
  67. package/dist/cjs/dnn-vertical-splitview.cjs.entry.js.map +0 -1
  68. package/dist/cjs/dom-14886762.js +0 -77
  69. package/dist/cjs/dom-14886762.js.map +0 -1
  70. package/dist/cjs/index-d53702a3.js +0 -3095
  71. package/dist/cjs/index-d53702a3.js.map +0 -1
  72. package/dist/cjs/mouseUtilities-ecd5ecf7.js +0 -25
  73. package/dist/cjs/mouseUtilities-ecd5ecf7.js.map +0 -1
  74. package/dist/cjs/shadow-css-c44ea13a.js +0 -392
  75. package/dist/cjs/shadow-css-c44ea13a.js.map +0 -1
  76. package/dist/dnn/app-globals-0f993ce5.js +0 -5
  77. package/dist/dnn/app-globals-0f993ce5.js.map +0 -1
  78. package/dist/dnn/app-globals-497eb362.system.js +0 -2
  79. package/dist/dnn/app-globals-497eb362.system.js.map +0 -1
  80. package/dist/dnn/css-shim-091f949f.js +0 -6
  81. package/dist/dnn/css-shim-091f949f.js.map +0 -1
  82. package/dist/dnn/css-shim-c5bffe6b.system.js +0 -2
  83. package/dist/dnn/css-shim-c5bffe6b.system.js.map +0 -1
  84. package/dist/dnn/debounce-6be67abd.js +0 -22
  85. package/dist/dnn/debounce-6be67abd.js.map +0 -1
  86. package/dist/dnn/debounce-db438a09.system.js +0 -2
  87. package/dist/dnn/debounce-db438a09.system.js.map +0 -1
  88. package/dist/dnn/dnn-button.entry.js +0 -88
  89. package/dist/dnn/dnn-button.entry.js.map +0 -1
  90. package/dist/dnn/dnn-button.system.entry.js +0 -2
  91. package/dist/dnn/dnn-button.system.entry.js.map +0 -1
  92. package/dist/dnn/dnn-checkbox.entry.js +0 -54
  93. package/dist/dnn/dnn-checkbox.entry.js.map +0 -1
  94. package/dist/dnn/dnn-checkbox.system.entry.js +0 -2
  95. package/dist/dnn/dnn-checkbox.system.entry.js.map +0 -1
  96. package/dist/dnn/dnn-chevron.entry.js +0 -30
  97. package/dist/dnn/dnn-chevron.entry.js.map +0 -1
  98. package/dist/dnn/dnn-chevron.system.entry.js +0 -2
  99. package/dist/dnn/dnn-chevron.system.entry.js.map +0 -1
  100. package/dist/dnn/dnn-collapsible.entry.js +0 -65
  101. package/dist/dnn/dnn-collapsible.entry.js.map +0 -1
  102. package/dist/dnn/dnn-collapsible.system.entry.js +0 -2
  103. package/dist/dnn/dnn-collapsible.system.entry.js.map +0 -1
  104. package/dist/dnn/dnn-color-picker.entry.js +0 -504
  105. package/dist/dnn/dnn-color-picker.entry.js.map +0 -1
  106. package/dist/dnn/dnn-color-picker.system.entry.js +0 -12
  107. package/dist/dnn/dnn-color-picker.system.entry.js.map +0 -1
  108. package/dist/dnn/dnn-dropzone.entry.js +0 -149
  109. package/dist/dnn/dnn-dropzone.entry.js.map +0 -1
  110. package/dist/dnn/dnn-dropzone.system.entry.js +0 -2
  111. package/dist/dnn/dnn-dropzone.system.entry.js.map +0 -1
  112. package/dist/dnn/dnn-image-cropper.entry.js +0 -404
  113. package/dist/dnn/dnn-image-cropper.entry.js.map +0 -1
  114. package/dist/dnn/dnn-image-cropper.system.entry.js +0 -2
  115. package/dist/dnn/dnn-image-cropper.system.entry.js.map +0 -1
  116. package/dist/dnn/dnn-modal.entry.js +0 -61
  117. package/dist/dnn/dnn-modal.entry.js.map +0 -1
  118. package/dist/dnn/dnn-modal.system.entry.js +0 -2
  119. package/dist/dnn/dnn-modal.system.entry.js.map +0 -1
  120. package/dist/dnn/dnn-permissions-grid.entry.js +0 -316
  121. package/dist/dnn/dnn-permissions-grid.entry.js.map +0 -1
  122. package/dist/dnn/dnn-permissions-grid.system.entry.js +0 -2
  123. package/dist/dnn/dnn-permissions-grid.system.entry.js.map +0 -1
  124. package/dist/dnn/dnn-searchbox.entry.js +0 -62
  125. package/dist/dnn/dnn-searchbox.entry.js.map +0 -1
  126. package/dist/dnn/dnn-searchbox.system.entry.js +0 -2
  127. package/dist/dnn/dnn-searchbox.system.entry.js.map +0 -1
  128. package/dist/dnn/dnn-sort-icon.entry.js +0 -39
  129. package/dist/dnn/dnn-sort-icon.entry.js.map +0 -1
  130. package/dist/dnn/dnn-sort-icon.system.entry.js +0 -2
  131. package/dist/dnn/dnn-sort-icon.system.entry.js.map +0 -1
  132. package/dist/dnn/dnn-tab.entry.js +0 -27
  133. package/dist/dnn/dnn-tab.entry.js.map +0 -1
  134. package/dist/dnn/dnn-tab.system.entry.js +0 -2
  135. package/dist/dnn/dnn-tab.system.entry.js.map +0 -1
  136. package/dist/dnn/dnn-tabs.entry.js +0 -48
  137. package/dist/dnn/dnn-tabs.entry.js.map +0 -1
  138. package/dist/dnn/dnn-tabs.system.entry.js +0 -2
  139. package/dist/dnn/dnn-tabs.system.entry.js.map +0 -1
  140. package/dist/dnn/dnn-toggle.entry.js +0 -33
  141. package/dist/dnn/dnn-toggle.entry.js.map +0 -1
  142. package/dist/dnn/dnn-toggle.system.entry.js +0 -2
  143. package/dist/dnn/dnn-toggle.system.entry.js.map +0 -1
  144. package/dist/dnn/dnn-treeview-item.entry.js +0 -64
  145. package/dist/dnn/dnn-treeview-item.entry.js.map +0 -1
  146. package/dist/dnn/dnn-treeview-item.system.entry.js +0 -2
  147. package/dist/dnn/dnn-treeview-item.system.entry.js.map +0 -1
  148. package/dist/dnn/dnn-vertical-overflow-menu.entry.js +0 -120
  149. package/dist/dnn/dnn-vertical-overflow-menu.entry.js.map +0 -1
  150. package/dist/dnn/dnn-vertical-overflow-menu.system.entry.js +0 -2
  151. package/dist/dnn/dnn-vertical-overflow-menu.system.entry.js.map +0 -1
  152. package/dist/dnn/dnn-vertical-splitview.entry.js +0 -129
  153. package/dist/dnn/dnn-vertical-splitview.entry.js.map +0 -1
  154. package/dist/dnn/dnn-vertical-splitview.system.entry.js +0 -2
  155. package/dist/dnn/dnn-vertical-splitview.system.entry.js.map +0 -1
  156. package/dist/dnn/dnn.system.js +0 -2
  157. package/dist/dnn/dnn.system.js.map +0 -1
  158. package/dist/dnn/dom-99eb7b76.system.js +0 -22
  159. package/dist/dnn/dom-99eb7b76.system.js.map +0 -1
  160. package/dist/dnn/dom-a385e381.js +0 -75
  161. package/dist/dnn/dom-a385e381.js.map +0 -1
  162. package/dist/dnn/index-20e42ad7.js +0 -3059
  163. package/dist/dnn/index-20e42ad7.js.map +0 -1
  164. package/dist/dnn/index-c3cc3b5b.system.js +0 -2
  165. package/dist/dnn/index-c3cc3b5b.system.js.map +0 -1
  166. package/dist/dnn/index.system.js +0 -2
  167. package/dist/dnn/index.system.js.map +0 -1
  168. package/dist/dnn/mouseUtilities-233ad7e3.system.js +0 -2
  169. package/dist/dnn/mouseUtilities-233ad7e3.system.js.map +0 -1
  170. package/dist/dnn/mouseUtilities-b261ca4f.js +0 -23
  171. package/dist/dnn/mouseUtilities-b261ca4f.js.map +0 -1
  172. package/dist/dnn/shadow-css-27708fdd.system.js +0 -14
  173. package/dist/dnn/shadow-css-27708fdd.system.js.map +0 -1
  174. package/dist/dnn/shadow-css-ef431969.js +0 -390
  175. package/dist/dnn/shadow-css-ef431969.js.map +0 -1
  176. package/dist/esm/app-globals-0f993ce5.js +0 -5
  177. package/dist/esm/app-globals-0f993ce5.js.map +0 -1
  178. package/dist/esm/css-shim-091f949f.js +0 -6
  179. package/dist/esm/css-shim-091f949f.js.map +0 -1
  180. package/dist/esm/dnn-button.entry.js +0 -88
  181. package/dist/esm/dnn-button.entry.js.map +0 -1
  182. package/dist/esm/dnn-checkbox.entry.js +0 -54
  183. package/dist/esm/dnn-checkbox.entry.js.map +0 -1
  184. package/dist/esm/dnn-chevron.entry.js +0 -30
  185. package/dist/esm/dnn-chevron.entry.js.map +0 -1
  186. package/dist/esm/dnn-collapsible.entry.js +0 -65
  187. package/dist/esm/dnn-collapsible.entry.js.map +0 -1
  188. package/dist/esm/dnn-color-picker.entry.js +0 -504
  189. package/dist/esm/dnn-color-picker.entry.js.map +0 -1
  190. package/dist/esm/dnn-dropzone.entry.js +0 -149
  191. package/dist/esm/dnn-dropzone.entry.js.map +0 -1
  192. package/dist/esm/dnn-image-cropper.entry.js +0 -404
  193. package/dist/esm/dnn-image-cropper.entry.js.map +0 -1
  194. package/dist/esm/dnn-modal.entry.js +0 -61
  195. package/dist/esm/dnn-modal.entry.js.map +0 -1
  196. package/dist/esm/dnn-permissions-grid.entry.js +0 -316
  197. package/dist/esm/dnn-permissions-grid.entry.js.map +0 -1
  198. package/dist/esm/dnn-searchbox.entry.js +0 -62
  199. package/dist/esm/dnn-searchbox.entry.js.map +0 -1
  200. package/dist/esm/dnn-sort-icon.entry.js +0 -39
  201. package/dist/esm/dnn-sort-icon.entry.js.map +0 -1
  202. package/dist/esm/dnn-tab.entry.js +0 -27
  203. package/dist/esm/dnn-tab.entry.js.map +0 -1
  204. package/dist/esm/dnn-tabs.entry.js +0 -48
  205. package/dist/esm/dnn-tabs.entry.js.map +0 -1
  206. package/dist/esm/dnn-toggle.entry.js +0 -33
  207. package/dist/esm/dnn-toggle.entry.js.map +0 -1
  208. package/dist/esm/dnn-treeview-item.entry.js +0 -64
  209. package/dist/esm/dnn-treeview-item.entry.js.map +0 -1
  210. package/dist/esm/dnn-vertical-overflow-menu.entry.js +0 -120
  211. package/dist/esm/dnn-vertical-overflow-menu.entry.js.map +0 -1
  212. package/dist/esm/dnn-vertical-splitview.entry.js +0 -129
  213. package/dist/esm/dnn-vertical-splitview.entry.js.map +0 -1
  214. package/dist/esm/dom-a385e381.js +0 -75
  215. package/dist/esm/dom-a385e381.js.map +0 -1
  216. package/dist/esm/index-20e42ad7.js +0 -3059
  217. package/dist/esm/index-20e42ad7.js.map +0 -1
  218. package/dist/esm/mouseUtilities-b261ca4f.js +0 -23
  219. package/dist/esm/mouseUtilities-b261ca4f.js.map +0 -1
  220. package/dist/esm/shadow-css-ef431969.js +0 -390
  221. package/dist/esm/shadow-css-ef431969.js.map +0 -1
@@ -1,153 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const index = require('./index-d53702a3.js');
6
-
7
- const dnnDropzoneCss = ":host{--border-color:var(--dnn-color-tertiary-contrast, lightgray);--border-radius:var(--dnn-controls-radius, 5px);--drop-background-color:var(--dnn-color-tertiary, lightblue);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:1rem;text-align:center;border:2px dashed var(--border-color);border-radius:var(--border-radius);padding:1rem;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out}:host(.dropping){background-color:var(--drop-background-color)}p{margin:0;padding:0}button{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;border:0px;margin:0;padding:0;background-color:transparent}button:hover{cursor:pointer}button svg{margin-right:0.5rem}label.upload-file{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;cursor:pointer}label.upload-file input{display:none}.video-preview{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center}.video-preview button{margin:1rem}";
8
-
9
- const DnnDropzone = class {
10
- constructor(hostRef) {
11
- index.registerInstance(this, hostRef);
12
- this.filesSelected = index.createEvent(this, "filesSelected", 7);
13
- /** Localization strings */
14
- this.resx = {
15
- dragAndDropFile: "Drag and drop a file",
16
- capture: "Capture",
17
- or: "or",
18
- takePicture: "Take a picture",
19
- uploadFile: "Upload a file",
20
- };
21
- /**
22
- * If true, will allow the user to take a snapshot
23
- * using the device camera. (only works over https).
24
- */
25
- this.allowCameraMode = false;
26
- /**
27
- * Specifies the jpeg quality for when the device
28
- * camera is used to generate a picture.
29
- * Needs to be a number between 0 and 1 and defaults to 0.8
30
- */
31
- this.captureQuality = 0.8;
32
- this.canTakeSnapshots = false;
33
- this.takingPicture = false;
34
- this.handleDragOver = (event) => {
35
- event.stopPropagation();
36
- event.preventDefault();
37
- event.dataTransfer.dropEffect = "copy";
38
- this.dropzone.classList.add("dropping");
39
- };
40
- this.handleDrop = (dropEvent) => {
41
- dropEvent.stopPropagation();
42
- dropEvent.preventDefault();
43
- const files = dropEvent.dataTransfer.files;
44
- if (this.hasInvalidExtensions(files)) {
45
- return;
46
- }
47
- var fileList = this.getFilesFromFileList(files);
48
- this.filesSelected.emit(fileList);
49
- };
50
- }
51
- componentDidLoad() {
52
- if (this.allowCameraMode) {
53
- this.checkIfBrowserCanTakeSnapshots()
54
- .then(result => this.canTakeSnapshots = result);
55
- }
56
- if (this.allowedExtensions != undefined && this.allowedExtensions.length > 0) {
57
- var extensionsWithDots = this.allowedExtensions.map(e => `.${e}`);
58
- var extensionsList = extensionsWithDots.join(",");
59
- this.fileInput.accept = extensionsList;
60
- }
61
- }
62
- checkIfBrowserCanTakeSnapshots() {
63
- return new Promise((resolve) => {
64
- const mediaDevices = navigator.mediaDevices;
65
- if (mediaDevices == undefined || mediaDevices.enumerateDevices == undefined) {
66
- resolve(false);
67
- }
68
- mediaDevices.enumerateDevices()
69
- .then(devices => {
70
- var result = devices.some(device => device.kind == "videoinput");
71
- resolve(result);
72
- });
73
- });
74
- }
75
- getFilesFromFileList(files) {
76
- var fileList = [];
77
- for (let index = 0; index < files.length; index++) {
78
- const file = files[index];
79
- fileList.push(file);
80
- }
81
- return fileList;
82
- }
83
- handleUploadButton(element) {
84
- let files = this.getFilesFromFileList(element.files);
85
- this.filesSelected.emit(files);
86
- }
87
- hasInvalidExtensions(files) {
88
- var hasInvalid = false;
89
- for (let fileIndex = 0; fileIndex < files.length; fileIndex++) {
90
- const file = files[fileIndex];
91
- var regex = /(?:\.([^.]+))?$/;
92
- const fileExtension = regex.exec(file.name)[1];
93
- if (fileExtension == undefined) {
94
- hasInvalid = true;
95
- }
96
- if (this.allowedExtensions != undefined && !this.allowedExtensions.includes(fileExtension)) {
97
- hasInvalid = true;
98
- }
99
- return hasInvalid;
100
- }
101
- }
102
- takeSnapshot() {
103
- this.takingPicture = true;
104
- navigator.mediaDevices.getUserMedia({ video: true, audio: false })
105
- .then(stream => {
106
- stream;
107
- this.videoPreview.srcObject = stream;
108
- this.videoPreview.play()
109
- .then(() => {
110
- this.videoSettings = stream.getVideoTracks()[0].getSettings();
111
- });
112
- })
113
- .catch(error => alert(error));
114
- }
115
- applySnapshot() {
116
- var canvas = document.createElement("canvas");
117
- const context = canvas.getContext("2d");
118
- canvas.width = this.videoSettings.width;
119
- canvas.height = this.videoSettings.height;
120
- context.drawImage(this.videoPreview, 0, 0);
121
- canvas.toBlob(blob => {
122
- var file = new File([blob], "image.jpeg", { type: "image/jpeg" });
123
- this.takingPicture = false;
124
- var fileList = [file];
125
- this.filesSelected.emit(fileList);
126
- }, "image/jpeg", this.captureQuality);
127
- }
128
- render() {
129
- var _a, _b, _c, _d, _e, _f;
130
- return (index.h(index.Host, { ref: e => this.dropzone = e, class: "dropzone", onDragOver: this.handleDragOver, onDrop: this.handleDrop, onDragLeave: () => this.dropzone.classList.remove("dropping") }, !this.takingPicture &&
131
- [
132
- index.h("p", null, (_a = this.resx) === null || _a === void 0 ? void 0 : _a.dragAndDropFile),
133
- index.h("p", null, "- ", (_b = this.resx) === null || _b === void 0 ? void 0 :
134
- _b.or, " -"),
135
- index.h("label", { class: "upload-file" }, index.h("input", { type: "file", ref: el => this.fileInput = el, onChange: e => this.handleUploadButton(e.target) }), index.h("span", null, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", "enable-background": "new 0 0 24 24", height: "24px", viewBox: "0 0 24 24", width: "24px", fill: "#000000" }, index.h("g", null, index.h("rect", { fill: "none", height: "24", width: "24" })), index.h("g", null, index.h("path", { d: "M5,20h14v-2H5V20z M5,10h4v6h6v-6h4l-7-7L5,10z" })))), "\u00A0", (_c = this.resx) === null || _c === void 0 ? void 0 :
136
- _c.uploadFile),
137
- this.canTakeSnapshots &&
138
- [
139
- index.h("p", null, "- ", (_d = this.resx) === null || _d === void 0 ? void 0 :
140
- _d.or, " -"),
141
- index.h("button", { onClick: () => this.takeSnapshot() }, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24px", viewBox: "0 0 24 24", width: "24px", fill: "#000000" }, index.h("path", { d: "M0 0h24v24H0z", fill: "none" }), index.h("circle", { cx: "12", cy: "12", r: "3.2" }), index.h("path", { d: "M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z" })), (_e = this.resx) === null || _e === void 0 ? void 0 :
142
- _e.takePicture)
143
- ]
144
- ], this.takingPicture &&
145
- index.h("div", { class: "video-preview" }, index.h("video", { ref: e => this.videoPreview = e }), index.h("button", { onClick: () => this.applySnapshot() }, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24px", viewBox: "0 0 24 24", width: "24px", fill: "#000000" }, index.h("path", { d: "M0 0h24v24H0z", fill: "none" }), index.h("circle", { cx: "12", cy: "12", r: "3.2" }), index.h("path", { d: "M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z" })), "\u00A0", (_f = this.resx) === null || _f === void 0 ? void 0 :
146
- _f.capture))));
147
- }
148
- };
149
- DnnDropzone.style = dnnDropzoneCss;
150
-
151
- exports.dnn_dropzone = DnnDropzone;
152
-
153
- //# sourceMappingURL=dnn-dropzone.cjs.entry.js.map
@@ -1 +0,0 @@
1
- {"file":"dnn-dropzone.entry.cjs.js","mappings":"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","names":["h","Host"],"sources":["./src/components/dnn-dropzone/dnn-dropzone.scss?tag=dnn-dropzone&encapsulation=shadow","./src/components/dnn-dropzone/dnn-dropzone.tsx"],"sourcesContent":["\n:host {\n /** \n * @prop --border-color: The color of the border.\n * @prop --border-radius: The radius of the controls borders.\n * @prop --drop-background-color: The color of the background when a file is dropping.\n */\n --border-color: var(--dnn-color-tertiary-contrast, lightgray);\n --border-radius: var(--dnn-controls-radius, 5px);\n --drop-background-color: var(--dnn-color-tertiary, lightblue);\n\n display: flex;\n flex-direction: column;\n gap: 1rem;\n text-align: center;\n border: 2px dashed var(--border-color);\n border-radius: var(--border-radius);\n padding: 1rem;\n transition: all 300ms ease-in-out;\n}\n\n:host(.dropping){\n background-color: var(--drop-background-color);\n}\np{\n margin: 0;\n padding: 0;\n}\nbutton{\n display: flex;\n justify-content: center;\n align-items: center;\n border: 0px;\n margin: 0;\n padding: 0;\n background-color: transparent;\n &:hover{\n cursor: pointer;\n }\n svg{\n margin-right: 0.5rem;\n }\n}\nlabel.upload-file{\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n input{\n display: none;\n }\n}\n.video-preview{\n display: flex;\n flex-direction: column;\n align-items: center;\n button{\n margin: 1rem;\n }\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter } from '@stencil/core';\n\n@Component({\n tag: 'dnn-dropzone',\n styleUrl: 'dnn-dropzone.scss',\n shadow: true,\n})\nexport class DnnDropzone {\n /** Localization strings */\n @Prop() resx:{\n dragAndDropFile: string;\n capture: string;\n or: string;\n takePicture: string;\n uploadFile: string;\n } = {\n dragAndDropFile: \"Drag and drop a file\",\n capture: \"Capture\",\n or: \"or\",\n takePicture: \"Take a picture\",\n uploadFile: \"Upload a file\",\n }\n\n /** A list of allowed file extensions.\n * If not specified, any file is allowed.\n * Ex: [\"jpg\", \"jped\", \"gif\", \"png\"]\n */\n @Prop() allowedExtensions: string[];\n\n /**\n * If true, will allow the user to take a snapshot\n * using the device camera. (only works over https).\n */\n @Prop() allowCameraMode: boolean = false;\n\n /**\n * Specifies the jpeg quality for when the device\n * camera is used to generate a picture.\n * Needs to be a number between 0 and 1 and defaults to 0.8\n */\n @Prop() captureQuality: number = 0.8;\n\n /** Fires when file were selected. */\n @Event() filesSelected: EventEmitter<File[]>;\n \n @State() canTakeSnapshots: boolean = false;\n\n @State() takingPicture: boolean = false;\n \n private dropzone: HTMLElement;\n private fileInput: HTMLInputElement;\n private videoPreview: HTMLVideoElement;\n private videoSettings!: MediaTrackSettings;\n\n\n componentDidLoad() {\n if (this.allowCameraMode){\n this.checkIfBrowserCanTakeSnapshots()\n .then(result => this.canTakeSnapshots = result);\n }\n if (this.allowedExtensions != undefined && this.allowedExtensions.length > 0){\n var extensionsWithDots = this.allowedExtensions.map(e => `.${e}`);\n var extensionsList = extensionsWithDots.join(\",\");\n this.fileInput.accept = extensionsList;\n }\n }\n\n private checkIfBrowserCanTakeSnapshots(): Promise<boolean> {\n return new Promise((resolve) => {\n const mediaDevices = navigator.mediaDevices;\n if (mediaDevices == undefined || mediaDevices.enumerateDevices == undefined) {\n resolve(false);\n }\n mediaDevices.enumerateDevices()\n .then(devices => {\n var result = devices.some(device => device.kind == \"videoinput\");\n resolve(result);\n });\n });\n }\n\n private getFilesFromFileList(files: FileList) : File[] {\n var fileList: File[] = [];\n for (let index = 0; index < files.length; index++) {\n const file = files[index];\n fileList.push(file);\n }\n\n return fileList;\n }\n\n private handleUploadButton(element: HTMLInputElement): void {\n let files = this.getFilesFromFileList(element.files);\n\n this.filesSelected.emit(files);\n }\n\n private handleDragOver = (event: DragEvent) => \n {\n event.stopPropagation();\n event.preventDefault();\n event.dataTransfer.dropEffect = \"copy\";\n this.dropzone.classList.add(\"dropping\");\n };\n\n private hasInvalidExtensions(files: FileList): boolean{\n var hasInvalid = false;\n for (let fileIndex = 0; fileIndex < files.length; fileIndex++) {\n const file = files[fileIndex];\n var regex = /(?:\\.([^.]+))?$/;\n const fileExtension = regex.exec(file.name)[1];\n if (fileExtension == undefined){\n hasInvalid = true;\n }\n\n if (this.allowedExtensions != undefined && !this.allowedExtensions.includes(fileExtension)){\n hasInvalid = true;\n }\n\n return hasInvalid;\n }\n }\n\n private handleDrop = (dropEvent: DragEvent) => {\n dropEvent.stopPropagation();\n dropEvent.preventDefault();\n const files = dropEvent.dataTransfer.files;\n\n if (this.hasInvalidExtensions(files)){\n return;\n }\n var fileList = this.getFilesFromFileList(files);\n this.filesSelected.emit(fileList);\n };\n\n private takeSnapshot(): void {\n this.takingPicture = true;\n navigator.mediaDevices.getUserMedia({video: true, audio: false})\n .then(stream => {\n stream\n this.videoPreview.srcObject = stream;\n this.videoPreview.play()\n .then(() => {\n this.videoSettings = stream.getVideoTracks()[0].getSettings();\n });\n })\n .catch(error => alert(error));\n }\n\n private applySnapshot(): void {\n var canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n canvas.width = this.videoSettings.width;\n canvas.height = this.videoSettings.height;\n context.drawImage(this.videoPreview, 0, 0);\n canvas.toBlob(blob => {\n var file = new File([blob], \"image.jpeg\", {type:\"image/jpeg\"});\n this.takingPicture = false;\n \n var fileList = [file];\n this.filesSelected.emit(fileList)\n }, \"image/jpeg\", this.captureQuality);\n }\n \n render() {\n return (\n <Host\n ref={e => this.dropzone = e}\n class=\"dropzone\"\n onDragOver={this.handleDragOver}\n onDrop={this.handleDrop}\n onDragLeave={() => this.dropzone.classList.remove(\"dropping\")}\n >\n {!this.takingPicture &&\n [\n <p>{this.resx?.dragAndDropFile}</p>\n ,\n <p>- {this.resx?.or} -</p>\n ,\n <label class=\"upload-file\">\n <input\n type=\"file\"\n ref={el => this.fileInput = el}\n onChange={e => this.handleUploadButton(e.target as HTMLInputElement)}\n >\n </input>\n <span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" enable-background=\"new 0 0 24 24\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><g><rect fill=\"none\" height=\"24\" width=\"24\"/></g><g><path d=\"M5,20h14v-2H5V20z M5,10h4v6h6v-6h4l-7-7L5,10z\"/></g></svg>\n </span>\n &nbsp;\n {this.resx?.uploadFile}\n </label>\n ,\n this.canTakeSnapshots &&\n [\n <p>- {this.resx?.or} -</p>\n ,\n <button\n onClick={() => this.takeSnapshot()}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"3.2\"/><path d=\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"/></svg>\n {this.resx?.takePicture}\n </button>\n ]\n ]\n }\n {this.takingPicture &&\n <div class=\"video-preview\">\n <video ref={e => this.videoPreview = e} />\n <button\n onClick={() => this.applySnapshot()}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"3.2\"/><path d=\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"/></svg>&nbsp;\n {this.resx?.capture}\n </button>\n </div>\n }\n </Host>\n );\n }\n\n}\n"],"version":3}
@@ -1,408 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const index = require('./index-d53702a3.js');
6
- const mouseUtilities = require('./mouseUtilities-ecd5ecf7.js');
7
-
8
- var CornerType;
9
- (function (CornerType) {
10
- CornerType[CornerType["nw"] = 0] = "nw";
11
- CornerType[CornerType["ne"] = 1] = "ne";
12
- CornerType[CornerType["se"] = 2] = "se";
13
- CornerType[CornerType["sw"] = 3] = "sw";
14
- })(CornerType || (CornerType = {}));
15
- ;
16
-
17
- const dnnImageCropperCss = ":host{display:block}canvas{display:none}.view{visibility:hidden;opacity:0;height:0;overflow:hidden;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out}.view.visible{visibility:visible;opacity:1;height:initial;overflow:visible}.view .cropper{position:relative;width:100%}.view .cropper img{width:100%;display:block;margin:0 auto}.view .cropper .backdrop{-webkit-backdrop-filter:saturate(0.5);backdrop-filter:saturate(0.5);-webkit-backdrop-filter:brightness(0.5);backdrop-filter:brightness(0.5);position:absolute;left:0;top:0;width:100%;height:100%}.view .cropper .crop{position:absolute;top:0;left:0;width:100%;height:100%;outline:2px dashed white;-webkit-box-shadow:black 0 0 0px 2px;box-shadow:black 0 0 0px 2px;-webkit-backdrop-filter:saturate(2);backdrop-filter:saturate(2);-webkit-backdrop-filter:brightness(2);backdrop-filter:brightness(2);cursor:move}.view .cropper .crop>div{width:20px;height:20px;background-color:white;border:2px solid rgba(0, 0, 0, 0.5);position:absolute}.view .cropper .crop>div.nw,.view .cropper .crop>div.ne{top:-17px}.view .cropper .crop>div.ne,.view .cropper .crop>div.se{right:-17px}.view .cropper .crop>div.se,.view .cropper .crop>div.sw{bottom:-17px}.view .cropper .crop>div.sw,.view .cropper .crop>div.nw{left:-17px}.view .cropper .crop>div.nw,.view .cropper .crop>div.se{cursor:nwse-resize}.view .cropper .crop>div.ne,.view .cropper .crop>div.sw{cursor:nesw-resize}dnn-modal{--max-width:512px}";
18
-
19
- const DnnImageCropper = class {
20
- constructor(hostRef) {
21
- index.registerInstance(this, hostRef);
22
- this.imageCropChanged = index.createEvent(this, "imageCropChanged", 7);
23
- /** Sets the desired final image width. */
24
- this.width = 600;
25
- /** Sets the desired final image height. */
26
- this.height = 600;
27
- /** Can be used to customize controls text.
28
- * Some values support tokens, see default values for examples.
29
- */
30
- this.resx = {
31
- capture: "Capture",
32
- dragAndDropFile: "Drag and drop an image",
33
- or: "or",
34
- takePicture: "Take a picture",
35
- uploadFile: "Upload an image",
36
- imageTooSmall: "The image you are attempting to upload does not meet the minimum size requirement of {width} pixels by {height} pixels. Please upload a larger image.",
37
- modalCloseText: "Close",
38
- };
39
- /** Sets the output quality of the corpped image (number between 0 and 1). */
40
- this.quality = 0.8;
41
- /** When set to true, prevents cropping an image smaller than the required size, which would blow pixel and make the final picture look blurry. */
42
- this.preventUndersized = false;
43
- this.handleCropMouseDown = (event) => {
44
- event.stopPropagation();
45
- event.preventDefault();
46
- const element = event.target;
47
- const className = element.classList[0];
48
- document.addEventListener("mouseup", this.handleImageCropFinished, false);
49
- document.addEventListener("touchend", this.handleImageCropFinished, false);
50
- switch (className) {
51
- case "crop":
52
- document.addEventListener("mousemove", this.handleCropDrag, false);
53
- document.addEventListener("touchmove", this.handleCropDrag, false);
54
- document.addEventListener("mouseup", () => document.removeEventListener("mousemove", this.handleCropDrag));
55
- document.addEventListener("touchend", () => document.removeEventListener("touchmove", this.handleCropDrag));
56
- break;
57
- case "nw":
58
- document.addEventListener("mousemove", this.handleNwMouseMove, false);
59
- document.addEventListener("touchmove", this.handleNwMouseMove, false);
60
- document.addEventListener("mouseup", () => document.removeEventListener("mousemove", this.handleNwMouseMove));
61
- document.addEventListener("touchend", () => document.removeEventListener("touchmove", this.handleNwMouseMove));
62
- break;
63
- case "ne":
64
- document.addEventListener("mousemove", this.handleNeMouseMove, false);
65
- document.addEventListener("touchmove", this.handleNeMouseMove, false);
66
- document.addEventListener("mouseup", () => document.removeEventListener("mousemove", this.handleNeMouseMove));
67
- document.addEventListener("touchend", () => document.removeEventListener("touchmove", this.handleNeMouseMove));
68
- break;
69
- case "se":
70
- document.addEventListener("mousemove", this.handleSeMouseMove, false);
71
- document.addEventListener("touchmove", this.handleSeMouseMove, false);
72
- document.addEventListener("mouseup", () => document.removeEventListener("mousemove", this.handleSeMouseMove));
73
- document.addEventListener("touchend", () => document.removeEventListener("touchmove", this.handleSeMouseMove));
74
- break;
75
- case "sw":
76
- document.addEventListener("mousemove", this.handleSwMouseMove, false);
77
- document.addEventListener("touchmove", this.handleSwMouseMove, false);
78
- document.addEventListener("mouseup", () => document.removeEventListener("mousemove", this.handleSwMouseMove));
79
- document.addEventListener("touchend", () => document.removeEventListener("touchmove", this.handleSwMouseMove));
80
- break;
81
- default:
82
- break;
83
- }
84
- };
85
- this.handleImageCropFinished = (_ev) => {
86
- this.emitImage();
87
- document.removeEventListener("mouseup", this.handleImageCropFinished);
88
- this.previousTouch = undefined;
89
- };
90
- this.handleNwMouseMove = (event) => {
91
- this.handleCornerDrag(event, CornerType.nw);
92
- };
93
- this.handleNeMouseMove = (event) => {
94
- this.handleCornerDrag(event, CornerType.ne);
95
- };
96
- this.handleSeMouseMove = (event) => {
97
- this.handleCornerDrag(event, CornerType.se);
98
- };
99
- this.handleSwMouseMove = (event) => {
100
- this.handleCornerDrag(event, CornerType.sw);
101
- };
102
- this.handleCornerDrag = (event, corner) => {
103
- if (!this.isMouseStillInTarget(event)) {
104
- return;
105
- }
106
- let { left, top } = this.getCornerLeftTop(corner);
107
- let newWidth = 0;
108
- let newHeight = 0;
109
- let orientation = "horizontal";
110
- const wantedRatio = this.width / this.height;
111
- const cropRect = this.crop.getBoundingClientRect();
112
- const imageRect = this.image.getBoundingClientRect();
113
- let { movementX, movementY } = mouseUtilities.getMovementFromEvent(event, this.previousTouch);
114
- if (Math.abs(movementX) < Math.abs(movementY)) {
115
- orientation = "vertical";
116
- }
117
- if (orientation == "horizontal") {
118
- switch (corner) {
119
- case CornerType.nw:
120
- case CornerType.sw:
121
- newWidth = cropRect.width - movementX;
122
- newHeight = newWidth / wantedRatio;
123
- break;
124
- case CornerType.ne:
125
- case CornerType.se:
126
- newWidth = cropRect.width + movementX;
127
- newHeight = newWidth / wantedRatio;
128
- break;
129
- default:
130
- break;
131
- }
132
- }
133
- else {
134
- switch (corner) {
135
- case CornerType.nw:
136
- case CornerType.ne:
137
- newHeight = cropRect.height - movementY;
138
- newWidth = newHeight * wantedRatio;
139
- break;
140
- case CornerType.se:
141
- case CornerType.sw:
142
- newHeight = cropRect.height + movementY;
143
- newWidth = newHeight * wantedRatio;
144
- break;
145
- default:
146
- break;
147
- }
148
- }
149
- switch (corner) {
150
- case CornerType.ne:
151
- case CornerType.nw:
152
- const topOffset = cropRect.height - newHeight;
153
- top = this.crop.offsetTop + topOffset;
154
- default:
155
- break;
156
- }
157
- switch (corner) {
158
- case CornerType.nw:
159
- case CornerType.sw:
160
- const leftOffset = cropRect.width - newWidth;
161
- left = this.crop.offsetLeft + leftOffset;
162
- if (left < 0)
163
- left = 0;
164
- if (left > imageRect.width)
165
- left = imageRect.width;
166
- if (top < 0)
167
- top = 0;
168
- if (top > imageRect.height)
169
- top = imageRect.height;
170
- if (left + newWidth > imageRect.width)
171
- newWidth = imageRect.width - left;
172
- if (top + newHeight > imageRect.height)
173
- newHeight = imageRect.height - top;
174
- break;
175
- case CornerType.ne:
176
- case CornerType.se:
177
- if (top < 0)
178
- top = 0;
179
- if (top > imageRect.height)
180
- top = imageRect.height;
181
- if (left + newWidth > imageRect.width)
182
- newWidth = imageRect.width - left;
183
- if (top + newHeight > imageRect.height)
184
- newHeight = imageRect.height - top;
185
- break;
186
- default:
187
- break;
188
- }
189
- if (newWidth / newHeight != wantedRatio) {
190
- return;
191
- }
192
- if (this.preventUndersized) {
193
- const zoomRatio = this.image.width / this.image.naturalWidth;
194
- if (newWidth / zoomRatio < this.width || newHeight / zoomRatio < this.height) {
195
- return;
196
- }
197
- }
198
- switch (corner) {
199
- case CornerType.ne:
200
- this.crop.style.top = `${top}px`;
201
- this.crop.style.width = `${newWidth}px`;
202
- this.crop.style.height = `${newHeight}px`;
203
- break;
204
- case CornerType.nw:
205
- this.crop.style.left = `${left}px`;
206
- this.crop.style.top = `${top}px`;
207
- this.crop.style.width = `${newWidth}px`;
208
- this.crop.style.height = `${newHeight}px`;
209
- break;
210
- case CornerType.se:
211
- this.crop.style.width = `${newWidth}px`;
212
- this.crop.style.height = `${newHeight}px`;
213
- break;
214
- case CornerType.sw:
215
- this.crop.style.left = `${left}px`;
216
- this.crop.style.width = `${newWidth}px`;
217
- this.crop.style.height = `${newHeight}px`;
218
- break;
219
- default:
220
- break;
221
- }
222
- };
223
- this.handleCropDrag = (ev) => {
224
- if (!this.isMouseStillInTarget(ev)) {
225
- return;
226
- }
227
- let { movementX, movementY } = mouseUtilities.getMovementFromEvent(ev, this.previousTouch);
228
- let newLeft = this.crop.offsetLeft + movementX;
229
- let newTop = this.crop.offsetTop + movementY;
230
- var imageRect = this.image.getBoundingClientRect();
231
- var cropRect = this.crop.getBoundingClientRect();
232
- if (newLeft < 0) {
233
- newLeft = 0;
234
- }
235
- if (newTop < 0) {
236
- newTop = 0;
237
- }
238
- if (newLeft + cropRect.width > imageRect.width) {
239
- newLeft = this.crop.offsetLeft;
240
- }
241
- if (newTop + cropRect.height > imageRect.height) {
242
- newTop = this.crop.offsetTop;
243
- }
244
- this.crop.style.left = newLeft + "px";
245
- this.crop.style.top = newTop + "px";
246
- };
247
- }
248
- componentDidLoad() {
249
- requestAnimationFrame(() => {
250
- this.setView("noPictureView");
251
- });
252
- }
253
- setView(newView) {
254
- const views = this.host.shadowRoot.querySelectorAll(".view");
255
- views.forEach(v => v.classList.remove("visible"));
256
- switch (newView) {
257
- case "noPictureView":
258
- this.noPictureView.classList.add("visible");
259
- break;
260
- case "hasPictureView":
261
- this.hasPictureView.classList.add("visible");
262
- break;
263
- default:
264
- break;
265
- }
266
- this.view = newView;
267
- }
268
- initCrop() {
269
- var wantedRatio = this.width / this.height;
270
- var imageRect = this.image.getBoundingClientRect();
271
- var imageRatio = imageRect.width / imageRect.height;
272
- if (wantedRatio > imageRatio) {
273
- var wantedHeight = imageRect.width / wantedRatio;
274
- var diff = imageRect.height - wantedHeight;
275
- this.crop.style.top = Math.round(diff / 2).toString() + "px";
276
- this.crop.style.height = Math.round(wantedHeight).toString() + "px";
277
- }
278
- else {
279
- var wantedWidth = imageRect.height * wantedRatio;
280
- var diff = imageRect.width - wantedWidth;
281
- this.crop.style.left = Math.round(diff / 2).toString() + "px";
282
- this.crop.style.width = Math.round(wantedWidth).toString() + "px";
283
- }
284
- }
285
- setImage() {
286
- this.image.addEventListener('load', () => {
287
- this.initCrop();
288
- this.emitImage();
289
- });
290
- this.image.src = this.canvas.toDataURL();
291
- }
292
- handleNewFile(file) {
293
- if (file.type.split('/')[0] != "image") {
294
- return;
295
- }
296
- var reader = new FileReader();
297
- reader.onload = readerLoadEvent => {
298
- var img = new Image();
299
- img.onload = () => {
300
- this.canvas.width = img.width;
301
- this.canvas.height = img.height;
302
- if (this.preventUndersized && (img.width < this.width || img.height < this.height)) {
303
- this.imageTooSmallModal.show();
304
- return;
305
- }
306
- var ctx = this.canvas.getContext("2d");
307
- ctx.drawImage(img, 0, 0);
308
- this.setView("hasPictureView");
309
- this.setImage();
310
- };
311
- img.src = readerLoadEvent.target.result.toString();
312
- };
313
- reader.readAsDataURL(file);
314
- }
315
- emitImage() {
316
- var x = this.crop.offsetLeft / this.image.width * this.image.naturalWidth;
317
- var y = this.crop.offsetTop / this.image.height * this.image.naturalHeight;
318
- var cropRect = this.crop.getBoundingClientRect();
319
- var width = cropRect.width / this.image.width * this.image.naturalWidth;
320
- var height = cropRect.height / this.image.height * this.image.naturalHeight;
321
- if (x < 0)
322
- x = 0;
323
- if (x > this.image.naturalWidth)
324
- x = this.image.naturalWidth;
325
- if (y < 0)
326
- y = 0;
327
- if (y > this.image.naturalWidth)
328
- y = this.image.naturalWidth;
329
- if (width > this.image.naturalWidth)
330
- width = this.image.naturalWidth;
331
- if (height > this.image.naturalHeight)
332
- height = this.image.naturalHeight;
333
- var dataUrl = this.generateCroppedImage(x, y, width, height, this.width, this.height);
334
- this.imageCropChanged.emit(dataUrl);
335
- }
336
- generateCroppedImage(x, y, width, height, desiredWidth, desiredHeight) {
337
- this.canvas.width = desiredWidth;
338
- this.canvas.height = desiredHeight;
339
- const context = this.canvas.getContext("2d");
340
- context.clearRect(0, 0, desiredWidth, desiredHeight);
341
- context.drawImage(this.image, x, y, width, height, 0, 0, desiredWidth, desiredHeight);
342
- return this.canvas.toDataURL("image/jpeg", this.quality);
343
- }
344
- getCornerLeftTop(corner) {
345
- let left = 0;
346
- let top = 0;
347
- switch (corner) {
348
- case CornerType.se:
349
- left = this.crop.offsetLeft;
350
- top = this.crop.offsetTop;
351
- break;
352
- case CornerType.sw:
353
- top = this.crop.offsetTop;
354
- break;
355
- default:
356
- break;
357
- }
358
- return { top, left };
359
- }
360
- isMouseStillInTarget(event) {
361
- var inside = false;
362
- let mouseX;
363
- let mouseY;
364
- const imageRect = this.image.getBoundingClientRect();
365
- if (event instanceof MouseEvent) {
366
- mouseX = event.clientX;
367
- mouseY = event.clientY;
368
- }
369
- if (typeof TouchEvent !== "undefined") {
370
- if (event instanceof TouchEvent) {
371
- var touch = event.touches[0];
372
- mouseX = touch.clientX;
373
- mouseY = touch.clientY;
374
- }
375
- }
376
- if (mouseX >= imageRect.x &&
377
- mouseY >= imageRect.y &&
378
- mouseX <= imageRect.left + imageRect.width &&
379
- mouseY <= imageRect.top + imageRect.height) {
380
- inside = true;
381
- }
382
- var corners = this.crop.querySelectorAll("div");
383
- corners.forEach(corner => {
384
- var cornerRect = corner.getBoundingClientRect();
385
- if (mouseX >= cornerRect.x &&
386
- mouseY >= cornerRect.y &&
387
- mouseX <= cornerRect.left + cornerRect.width &&
388
- mouseY <= cornerRect.top + cornerRect.height) {
389
- inside = true;
390
- }
391
- });
392
- return inside;
393
- }
394
- render() {
395
- return (index.h(index.Host, { ref: el => this.host = el }, index.h("canvas", { ref: el => this.canvas = el }), index.h("div", { class: "view", ref: el => this.hasPictureView = el }, index.h("div", { class: "cropper" }, index.h("img", { ref: el => this.image = el }), index.h("div", { class: "backdrop" }), index.h("div", { class: "crop", ref: e => this.crop = e, onMouseDown: this.handleCropMouseDown, onTouchStart: this.handleCropMouseDown }, index.h("div", { class: "nw" }), index.h("div", { class: "ne" }), index.h("div", { class: "se" }), index.h("div", { class: "sw" })))), index.h("div", { class: "view", ref: el => this.noPictureView = el }, index.h("dnn-dropzone", { allowCameraMode: true, onFilesSelected: e => this.handleNewFile(e.detail[0]), resx: {
396
- capture: this.resx.capture,
397
- dragAndDropFile: this.resx.dragAndDropFile,
398
- or: this.resx.or,
399
- takePicture: this.resx.takePicture,
400
- uploadFile: this.resx.uploadFile,
401
- } })), index.h("dnn-modal", { ref: el => this.imageTooSmallModal = el, "close-text": this.resx.modalCloseText }, index.h("p", null, this.resx.imageTooSmall.replace("{width}", this.width.toString()).replace("{height}", this.height.toString())))));
402
- }
403
- };
404
- DnnImageCropper.style = dnnImageCropperCss;
405
-
406
- exports.dnn_image_cropper = DnnImageCropper;
407
-
408
- //# sourceMappingURL=dnn-image-cropper.cjs.entry.js.map