@leavittsoftware/web 1.0.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 (294) hide show
  1. package/leavitt/api-service/HttpError.d.ts +10 -0
  2. package/leavitt/api-service/HttpError.js +2 -0
  3. package/leavitt/api-service/HttpError.js.map +1 -0
  4. package/leavitt/api-service/api-service.d.ts +27 -0
  5. package/leavitt/api-service/api-service.js +332 -0
  6. package/leavitt/api-service/api-service.js.map +1 -0
  7. package/leavitt/api-service/api2-service.d.ts +338 -0
  8. package/leavitt/api-service/api2-service.js +17 -0
  9. package/leavitt/api-service/api2-service.js.map +1 -0
  10. package/leavitt/api-service/authenticated-token-provider.d.ts +5 -0
  11. package/leavitt/api-service/authenticated-token-provider.js +7 -0
  12. package/leavitt/api-service/authenticated-token-provider.js.map +1 -0
  13. package/leavitt/api-service/bearer-token-provider.d.ts +4 -0
  14. package/leavitt/api-service/bearer-token-provider.js +2 -0
  15. package/leavitt/api-service/bearer-token-provider.js.map +1 -0
  16. package/leavitt/api-service/mapi-service.d.ts +338 -0
  17. package/leavitt/api-service/mapi-service.js +17 -0
  18. package/leavitt/api-service/mapi-service.js.map +1 -0
  19. package/leavitt/api-service/no-authentication-token-provider.d.ts +5 -0
  20. package/leavitt/api-service/no-authentication-token-provider.js +6 -0
  21. package/leavitt/api-service/no-authentication-token-provider.js.map +1 -0
  22. package/leavitt/api-service/odata-dto.d.ts +6 -0
  23. package/leavitt/api-service/odata-dto.js +7 -0
  24. package/leavitt/api-service/odata-dto.js.map +1 -0
  25. package/leavitt/api-service/odata-model-info.d.ts +5 -0
  26. package/leavitt/api-service/odata-model-info.js +7 -0
  27. package/leavitt/api-service/odata-model-info.js.map +1 -0
  28. package/leavitt/api-service/odata-response.d.ts +15 -0
  29. package/leavitt/api-service/odata-response.js +50 -0
  30. package/leavitt/api-service/odata-response.js.map +1 -0
  31. package/leavitt/api-service/status-codes.d.ts +2 -0
  32. package/leavitt/api-service/status-codes.js +44 -0
  33. package/leavitt/api-service/status-codes.js.map +1 -0
  34. package/leavitt/company-select/company-select.d.ts +50 -0
  35. package/leavitt/company-select/company-select.js +157 -0
  36. package/leavitt/company-select/company-select.js.map +1 -0
  37. package/leavitt/person-company-select/person-company-select.d.ts +41 -0
  38. package/leavitt/person-company-select/person-company-select.js +180 -0
  39. package/leavitt/person-company-select/person-company-select.js.map +1 -0
  40. package/leavitt/person-group-select/people-group-icons.d.ts +5 -0
  41. package/leavitt/person-group-select/people-group-icons.js +66 -0
  42. package/leavitt/person-group-select/people-group-icons.js.map +1 -0
  43. package/leavitt/person-group-select/person-group-select.d.ts +41 -0
  44. package/leavitt/person-group-select/person-group-select.js +186 -0
  45. package/leavitt/person-group-select/person-group-select.js.map +1 -0
  46. package/leavitt/person-select/person-select.d.ts +33 -0
  47. package/leavitt/person-select/person-select.js +128 -0
  48. package/leavitt/person-select/person-select.js.map +1 -0
  49. package/leavitt/profile-picture/profile-picture-menu.d.ts +44 -0
  50. package/leavitt/profile-picture/profile-picture-menu.js +197 -0
  51. package/leavitt/profile-picture/profile-picture-menu.js.map +1 -0
  52. package/leavitt/profile-picture/profile-picture.d.ts +39 -0
  53. package/leavitt/profile-picture/profile-picture.js +151 -0
  54. package/leavitt/profile-picture/profile-picture.js.map +1 -0
  55. package/leavitt/user-feedback/user-feedback.d.ts +357 -0
  56. package/leavitt/user-feedback/user-feedback.js +207 -0
  57. package/leavitt/user-feedback/user-feedback.js.map +1 -0
  58. package/leavitt/user-manager/LssJwtToken.d.ts +21 -0
  59. package/leavitt/user-manager/LssJwtToken.js +2 -0
  60. package/leavitt/user-manager/LssJwtToken.js.map +1 -0
  61. package/leavitt/user-manager/user-manager-events.d.ts +5 -0
  62. package/leavitt/user-manager/user-manager-events.js +7 -0
  63. package/leavitt/user-manager/user-manager-events.js.map +1 -0
  64. package/leavitt/user-manager/user-manager.d.ts +37 -0
  65. package/leavitt/user-manager/user-manager.js +364 -0
  66. package/leavitt/user-manager/user-manager.js.map +1 -0
  67. package/package.json +36 -0
  68. package/titanium/access-denied-page/access-denied-page.d.ts +16 -0
  69. package/titanium/access-denied-page/access-denied-page.js +360 -0
  70. package/titanium/access-denied-page/access-denied-page.js.map +1 -0
  71. package/titanium/address-input/Address.js.map +1 -0
  72. package/titanium/address-input/address-input.d.ts +29 -0
  73. package/titanium/address-input/address-input.js +77 -0
  74. package/titanium/address-input/address-input.js.map +1 -0
  75. package/titanium/address-input/google-address-input.d.ts +30 -0
  76. package/titanium/address-input/google-address-input.js +202 -0
  77. package/titanium/address-input/google-address-input.js.map +1 -0
  78. package/titanium/address-input/manual-address-dialog.d.ts +30 -0
  79. package/titanium/address-input/manual-address-dialog.js +250 -0
  80. package/titanium/address-input/manual-address-dialog.js.map +1 -0
  81. package/titanium/address-input/types/address-input-address.d.ts +17 -0
  82. package/titanium/address-input/types/address-input-address.js +2 -0
  83. package/titanium/address-input/types/address-input-address.js.map +1 -0
  84. package/titanium/address-input/types/address.js.map +1 -0
  85. package/titanium/address-input/types/autocomplete-prediction-suggestion.js.map +1 -0
  86. package/titanium/address-input/utils/address-to-string.d.ts +3 -0
  87. package/titanium/address-input/utils/address-to-string.js +13 -0
  88. package/titanium/address-input/utils/address-to-string.js.map +1 -0
  89. package/titanium/address-input/utils/place-result-to-address.d.ts +4 -0
  90. package/titanium/address-input/utils/place-result-to-address.js +33 -0
  91. package/titanium/address-input/utils/place-result-to-address.js.map +1 -0
  92. package/titanium/address-input/utils/validate-street.d.ts +2 -0
  93. package/titanium/address-input/utils/validate-street.js +8 -0
  94. package/titanium/address-input/utils/validate-street.js.map +1 -0
  95. package/titanium/card/card.d.ts +23 -0
  96. package/titanium/card/card.js +160 -0
  97. package/titanium/card/card.js.map +1 -0
  98. package/titanium/chip-multi-select/chip-multi-select.d.ts +55 -0
  99. package/titanium/chip-multi-select/chip-multi-select.js +119 -0
  100. package/titanium/chip-multi-select/chip-multi-select.js.map +1 -0
  101. package/titanium/data-table/data-table-header.d.ts +67 -0
  102. package/titanium/data-table/data-table-header.js +207 -0
  103. package/titanium/data-table/data-table-header.js.map +1 -0
  104. package/titanium/data-table/data-table-item.d.ts +100 -0
  105. package/titanium/data-table/data-table-item.js +511 -0
  106. package/titanium/data-table/data-table-item.js.map +1 -0
  107. package/titanium/data-table/data-table.d.ts +146 -0
  108. package/titanium/data-table/data-table.js +605 -0
  109. package/titanium/data-table/data-table.js.map +1 -0
  110. package/titanium/data-table/filter-controller.d.ts +23 -0
  111. package/titanium/data-table/filter-controller.js +119 -0
  112. package/titanium/data-table/filter-controller.js.map +1 -0
  113. package/titanium/data-table/filter.d.ts +8 -0
  114. package/titanium/data-table/filter.js +11 -0
  115. package/titanium/data-table/filter.js.map +1 -0
  116. package/titanium/data-table/page-control.d.ts +54 -0
  117. package/titanium/data-table/page-control.js +196 -0
  118. package/titanium/data-table/page-control.js.map +1 -0
  119. package/titanium/date-range-selector/date-range-change-event.d.ts +8 -0
  120. package/titanium/date-range-selector/date-range-change-event.js +10 -0
  121. package/titanium/date-range-selector/date-range-change-event.js.map +1 -0
  122. package/titanium/date-range-selector/date-range-selector.d.ts +65 -0
  123. package/titanium/date-range-selector/date-range-selector.js +423 -0
  124. package/titanium/date-range-selector/date-range-selector.js.map +1 -0
  125. package/titanium/date-range-selector/range-label.d.ts +4 -0
  126. package/titanium/date-range-selector/range-label.js +25 -0
  127. package/titanium/date-range-selector/range-label.js.map +1 -0
  128. package/titanium/drawer/drawer.d.ts +39 -0
  129. package/titanium/drawer/drawer.js +233 -0
  130. package/titanium/drawer/drawer.js.map +1 -0
  131. package/titanium/duration-input/duration-input.d.ts +26 -0
  132. package/titanium/duration-input/duration-input.js +86 -0
  133. package/titanium/duration-input/duration-input.js.map +1 -0
  134. package/titanium/duration-input/human-interval.d.ts +19 -0
  135. package/titanium/duration-input/human-interval.js +74 -0
  136. package/titanium/duration-input/human-interval.js.map +1 -0
  137. package/titanium/error-page/error-page.d.ts +16 -0
  138. package/titanium/error-page/error-page.js +96 -0
  139. package/titanium/error-page/error-page.js.map +1 -0
  140. package/titanium/event-bus/event-bus.d.ts +10 -0
  141. package/titanium/event-bus/event-bus.js +52 -0
  142. package/titanium/event-bus/event-bus.js.map +1 -0
  143. package/titanium/extendable-outlined-text-field/extendable-outlined-text-field.d.ts +160 -0
  144. package/titanium/extendable-outlined-text-field/extendable-outlined-text-field.js +295 -0
  145. package/titanium/extendable-outlined-text-field/extendable-outlined-text-field.js.map +1 -0
  146. package/titanium/extendable-outlined-text-field/extensible-outlined-text-field.d.ts +45 -0
  147. package/titanium/extendable-outlined-text-field/extensible-outlined-text-field.js.map +1 -0
  148. package/titanium/full-page-loading-indicator/full-page-loading-indicator.d.ts +19 -0
  149. package/titanium/full-page-loading-indicator/full-page-loading-indicator.js +170 -0
  150. package/titanium/full-page-loading-indicator/full-page-loading-indicator.js.map +1 -0
  151. package/titanium/hacks/dialog-overflow-hacks.d.ts +4 -0
  152. package/titanium/hacks/dialog-overflow-hacks.js +21 -0
  153. package/titanium/hacks/dialog-overflow-hacks.js.map +1 -0
  154. package/titanium/header/header.d.ts +39 -0
  155. package/titanium/header/header.js +148 -0
  156. package/titanium/header/header.js.map +1 -0
  157. package/titanium/helpers/csv-download.d.ts +3 -0
  158. package/titanium/helpers/csv-download.js +78 -0
  159. package/titanium/helpers/csv-download.js.map +1 -0
  160. package/titanium/helpers/debouncer.d.ts +13 -0
  161. package/titanium/helpers/debouncer.js +33 -0
  162. package/titanium/helpers/debouncer.js.map +1 -0
  163. package/titanium/helpers/delay.d.ts +2 -0
  164. package/titanium/helpers/delay.js +6 -0
  165. package/titanium/helpers/delay.js.map +1 -0
  166. package/titanium/helpers/dev-detection.d.ts +3 -0
  167. package/titanium/helpers/dev-detection.js +12 -0
  168. package/titanium/helpers/dev-detection.js.map +1 -0
  169. package/titanium/helpers/helpers.d.ts +14 -0
  170. package/titanium/helpers/helpers.js +14 -0
  171. package/titanium/helpers/helpers.js.map +1 -0
  172. package/titanium/helpers/join.d.ts +2 -0
  173. package/titanium/helpers/join.js +5 -0
  174. package/titanium/helpers/join.js.map +1 -0
  175. package/titanium/helpers/leavitt-cdn.d.ts +5 -0
  176. package/titanium/helpers/leavitt-cdn.js +38 -0
  177. package/titanium/helpers/leavitt-cdn.js.map +1 -0
  178. package/titanium/helpers/load-while.d.ts +343 -0
  179. package/titanium/helpers/load-while.js +27 -0
  180. package/titanium/helpers/load-while.js.map +1 -0
  181. package/titanium/helpers/media-query.d.ts +2 -0
  182. package/titanium/helpers/media-query.js +6 -0
  183. package/titanium/helpers/media-query.js.map +1 -0
  184. package/titanium/helpers/middle-ellipsis.d.ts +2 -0
  185. package/titanium/helpers/middle-ellipsis.js +7 -0
  186. package/titanium/helpers/middle-ellipsis.js.map +1 -0
  187. package/titanium/helpers/not-null-or-undefined.d.ts +2 -0
  188. package/titanium/helpers/not-null-or-undefined.js +4 -0
  189. package/titanium/helpers/not-null-or-undefined.js.map +1 -0
  190. package/titanium/helpers/not-null.d.ts +2 -0
  191. package/titanium/helpers/not-null.js +4 -0
  192. package/titanium/helpers/not-null.js.map +1 -0
  193. package/titanium/helpers/not-undefined.d.ts +2 -0
  194. package/titanium/helpers/not-undefined.js +4 -0
  195. package/titanium/helpers/not-undefined.js.map +1 -0
  196. package/titanium/helpers/odata-helpers.d.ts +2 -0
  197. package/titanium/helpers/odata-helpers.js +2 -0
  198. package/titanium/helpers/odata-helpers.js.map +1 -0
  199. package/titanium/helpers/search-token.d.ts +2 -0
  200. package/titanium/helpers/search-token.js +17 -0
  201. package/titanium/helpers/search-token.js.map +1 -0
  202. package/titanium/icon-picker/icon-picker.d.ts +23 -0
  203. package/titanium/icon-picker/icon-picker.js +75 -0
  204. package/titanium/icon-picker/icon-picker.js.map +1 -0
  205. package/titanium/icon-picker/material-symbols.d.ts +3 -0
  206. package/titanium/icon-picker/material-symbols.js +3297 -0
  207. package/titanium/icon-picker/material-symbols.js.map +1 -0
  208. package/titanium/input-validator/input-validator.d.ts +20 -0
  209. package/titanium/input-validator/input-validator.js +45 -0
  210. package/titanium/input-validator/input-validator.js.map +1 -0
  211. package/titanium/search-input/search-input.d.ts +47 -0
  212. package/titanium/search-input/search-input.js +237 -0
  213. package/titanium/search-input/search-input.js.map +1 -0
  214. package/titanium/service-worker-notifier/service-worker-notifier.d.ts +9 -0
  215. package/titanium/service-worker-notifier/service-worker-notifier.js +57 -0
  216. package/titanium/service-worker-notifier/service-worker-notifier.js.map +1 -0
  217. package/titanium/show-hide/show-hide.d.ts +36 -0
  218. package/titanium/show-hide/show-hide.js +144 -0
  219. package/titanium/show-hide/show-hide.js.map +1 -0
  220. package/titanium/single-select-base/single-select-base.d.ts +449 -0
  221. package/titanium/single-select-base/single-select-base.js +411 -0
  222. package/titanium/single-select-base/single-select-base.js.map +1 -0
  223. package/titanium/smart-attachment-input/crop-and-save-image-dialog.d.ts +370 -0
  224. package/titanium/smart-attachment-input/crop-and-save-image-dialog.js +270 -0
  225. package/titanium/smart-attachment-input/crop-and-save-image-dialog.js.map +1 -0
  226. package/titanium/smart-attachment-input/cropper-styles.d.ts +3 -0
  227. package/titanium/smart-attachment-input/cropper-styles.js +311 -0
  228. package/titanium/smart-attachment-input/cropper-styles.js.map +1 -0
  229. package/titanium/smart-attachment-input/image-formats.d.ts +5 -0
  230. package/titanium/smart-attachment-input/image-formats.js +37 -0
  231. package/titanium/smart-attachment-input/image-formats.js.map +1 -0
  232. package/titanium/smart-attachment-input/image-preview-dialog.d.ts +21 -0
  233. package/titanium/smart-attachment-input/image-preview-dialog.js +83 -0
  234. package/titanium/smart-attachment-input/image-preview-dialog.js.map +1 -0
  235. package/titanium/smart-attachment-input/smart-attachment-input.d.ts +126 -0
  236. package/titanium/smart-attachment-input/smart-attachment-input.js +422 -0
  237. package/titanium/smart-attachment-input/smart-attachment-input.js.map +1 -0
  238. package/titanium/smart-attachment-input/type/smart-attachment.d.ts +7 -0
  239. package/titanium/smart-attachment-input/type/smart-attachment.js +2 -0
  240. package/titanium/smart-attachment-input/type/smart-attachment.js.map +1 -0
  241. package/titanium/snackbar/snackbar.d.ts +79 -0
  242. package/titanium/snackbar/snackbar.js +302 -0
  243. package/titanium/snackbar/snackbar.js.map +1 -0
  244. package/titanium/styles/a.d.ts +2 -0
  245. package/titanium/styles/a.js +18 -0
  246. package/titanium/styles/a.js.map +1 -0
  247. package/titanium/styles/data-row.d.ts +2 -0
  248. package/titanium/styles/data-row.js +52 -0
  249. package/titanium/styles/data-row.js.map +1 -0
  250. package/titanium/styles/ellipsis.d.ts +2 -0
  251. package/titanium/styles/ellipsis.js +9 -0
  252. package/titanium/styles/ellipsis.js.map +1 -0
  253. package/titanium/styles/h1.d.ts +2 -0
  254. package/titanium/styles/h1.js +17 -0
  255. package/titanium/styles/h1.js.map +1 -0
  256. package/titanium/styles/h2.d.ts +2 -0
  257. package/titanium/styles/h2.js +17 -0
  258. package/titanium/styles/h2.js.map +1 -0
  259. package/titanium/styles/h3.d.ts +2 -0
  260. package/titanium/styles/h3.js +17 -0
  261. package/titanium/styles/h3.js.map +1 -0
  262. package/titanium/styles/h4.d.ts +2 -0
  263. package/titanium/styles/h4.js +17 -0
  264. package/titanium/styles/h4.js.map +1 -0
  265. package/titanium/styles/h5.d.ts +2 -0
  266. package/titanium/styles/h5.js +19 -0
  267. package/titanium/styles/h5.js.map +1 -0
  268. package/titanium/styles/p.d.ts +2 -0
  269. package/titanium/styles/p.js +17 -0
  270. package/titanium/styles/p.js.map +1 -0
  271. package/titanium/styles/styles.d.ts +17 -0
  272. package/titanium/styles/styles.js +17 -0
  273. package/titanium/styles/styles.js.map +1 -0
  274. package/titanium/toolbar/toolbar.d.ts +34 -0
  275. package/titanium/toolbar/toolbar.js +104 -0
  276. package/titanium/toolbar/toolbar.js.map +1 -0
  277. package/titanium/types/any-function.d.ts +5 -0
  278. package/titanium/types/any-function.js +2 -0
  279. package/titanium/types/any-function.js.map +1 -0
  280. package/titanium/types/dom-event.d.ts +4 -0
  281. package/titanium/types/dom-event.js +2 -0
  282. package/titanium/types/dom-event.js.map +1 -0
  283. package/titanium/types/identifier-interface.d.ts +4 -0
  284. package/titanium/types/identifier-interface.js +2 -0
  285. package/titanium/types/identifier-interface.js.map +1 -0
  286. package/titanium/types/pending-state-event.d.ts +7 -0
  287. package/titanium/types/pending-state-event.js +7 -0
  288. package/titanium/types/pending-state-event.js.map +1 -0
  289. package/titanium/types/string-map.d.ts +7 -0
  290. package/titanium/types/string-map.js +5 -0
  291. package/titanium/types/string-map.js.map +1 -0
  292. package/titanium/youtube-input/youtube-input.d.ts +17 -0
  293. package/titanium/youtube-input/youtube-input.js +52 -0
  294. package/titanium/youtube-input/youtube-input.js.map +1 -0
@@ -0,0 +1,370 @@
1
+ import '@material/web/dialog/dialog';
2
+ import '@material/web/icon/icon';
3
+ import '@material/web/button/text-button';
4
+ import '@material/web/iconbutton/icon-button';
5
+ export declare type CropperOptions = Cropper.Options & {
6
+ shape?: 'square' | 'circle';
7
+ };
8
+ import { LitElement } from 'lit';
9
+ import Cropper from 'cropperjs';
10
+ import { MdDialog } from '@material/web/dialog/dialog';
11
+ declare const CropAndSaveImageDialog_base: {
12
+ new (...args: any[]): {
13
+ "__#3@#promiseCount": number;
14
+ isLoading: boolean;
15
+ loadWhile(promise: Promise<unknown>): Promise<void>;
16
+ accessKey: string;
17
+ readonly accessKeyLabel: string;
18
+ autocapitalize: string;
19
+ dir: string;
20
+ draggable: boolean;
21
+ hidden: boolean;
22
+ inert: boolean;
23
+ innerText: string;
24
+ lang: string;
25
+ readonly offsetHeight: number;
26
+ readonly offsetLeft: number;
27
+ readonly offsetParent: Element | null;
28
+ readonly offsetTop: number;
29
+ readonly offsetWidth: number;
30
+ outerText: string;
31
+ popover: string | null;
32
+ spellcheck: boolean;
33
+ title: string;
34
+ translate: boolean;
35
+ attachInternals(): ElementInternals;
36
+ click(): void;
37
+ hidePopover(): void;
38
+ showPopover(): void;
39
+ togglePopover(force?: boolean | undefined): void;
40
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
41
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
42
+ removeEventListener<K_1 extends keyof HTMLElementEventMap>(type: K_1, listener: (this: HTMLElement, ev: HTMLElementEventMap[K_1]) => any, options?: boolean | EventListenerOptions | undefined): void;
43
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
44
+ floatingLabelFoundation?: import("@material/floating-label/foundation").MDCFloatingLabelFoundation | undefined;
45
+ lineRippleFoundation?: import("@material/line-ripple/foundation").MDCLineRippleFoundation | undefined;
46
+ readonly attributes: NamedNodeMap;
47
+ readonly classList: DOMTokenList;
48
+ className: string;
49
+ readonly clientHeight: number;
50
+ readonly clientLeft: number;
51
+ readonly clientTop: number;
52
+ readonly clientWidth: number;
53
+ id: string;
54
+ readonly localName: string;
55
+ readonly namespaceURI: string | null;
56
+ onfullscreenchange: ((this: Element, ev: Event) => any) | null;
57
+ onfullscreenerror: ((this: Element, ev: Event) => any) | null;
58
+ outerHTML: string;
59
+ readonly ownerDocument: Document;
60
+ readonly part: DOMTokenList;
61
+ readonly prefix: string | null;
62
+ readonly scrollHeight: number;
63
+ scrollLeft: number;
64
+ scrollTop: number;
65
+ readonly scrollWidth: number;
66
+ readonly shadowRoot: ShadowRoot | null;
67
+ slot: string;
68
+ readonly tagName: string;
69
+ attachShadow(init: ShadowRootInit): ShadowRoot;
70
+ checkVisibility(options?: CheckVisibilityOptions | undefined): boolean;
71
+ closest<K_2 extends keyof HTMLElementTagNameMap>(selector: K_2): HTMLElementTagNameMap[K_2] | null;
72
+ closest<K_3 extends keyof SVGElementTagNameMap>(selector: K_3): SVGElementTagNameMap[K_3] | null;
73
+ closest<K_4 extends keyof MathMLElementTagNameMap>(selector: K_4): MathMLElementTagNameMap[K_4] | null;
74
+ closest<E extends Element = Element>(selectors: string): E | null;
75
+ computedStyleMap(): StylePropertyMapReadOnly;
76
+ getAttribute(qualifiedName: string): string | null;
77
+ getAttributeNS(namespace: string | null, localName: string): string | null;
78
+ getAttributeNames(): string[];
79
+ getAttributeNode(qualifiedName: string): Attr | null;
80
+ getAttributeNodeNS(namespace: string | null, localName: string): Attr | null;
81
+ getBoundingClientRect(): DOMRect;
82
+ getClientRects(): DOMRectList;
83
+ getElementsByClassName(classNames: string): HTMLCollectionOf<Element>;
84
+ getElementsByTagName<K_5 extends keyof HTMLElementTagNameMap>(qualifiedName: K_5): HTMLCollectionOf<HTMLElementTagNameMap[K_5]>;
85
+ getElementsByTagName<K_6 extends keyof SVGElementTagNameMap>(qualifiedName: K_6): HTMLCollectionOf<SVGElementTagNameMap[K_6]>;
86
+ getElementsByTagName<K_7 extends keyof MathMLElementTagNameMap>(qualifiedName: K_7): HTMLCollectionOf<MathMLElementTagNameMap[K_7]>;
87
+ getElementsByTagName<K_8 extends keyof HTMLElementDeprecatedTagNameMap>(qualifiedName: K_8): HTMLCollectionOf<HTMLElementDeprecatedTagNameMap[K_8]>;
88
+ getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;
89
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf<HTMLElement>;
90
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf<SVGElement>;
91
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1998/Math/MathML", localName: string): HTMLCollectionOf<MathMLElement>;
92
+ getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf<Element>;
93
+ hasAttribute(qualifiedName: string): boolean;
94
+ hasAttributeNS(namespace: string | null, localName: string): boolean;
95
+ hasAttributes(): boolean;
96
+ hasPointerCapture(pointerId: number): boolean;
97
+ insertAdjacentElement(where: InsertPosition, element: Element): Element | null;
98
+ insertAdjacentHTML(position: InsertPosition, text: string): void;
99
+ insertAdjacentText(where: InsertPosition, data: string): void;
100
+ matches(selectors: string): boolean;
101
+ releasePointerCapture(pointerId: number): void;
102
+ removeAttribute(qualifiedName: string): void;
103
+ removeAttributeNS(namespace: string | null, localName: string): void;
104
+ removeAttributeNode(attr: Attr): Attr;
105
+ requestFullscreen(options?: FullscreenOptions | undefined): Promise<void>;
106
+ requestPointerLock(): void;
107
+ scroll(options?: ScrollToOptions | undefined): void;
108
+ scroll(x: number, y: number): void;
109
+ scrollBy(options?: ScrollToOptions | undefined): void;
110
+ scrollBy(x: number, y: number): void;
111
+ scrollIntoView(arg?: boolean | ScrollIntoViewOptions | undefined): void;
112
+ scrollTo(options?: ScrollToOptions | undefined): void;
113
+ scrollTo(x: number, y: number): void;
114
+ setAttribute(qualifiedName: string, value: string): void;
115
+ setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void;
116
+ setAttributeNode(attr: Attr): Attr | null;
117
+ setAttributeNodeNS(attr: Attr): Attr | null;
118
+ setPointerCapture(pointerId: number): void;
119
+ toggleAttribute(qualifiedName: string, force?: boolean | undefined): boolean;
120
+ webkitMatchesSelector(selectors: string): boolean;
121
+ readonly baseURI: string;
122
+ readonly childNodes: NodeListOf<ChildNode>;
123
+ readonly firstChild: ChildNode | null;
124
+ readonly isConnected: boolean;
125
+ readonly lastChild: ChildNode | null;
126
+ readonly nextSibling: ChildNode | null;
127
+ readonly nodeName: string;
128
+ readonly nodeType: number;
129
+ nodeValue: string | null;
130
+ readonly parentElement: HTMLElement | null;
131
+ readonly parentNode: ParentNode | null;
132
+ readonly previousSibling: ChildNode | null;
133
+ textContent: string | null;
134
+ appendChild<T extends Node>(node: T): T;
135
+ cloneNode(deep?: boolean | undefined): Node;
136
+ compareDocumentPosition(other: Node): number;
137
+ contains(other: Node | null): boolean;
138
+ getRootNode(options?: GetRootNodeOptions | undefined): Node;
139
+ hasChildNodes(): boolean;
140
+ insertBefore<T_1 extends Node>(node: T_1, child: Node | null): T_1;
141
+ isDefaultNamespace(namespace: string | null): boolean;
142
+ isEqualNode(otherNode: Node | null): boolean;
143
+ isSameNode(otherNode: Node | null): boolean;
144
+ lookupNamespaceURI(prefix: string | null): string | null;
145
+ lookupPrefix(namespace: string | null): string | null;
146
+ normalize(): void;
147
+ removeChild<T_2 extends Node>(child: T_2): T_2;
148
+ replaceChild<T_3 extends Node>(node: Node, child: T_3): T_3;
149
+ readonly ELEMENT_NODE: 1;
150
+ readonly ATTRIBUTE_NODE: 2;
151
+ readonly TEXT_NODE: 3;
152
+ readonly CDATA_SECTION_NODE: 4;
153
+ readonly ENTITY_REFERENCE_NODE: 5;
154
+ readonly ENTITY_NODE: 6;
155
+ readonly PROCESSING_INSTRUCTION_NODE: 7;
156
+ readonly COMMENT_NODE: 8;
157
+ readonly DOCUMENT_NODE: 9;
158
+ readonly DOCUMENT_TYPE_NODE: 10;
159
+ readonly DOCUMENT_FRAGMENT_NODE: 11;
160
+ readonly NOTATION_NODE: 12;
161
+ readonly DOCUMENT_POSITION_DISCONNECTED: 1;
162
+ readonly DOCUMENT_POSITION_PRECEDING: 2;
163
+ readonly DOCUMENT_POSITION_FOLLOWING: 4;
164
+ readonly DOCUMENT_POSITION_CONTAINS: 8;
165
+ readonly DOCUMENT_POSITION_CONTAINED_BY: 16;
166
+ readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32;
167
+ dispatchEvent(event: Event): boolean;
168
+ ariaAtomic: string | null;
169
+ ariaAutoComplete: string | null;
170
+ ariaBusy: string | null;
171
+ ariaChecked: string | null;
172
+ ariaColCount: string | null;
173
+ ariaColIndex: string | null;
174
+ ariaColSpan: string | null;
175
+ ariaCurrent: string | null;
176
+ ariaDisabled: string | null;
177
+ ariaExpanded: string | null;
178
+ ariaHasPopup: string | null;
179
+ ariaHidden: string | null;
180
+ ariaInvalid: string | null;
181
+ ariaKeyShortcuts: string | null;
182
+ ariaLabel: string | null;
183
+ ariaLevel: string | null;
184
+ ariaLive: string | null;
185
+ ariaModal: string | null;
186
+ ariaMultiLine: string | null;
187
+ ariaMultiSelectable: string | null;
188
+ ariaOrientation: string | null;
189
+ ariaPlaceholder: string | null;
190
+ ariaPosInSet: string | null;
191
+ ariaPressed: string | null;
192
+ ariaReadOnly: string | null;
193
+ ariaRequired: string | null;
194
+ ariaRoleDescription: string | null;
195
+ ariaRowCount: string | null;
196
+ ariaRowIndex: string | null;
197
+ ariaRowSpan: string | null;
198
+ ariaSelected: string | null;
199
+ ariaSetSize: string | null;
200
+ ariaSort: string | null;
201
+ ariaValueMax: string | null;
202
+ ariaValueMin: string | null;
203
+ ariaValueNow: string | null;
204
+ ariaValueText: string | null;
205
+ role: string | null;
206
+ animate(keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeAnimationOptions | undefined): Animation;
207
+ getAnimations(options?: GetAnimationsOptions | undefined): Animation[];
208
+ after(...nodes: (string | Node)[]): void;
209
+ before(...nodes: (string | Node)[]): void;
210
+ remove(): void;
211
+ replaceWith(...nodes: (string | Node)[]): void;
212
+ innerHTML: string;
213
+ readonly nextElementSibling: Element | null;
214
+ readonly previousElementSibling: Element | null;
215
+ readonly childElementCount: number;
216
+ readonly children: HTMLCollection;
217
+ readonly firstElementChild: Element | null;
218
+ readonly lastElementChild: Element | null;
219
+ append(...nodes: (string | Node)[]): void;
220
+ prepend(...nodes: (string | Node)[]): void;
221
+ querySelector<K_9 extends keyof HTMLElementTagNameMap>(selectors: K_9): HTMLElementTagNameMap[K_9] | null;
222
+ querySelector<K_10 extends keyof SVGElementTagNameMap>(selectors: K_10): SVGElementTagNameMap[K_10] | null;
223
+ querySelector<K_11 extends keyof MathMLElementTagNameMap>(selectors: K_11): MathMLElementTagNameMap[K_11] | null;
224
+ querySelector<K_12 extends keyof HTMLElementDeprecatedTagNameMap>(selectors: K_12): HTMLElementDeprecatedTagNameMap[K_12] | null;
225
+ querySelector<E_1 extends Element = Element>(selectors: string): E_1 | null;
226
+ querySelectorAll<K_13 extends keyof HTMLElementTagNameMap>(selectors: K_13): NodeListOf<HTMLElementTagNameMap[K_13]>;
227
+ querySelectorAll<K_14 extends keyof SVGElementTagNameMap>(selectors: K_14): NodeListOf<SVGElementTagNameMap[K_14]>;
228
+ querySelectorAll<K_15 extends keyof MathMLElementTagNameMap>(selectors: K_15): NodeListOf<MathMLElementTagNameMap[K_15]>;
229
+ querySelectorAll<K_16 extends keyof HTMLElementDeprecatedTagNameMap>(selectors: K_16): NodeListOf<HTMLElementDeprecatedTagNameMap[K_16]>;
230
+ querySelectorAll<E_2 extends Element = Element>(selectors: string): NodeListOf<E_2>;
231
+ replaceChildren(...nodes: (string | Node)[]): void;
232
+ readonly assignedSlot: HTMLSlotElement | null;
233
+ readonly attributeStyleMap: StylePropertyMap;
234
+ readonly style: CSSStyleDeclaration;
235
+ contentEditable: string;
236
+ enterKeyHint: string;
237
+ inputMode: string;
238
+ readonly isContentEditable: boolean;
239
+ onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
240
+ onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
241
+ onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
242
+ onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
243
+ onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
244
+ onauxclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
245
+ onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null;
246
+ onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
247
+ oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null;
248
+ oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;
249
+ oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null;
250
+ onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
251
+ onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
252
+ onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null;
253
+ oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
254
+ oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
255
+ oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
256
+ oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
257
+ ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
258
+ ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
259
+ ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
260
+ ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
261
+ ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
262
+ ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
263
+ ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
264
+ ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
265
+ ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
266
+ onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null;
267
+ onended: ((this: GlobalEventHandlers, ev: Event) => any) | null;
268
+ onerror: OnErrorEventHandler;
269
+ onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
270
+ onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null;
271
+ ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
272
+ oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null;
273
+ oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null;
274
+ onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
275
+ onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
276
+ onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
277
+ onload: ((this: GlobalEventHandlers, ev: Event) => any) | null;
278
+ onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null;
279
+ onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null;
280
+ onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
281
+ onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
282
+ onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
283
+ onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
284
+ onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
285
+ onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
286
+ onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
287
+ onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
288
+ onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
289
+ onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
290
+ onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null;
291
+ onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;
292
+ onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null;
293
+ onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
294
+ onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
295
+ onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
296
+ onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
297
+ onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
298
+ onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
299
+ onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
300
+ onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
301
+ onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent<EventTarget>) => any) | null;
302
+ onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
303
+ onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null;
304
+ onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
305
+ onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null;
306
+ onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
307
+ onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null;
308
+ onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null;
309
+ onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null;
310
+ onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null;
311
+ onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
312
+ onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
313
+ onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
314
+ onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null;
315
+ onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null;
316
+ onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
317
+ ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;
318
+ ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null;
319
+ ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
320
+ ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
321
+ ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
322
+ ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
323
+ ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
324
+ ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
325
+ ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
326
+ ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
327
+ onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
328
+ onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null;
329
+ onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
330
+ onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null;
331
+ onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
332
+ onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
333
+ onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null;
334
+ autofocus: boolean;
335
+ readonly dataset: DOMStringMap;
336
+ nonce?: string | undefined;
337
+ tabIndex: number;
338
+ blur(): void;
339
+ focus(options?: FocusOptions | undefined): void;
340
+ };
341
+ readonly properties: {
342
+ isLoading: {
343
+ type: BooleanConstructor;
344
+ };
345
+ };
346
+ } & typeof LitElement;
347
+ /**
348
+ * Crop and save image dialog
349
+ *
350
+ * @element crop-and-save-image-dialog
351
+ *
352
+ */
353
+ export declare class CropAndSaveImageDialog extends CropAndSaveImageDialog_base {
354
+ #private;
355
+ dialog: MdDialog;
356
+ img: HTMLImageElement;
357
+ /**
358
+ * Configurable CropperJs options.
359
+ */
360
+ options: CropperOptions;
361
+ protected fileName: string;
362
+ firstUpdated(): void;
363
+ static styles: import("lit").CSSResult[];
364
+ open(url: string, filename: string, saveCroppedImageFunc?: (file: File, previewDataUrl: string) => Promise<void>): Promise<"cancel" | "cropped">;
365
+ reset(): void;
366
+ blobToFile(blob: Blob, fileName: string): File;
367
+ render(): import("lit-html").TemplateResult<1>;
368
+ }
369
+ export {};
370
+ //# sourceMappingURL=crop-and-save-image-dialog.d.ts.map
@@ -0,0 +1,270 @@
1
+ import { __decorate } from "tslib";
2
+ import '@material/web/dialog/dialog';
3
+ import '@material/web/icon/icon';
4
+ import '@material/web/button/text-button';
5
+ import '@material/web/iconbutton/icon-button';
6
+ import { css, html, LitElement } from 'lit';
7
+ import { property, customElement, query, state } from 'lit/decorators.js';
8
+ import Cropper from 'cropperjs';
9
+ import { cropperCSS } from './cropper-styles';
10
+ import { h1, p } from '../../titanium/styles/styles';
11
+ import { LoadWhile } from '../../titanium/helpers/load-while';
12
+ import Bowser from 'bowser';
13
+ const LoaderGif = new URL('./images/duck-loader.gif', import.meta.url).href;
14
+ /**
15
+ * Crop and save image dialog
16
+ *
17
+ * @element crop-and-save-image-dialog
18
+ *
19
+ */
20
+ let CropAndSaveImageDialog = class CropAndSaveImageDialog extends LoadWhile(LitElement) {
21
+ constructor() {
22
+ super(...arguments);
23
+ /**
24
+ * Configurable CropperJs options.
25
+ */
26
+ this.options = {};
27
+ this.fileName = '';
28
+ this.#mimeType = '';
29
+ this.#extension = '';
30
+ }
31
+ #cropper;
32
+ #mimeType;
33
+ #extension;
34
+ firstUpdated() {
35
+ const bowser = Bowser.getParser(window.navigator.userAgent);
36
+ const os = bowser?.getOS?.()?.name ?? '';
37
+ this.#mimeType = os === 'iOS' || os === 'macOS' ? 'image/png' : 'image/webp';
38
+ this.#extension = os === 'iOS' || os === 'macOS' ? 'png' : 'webp';
39
+ }
40
+ static { this.styles = [
41
+ h1,
42
+ p,
43
+ cropperCSS,
44
+ css `
45
+ :host {
46
+ display: block;
47
+ }
48
+
49
+ md-dialog {
50
+ max-width: calc(100vw - 24px);
51
+ max-height: calc(100vh - 24px);
52
+ }
53
+
54
+ main {
55
+ display: flex;
56
+ position: relative;
57
+ align-self: center;
58
+ }
59
+
60
+ loading-animation {
61
+ display: flex;
62
+ flex-direction: column;
63
+ place-content: center;
64
+ place-items: center;
65
+ width: 100%;
66
+ }
67
+
68
+ loading-animation img {
69
+ height: 300px;
70
+ }
71
+
72
+ section[crop] {
73
+ display: grid;
74
+ width: 100%;
75
+ grid: 'cropper buttons' / 1fr 58px;
76
+ }
77
+
78
+ cropper-container {
79
+ grid-area: cropper;
80
+
81
+ display: block;
82
+ max-width: 800px;
83
+ max-height: 600px;
84
+ overflow: hidden;
85
+ }
86
+
87
+ cropper-container img {
88
+ display: block;
89
+ /* This rule is very important, please don't ignore this */
90
+ max-width: 100%;
91
+ }
92
+
93
+ crop-buttons {
94
+ grid-area: buttons;
95
+
96
+ display: grid;
97
+ align-content: start;
98
+ grid-auto-flow: row;
99
+
100
+ padding: 0 8px;
101
+ gap: 8px;
102
+ }
103
+
104
+ @media (max-width: 600px) {
105
+ section[crop] {
106
+ grid:
107
+ 'cropper'
108
+ 'buttons';
109
+ }
110
+
111
+ crop-buttons {
112
+ justify-content: end;
113
+ grid-auto-flow: column;
114
+ padding: 8px 0;
115
+ }
116
+ }
117
+
118
+ [hidden] {
119
+ display: none !important;
120
+ }
121
+ `,
122
+ ]; }
123
+ #saveCroppedImageFunc;
124
+ #resolve;
125
+ async open(url, filename, saveCroppedImageFunc) {
126
+ this.#saveCroppedImageFunc = saveCroppedImageFunc;
127
+ this.dialog.returnValue = '';
128
+ this.reset();
129
+ this.fileName = filename;
130
+ this.#setCropperImage(url);
131
+ this.dialog.show();
132
+ return await new Promise((resolve) => {
133
+ this.#resolve = resolve;
134
+ });
135
+ }
136
+ reset() {
137
+ this.img.src = '';
138
+ this.#cropper?.destroy();
139
+ }
140
+ blobToFile(blob, fileName) {
141
+ return new File([blob], fileName, { lastModified: new Date().getTime() });
142
+ }
143
+ #setCropperImage(url) {
144
+ this.img.src = url;
145
+ this.#cropper = new Cropper(this.img, {
146
+ viewMode: 2,
147
+ aspectRatio: this.options.shape === 'circle' ? 1 : this.options.aspectRatio,
148
+ ...this.options,
149
+ });
150
+ }
151
+ #changeFileExtension(fileName, ext) {
152
+ return fileName.slice(0, fileName.lastIndexOf('.')) + `.${ext}`;
153
+ }
154
+ async #applyCircleMask(dataUrl) {
155
+ const canvas = document.createElement('canvas');
156
+ const image = new Image();
157
+ const imagePromise = new Promise((resolve) => {
158
+ image.onload = () => {
159
+ // use min size so we get a square
160
+ const size = Math.min(image.naturalWidth, image.naturalHeight);
161
+ // let's update the canvas size
162
+ canvas.width = size;
163
+ canvas.height = size;
164
+ // draw image to canvas
165
+ const ctx = canvas.getContext('2d');
166
+ ctx.drawImage(image, 0, 0);
167
+ // only draw image where mask is
168
+ ctx.globalCompositeOperation = 'destination-in';
169
+ // draw our circle mask
170
+ ctx.fillStyle = '#000';
171
+ ctx.beginPath();
172
+ ctx.arc(size * 0.5, // x
173
+ size * 0.5, // y
174
+ size * 0.5, // radius
175
+ 0, // start angle
176
+ 2 * Math.PI // end angle
177
+ );
178
+ ctx.fill();
179
+ // restore to default composite operation (is draw over current image)
180
+ ctx.globalCompositeOperation = 'source-over';
181
+ resolve(canvas.toDataURL());
182
+ };
183
+ });
184
+ image.src = dataUrl;
185
+ return await imagePromise;
186
+ }
187
+ render() {
188
+ return html `
189
+ <md-dialog
190
+ focus-trap
191
+ @close=${(e) => {
192
+ if (e.target.returnValue === 'cancel' || e.target.returnValue === 'cropped') {
193
+ return this.#resolve(e.target.returnValue);
194
+ }
195
+ e.preventDefault();
196
+ }}
197
+ >
198
+ <div slot="headline">Crop and save image</div>
199
+ <main slot="content">
200
+ <loading-animation ?hidden=${!this.isLoading}>
201
+ <img src=${LoaderGif} />
202
+ <p>Uploading image...</p>
203
+ </loading-animation>
204
+ <section crop ?hidden=${this.isLoading}>
205
+ <cropper-container ?circle=${this.options.shape === 'circle'}>
206
+ <img />
207
+ </cropper-container>
208
+ <crop-buttons>
209
+ <md-icon-button label="Rotate right" title="Rotate right" @click=${() => this.#cropper?.rotate(90)}
210
+ ><md-icon>rotate_right</md-icon></md-icon-button
211
+ >
212
+ <md-icon-button label="Rotate left" title="Rotate left" @click=${() => this.#cropper?.rotate(-90)}>
213
+ <md-icon>rotate_left</md-icon>
214
+ </md-icon-button>
215
+ </crop-buttons>
216
+ </section>
217
+ </main>
218
+ <div slot="actions">
219
+ <md-text-button
220
+ ?disabled=${this.isLoading}
221
+ @click=${() => {
222
+ this.reset();
223
+ this.dialog.close('cancel');
224
+ }}
225
+ >Cancel</md-text-button
226
+ >
227
+ <md-text-button
228
+ ?disabled=${this.isLoading}
229
+ @click=${async () => {
230
+ this.isLoading = true;
231
+ await this.updateComplete;
232
+ //WORKAROUND: The first call to this func can result in a corrupt image, esp seen in Android when picture comes from camera
233
+ this.#cropper?.getCroppedCanvas();
234
+ const canvas = this.#cropper?.getCroppedCanvas({ maxWidth: 1200, maxHeight: 1080 });
235
+ if (!canvas) {
236
+ return;
237
+ }
238
+ const previewDataUrl = this.options.shape === 'circle' ? await this.#applyCircleMask(canvas.toDataURL(this.#mimeType)) : canvas.toDataURL(this.#mimeType);
239
+ const response = await fetch(previewDataUrl);
240
+ const file = this.blobToFile(await response.blob(), this.#changeFileExtension(this.fileName, this.#extension));
241
+ const save = this.#saveCroppedImageFunc?.(file, previewDataUrl) || Promise.resolve();
242
+ this.loadWhile(save);
243
+ await save;
244
+ this.isLoading = false;
245
+ this.dialog.close('cropped');
246
+ }}
247
+ >Save</md-text-button
248
+ >
249
+ </div>
250
+ </md-dialog>
251
+ `;
252
+ }
253
+ };
254
+ __decorate([
255
+ query('md-dialog')
256
+ ], CropAndSaveImageDialog.prototype, "dialog", void 0);
257
+ __decorate([
258
+ query('cropper-container > img')
259
+ ], CropAndSaveImageDialog.prototype, "img", void 0);
260
+ __decorate([
261
+ property({ type: Object })
262
+ ], CropAndSaveImageDialog.prototype, "options", void 0);
263
+ __decorate([
264
+ state()
265
+ ], CropAndSaveImageDialog.prototype, "fileName", void 0);
266
+ CropAndSaveImageDialog = __decorate([
267
+ customElement('crop-and-save-image-dialog')
268
+ ], CropAndSaveImageDialog);
269
+ export { CropAndSaveImageDialog };
270
+ //# sourceMappingURL=crop-and-save-image-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crop-and-save-image-dialog.js","sourceRoot":"","sources":["crop-and-save-image-dialog.ts"],"names":[],"mappings":";AAAA,OAAO,6BAA6B,CAAC;AACrC,OAAO,yBAAyB,CAAC;AACjC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,sCAAsC,CAAC;AAM9C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAE5E;;;;;GAKG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,SAAS,CAAC,UAAU,CAAC;IAA1D;;QAIL;;WAEG;QACyB,YAAO,GAAmB,EAAE,CAAC;QACtC,aAAQ,GAAW,EAAE,CAAC;QAGzC,cAAS,GAAG,EAAE,CAAC;QACf,eAAU,GAAG,EAAE,CAAC;IA+OlB,CAAC;IAjPC,QAAQ,CAAiB;IACzB,SAAS,CAAM;IACf,UAAU,CAAM;IAEhB,YAAY;QACV,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;QAC7E,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,CAAC;aAEM,WAAM,GAAG;QACd,EAAE;QACF,CAAC;QACD,UAAU;QACV,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6EF;KACF,AAlFY,CAkFX;IAEF,qBAAqB,CAAsE;IAC3F,QAAQ,CAAwC;IAChD,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,QAAgB,EAAE,oBAA4E;QACpH,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,MAAM,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,EAAE;YACzD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,IAAU,EAAE,QAAgB;QACrC,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,gBAAgB,CAAC,GAAW;QAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YACpC,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;YAC3E,GAAG,IAAI,CAAC,OAAO;SAChB,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,QAAgB,EAAE,GAAW;QAChD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAE1B,MAAM,YAAY,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACnD,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;gBAClB,kCAAkC;gBAClC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;gBAE/D,+BAA+B;gBAC/B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;gBACpB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBAErB,uBAAuB;gBACvB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;gBAChE,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAE3B,gCAAgC;gBAChC,GAAG,CAAC,wBAAwB,GAAG,gBAAgB,CAAC;gBAEhD,uBAAuB;gBACvB,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;gBACvB,GAAG,CAAC,SAAS,EAAE,CAAC;gBAChB,GAAG,CAAC,GAAG,CACL,IAAI,GAAG,GAAG,EAAE,IAAI;gBAChB,IAAI,GAAG,GAAG,EAAE,IAAI;gBAChB,IAAI,GAAG,GAAG,EAAE,SAAS;gBACrB,CAAC,EAAE,cAAc;gBACjB,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY;iBACzB,CAAC;gBACF,GAAG,CAAC,IAAI,EAAE,CAAC;gBAEX,sEAAsE;gBACtE,GAAG,CAAC,wBAAwB,GAAG,aAAa,CAAC;gBAC7C,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAC9B,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC;QAEpB,OAAO,MAAM,YAAY,CAAC;IAC5B,CAAC;IACD,MAAM;QACJ,OAAO,IAAI,CAAA;;;iBAGE,CAAC,CAAqB,EAAE,EAAE;YACjC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE;gBAC3E,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAmC,CAAC,CAAC;aACpE;YACD,CAAC,CAAC,cAAc,EAAE,CAAC;QACrB,CAAC;;;;uCAI8B,CAAC,IAAI,CAAC,SAAS;uBAC/B,SAAS;;;kCAGE,IAAI,CAAC,SAAS;yCACP,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;;;;iFAIS,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;;;+EAGjC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;;;;;;;;wBAQvF,IAAI,CAAC,SAAS;qBACjB,GAAG,EAAE;YACZ,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;;;;wBAIW,IAAI,CAAC,SAAS;qBACjB,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,MAAM,IAAI,CAAC,cAAc,CAAC;YAE1B,2HAA2H;YAC3H,IAAI,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;YAElC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpF,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO;aACR;YACD,MAAM,cAAc,GAClB,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/G,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,IAAI,CAAC;YACX,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;;;;;KAKR,CAAC;IACJ,CAAC;;AAzPmB;IAAnB,KAAK,CAAC,WAAW,CAAC;sDAAkB;AACH;IAAjC,KAAK,CAAC,yBAAyB,CAAC;mDAAuB;AAK5B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uDAA8B;AACtC;IAAlB,KAAK,EAAE;wDAAiC;AAR9B,sBAAsB;IADlC,aAAa,CAAC,4BAA4B,CAAC;GAC/B,sBAAsB,CA2PlC"}
@@ -0,0 +1,3 @@
1
+ /** Update when upgrading CropperJS */
2
+ export declare const cropperCSS: import("lit").CSSResult;
3
+ //# sourceMappingURL=cropper-styles.d.ts.map